mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2024-11-25 09:44:02 +00:00
Remove RenderObject::updateAfterParent; simplify + clarify ParentManaged logic
SkeletalSprite was the only thing using it. Instead of PM_STATIC it's now added to its Entity as PM_NONE. PM_NONE is not auto-updated so SkeletalSprite::update() is now called at the end of Entity::onUpdate() (There's now a bug that during spirit form the screen stays black, probably added that in an earlier commit. Will fix.) (On second tought, maybe ParentManaged should be boolean. Instead add a noAutoUpdate flag. But i'll save that for another time when i get around to move all RenderObject bools into a bitmask.)
This commit is contained in:
parent
68b3c61852
commit
5c419efd79
6 changed files with 20 additions and 31 deletions
|
@ -721,7 +721,7 @@ void Avatar::applyWorldEffects(WorldType type)
|
|||
skeletalSprite.setFreeze(false);
|
||||
if (!skeletalSprite.getParent())
|
||||
{
|
||||
addChild(&skeletalSprite, PM_STATIC);
|
||||
addChild(&skeletalSprite, PM_NONE);
|
||||
}
|
||||
skeletalSprite.position = Vector(0,0,0);
|
||||
skeletalSprite.scale = Vector(1,1,1);
|
||||
|
|
|
@ -237,9 +237,8 @@ Entity::Entity()
|
|||
|
||||
|
||||
|
||||
skeletalSprite.updateAfterParent = 1;
|
||||
skeletalSprite.setAnimationKeyNotify(this);
|
||||
addChild(&skeletalSprite, PM_STATIC);
|
||||
addChild(&skeletalSprite, PM_NONE);
|
||||
|
||||
|
||||
|
||||
|
@ -1471,6 +1470,8 @@ void Entity::onEndOfLife()
|
|||
dsq->game->entityDied(this);
|
||||
calledEntityDied = true;
|
||||
}
|
||||
|
||||
skeletalSprite.safeKill();
|
||||
}
|
||||
|
||||
void Entity::setPoison(float m, float t)
|
||||
|
@ -1692,6 +1693,8 @@ void Entity::onUpdate(float dt)
|
|||
}
|
||||
|
||||
updateLance(dt);
|
||||
|
||||
skeletalSprite.update(dt);
|
||||
}
|
||||
|
||||
void Entity::updateBoneLock()
|
||||
|
|
|
@ -98,7 +98,6 @@ RenderObject::RenderObject()
|
|||
addType(SCO_RENDEROBJECT);
|
||||
useOldDT = false;
|
||||
|
||||
updateAfterParent = false;
|
||||
ignoreUpdate = false;
|
||||
overrideRenderPass = OVERRIDE_NONE;
|
||||
renderPass = 0;
|
||||
|
@ -146,6 +145,7 @@ RenderObject::RenderObject()
|
|||
RenderObject::~RenderObject()
|
||||
{
|
||||
freeMotionBlur();
|
||||
assert(children.empty()); // if this fires some objects were not deleted and will leak
|
||||
}
|
||||
|
||||
Vector RenderObject::getWorldPosition() const
|
||||
|
@ -335,16 +335,9 @@ void RenderObject::destroy()
|
|||
// must do this first
|
||||
// otherwise child will try to remove THIS
|
||||
(*i)->parent = 0;
|
||||
switch ((*i)->pm)
|
||||
{
|
||||
case PM_STATIC:
|
||||
(*i)->destroy();
|
||||
break;
|
||||
case PM_POINTER:
|
||||
(*i)->destroy();
|
||||
(*i)->destroy();
|
||||
if((*i)->pm == PM_POINTER)
|
||||
delete (*i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
children.clear();
|
||||
|
||||
|
@ -766,19 +759,7 @@ void RenderObject::update(float dt)
|
|||
}
|
||||
if (!isDead())
|
||||
{
|
||||
|
||||
onUpdate(dt);
|
||||
|
||||
if (isHidden())
|
||||
return;
|
||||
|
||||
for (Children::iterator i = children.begin(); i != children.end(); i++)
|
||||
{
|
||||
if ((*i)->updateAfterParent && (((*i)->pm == PM_POINTER) || ((*i)->pm == PM_STATIC)))
|
||||
{
|
||||
(*i)->update(dt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -881,7 +862,7 @@ void RenderObject::onUpdate(float dt)
|
|||
if (shareColorWithChildren)
|
||||
(*i)->color = this->color;
|
||||
|
||||
if (!(*i)->updateAfterParent && (((*i)->pm == PM_POINTER) || ((*i)->pm == PM_STATIC)))
|
||||
if ((*i)->pm != PM_NONE)
|
||||
{
|
||||
(*i)->update(dt);
|
||||
}
|
||||
|
@ -900,7 +881,8 @@ void RenderObject::onUpdate(float dt)
|
|||
{
|
||||
ro->parent = NULL;
|
||||
ro->destroy();
|
||||
delete ro;
|
||||
if(ro->pm == PM_POINTER)
|
||||
delete ro;
|
||||
}
|
||||
else
|
||||
children[w++] = ro;
|
||||
|
|
|
@ -48,9 +48,9 @@ enum AutoSize
|
|||
|
||||
enum ParentManaged
|
||||
{
|
||||
PM_NONE = 0,
|
||||
PM_POINTER = 1,
|
||||
PM_STATIC = 2
|
||||
PM_NONE = 0, // child is destroyed with parent, but not deleted. The childs' update() is NOT called.
|
||||
PM_POINTER = 1, // child is deleted together with parent. update() is called.
|
||||
PM_STATIC = 2 // child is destroyed with parent, but not deleted. update() is called.
|
||||
};
|
||||
|
||||
enum ChildOrder
|
||||
|
@ -237,7 +237,6 @@ public:
|
|||
// TODO: this should be a bitmask
|
||||
bool fadeAlphaWithLife;
|
||||
bool renderBeforeParent;
|
||||
bool updateAfterParent;
|
||||
bool shareAlphaWithChildren;
|
||||
bool shareColorWithChildren;
|
||||
bool cull;
|
||||
|
|
|
@ -804,6 +804,9 @@ SkeletalSprite::SkeletalSprite() : RenderObject()
|
|||
selectedBone = -1;
|
||||
}
|
||||
|
||||
SkeletalSprite::~SkeletalSprite()
|
||||
{
|
||||
}
|
||||
|
||||
void SkeletalSprite::setAnimationKeyNotify(RenderObject *r)
|
||||
{
|
||||
|
|
|
@ -225,6 +225,8 @@ class SkeletalSprite : public RenderObject
|
|||
public:
|
||||
|
||||
SkeletalSprite();
|
||||
virtual ~SkeletalSprite();
|
||||
|
||||
void loadSkeletal(const std::string &fn);
|
||||
bool saveSkeletal(const std::string &fn);
|
||||
void loadSkin(const std::string &fn);
|
||||
|
|
Loading…
Reference in a new issue