Delta parts. Not sure if correct, as I haven't tested it yet. My head still hurts :P
This commit is contained in:
parent
fb7879e2c6
commit
9d9229b229
@ -23,6 +23,118 @@ namespace Assets
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IXAnimParts::Save_XAnimDeltaPart(Game::XAnimDeltaPart* delta, unsigned short framecount, Components::ZoneBuilder::Zone* builder)
|
||||||
|
{
|
||||||
|
Assert_Size(Game::XAnimDeltaPart, 12);
|
||||||
|
|
||||||
|
Utils::Stream* buffer = builder->GetBuffer();
|
||||||
|
Game::XAnimDeltaPart* destDelta = buffer->Dest<Game::XAnimDeltaPart>();
|
||||||
|
buffer->Save(delta, sizeof(Game::XAnimDeltaPart));
|
||||||
|
|
||||||
|
if (delta->trans)
|
||||||
|
{
|
||||||
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
buffer->Save(delta->trans, 4);
|
||||||
|
|
||||||
|
if (delta->trans->size)
|
||||||
|
{
|
||||||
|
buffer->Save(&delta->trans->u.frames, 28);
|
||||||
|
|
||||||
|
if (framecount > 0xFF)
|
||||||
|
{
|
||||||
|
buffer->SaveArray(delta->trans->u.frames.indices._2, delta->trans->size + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->SaveArray(delta->trans->u.frames.indices._1, delta->trans->size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta->trans->u.frames.frames._1)
|
||||||
|
{
|
||||||
|
if (delta->trans->smallTrans)
|
||||||
|
{
|
||||||
|
buffer->Save(delta->trans->u.frames.frames._1, 3, delta->trans->size + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
buffer->Save(delta->trans->u.frames.frames._1, 6, delta->trans->size + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->Save(delta->trans->u.frame0, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
destDelta->trans = reinterpret_cast<Game::XAnimPartTrans*>(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta->quat2)
|
||||||
|
{
|
||||||
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
buffer->Save(delta->quat2, 4);
|
||||||
|
|
||||||
|
if (delta->quat2->size)
|
||||||
|
{
|
||||||
|
buffer->Save(&delta->quat2->u.frames, 4);
|
||||||
|
|
||||||
|
if (framecount > 0xFF)
|
||||||
|
{
|
||||||
|
buffer->Save(delta->quat2->u.frames.indices, 2, delta->quat2->size + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->Save(delta->quat2->u.frames.indices, 1, delta->quat2->size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta->quat2->u.frames.frames)
|
||||||
|
{
|
||||||
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
buffer->Save(delta->quat2->u.frames.frames, 4, delta->quat2->size + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->Save(delta->quat2->u.frame0, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
destDelta->quat2 = reinterpret_cast<Game::XAnimDeltaPartQuat2*>(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta->quat)
|
||||||
|
{
|
||||||
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
buffer->Save(delta->quat, 4);
|
||||||
|
|
||||||
|
if (delta->quat->size)
|
||||||
|
{
|
||||||
|
buffer->Save(&delta->quat->u.frames, 4);
|
||||||
|
|
||||||
|
if (framecount > 0xFF)
|
||||||
|
{
|
||||||
|
buffer->Save(delta->quat->u.frames.indices, 2, delta->quat->size + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->Save(delta->quat->u.frames.indices, 1, delta->quat->size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (delta->quat->u.frames.frames)
|
||||||
|
{
|
||||||
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
buffer->Save(delta->quat->u.frames.frames, 4, delta->quat->size + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer->Save(delta->quat->u.frame0, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
destDelta->quat = reinterpret_cast<Game::XAnimDeltaPartQuat*>(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void IXAnimParts::Save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder)
|
void IXAnimParts::Save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder)
|
||||||
{
|
{
|
||||||
Assert_Size(Game::XAnimParts, 88);
|
Assert_Size(Game::XAnimParts, 88);
|
||||||
@ -76,6 +188,8 @@ namespace Assets
|
|||||||
Assert_Size(Game::XAnimDeltaPart, 12);
|
Assert_Size(Game::XAnimDeltaPart, 12);
|
||||||
buffer->Align(Utils::Stream::ALIGN_4);
|
buffer->Align(Utils::Stream::ALIGN_4);
|
||||||
|
|
||||||
|
IXAnimParts::Save_XAnimDeltaPart(asset->delta, asset->framecount, builder);
|
||||||
|
|
||||||
dest->delta = reinterpret_cast<Game::XAnimDeltaPart*>(-1);
|
dest->delta = reinterpret_cast<Game::XAnimDeltaPart*>(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,5 +7,8 @@ namespace Assets
|
|||||||
|
|
||||||
virtual void Mark(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) override;
|
virtual void Mark(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) override;
|
||||||
virtual void Save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) override;
|
virtual void Save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Save_XAnimDeltaPart(Game::XAnimDeltaPart* delta, unsigned short framecount, Components::ZoneBuilder::Zone* builder);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user