mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-01-24 17:26:41 +00:00
add support for Bone to inherit renderpass from parent
This commit is contained in:
parent
6bffa3a3f9
commit
51cf2f75f5
3 changed files with 49 additions and 23 deletions
|
@ -952,6 +952,7 @@ void AnimationEditor::update(float dt)
|
||||||
Vector ebdata;
|
Vector ebdata;
|
||||||
int pass = 0;
|
int pass = 0;
|
||||||
int origpass = 0;
|
int origpass = 0;
|
||||||
|
bool ihp = false;
|
||||||
|
|
||||||
if (editingBone)
|
if (editingBone)
|
||||||
{
|
{
|
||||||
|
@ -961,12 +962,23 @@ void AnimationEditor::update(float dt)
|
||||||
ebdata.z = editingBone->rotation.z;
|
ebdata.z = editingBone->rotation.z;
|
||||||
pass = editingBone->getRenderPass();
|
pass = editingBone->getRenderPass();
|
||||||
origpass = editingBone->originalRenderPass;
|
origpass = editingBone->originalRenderPass;
|
||||||
|
ihp = editingBone->inheritPass;
|
||||||
}
|
}
|
||||||
text->setText(os.str());
|
text->setText(os.str());
|
||||||
|
|
||||||
char t2buf[128];
|
char t2buf[128];
|
||||||
sprintf(t2buf, "Bone x: %.3f, y: %.3f, rot: %.3f strip: %u pass: %d (%d)", ebdata.x, ebdata.y, ebdata.z, (unsigned)selectedStripPoint, pass, origpass);
|
sprintf(t2buf, "Bone x: %.3f, y: %.3f, rot: %.3f pass: %d", ebdata.x, ebdata.y, ebdata.z, pass);
|
||||||
text2->setText(t2buf);
|
std::ostringstream os2;
|
||||||
|
os2 << t2buf;
|
||||||
|
if(ihp)
|
||||||
|
os2 << " (from bone " << editingBone->pidx << ")";
|
||||||
|
else
|
||||||
|
os2 << " (" << origpass << ")";
|
||||||
|
|
||||||
|
if(editMode == AE_STRIP)
|
||||||
|
os2 << " strip: " << selectedStripPoint;
|
||||||
|
|
||||||
|
text2->setText(os2.str());
|
||||||
|
|
||||||
|
|
||||||
const float t = getAnimTime();
|
const float t = getAnimTime();
|
||||||
|
|
|
@ -94,6 +94,7 @@ Bone::Bone() : CollideQuad()
|
||||||
selectable = true;
|
selectable = true;
|
||||||
originalRenderPass = 0;
|
originalRenderPass = 0;
|
||||||
stripVert = false;
|
stripVert = false;
|
||||||
|
inheritPass = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bone::~Bone()
|
Bone::~Bone()
|
||||||
|
@ -315,6 +316,29 @@ Vector Bone::getCollisionMaskNormal(Vector pos, float dist) const
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Bone::onUpdate(float dt)
|
||||||
|
{
|
||||||
|
if (!collisionMask.empty())
|
||||||
|
{
|
||||||
|
if (collisionMask.size() != transformedCollisionMask.size())
|
||||||
|
{
|
||||||
|
transformedCollisionMask.resize(collisionMask.size());
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < collisionMask.size(); i++)
|
||||||
|
{
|
||||||
|
transformedCollisionMask[i] = getWorldCollidePosition(collisionMask[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do this BEFORE updating children
|
||||||
|
if(inheritPass)
|
||||||
|
{
|
||||||
|
setRenderPass(parent->getRenderPass());
|
||||||
|
}
|
||||||
|
|
||||||
|
CollideQuad::onUpdate(dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool BoneCommand::parse(Bone *b, SimpleIStringStream &is)
|
bool BoneCommand::parse(Bone *b, SimpleIStringStream &is)
|
||||||
{
|
{
|
||||||
|
@ -818,30 +842,11 @@ void SkeletalSprite::onUpdate(float dt)
|
||||||
if (frozen) return;
|
if (frozen) return;
|
||||||
RenderObject::onUpdate(dt);
|
RenderObject::onUpdate(dt);
|
||||||
|
|
||||||
size_t i = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < bones.size(); i++)
|
for (size_t i = 0; i < animLayers.size(); i++)
|
||||||
{
|
|
||||||
Bone *b = bones[i];
|
|
||||||
if (b && !b->collisionMask.empty())
|
|
||||||
{
|
|
||||||
if (b->collisionMask.size() != b->transformedCollisionMask.size())
|
|
||||||
{
|
|
||||||
b->transformedCollisionMask.resize(b->collisionMask.size());
|
|
||||||
}
|
|
||||||
for (size_t i = 0; i < b->collisionMask.size(); i++)
|
|
||||||
{
|
|
||||||
b->transformedCollisionMask[i] = b->getWorldCollidePosition(b->collisionMask[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < animLayers.size(); i++)
|
|
||||||
{
|
{
|
||||||
animLayers[i].update(dt);
|
animLayers[i].update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimationLayer::update(float dt)
|
void AnimationLayer::update(float dt)
|
||||||
|
@ -1003,6 +1008,9 @@ bool SkeletalSprite::saveSkeletal(const std::string &fn)
|
||||||
bone->SetAttribute("gridDrawOrder", (int)grid->getDrawOrder());
|
bone->SetAttribute("gridDrawOrder", (int)grid->getDrawOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this->bones[i]->inheritPass)
|
||||||
|
bone->SetAttribute("ihp", 1);
|
||||||
|
|
||||||
|
|
||||||
for(size_t j = 0; j < this->bones[i]->framegfx.size(); ++j)
|
for(size_t j = 0; j < this->bones[i]->framegfx.size(); ++j)
|
||||||
{
|
{
|
||||||
|
@ -1554,6 +1562,9 @@ void SkeletalSprite::loadSkeletal(const std::string &fn)
|
||||||
grid->setDrawOrder((GridDrawOrder)ord);
|
grid->setDrawOrder((GridDrawOrder)ord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(bone->Attribute("ihp"))
|
||||||
|
newb->inheritPass = bone->BoolAttribute("ihp");
|
||||||
|
|
||||||
if(XMLElement *fr = bone->FirstChildElement("Frame"))
|
if(XMLElement *fr = bone->FirstChildElement("Frame"))
|
||||||
{
|
{
|
||||||
int frc = 0;
|
int frc = 0;
|
||||||
|
|
|
@ -93,8 +93,10 @@ public:
|
||||||
bool stripVert;
|
bool stripVert;
|
||||||
bool fileRenderQuad;
|
bool fileRenderQuad;
|
||||||
bool selectable;
|
bool selectable;
|
||||||
int originalRenderPass; // stores the render pass originally set in the XML file. For AC_RESET_PASS.
|
|
||||||
bool originalFH;
|
bool originalFH;
|
||||||
|
bool inheritPass;
|
||||||
|
|
||||||
|
int originalRenderPass; // stores the render pass originally set in the XML file. For AC_RESET_PASS.
|
||||||
|
|
||||||
void spawnParticlesFromCollisionMask(const char *p, unsigned intv, int layer, float rotz = 0);
|
void spawnParticlesFromCollisionMask(const char *p, unsigned intv, int layer, float rotz = 0);
|
||||||
Vector getCollisionMaskNormal(Vector pos, float dist) const;
|
Vector getCollisionMaskNormal(Vector pos, float dist) const;
|
||||||
|
@ -105,6 +107,7 @@ protected:
|
||||||
std::vector<ParticleEffect*> emitters;
|
std::vector<ParticleEffect*> emitters;
|
||||||
int minDist, maxDist, reverse;
|
int minDist, maxDist, reverse;
|
||||||
std::vector<Bone*> segments;
|
std::vector<Bone*> segments;
|
||||||
|
void onUpdate(float dt);
|
||||||
public:
|
public:
|
||||||
std::vector<Vector> collisionMask;
|
std::vector<Vector> collisionMask;
|
||||||
std::vector<Vector> transformedCollisionMask;
|
std::vector<Vector> transformedCollisionMask;
|
||||||
|
|
Loading…
Reference in a new issue