mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-08-24 07:43:44 +02:00
Allow ViewportElement
to compile with -fno-rtti
This commit is contained in:
parent
53f42adb89
commit
94e0f99643
8 changed files with 36 additions and 16 deletions
|
@ -161,8 +161,13 @@ struct PlanePrivate
|
|||
}
|
||||
};
|
||||
|
||||
static void disposePtr(void *ptr)
|
||||
{
|
||||
((Plane *)ptr)->dispose();
|
||||
}
|
||||
|
||||
Plane::Plane(Viewport *viewport)
|
||||
: ViewportElement(viewport)
|
||||
: ViewportElement(disposePtr, viewport)
|
||||
{
|
||||
p = new PlanePrivate();
|
||||
|
||||
|
|
|
@ -342,8 +342,13 @@ struct SpritePrivate
|
|||
}
|
||||
};
|
||||
|
||||
static void disposePtr(void *ptr)
|
||||
{
|
||||
((Sprite *)ptr)->dispose();
|
||||
}
|
||||
|
||||
Sprite::Sprite(Viewport *viewport)
|
||||
: ViewportElement(viewport)
|
||||
: ViewportElement(disposePtr, viewport)
|
||||
{
|
||||
p = new SpritePrivate;
|
||||
onGeometryChange(scene->getGeometry());
|
||||
|
|
|
@ -1076,7 +1076,7 @@ struct TilemapPrivate
|
|||
};
|
||||
|
||||
GroundLayer::GroundLayer(TilemapPrivate *p, Viewport *viewport)
|
||||
: ViewportElement(viewport, 0),
|
||||
: ViewportElement(nullptr, viewport, 0),
|
||||
vboCount(0),
|
||||
p(p)
|
||||
{
|
||||
|
@ -1126,7 +1126,7 @@ void GroundLayer::onGeometryChange(const Scene::Geometry &geo)
|
|||
}
|
||||
|
||||
ZLayer::ZLayer(TilemapPrivate *p, Viewport *viewport)
|
||||
: ViewportElement(viewport, 0),
|
||||
: ViewportElement(nullptr, viewport, 0),
|
||||
index(0),
|
||||
vboOffset(0),
|
||||
vboCount(0),
|
||||
|
|
|
@ -103,7 +103,7 @@ struct TilemapVXPrivate : public ViewportElement, TileAtlasVX::Reader
|
|||
TilemapVXPrivate *p;
|
||||
|
||||
AboveLayer(TilemapVXPrivate *p, Viewport *viewport)
|
||||
: ViewportElement(viewport, 200),
|
||||
: ViewportElement(nullptr, viewport, 200),
|
||||
p(p)
|
||||
{}
|
||||
|
||||
|
@ -119,7 +119,7 @@ struct TilemapVXPrivate : public ViewportElement, TileAtlasVX::Reader
|
|||
AboveLayer above;
|
||||
|
||||
TilemapVXPrivate(Viewport *viewport)
|
||||
: ViewportElement(viewport),
|
||||
: ViewportElement(nullptr, viewport),
|
||||
mapData(0),
|
||||
flags(0),
|
||||
allocQuads(0),
|
||||
|
|
|
@ -223,9 +223,9 @@ void Viewport::releaseResources()
|
|||
}
|
||||
|
||||
|
||||
ViewportElement::ViewportElement(Viewport *viewport, int z, int spriteY)
|
||||
ViewportElement::ViewportElement(void (*dispose)(void *), Viewport *viewport, int z, int spriteY)
|
||||
: SceneElement(viewport ? *viewport : *shState->screen(), z, spriteY),
|
||||
m_viewport(viewport)
|
||||
m_dispose(dispose), m_viewport(viewport)
|
||||
{
|
||||
if (rgssVer == 1 && viewport)
|
||||
viewportDispCon = viewport->wasDisposed.connect(&ViewportElement::viewportElementDisposal, this);
|
||||
|
@ -252,9 +252,8 @@ void ViewportElement::setViewport(Viewport *viewport)
|
|||
void ViewportElement::viewportElementDisposal()
|
||||
{
|
||||
viewportDispCon.disconnect();
|
||||
Disposable *self = dynamic_cast<Disposable*>(this);
|
||||
if(self != nullptr)
|
||||
self->dispose();
|
||||
if(m_dispose != nullptr)
|
||||
m_dispose(this);
|
||||
}
|
||||
|
||||
ViewportElement::~ViewportElement()
|
||||
|
|
|
@ -70,7 +70,7 @@ private:
|
|||
class ViewportElement : public SceneElement
|
||||
{
|
||||
public:
|
||||
ViewportElement(Viewport *viewport = 0, int z = 0, int spriteY = 0);
|
||||
ViewportElement(void (*dispose)(void *), Viewport *viewport = 0, int z = 0, int spriteY = 0);
|
||||
~ViewportElement();
|
||||
|
||||
DECL_ATTR( Viewport, Viewport* )
|
||||
|
@ -79,6 +79,7 @@ protected:
|
|||
virtual void onViewportChange() {}
|
||||
|
||||
private:
|
||||
void (*m_dispose)(void *);
|
||||
Viewport *m_viewport;
|
||||
sigslot::connection viewportDispCon;
|
||||
sigslot::connection viewportElementDispCon;
|
||||
|
|
|
@ -212,7 +212,7 @@ struct WindowPrivate
|
|||
|
||||
WindowControls(WindowPrivate *p,
|
||||
Viewport *viewport = 0)
|
||||
: ViewportElement(viewport),
|
||||
: ViewportElement(nullptr, viewport),
|
||||
p(p)
|
||||
{
|
||||
setZ(2);
|
||||
|
@ -695,8 +695,13 @@ struct WindowPrivate
|
|||
}
|
||||
};
|
||||
|
||||
static void disposePtr(void *ptr)
|
||||
{
|
||||
((Window *)ptr)->dispose();
|
||||
}
|
||||
|
||||
Window::Window(Viewport *viewport)
|
||||
: ViewportElement(viewport)
|
||||
: ViewportElement(disposePtr, viewport)
|
||||
{
|
||||
p = new WindowPrivate(viewport);
|
||||
onGeometryChange(scene->getGeometry());
|
||||
|
|
|
@ -832,15 +832,20 @@ struct WindowVXPrivate
|
|||
}
|
||||
};
|
||||
|
||||
static void disposePtr(void *ptr)
|
||||
{
|
||||
((WindowVX *)ptr)->dispose();
|
||||
}
|
||||
|
||||
WindowVX::WindowVX(Viewport *viewport)
|
||||
: ViewportElement(viewport, DEF_Z, DEF_SPRITE_Y)
|
||||
: ViewportElement(disposePtr, viewport, DEF_Z, DEF_SPRITE_Y)
|
||||
{
|
||||
p = new WindowVXPrivate(0, 0, 0, 0);
|
||||
onGeometryChange(scene->getGeometry());
|
||||
}
|
||||
|
||||
WindowVX::WindowVX(int x, int y, int width, int height)
|
||||
: ViewportElement(0, DEF_Z, DEF_SPRITE_Y)
|
||||
: ViewportElement(disposePtr, 0, DEF_Z, DEF_SPRITE_Y)
|
||||
{
|
||||
p = new WindowVXPrivate(x, y, width, height);
|
||||
onGeometryChange(scene->getGeometry());
|
||||
|
|
Loading…
Add table
Reference in a new issue