Fixed crash when reading STRG files, fixed scale on script objects defaulting to 0, more cleanup

This commit is contained in:
parax0 2016-03-27 22:01:07 -06:00
parent 1150ee2b22
commit e461039882
3 changed files with 16 additions and 17 deletions

View File

@ -25,7 +25,7 @@ class CStringTable : public CResource
public:
CStringTable() {}
inline u32 NumStrings() const { return mLangTables.size(); }
inline u32 NumStrings() const { return mNumStrings; }
inline u32 NumLanguages() const { return mLangTables.size(); }
inline CFourCC LanguageTag(u32 Index) const { return mLangTables[Index].Language; }
inline TWideString String(u32 LangIndex, u32 StringIndex) const { return mLangTables[LangIndex].Strings[StringIndex]; }

View File

@ -84,26 +84,26 @@ public:
CVector3f Position() const { return mpPosition ? mpPosition->Get() : CVector3f::skZero; }
CVector3f Rotation() const { return mpRotation ? mpRotation->Get() : CVector3f::skZero; }
CVector3f Scale() const { return mpScale ? mpScale->Get() : CVector3f::skZero; }
CVector3f Scale() const { return mpScale ? mpScale->Get() : CVector3f::skOne; }
TString InstanceName() const { return mpInstanceName ? mpInstanceName->Get() : ""; }
bool IsActive() const { return mpActive ? mpActive->Get() : false; }
bool HasInGameModel() const { return mHasInGameModel; }
CPropertyStruct* LightParameters() const { return mpLightParameters; }
CModel* DisplayModel() const { return mpDisplayModel; }
CTexture* Billboard() const { return mpBillboard; }
CCollisionMeshGroup* Collision() const { return mpCollision; }
EVolumeShape VolumeShape() const { return mVolumeShape; }
float VolumeScale() const { return mVolumeScale; }
void SetPosition(const CVector3f& rkNewPos) { if (mpPosition) mpPosition->Set(rkNewPos); }
void SetRotation(const CVector3f& rkNewRot) { if (mpRotation) mpRotation->Set(rkNewRot); }
void SetScale(const CVector3f& rkNewScale) { if (mpScale) mpScale->Set(rkNewScale); }
void SetName(const TString& rkNewName) { if (mpInstanceName) mpInstanceName->Set(rkNewName); }
void SetActive(bool Active) { if (mpActive) mpActive->Set(Active); }
CPropertyStruct* LightParameters() const { return mpLightParameters; }
CModel* GetDisplayModel() const { return mpDisplayModel; }
CTexture* GetBillboard() const { return mpBillboard; }
CCollisionMeshGroup* GetCollision() const { return mpCollision; }
EVolumeShape VolumeShape() const { return mVolumeShape; }
float VolumeScale() const { return mVolumeScale; }
TStringProperty* InstanceNameProperty() const { return mpInstanceName; }
TVector3Property* PositionProperty() const { return mpPosition; }
TVector3Property* RotationProperty() const { return mpRotation; }
TVector3Property* ScaleProperty() const { return mpScale; }
TStringProperty* InstanceNameProperty() const { return mpInstanceName; }
TBoolProperty* ActiveProperty() const { return mpActive; }
};

View File

@ -17,7 +17,6 @@ CScriptNode::CScriptNode(CScene *pScene, u32 NodeID, CSceneNode *pParent, CScrip
, mpInstance(pInstance)
, mpBillboard(nullptr)
{
// Evaluate instance
SetActiveModel(nullptr);
mpCollisionNode = new CCollisionNode(pScene, -1, this);
@ -37,9 +36,9 @@ CScriptNode::CScriptNode(CScene *pScene, u32 NodeID, CSceneNode *pParent, CScrip
SetName("[" + pTemp->Name() + "] " + mpInstance->InstanceName());
// Determine display assets
SetActiveModel(mpInstance->GetDisplayModel());
mpBillboard = mpInstance->GetBillboard();
mpCollisionNode->SetCollision(mpInstance->GetCollision());
SetActiveModel(mpInstance->DisplayModel());
mpBillboard = mpInstance->Billboard();
mpCollisionNode->SetCollision(mpInstance->Collision());
// Create preview volume node
mpVolumePreviewNode = new CModelNode(pScene, -1, this, nullptr);
@ -450,7 +449,7 @@ void CScriptNode::PropertyModified(IProperty *pProp)
if (pProp->Type() == eCharacterProperty)
{
mpInstance->EvaluateDisplayModel();
SetActiveModel(mpInstance->GetDisplayModel());
SetActiveModel(mpInstance->DisplayModel());
}
else if (pProp->Type() == eFileProperty)
{
@ -459,17 +458,17 @@ void CScriptNode::PropertyModified(IProperty *pProp)
if (pFile->AcceptsExtension("CMDL") || pFile->AcceptsExtension("ANCS") || pFile->AcceptsExtension("CHAR"))
{
mpInstance->EvaluateDisplayModel();
SetActiveModel(mpInstance->GetDisplayModel());
SetActiveModel(mpInstance->DisplayModel());
}
else if (pFile->AcceptsExtension("TXTR"))
{
mpInstance->EvaluateBillboard();
mpBillboard = mpInstance->GetBillboard();
mpBillboard = mpInstance->Billboard();
}
else if (pFile->AcceptsExtension("DCLN"))
{
mpInstance->EvaluateCollisionModel();
mpCollisionNode->SetCollision(mpInstance->GetCollision());
mpCollisionNode->SetCollision(mpInstance->Collision());
}
}