📄 graphicentity.cpp.svn-base
字号:
#include <hgeFont.h>
#include <hgeCurvedani.h>
#include <caRect.h>
#include "common/graphicEntity.h"
using cAni::Rectf;
Point2f RenderQueue::getViewerPos()
{
if (viewer)
{
viewerPos = viewer->getViewerPos() - windowSize / 2;
}
return viewerPos;
}
Rectf RenderQueue::getWindowViewer()
{
Rectf r;
r.leftTop = getViewerPos();
r.rightBottom = windowSize + r.leftTop;
return r;
}
void RenderQueue::flush()
{
HGE *hge = hgeCreate(HGE_VERSION);
const Point2f viewerPos = getViewerPos();
const Rectf viewRange = getWindowViewer();
const Rectf windowRange(0, getWindowSize().x, 0, getWindowSize().y);
//Rect clip;
//clip.leftTop = Point2s(100, 100);
//clip.rightBottom = Point2s(200, 200);
hge->Gfx_SetTransform();
for (int i = MaxLayers - 1; i >= 0; --i)
{
vector<GfxObj> &go = gfxobjs[i];
for (size_t j = 0; j < go.size(); ++j)
{
const GfxObj &obj = go[j];
switch(obj.type)
{
case GfxObj::T_Anim:
{
Point2f pos = obj.a;
if (!obj.screenPos)
pos -= viewerPos;
// FIXME: 100 is magic number, remove it by anim clip range
if (pos.x > windowRange.rightBottom.x + 100 || pos.x < windowRange.leftTop.x - 100 ||
pos.y < windowRange.leftTop.y - 100 || pos.y > windowRange.rightBottom.y + 100)
break;
//hge->Gfx_SetTransform();
hge->Gfx_SetTransform(0, 0, pos.x, pos.y, obj.direction/* - viewerOrientation*/, 1, 1);
obj.anim->render(obj.frame, 0);//&clip);
hge->Gfx_SetTransform();
}
break;
case GfxObj::T_Line:
{
Rectf objRange(
min(obj.a.x, obj.b.x + .1f),
max(obj.a.x, obj.b.x + .1f),
min(obj.a.y, obj.b.y + .1f),
max(obj.a.y, obj.b.y + .1f));
if (obj.screenPos)
{
Rectf x = objRange & windowRange;
if (x.Visible())
{
hge->Gfx_RenderLine(obj.a.x, obj.a.y,
obj.b.x, obj.b.y, obj.color);
}
}
else
{
Rectf x = objRange & viewRange;
if (x.Visible())
{
hge->Gfx_RenderLine(obj.a.x - viewerPos.x, obj.a.y - viewerPos.y,
obj.b.x - viewerPos.x, obj.b.y - viewerPos.y, obj.color);
}
}
}
break;
case GfxObj::T_Text:
if (obj.screenPos)
obj.font->Render(obj.a.x, obj.a.y, obj.align, obj.str.c_str());
else
obj.font->Render(obj.a.x - viewerPos.x, obj.a.y - viewerPos.y, obj.align, obj.str.c_str());
break;
case GfxObj::T_Triple:
if (obj.screenPos)
hge->Gfx_SetTransform(0, 0, obj.a.x, obj.a.y, 0, 1, 1);
else
hge->Gfx_SetTransform(0, 0, obj.a.x - viewerPos.x, obj.a.y - viewerPos.y, 0, 1, 1);
hge->Gfx_RenderTriple(&obj.triple);
hge->Gfx_SetTransform();
break;
case GfxObj::T_Quad:
hge->Gfx_RenderQuad(&obj.quad);
break;
}
}
go.clear();
}
hge->Gfx_SetTransform();
hge->Release();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -