Added support for attaching assets from properties to locator bones in the World Editor

This commit is contained in:
parax0
2016-04-30 06:17:02 -06:00
parent 2655f9d3fd
commit cf84f9909a
42 changed files with 575 additions and 255 deletions

View File

@@ -2,7 +2,7 @@
#include "Core/Render/CDrawUtil.h"
#include "Core/Render/CRenderer.h"
CDamageableTriggerExtra::CDamageableTriggerExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CDamageableTriggerExtra::CDamageableTriggerExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
, mpRenderSideProp(nullptr)
, mpMat(nullptr)

View File

@@ -31,7 +31,7 @@ class CDamageableTriggerExtra : public CScriptExtra
float mCachedRayDistance;
public:
explicit CDamageableTriggerExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CDamageableTriggerExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
~CDamageableTriggerExtra();
void CreateMaterial();
void UpdatePlaneTransform();

View File

@@ -1,7 +1,7 @@
#include "CDoorExtra.h"
#include "Core/Render/CRenderer.h"
CDoorExtra::CDoorExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CDoorExtra::CDoorExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
, mpShieldModelProp(nullptr)
, mpShieldColorProp(nullptr)
@@ -117,22 +117,22 @@ SRayIntersection CDoorExtra::RayNodeIntersectTest(const CRay& rkRay, u32 AssetID
{
FRenderOptions Options = rkViewInfo.pRenderer->RenderOptions();
SRayIntersection out;
out.pNode = mpParent;
out.ComponentIndex = AssetID;
SRayIntersection Out;
Out.pNode = mpParent;
Out.ComponentIndex = AssetID;
CRay TransformedRay = rkRay.Transformed(Transform().Inverse());
std::pair<bool,float> Result = mpShieldModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & eEnableBackfaceCull) == 0));
if (Result.first)
{
out.Hit = true;
Out.Hit = true;
CVector3f HitPoint = TransformedRay.PointOnRay(Result.second);
CVector3f WorldHitPoint = Transform() * HitPoint;
out.Distance = rkRay.Origin().Distance(WorldHitPoint);
Out.Distance = rkRay.Origin().Distance(WorldHitPoint);
}
else out.Hit = false;
else Out.Hit = false;
return out;
return Out;
}

View File

@@ -13,7 +13,7 @@ class CDoorExtra : public CScriptExtra
CColor mShieldColor;
public:
explicit CDoorExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CDoorExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
void PropertyModified(IProperty *pProperty);
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo);
void Draw(FRenderOptions Options, int ComponentIndex, const SViewInfo& rkViewInfo);

View File

@@ -3,7 +3,7 @@
const CColor CPointOfInterestExtra::skRegularColor = CColor::Integral(0xFF,0x70,0x00);
const CColor CPointOfInterestExtra::skImportantColor = CColor::Integral(0xFF,0x00,0x00);
CPointOfInterestExtra::CPointOfInterestExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CPointOfInterestExtra::CPointOfInterestExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
, mpScanProperty(nullptr)
, mpScanData(nullptr)

View File

@@ -12,7 +12,7 @@ class CPointOfInterestExtra : public CScriptExtra
TResPtr<CScan> mpScanData;
public:
explicit CPointOfInterestExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CPointOfInterestExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
void PropertyModified(IProperty* pProperty);
void ModifyTintColor(CColor& Color);
CScan* GetScan() const { return mpScanData; }

View File

@@ -2,7 +2,7 @@
#include "Core/Render/CDrawUtil.h"
#include "Core/Render/CRenderer.h"
CRadiusSphereExtra::CRadiusSphereExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CRadiusSphereExtra::CRadiusSphereExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
, mpRadius(nullptr)
{

View File

@@ -10,7 +10,7 @@ class CRadiusSphereExtra : public CScriptExtra
TFloatProperty *mpRadius;
public:
explicit CRadiusSphereExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CRadiusSphereExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo);
void Draw(FRenderOptions Options, int ComponentIndex, const SViewInfo& rkViewInfo);
CColor Color() const;

View File

