mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-06-17 12:03:34 +00:00
78 lines
2.2 KiB
C++
78 lines
2.2 KiB
C++
#ifndef CSCENE_H
|
|
#define CSCENE_H
|
|
|
|
#include "CSceneNode.h"
|
|
#include "CRootNode.h"
|
|
#include "CLightNode.h"
|
|
#include "CModelNode.h"
|
|
#include "CScriptNode.h"
|
|
#include "CStaticNode.h"
|
|
#include "CCollisionNode.h"
|
|
#include "FShowFlags.h"
|
|
#include "Core/Render/CRenderer.h"
|
|
#include "Core/Render/SViewInfo.h"
|
|
#include "Core/Resource/CGameArea.h"
|
|
#include "Core/Resource/CWorld.h"
|
|
#include "Core/CAreaAttributes.h"
|
|
#include "Core/SRayIntersection.h"
|
|
#include <Common/types.h>
|
|
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
class CScene
|
|
{
|
|
friend class CSceneIterator;
|
|
|
|
bool mSplitTerrain;
|
|
bool mRanPostLoad;
|
|
|
|
u32 mNumNodes;
|
|
CRootNode *mpSceneRootNode;
|
|
std::unordered_map<ENodeType, std::vector<CSceneNode*>> mNodes;
|
|
|
|
TResPtr<CGameArea> mpArea;
|
|
TResPtr<CWorld> mpWorld;
|
|
CRootNode *mpAreaRootNode;
|
|
|
|
// Environment
|
|
std::vector<CAreaAttributes> mAreaAttributesObjects;
|
|
|
|
// Node Management
|
|
std::unordered_map<u32, CSceneNode*> mNodeMap;
|
|
std::unordered_map<u32, CScriptNode*> mScriptMap;
|
|
|
|
public:
|
|
CScene();
|
|
~CScene();
|
|
|
|
// Scene Management
|
|
bool IsNodeIDUsed(u32 ID) const;
|
|
u32 CreateNodeID(u32 SuggestedID = -1) const;
|
|
|
|
CModelNode* CreateModelNode(CModel *pModel, u32 NodeID = -1);
|
|
CStaticNode* CreateStaticNode(CStaticModel *pModel, u32 NodeID = -1);
|
|
CCollisionNode* CreateCollisionNode(CCollisionMeshGroup *pMesh, u32 NodeID = -1);
|
|
CScriptNode* CreateScriptNode(CScriptObject *pObj, u32 NodeID = -1);
|
|
CLightNode* CreateLightNode(CLight *pLight, u32 NodeID = -1);
|
|
void DeleteNode(CSceneNode *pNode);
|
|
void SetActiveArea(CGameArea *pArea);
|
|
void SetActiveWorld(CWorld *pWorld);
|
|
void PostLoad();
|
|
void ClearScene();
|
|
void AddSceneToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo);
|
|
SRayIntersection SceneRayCast(const CRay& rkRay, const SViewInfo& rkViewInfo);
|
|
CSceneNode* NodeByID(u32 NodeID);
|
|
CScriptNode* NodeForInstanceID(u32 InstanceID);
|
|
CScriptNode* NodeForInstance(CScriptObject *pObj);
|
|
CLightNode* NodeForLight(CLight *pLight);
|
|
CModel* ActiveSkybox();
|
|
CGameArea* ActiveArea();
|
|
|
|
// Static
|
|
static FShowFlags ShowFlagsForNodeFlags(FNodeFlags NodeFlags);
|
|
static FNodeFlags NodeFlagsForShowFlags(FShowFlags ShowFlags);
|
|
};
|
|
|
|
#endif // CSCENE_H
|