Applied various fixes to the attachment system, made skeleton rendering more flexible, added the ability for attachments to specify an attach type

This commit is contained in:
parax0
2016-05-01 17:32:55 -06:00
parent 07609cfa14
commit ce688fcb8e
29 changed files with 332 additions and 151 deletions

View File

@@ -0,0 +1,30 @@
#include "CSandwormExtra.h"
CSandwormExtra::CSandwormExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
{
// The back pincers need to be flipped 180 degrees
for (u32 iAttach = 0; iAttach < pParent->NumAttachments(); iAttach++)
{
CScriptAttachNode *pAttach = pParent->Attachment(iAttach);
if (pAttach->LocatorName() == "L_back_claw" || pAttach->LocatorName() == "R_back_claw")
pAttach->SetRotation(CVector3f(0,0,180));
}
// Get pincers scale
mpPincersScaleProperty = TPropCast<TFloatProperty>(pInstance->PropertyByIDString("0x3DB583AE"));
if (mpPincersScaleProperty) PropertyModified(mpPincersScaleProperty);
}
void CSandwormExtra::PropertyModified(IProperty *pProp)
{
if (pProp == mpPincersScaleProperty)
{
for (u32 iAttach = 0; iAttach < mpScriptNode->NumAttachments(); iAttach++)
{
CScriptAttachNode *pAttach = mpScriptNode->Attachment(iAttach);
pAttach->SetScale(CVector3f(mpPincersScaleProperty->Get()));
}
}
}

View File

@@ -0,0 +1,16 @@
#ifndef CSANDWORMEXTRA_H
#define CSANDWORMEXTRA_H
#include "CScriptExtra.h"
class CSandwormExtra : public CScriptExtra
{
// Transform adjustments to Sandworm attachments.
TFloatProperty *mpPincersScaleProperty;
public:
explicit CSandwormExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent);
void PropertyModified(IProperty *pProp);
};
#endif // CSANDWORMEXTRA_H

View File

@@ -7,6 +7,7 @@
#include "CDoorExtra.h"
#include "CRadiusSphereExtra.h"
#include "CSplinePathExtra.h"
#include "CSandwormExtra.h"
CScriptExtra* CScriptExtra::CreateExtra(CScriptNode *pNode)
{
@@ -57,6 +58,10 @@ CScriptExtra* CScriptExtra::CreateExtra(CScriptNode *pNode)
case 0x434C5043: // "CLPC" ClingPathControl (DKCR)
pExtra = new CSplinePathExtra(pObj, pNode->Scene(), pNode);
break;
case 0x574F524D: // "WORM" Sandworm (MP2)
pExtra = new CSandwormExtra(pObj, pNode->Scene(), pNode);
break;
}
}