210 lines
4.3 KiB
C++
210 lines
4.3 KiB
C++
#include "CScriptObject.h"
|
|
#include "../CAnimSet.h"
|
|
#include "CMasterTemplate.h"
|
|
|
|
CScriptObject::CScriptObject(CGameArea *pArea, CScriptLayer *pLayer, CScriptTemplate *pTemplate)
|
|
{
|
|
mpTemplate = pTemplate;
|
|
mpArea = pArea;
|
|
mpLayer = pLayer;
|
|
mpProperties = nullptr;
|
|
mpTemplate->AddObject(this);
|
|
mpDisplayModel = nullptr;
|
|
mpCollision = nullptr;
|
|
}
|
|
|
|
CScriptObject::~CScriptObject()
|
|
{
|
|
if (mpProperties) delete mpProperties;
|
|
mpTemplate->RemoveObject(this);
|
|
}
|
|
|
|
// ************ DATA MANIPULATION ************
|
|
void CScriptObject::CopyFromTemplate(CScriptTemplate *pTemp, u32 propCount)
|
|
{
|
|
CStructTemplate *pBaseStruct = pTemp->BaseStructByCount(propCount);
|
|
delete mpProperties;
|
|
mpProperties = CPropertyStruct::CopyFromTemplate(pBaseStruct);
|
|
}
|
|
|
|
void CScriptObject::EvaluateProperties()
|
|
{
|
|
mpInstanceName = mpTemplate->FindInstanceName(mpProperties);
|
|
mpPosition = mpTemplate->FindPosition(mpProperties);
|
|
mpRotation = mpTemplate->FindRotation(mpProperties);
|
|
mpScale = mpTemplate->FindScale(mpProperties);
|
|
mpActive = mpTemplate->FindActive(mpProperties);
|
|
mpLightParameters = mpTemplate->FindLightParameters(mpProperties);
|
|
mVolumeShape = mpTemplate->VolumeShape(this);
|
|
EvaluateDisplayModel();
|
|
EvaluateCollisionModel();
|
|
}
|
|
|
|
void CScriptObject::EvaluateDisplayModel()
|
|
{
|
|
mpDisplayModel = mpTemplate->FindDisplayModel(mpProperties);
|
|
mModelToken = CToken(mpDisplayModel);
|
|
}
|
|
|
|
void CScriptObject::EvaluateCollisionModel()
|
|
{
|
|
mpCollision = mpTemplate->FindCollision(mpProperties);
|
|
mCollisionToken = CToken(mpCollision);
|
|
}
|
|
|
|
// ************ GETTERS ************
|
|
CPropertyBase* CScriptObject::PropertyByIndex(u32 index) const
|
|
{
|
|
return mpProperties->PropertyByIndex(index);
|
|
}
|
|
|
|
CPropertyBase* CScriptObject::PropertyByIDString(std::string str) const
|
|
{
|
|
return mpProperties->PropertyByIDString(str);
|
|
}
|
|
|
|
CScriptTemplate* CScriptObject::Template() const
|
|
{
|
|
return mpTemplate;
|
|
}
|
|
|
|
CMasterTemplate* CScriptObject::MasterTemplate() const
|
|
{
|
|
return mpTemplate->MasterTemplate();
|
|
}
|
|
|
|
CGameArea* CScriptObject::Area() const
|
|
{
|
|
return mpArea;
|
|
}
|
|
|
|
CScriptLayer* CScriptObject::Layer() const
|
|
{
|
|
return mpLayer;
|
|
}
|
|
|
|
CPropertyStruct* CScriptObject::Properties() const
|
|
{
|
|
return mpProperties;
|
|
}
|
|
|
|
u32 CScriptObject::NumProperties() const
|
|
{
|
|
return mpProperties->Count();
|
|
}
|
|
|
|
u32 CScriptObject::ObjectTypeID() const
|
|
{
|
|
return mpTemplate->ObjectID();
|
|
}
|
|
|
|
u32 CScriptObject::InstanceID() const
|
|
{
|
|
return mInstanceID;
|
|
}
|
|
|
|
u32 CScriptObject::NumInLinks() const
|
|
{
|
|
return mInConnections.size();
|
|
}
|
|
|
|
u32 CScriptObject::NumOutLinks() const
|
|
{
|
|
return mOutConnections.size();
|
|
}
|
|
|
|
const SLink& CScriptObject::InLink(u32 index) const
|
|
{
|
|
return mInConnections[index];
|
|
}
|
|
|
|
const SLink& CScriptObject::OutLink(u32 index) const
|
|
{
|
|
return mOutConnections[index];
|
|
}
|
|
|
|
std::string CScriptObject::InstanceName() const
|
|
{
|
|
if (mpInstanceName)
|
|
return mpInstanceName->Get();
|
|
else
|
|
return "";
|
|
}
|
|
|
|
CVector3f CScriptObject::Position() const
|
|
{
|
|
if (mpPosition)
|
|
return mpPosition->Get();
|
|
else
|
|
return CVector3f::skZero;
|
|
}
|
|
|
|
CVector3f CScriptObject::Rotation() const
|
|
{
|
|
if (mpRotation)
|
|
return mpRotation->Get();
|
|
else
|
|
return CVector3f::skZero;
|
|
}
|
|
|
|
CVector3f CScriptObject::Scale() const
|
|
{
|
|
if (mpScale)
|
|
return mpScale->Get();
|
|
else
|
|
return CVector3f::skOne;
|
|
}
|
|
|
|
bool CScriptObject::IsActive() const
|
|
{
|
|
if (mpActive)
|
|
return mpActive->Get();
|
|
else
|
|
return true;
|
|
}
|
|
|
|
void CScriptObject::SetPosition(const CVector3f& newPos)
|
|
{
|
|
if (mpPosition) mpPosition->Set(newPos);
|
|
}
|
|
|
|
void CScriptObject::SetRotation(const CVector3f& newRot)
|
|
{
|
|
if (mpRotation) mpRotation->Set(newRot);
|
|
}
|
|
|
|
void CScriptObject::SetScale(const CVector3f& newScale)
|
|
{
|
|
if (mpScale) mpScale->Set(newScale);
|
|
}
|
|
|
|
void CScriptObject::SetName(const std::string& newName)
|
|
{
|
|
if (mpInstanceName) mpInstanceName->Set(newName);
|
|
}
|
|
|
|
void CScriptObject::SetActive(bool isActive)
|
|
{
|
|
if (mpActive) mpActive->Set(isActive);
|
|
}
|
|
|
|
CPropertyStruct* CScriptObject::LightParameters() const
|
|
{
|
|
return mpLightParameters;
|
|
}
|
|
|
|
CModel* CScriptObject::GetDisplayModel() const
|
|
{
|
|
return mpDisplayModel;
|
|
}
|
|
|
|
CCollisionMeshGroup* CScriptObject::GetCollision() const
|
|
{
|
|
return mpCollision;
|
|
}
|
|
|
|
EVolumeShape CScriptObject::VolumeShape() const
|
|
{
|
|
return mVolumeShape;
|
|
}
|