Polyphase Game Engine
Loading...
Searching...
No Matches
TileMap2d.h
Go to the documentation of this file.
1#pragma once
2
3#include "Nodes/3D/Mesh3d.h"
4#include "Vertex.h"
5#include "AssetRef.h"
6
8
9#include <vector>
10
11class TileMap;
12class TileSet;
13
14// 2D tile map renderer. Lays tile quads in the XY plane (+X right, +Y up)
15// with Z used for layer ordering. References a TileMap asset which owns the
16// sparse cell data; this node is responsible for translating those cells
17// into a triangle mesh and submitting it to the renderer.
18//
19// Architecturally this mirrors Voxel3D — single CPU vertex array, single GPU
20// vertex+index buffer, dirty rebuild on Tick. Per-chunk GPU buffers can be
21// added in a later phase if huge maps need finer-grain culling.
23{
24public:
25
27
28 TileMap2D();
29 virtual ~TileMap2D();
30
31 virtual const char* GetTypeName() const override;
32 virtual void GatherProperties(std::vector<Property>& outProps) override;
33
34 virtual void Create() override;
35 virtual void Destroy() override;
36 virtual void Copy(Node* srcNode, bool recurse) override;
37
38 virtual void Tick(float deltaTime) override;
39 virtual void EditorTick(float deltaTime) override;
40
41 virtual void SaveStream(Stream& stream, Platform platform) override;
42 virtual void LoadStream(Stream& stream, Platform platform, uint32_t version) override;
43
44 virtual bool IsStaticMesh3D() const override;
45 virtual bool IsSkeletalMesh3D() const override;
46 virtual Material* GetMaterial() override;
47
48 virtual void Render() override;
49
50 virtual Bounds GetLocalBounds() const override;
51
52 // Asset binding
53 TileMap* GetTileMap() const;
54 void SetTileMap(TileMap* tileMap);
55
56 // Coordinate helpers
57 glm::ivec2 WorldToCell(const glm::vec2& worldXY) const;
58 glm::vec2 CellToWorld(const glm::ivec2& cell) const;
59 glm::vec2 CellCenterToWorld(const glm::ivec2& cell) const;
60
61 // Mesh control
62 void MarkDirty();
63 void RebuildMesh();
64 bool IsDirty() const { return mMeshDirty; }
65
66 // Read-only mesh accessors used by the Vulkan draw helpers.
67 TileMap2DResource* GetResource() { return &mResource; }
68 uint32_t GetNumVertices() const { return mNumVertices; }
69 uint32_t GetNumIndices() const { return mNumIndices; }
70 const std::vector<VertexColor>& GetVertices() const { return mVertices; }
71 const std::vector<IndexType>& GetIndices() const { return mIndices; }
72
73 static bool HandlePropChange(class Datum* datum, uint32_t index, const void* newValue);
74
75protected:
76
77 void TickCommon(float deltaTime);
78 void RebuildMeshInternal();
79 void UploadMeshData();
80 void UpdateBounds();
81 void EnsureMaterialBinding();
82
84
85 // Generated mesh (CPU side, single buffer for all chunks)
86 std::vector<VertexColor> mVertices;
87 std::vector<IndexType> mIndices;
88 uint32_t mNumVertices = 0;
89 uint32_t mNumIndices = 0;
90
91 bool mMeshDirty = true;
92 bool mUploadDirty[MAX_FRAMES] = {};
93
95
97
98 // Default material is a MaterialLite that binds the TileSet's atlas texture
99 // at slot 0. Recreated lazily so it can pull settings from the asset.
101
102 // Spacing between consecutive layers along Z when computing world positions.
103 float mLayerZSpacing = 0.01f;
104};
Platform
Definition EngineTypes.h:31
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Datum.h:164
Definition Material.h:48
Definition Mesh3d.h:13
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Mesh3d.cpp:12
virtual bool IsSkeletalMesh3D() const
Definition Mesh3d.cpp:132
virtual const char * GetTypeName() const override
Definition Mesh3d.cpp:39
virtual Material * GetMaterial()=0
virtual bool IsStaticMesh3D() const
Definition Mesh3d.cpp:127
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Mesh3d.cpp:44
virtual void LoadStream(Stream &stream, Platform platform, uint32_t version) override
Definition Mesh3d.cpp:77
virtual void SaveStream(Stream &stream, Platform platform) override
Definition Mesh3d.cpp:56
Definition Node.h:67
void TickCommon(float deltaTime)
Definition Node.cpp:573
virtual void EditorTick(float deltaTime)
Definition Node.cpp:563
virtual void Copy(Node *srcNode, bool recurse)
Definition Node.cpp:323
virtual void Destroy() override
Definition Primitive3d.cpp:129
virtual Bounds GetLocalBounds() const
Definition Primitive3d.cpp:829
virtual void Tick(float deltaTime) override
Definition Primitive3d.cpp:163
virtual void Render() override
Definition Primitive3d.cpp:259
virtual void Create() override
Definition Primitive3d.cpp:117
Definition Stream.h:21
Definition TileMap2d.h:23
uint32_t GetNumVertices() const
Definition TileMap2d.h:68
uint32_t GetNumIndices() const
Definition TileMap2d.h:69
MaterialRef mDefaultMaterial
Definition TileMap2d.h:100
const std::vector< VertexColor > & GetVertices() const
Definition TileMap2d.h:70
std::vector< IndexType > mIndices
Definition TileMap2d.h:87
Bounds mBounds
Definition TileMap2d.h:94
TileMap2DResource mResource
Definition TileMap2d.h:96
bool IsDirty() const
Definition TileMap2d.h:64
DECLARE_NODE(TileMap2D, Mesh3D)
TileMap2DResource * GetResource()
Definition TileMap2d.h:67
std::vector< VertexColor > mVertices
Definition TileMap2d.h:86
AssetRef mTileMap
Definition TileMap2d.h:83
const std::vector< IndexType > & GetIndices() const
Definition TileMap2d.h:71
Definition TileMap.h:58
Definition TileSet.h:102
Definition EngineTypes.h:193
Definition GraphicsTypes.h:258