diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Terrain/TerrainData.h |
Diffstat (limited to 'Runtime/Terrain/TerrainData.h')
-rw-r--r-- | Runtime/Terrain/TerrainData.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Runtime/Terrain/TerrainData.h b/Runtime/Terrain/TerrainData.h new file mode 100644 index 0000000..3851c8c --- /dev/null +++ b/Runtime/Terrain/TerrainData.h @@ -0,0 +1,66 @@ +#pragma once +#include "Configuration/UnityConfigure.h" + +#if ENABLE_TERRAIN + +#include "Runtime/BaseClasses/NamedObject.h" +#include "Runtime/BaseClasses/GameObject.h" +#include "Runtime/Serialize/SerializeUtility.h" + +#include "SplatDatabase.h" +#include "DetailDatabase.h" +#include "Heightmap.h" +#include "TreeDatabase.h" +#include "Runtime/Utilities/NonCopyable.h" + + +class TerrainData : public NamedObject, NonCopyable +{ + public: + REGISTER_DERIVED_CLASS(TerrainData, NamedObject) + DECLARE_OBJECT_SERIALIZE(TerrainData) + + TerrainData (MemLabelId label, ObjectCreationMode mode); + + SplatDatabase &GetSplatDatabase (); + DetailDatabase &GetDetailDatabase (); + Heightmap &GetHeightmap () { return m_Heightmap; } + TreeDatabase& GetTreeDatabase () { return m_TreeDatabase; } + + bool HasUser (GameObject *user) const; + void AddUser (GameObject *user); + void RemoveUser (GameObject *user); + + static void InitializeClass (); + static void CleanupClass (); + + enum ChangedFlags + { + kNoChange = 0, + kHeightmap = 1, + kTreeInstances = 2, + kDelayedHeightmapUpdate = 4, + kFlushEverythingImmediately = 8, + kRemoveDirtyDetailsImmediately = 16, + kWillBeDestroyed = 256, + }; + + // Sends a callback to any users of this terrainsData (typically C# Terrain objects) so they can update their renderers, etc. + void UpdateUsers (ChangedFlags changedFlag); + void SetLightmapIndexOnUsers(int lightmapIndex); + + virtual void AwakeFromLoad (AwakeFromLoadMode awakeMode); + void AwakeFromLoadThreaded(); + + void ExtractPreloadShaders (vector<PPtr<Object> >& shaders); + + private: + SplatDatabase m_SplatDatabase; + TreeDatabase m_TreeDatabase; + DetailDatabase m_DetailDatabase; + Heightmap m_Heightmap; + std::set<PPtr<GameObject> > m_Users; // List of terrains for the client callbacks +}; +ENUM_FLAGS(TerrainData::ChangedFlags); + +#endif // ENABLE_TERRAIN |