mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-12 22:56:13 +00:00
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:
30
src/Core/ScriptExtra/CSandwormExtra.cpp
Normal file
30
src/Core/ScriptExtra/CSandwormExtra.cpp
Normal 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
16
src/Core/ScriptExtra/CSandwormExtra.h
Normal file
16
src/Core/ScriptExtra/CSandwormExtra.h
Normal 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
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user