@@ -52,9 +52,9 @@ CScriptExtra* CScriptExtra::CreateExtra(CScriptNode *pNode)
pExtra = new CRadiusSphereExtra(pObj, pNode->Scene(), pNode);
break;
case 0x53505041: // SplinePath (DKCR)
case 0x5043544C: // PathControl (DKCR)
case 0x434C5043: // ClingPathControl (DKCR)
case 0x53505041: // "SPPA" SplinePath (DKCR)
case 0x5043544C: // "PCTL" PathControl (DKCR)
case 0x434C5043: // "CLPC" ClingPathControl (DKCR)
pExtra = new CSplinePathExtra(pObj, pNode->Scene(), pNode);
break;
}

View File

@@ -3,6 +3,7 @@
#include "Core/Scene/CSceneNode.h"
#include "Core/Scene/CScriptNode.h"
#include <Common/Assert.h>
/* CScriptExtra is a class that allows for additional coded behavior on any given
* script object type. Subclass IScriptExtra, add the new class to CScriptExtra.cpp,
@@ -15,18 +16,20 @@
class CScriptExtra : public CSceneNode
{
protected:
CScriptNode *mpScriptNode;
CScriptObject *mpInstance;
EGame mGame;
public:
explicit CScriptExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0)
: CSceneNode(pScene, -1, pParent),
mpInstance(pInstance),
mGame(pInstance->Template()->Game())
explicit CScriptExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0)
: CSceneNode(pScene, -1, pParent)
, mpScriptNode(pParent)
, mpInstance(pInstance)
, mGame(pInstance->Template()->Game())
{
}
virtual ~CScriptExtra() {}
virtual ~CScriptExtra() {}
inline CScriptObject* Instance() const { return mpInstance; }
inline EGame Game() const { return mGame; }
@@ -43,6 +46,7 @@ public:
// Virtual CScriptExtra functions
virtual void InstanceTransformed() {}
virtual void PropertyModified(IProperty* /*pProperty*/) {}
virtual void DisplayAssetChanged(CResource* /*pNewDisplayAsset*/) {}
virtual void LinksModified() {}
virtual bool ShouldDrawNormalAssets() { return true; }
virtual bool ShouldDrawVolume() { return true; }

View File

@@ -1,6 +1,6 @@
#include "CSpacePirateExtra.h"
CSpacePirateExtra::CSpacePirateExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CSpacePirateExtra::CSpacePirateExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene ,pParent)
, mpPowerVuln(nullptr)
, mpWaveVuln(nullptr)

View File

@@ -13,7 +13,7 @@ class CSpacePirateExtra : public CScriptExtra
TEnumProperty *mpPlasmaVuln;
public:
explicit CSpacePirateExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CSpacePirateExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
CColor TevColor();
};

View File

@@ -3,7 +3,7 @@
#include "Core/Resource/Script/CLink.h"
#include "Core/Scene/CScene.h"
CSplinePathExtra::CSplinePathExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CSplinePathExtra::CSplinePathExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
{
mpPathColor = TPropCast<TColorProperty>(pInstance->Properties()->PropertyByID(0x00DD86E2));

View File

@@ -15,7 +15,7 @@ class CSplinePathExtra : public CScriptExtra
std::list<CWaypointExtra*> mWaypoints;
public:
explicit CSplinePathExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CSplinePathExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
~CSplinePathExtra() { ClearWaypoints(); }
inline CColor PathColor() const { return (mpPathColor ? mpPathColor->Get() : CColor::skBlack); }

View File

@@ -4,7 +4,7 @@
#include "Core/Render/CRenderer.h"
#include "Core/Scene/CScene.h"
CWaypointExtra::CWaypointExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent)
CWaypointExtra::CWaypointExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
: CScriptExtra(pInstance, pScene, pParent)
, mColor(CColor::skBlack)
, mLinksBuilt(false)

View File

@@ -20,7 +20,7 @@ class CWaypointExtra : public CScriptExtra
std::vector<SWaypointLink> mLinks;
public:
explicit CWaypointExtra(CScriptObject *pInstance, CScene *pScene, CSceneNode *pParent = 0);
explicit CWaypointExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = 0);
~CWaypointExtra();
void CheckColor();
void AddToSplinePath(CSplinePathExtra *pPath);