mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-16 08:27:01 +00:00
Added support for EGMC and a basic EGMC visualizer dialog
This commit is contained in:
@@ -10,6 +10,7 @@ CModelNode::CModelNode(CScene *pScene, CSceneNode *pParent, CModel *pModel) : CS
|
||||
mScale = CVector3f(1.f);
|
||||
mLightingEnabled = true;
|
||||
mForceAlphaOn = false;
|
||||
mTintColor = CColor::skWhite;
|
||||
}
|
||||
|
||||
ENodeType CModelNode::NodeType()
|
||||
@@ -103,6 +104,11 @@ SRayIntersection CModelNode::RayNodeIntersectTest(const CRay &Ray, u32 AssetID,
|
||||
return out;
|
||||
}
|
||||
|
||||
CColor CModelNode::TintColor(const SViewInfo& /*rkViewInfo*/) const
|
||||
{
|
||||
return mTintColor;
|
||||
}
|
||||
|
||||
void CModelNode::SetModel(CModel *pModel)
|
||||
{
|
||||
mpModel = pModel;
|
||||
@@ -116,8 +122,3 @@ void CModelNode::SetModel(CModel *pModel)
|
||||
|
||||
MarkTransformChanged();
|
||||
}
|
||||
|
||||
void CModelNode::ForceAlphaEnabled(bool Enable)
|
||||
{
|
||||
mForceAlphaOn = Enable;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ class CModelNode : public CSceneNode
|
||||
u32 mActiveMatSet;
|
||||
bool mLightingEnabled;
|
||||
bool mForceAlphaOn;
|
||||
CColor mTintColor;
|
||||
|
||||
public:
|
||||
explicit CModelNode(CScene *pScene, CSceneNode *pParent = 0, CModel *pModel = 0);
|
||||
@@ -20,41 +21,20 @@ public:
|
||||
virtual void DrawSelection();
|
||||
virtual void RayAABoxIntersectTest(CRayCollisionTester& Tester, const SViewInfo& ViewInfo);
|
||||
virtual SRayIntersection RayNodeIntersectTest(const CRay &Ray, u32 AssetID, const SViewInfo& ViewInfo);
|
||||
virtual CColor TintColor(const SViewInfo& rkViewInfo) const;
|
||||
|
||||
// Setters
|
||||
void SetModel(CModel *pModel);
|
||||
void SetMatSet(u32 MatSet);
|
||||
void SetDynamicLighting(bool Enable);
|
||||
void ForceAlphaEnabled(bool Enable);
|
||||
CModel* Model();
|
||||
u32 MatSet();
|
||||
bool IsDynamicLightingEnabled();
|
||||
|
||||
inline void SetMatSet(u32 MatSet) { mActiveMatSet = MatSet; }
|
||||
inline void SetDynamicLighting(bool Enable) { mLightingEnabled = Enable; }
|
||||
inline void ForceAlphaEnabled(bool Enable) { mForceAlphaOn = Enable; }
|
||||
inline void SetTintColor(const CColor& rkTintColor) { mTintColor = rkTintColor; }
|
||||
inline void ClearTintColor() { mTintColor = CColor::skWhite; }
|
||||
inline CModel* Model() const { return mpModel; }
|
||||
inline u32 MatSet() const { return mActiveMatSet; }
|
||||
inline bool IsDynamicLightingEnabled() const { return mLightingEnabled; }
|
||||
inline u32 FindMeshID() const { return mpModel->GetSurface(0)->MeshID; }
|
||||
};
|
||||
|
||||
|
||||
// ************ INLINE FUNCTIONS ************
|
||||
inline void CModelNode::SetMatSet(u32 MatSet)
|
||||
{
|
||||
mActiveMatSet = MatSet;
|
||||
}
|
||||
|
||||
inline void CModelNode::SetDynamicLighting(bool Enable)
|
||||
{
|
||||
mLightingEnabled = Enable;
|
||||
}
|
||||
|
||||
inline CModel* CModelNode::Model()
|
||||
{
|
||||
return mpModel;
|
||||
}
|
||||
|
||||
inline u32 CModelNode::MatSet()
|
||||
{
|
||||
return mActiveMatSet;
|
||||
}
|
||||
|
||||
inline bool CModelNode::IsDynamicLightingEnabled()
|
||||
{
|
||||
return mLightingEnabled;
|
||||
}
|
||||
|
||||
#endif // CMODELNODE_H
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "CScene.h"
|
||||
#include "Core/Render/CGraphics.h"
|
||||
#include "Core/Resource/CResCache.h"
|
||||
#include "Core/Resource/CPoiToWorld.h"
|
||||
#include "Core/Resource/Script/CScriptLayer.h"
|
||||
#include "Core/CRayCollisionTester.h"
|
||||
|
||||
@@ -88,23 +89,24 @@ void CScene::SetActiveArea(CGameArea *pArea)
|
||||
mpArea = pArea;
|
||||
mpAreaRootNode = new CRootNode(this, mpSceneRootNode);
|
||||
|
||||
if (mSplitTerrain)
|
||||
{
|
||||
u32 Count = mpArea->GetStaticModelCount();
|
||||
// Create static nodes
|
||||
u32 Count = mpArea->GetStaticModelCount();
|
||||
|
||||
for (u32 iMdl = 0; iMdl < Count; iMdl++)
|
||||
CreateStaticNode(mpArea->GetStaticModel(iMdl));
|
||||
for (u32 iMdl = 0; iMdl < Count; iMdl++)
|
||||
{
|
||||
CStaticNode *pNode = CreateStaticNode(mpArea->GetStaticModel(iMdl));
|
||||
pNode->SetName("Static World Model " + TString::FromInt32(iMdl, 0, 10));
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 Count = mpArea->GetTerrainModelCount();
|
||||
|
||||
for (u32 iMdl = 0; iMdl < Count; iMdl++)
|
||||
{
|
||||
CModel *pModel = mpArea->GetTerrainModel(iMdl);
|
||||
CModelNode *pNode = CreateModelNode(pModel);
|
||||
pNode->SetDynamicLighting(false);
|
||||
}
|
||||
// Create model nodes
|
||||
Count = mpArea->GetTerrainModelCount();
|
||||
|
||||
for (u32 iMdl = 0; iMdl < Count; iMdl++)
|
||||
{
|
||||
CModel *pModel = mpArea->GetTerrainModel(iMdl);
|
||||
CModelNode *pNode = CreateModelNode(pModel);
|
||||
pNode->SetName("World Model " + TString::FromInt32(iMdl, 0, 10));
|
||||
pNode->SetDynamicLighting(false);
|
||||
}
|
||||
|
||||
CreateCollisionNode(mpArea->GetCollision());
|
||||
@@ -298,7 +300,8 @@ CGameArea* CScene::GetActiveArea()
|
||||
FShowFlags CScene::ShowFlagsForNodeFlags(FNodeFlags NodeFlags)
|
||||
{
|
||||
FShowFlags Out;
|
||||
if (NodeFlags & eStaticNode) Out |= eShowWorld;
|
||||
if (NodeFlags & eModelNode) Out |= eShowSplitWorld;
|
||||
if (NodeFlags & eStaticNode) Out |= eShowMergedWorld;
|
||||
if (NodeFlags & eScriptNode) Out |= eShowObjects;
|
||||
if (NodeFlags & eCollisionNode) Out |= eShowWorldCollision;
|
||||
if (NodeFlags & eLightNode) Out |= eShowLights;
|
||||
@@ -307,8 +310,9 @@ FShowFlags CScene::ShowFlagsForNodeFlags(FNodeFlags NodeFlags)
|
||||
|
||||
FNodeFlags CScene::NodeFlagsForShowFlags(FShowFlags ShowFlags)
|
||||
{
|
||||
FNodeFlags Out = eRootNode | eModelNode;
|
||||
if (ShowFlags & eShowWorld) Out |= eStaticNode;
|
||||
FNodeFlags Out = eRootNode;
|
||||
if (ShowFlags & eShowSplitWorld) Out |= eModelNode;
|
||||
if (ShowFlags & eShowMergedWorld) Out |= eStaticNode;
|
||||
if (ShowFlags & eShowWorldCollision) Out |= eCollisionNode;
|
||||
if (ShowFlags & eShowObjects) Out |= eScriptNode | eScriptExtraNode;
|
||||
if (ShowFlags & eShowLights) Out |= eLightNode;
|
||||
|
||||
@@ -458,6 +458,11 @@ CScriptTemplate* CScriptNode::Template() const
|
||||
return mpInstance->Template();
|
||||
}
|
||||
|
||||
CScriptExtra* CScriptNode::Extra() const
|
||||
{
|
||||
return mpExtra;
|
||||
}
|
||||
|
||||
CModel* CScriptNode::ActiveModel() const
|
||||
{
|
||||
return mpActiveModel;
|
||||
|
||||
@@ -7,10 +7,12 @@
|
||||
#include "Core/Resource/Script/CScriptObject.h"
|
||||
#include "Core/CLightParameters.h"
|
||||
|
||||
class CScriptExtra;
|
||||
|
||||
class CScriptNode : public CSceneNode
|
||||
{
|
||||
CScriptObject *mpInstance;
|
||||
class CScriptExtra *mpExtra;
|
||||
CScriptExtra *mpExtra;
|
||||
|
||||
TResPtr<CModel> mpActiveModel;
|
||||
TResPtr<CTexture> mpBillboard;
|
||||
@@ -39,6 +41,7 @@ public:
|
||||
void GeneratePosition();
|
||||
CScriptObject* Object() const;
|
||||
CScriptTemplate* Template() const;
|
||||
CScriptExtra* Extra() const;
|
||||
CModel* ActiveModel() const;
|
||||
bool UsesModel() const;
|
||||
bool HasPreviewVolume() const;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#include "FShowFlags.h"
|
||||
|
||||
const FShowFlags gkGameModeShowFlags = eShowWorld | eShowObjectGeometry | eShowSky;
|
||||
const FShowFlags gkGameModeShowFlags = eShowMergedWorld | eShowObjectGeometry | eShowSky;
|
||||
|
||||
@@ -6,14 +6,15 @@
|
||||
enum EShowFlag
|
||||
{
|
||||
eShowNone = 0x00,
|
||||
eShowWorld = 0x01,
|
||||
eShowWorldCollision = 0x02,
|
||||
eShowObjectGeometry = 0x04,
|
||||
eShowObjectCollision = 0x08,
|
||||
eShowObjects = 0x0C,
|
||||
eShowLights = 0x10,
|
||||
eShowSky = 0x20,
|
||||
eShowAll = 0x3F
|
||||
eShowSplitWorld = 0x01,
|
||||
eShowMergedWorld = 0x02,
|
||||
eShowWorldCollision = 0x04,
|
||||
eShowObjectGeometry = 0x08,
|
||||
eShowObjectCollision = 0x10,
|
||||
eShowObjects = 0x18,
|
||||
eShowLights = 0x20,
|
||||
eShowSky = 0x40,
|
||||
eShowAll = 0x7F
|
||||
};
|
||||
DECLARE_FLAGS(EShowFlag, FShowFlags)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user