ShitEngine
1.4.2
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
Toggle main menu visibility
载入中...
搜索中...
未找到
Tilemap.h
浏览该文件的文档.
1
#pragma once
2
#include "
../Core/Core.h
"
3
#include "
../Math.h
"
4
#include "
Component.h
"
5
#include "
RendererComponent.h
"
6
#include <SDL3/SDL_rect.h>
7
#include <string>
8
#include <vector>
9
10
namespace
Shit
{
11
class
CameraComponent
;
12
27
class
SHIT_API
SHIT_REFLECT
(BlackList)
Tilemap
:
public
RendererComponent
{
28
SHIT_REFLECT_BODY
(
Tilemap
)
29
public
:
30
Tilemap
();
31
~Tilemap
()
override
;
32
33
void
onAfterDeserialize
()
override
;
34
void
onFieldChanged
(
const
std::string& fieldName)
override
;
35
37
void
onRender
(SDL_Renderer* renderer,
const
CameraComponent
* camera)
const override
;
39
SDL_FRect
getGlobalBounds
()
override
;
40
41
// --- 配置 ---
42
void
setTexturePath
(
const
std::string& path);
43
const
std::string&
getTexturePath
()
const
{
return
m_texturePath; }
44
45
void
setTileSize
(
int
w,
int
h);
46
int
getTileWidth
()
const
{
return
m_tileWidth; }
47
int
getTileHeight
()
const
{
return
m_tileHeight; }
48
49
void
setGridSize
(
int
cols,
int
rows);
50
int
getGridWidth
()
const
{
return
m_gridWidth; }
51
int
getGridHeight
()
const
{
return
m_gridHeight; }
52
53
void
setTileWorldSize
(
const
Vector2
& size);
54
const
Vector2
&
getTileWorldSize
()
const
{
return
m_tileWorldSize; }
55
56
// --- 网格数据 ---
57
void
setTile
(
int
col,
int
row,
int
tileId);
58
int
getTile
(
int
col,
int
row)
const
;
59
void
clear
();
60
bool
isEmpty
()
const
;
61
int
getTileCount
()
const
;
62
63
// --- 序列化载体(m_gridData 供反射持久化;内部使用) ---
64
const
std::string&
getGridData
()
const
{
return
m_gridData; }
65
void
setGridData
(
const
std::string& data);
66
67
private
:
68
friend
class
TilemapDrawTool
;
// 编辑器刷图工具直接访问网格
69
70
// 反射可序列化字段
71
SHIT_META
(({.displayName =
"Texture"
, .tooltip =
"瓦片集纹理路径(sprite sheet)"
}))
72
std::string m_texturePath;
73
SHIT_META
(({.displayName =
"Tile Width"
, .tooltip =
"单个瓦片在纹理中的像素宽度"
}))
74
int
m_tileWidth = 32;
75
SHIT_META
(({.displayName =
"Tile Height"
, .tooltip =
"单个瓦片在纹理中的像素高度"
}))
76
int
m_tileHeight = 32;
77
SHIT_META
(({.displayName =
"Grid Width"
, .tooltip =
"网格列数"
}))
78
int
m_gridWidth = 10;
79
SHIT_META
(({.displayName =
"Grid Height"
, .tooltip =
"网格行数"
}))
80
int
m_gridHeight = 10;
81
SHIT_META
(({.displayName =
"Tile World Size"
, .tooltip =
"每格世界尺寸(默认=瓦片像素;留 0 自动)"
}))
82
Vector2 m_tileWorldSize{ 0.0f, 0.0f };
83
// 序列化载体:逗号分隔瓦片 id(含尺寸头 [cols,rows,...]),随 .scene 持久化
84
SHIT_META
(({.displayName =
"Grid Data"
, .tooltip =
"序列化载体,由刷图工具自动维护"
, .readOnly =
true
}))
85
std::string m_gridData;
86
87
// 运行时网格(非反射,从 m_gridData 解析而来)
88
SHIT_META
(Disable)
89
std::vector<int> m_tiles;
90
92
void
parseGridData();
94
void
syncGridData();
96
void
ensureTileBuffer();
97
};
98
}
Component.h
Core.h
SHIT_API
#define SHIT_API
定义
Core.h:14
SHIT_REFLECT_BODY
#define SHIT_REFLECT_BODY(Type)
定义
Macros.h:89
SHIT_REFLECT
#define SHIT_REFLECT(Mode)
定义
Macros.h:86
SHIT_META
#define SHIT_META(...)
定义
Macros.h:95
Math.h
RendererComponent.h
Shit::CameraComponent
相机组件,定义"从哪个角度观察世界"
定义
CameraComponent.h:16
Shit::RendererComponent::RendererComponent
RendererComponent()
Shit::Tilemap::getGlobalBounds
SDL_FRect getGlobalBounds() override
世界坐标轴对齐包围盒(覆盖整个网格)
Shit::Tilemap::getTileWidth
int getTileWidth() const
定义
Tilemap.h:46
Shit::Tilemap::getTileHeight
int getTileHeight() const
定义
Tilemap.h:47
Shit::Tilemap::setTileSize
void setTileSize(int w, int h)
设置单个瓦片纹理像素尺寸
Shit::Tilemap::getTileWorldSize
const Vector2 & getTileWorldSize() const
定义
Tilemap.h:54
Shit::Tilemap::setGridSize
void setGridSize(int cols, int rows)
调整网格行列数(保留重叠部分数据)
Shit::Tilemap::getGridData
const std::string & getGridData() const
定义
Tilemap.h:64
Shit::Tilemap::getTileCount
int getTileCount() const
当前瓦片数量(非空格)
Shit::Tilemap::setTileWorldSize
void setTileWorldSize(const Vector2 &size)
每格世界尺寸(默认=瓦片像素)
Shit::Tilemap::getGridWidth
int getGridWidth() const
定义
Tilemap.h:50
Shit::Tilemap::getTile
int getTile(int col, int row) const
读取瓦片(越界返回 -1)
Shit::Tilemap::TilemapDrawTool
friend class TilemapDrawTool
定义
Tilemap.h:68
Shit::Tilemap::setTile
void setTile(int col, int row, int tileId)
放置瓦片(-1 擦除)
Shit::Tilemap::onAfterDeserialize
void onAfterDeserialize() override
反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。
Shit::Tilemap::~Tilemap
~Tilemap() override
Shit::Tilemap::onFieldChanged
void onFieldChanged(const std::string &fieldName) override
检查器直接写反射字段后回调(字段名)。用于绕过 setter 的直写完成后 重新同步引擎状态(如 Box2D 刚体/形状)。默认无操作。
Shit::Tilemap::getGridHeight
int getGridHeight() const
定义
Tilemap.h:51
Shit::Tilemap::getTexturePath
const std::string & getTexturePath() const
定义
Tilemap.h:43
Shit::Tilemap::clear
void clear()
全部擦除
Shit::Tilemap::isEmpty
bool isEmpty() const
是否全空
Shit::Tilemap::setTexturePath
void setTexturePath(const std::string &path)
Shit::Tilemap::Tilemap
Tilemap()
Shit::Tilemap::onRender
void onRender(SDL_Renderer *renderer, const CameraComponent *camera) const override
按相机绘制网格(RendererComponent 纯虚实现)
Shit::Tilemap::setGridData
void setGridData(const std::string &data)
反序列化用:解析外部字符串(含尺寸头)
Shit
定义
AnimationClip.h:12
Shit::Vector2
glm::vec2 Vector2
定义
Math.h:7
include
ShitEngine
Component
Tilemap.h
制作者
1.17.0