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