Polyphase Game Engine
Loading...
Searching...
No Matches
Scene.h
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.h"
4#include "Property.h"
5#include "Factory.h"
6#include "AssetRef.h"
7#include "NodePath.h"
8#include "Nodes/Node.h"
9#include "OcclusionData.h"
10
11class World;
12
14{
15 std::string mPath;
16 std::vector<Property> mProperties;
17 bool mOverrideColors = false;
18 bool mBakedLighting = false;
19 std::vector<uint32_t> mInstanceColors;
20};
21
23{
25 int32_t mParentIndex = -1;
27 std::string mName;
28 std::vector<Property> mProperties;
29 std::vector<uint8_t> mExtraData;
30 std::vector<SubSceneOverride> mSubSceneOverrides;
31 // Legacy bone attachment. Was int8_t, which silently corrupted any rig with
32 // more than 127 bones (routine once fingers and twist bones are present).
33 // Widened at ASSET_VERSION_BONE_SOCKETS. New content carries the attachment
34 // in Node3D's "Attach Socket" string property instead; this is kept so old
35 // scenes still load and so index-only attachments keep working.
36 int32_t mParentBone = -1;
37 bool mExposeVariable = false;
38 uint64_t mPersistentUuid = 0;
39};
40
42{
43public:
44
46
47 Scene();
48 ~Scene();
49
50 virtual void LoadStream(Stream& stream, Platform platform) override;
51 virtual void SaveStream(Stream& stream, Platform platform) override;
52 virtual void Create() override;
53 virtual void Destroy() override;
54
55 virtual void GatherProperties(std::vector<Property>& outProps) override;
56 virtual glm::vec4 GetTypeColor() override;
57 virtual const char* GetTypeName() override;
58
59 void Capture(Node* root, Platform platform = Platform::Count);
60 NodePtr Instantiate();
61
62 template<typename T>
64 {
65 return Cast<T>(Instantiate());
66 }
67
68 void ApplyRenderSettings(World* world);
69
70 // The scene's own ambient colour (the value ApplyRenderSettings hands the
71 // world when mSetAmbientLightColor is on). Returns whether it is set.
72 bool GetAmbientLightColor(glm::vec4& outColor) const { outColor = mAmbientLightColor; return mSetAmbientLightColor; }
73
74protected:
75
76 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
77
78 void AddNodeDef(Node* node, Platform platform, std::vector<Node*>& nodeList);
79 int32_t FindNodeIndex(Node* node, const std::vector<Node*>& nodeList);
80
81 bool CheckForNodeProps(std::vector<Property>& props);
82
83 static int32_t sInstantiationCount;
84 static std::vector<PendingNodePath> sPendingNodePaths;
85
86 std::vector<SceneNodeDef> mNodeDefs;
87
88 // World render properties (used when this scene is the world root).
89 bool mSetAmbientLightColor = false;
90 bool mSetShadowColor = false;
91 bool mSetFog = false;
92
93 glm::vec4 mAmbientLightColor = { 0.1f, 0.1f, 0.1f, 1.0f };
94 glm::vec4 mShadowColor = { 0.0f, 0.0f, 0.0f, 0.8f };
95
96 bool mFogEnabled = false;
97 glm::vec4 mFogColor = { 0.0f, 0.0f, 0.0f, 1.0f };
99 float mFogNear = 0.0f;
100 float mFogFar = 100.0f;
101
102 uint8_t mIconOverride = 0; // 0 = default, 1+ = icon index
103 std::string mMenuOverride; // Empty = "Scene" menu, or category like "3D", "UI", "Gameplay"
104
105 // Baked occlusion culling (see OcclusionData / OcclusionBaker).
106 bool mOcclusionCullingEnabled = false;
107 float mOcclusionCellSize = 4.0f;
108 uint8_t mOcclusionBakeQuality = 1; // 0 = Low, 1 = Medium, 2 = High
109 bool mOcclusionDynamic = true; // also bake the coarse table for moving occludees
110 int32_t mOcclusionConsoleBudgetKB = 512; // strip the data from console cooks above this (0 = unlimited)
112
113public:
114 uint8_t GetIconOverride() const { return mIconOverride; }
115 const std::string& GetMenuOverride() const { return mMenuOverride; }
116 const std::vector<Property>* GetRootNodeProperties() const { return mNodeDefs.empty() ? nullptr : &mNodeDefs[0].mProperties; }
117
118 bool IsOcclusionCullingEnabled() const { return mOcclusionCullingEnabled; }
119 float GetOcclusionCellSize() const { return mOcclusionCellSize; }
120 uint8_t GetOcclusionBakeQuality() const { return mOcclusionBakeQuality; }
121 bool IsOcclusionDynamicEnabled() const { return mOcclusionDynamic; }
122 uint32_t GetOcclusionConsoleBudgetKB() const { return mOcclusionConsoleBudgetKB > 0 ? (uint32_t)mOcclusionConsoleBudgetKB : 0u; }
123 const OcclusionData& GetOcclusionData() const { return mOcclusionData; }
124 void SetOcclusionData(OcclusionData&& data) { mOcclusionData = std::move(data); }
125 void ClearOcclusionData() { mOcclusionData.Clear(); }
126};
#define INVALID_TYPE_ID
Definition Constants.h:40
FogDensityFunc
Definition EngineTypes.h:598
Platform
Definition EngineTypes.h:32
uint32_t TypeId
Definition EngineTypes.h:75
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Asset.h:125
virtual void Create()
Definition Asset.cpp:78
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:334
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:352
virtual const char * GetTypeName()
Definition Asset.cpp:357
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:347
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:320
virtual void Destroy()
Definition Asset.cpp:93
Definition Datum.h:169
Definition Node.h:67
Definition OcclusionData.h:30
void Clear()
Definition OcclusionData.cpp:28
Definition Scene.h:42
const OcclusionData & GetOcclusionData() const
Definition Scene.h:123
float GetOcclusionCellSize() const
Definition Scene.h:119
DECLARE_ASSET(Scene, Asset)
const std::string & GetMenuOverride() const
Definition Scene.h:115
SharedPtr< T > Instantiate()
Definition Scene.h:63
std::string mMenuOverride
Definition Scene.h:103
static std::vector< PendingNodePath > sPendingNodePaths
Definition Scene.h:84
static int32_t sInstantiationCount
Definition Scene.h:83
bool IsOcclusionCullingEnabled() const
Definition Scene.h:118
const std::vector< Property > * GetRootNodeProperties() const
Definition Scene.h:116
OcclusionData mOcclusionData
Definition Scene.h:111
uint32_t GetOcclusionConsoleBudgetKB() const
Definition Scene.h:122
void SetOcclusionData(OcclusionData &&data)
Definition Scene.h:124
void ClearOcclusionData()
Definition Scene.h:125
bool IsOcclusionDynamicEnabled() const
Definition Scene.h:121
bool GetAmbientLightColor(glm::vec4 &outColor) const
Definition Scene.h:72
std::vector< SceneNodeDef > mNodeDefs
Definition Scene.h:86
uint8_t GetOcclusionBakeQuality() const
Definition Scene.h:120
uint8_t GetIconOverride() const
Definition Scene.h:114
Definition Stream.h:21
Definition World.h:26
Definition Scene.h:23
int32_t mParentIndex
Definition Scene.h:25
SceneRef mScene
Definition Scene.h:26
TypeId mType
Definition Scene.h:24
std::vector< Property > mProperties
Definition Scene.h:28
std::string mName
Definition Scene.h:27
bool mExposeVariable
Definition Scene.h:37
uint64_t mPersistentUuid
Definition Scene.h:38
std::vector< SubSceneOverride > mSubSceneOverrides
Definition Scene.h:30
std::vector< uint8_t > mExtraData
Definition Scene.h:29
int32_t mParentBone
Definition Scene.h:36
Definition Scene.h:14
bool mBakedLighting
Definition Scene.h:18
std::vector< uint32_t > mInstanceColors
Definition Scene.h:19
std::string mPath
Definition Scene.h:15
std::vector< Property > mProperties
Definition Scene.h:16
bool mOverrideColors
Definition Scene.h:17