ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
UITransform.h
浏览该文件的文档.
1#pragma once
2#include "../Core/Core.h"
4#include "../Math.h"
5#include <SDL3/SDL_rect.h>
6#include <optional>
7
8namespace Shit {
9 class GameObject;
10 class UICanvas;
11
25 class SHIT_API SHIT_REFLECT(BlackList) UITransform : public Component {
27 public:
28 UITransform() = default;
29 ~UITransform() override = default;
30
32 UITransform(float anchoredPositionX, float anchoredPositionY, float width, float height);
33
34 // --- getter & setter ---
35 const Vector2& getAnchorMin() const { return m_anchorMin; }
36 void setAnchorMin(const Vector2& anchorMin) { m_anchorMin = anchorMin; }
37
38 const Vector2& getAnchorMax() const { return m_anchorMax; }
39 void setAnchorMax(const Vector2& anchorMax) { m_anchorMax = anchorMax; }
40
41 const Vector2& getPivot() const { return m_pivot; }
42 void setPivot(const Vector2& pivot) { m_pivot = pivot; }
43
44 const Vector2& getAnchoredPosition() const { return m_anchoredPosition; }
45 void setAnchoredPosition(const Vector2& position) { m_anchoredPosition = position; }
46
47 float getWidth() const { return m_width; }
48 void setWidth(float width) { m_width = width; }
49
50 float getHeight() const { return m_height; }
51 void setHeight(float height) { m_height = height; }
52
53 int getZIndex() const { return m_zIndex; }
54 void setZIndex(int zIndex) { m_zIndex = zIndex; }
55
57 SDL_FRect getScreenRect(const SDL_FRect* parentRect) const;
58
60 SDL_FRect resolveParentRect() const;
61
62 private:
63 SHIT_META(({.displayName = "Anchor Min", .tooltip = "锚点左上(归一化 0-1,相对父级)", .range = {0, 1}, .step = 0.01}))
64 Vector2 m_anchorMin{ 0.5f, 0.5f };
65 SHIT_META(({.displayName = "Anchor Max", .tooltip = "锚点右下(归一化 0-1,相对父级)", .range = {0, 1}, .step = 0.01}))
66 Vector2 m_anchorMax{ 0.5f, 0.5f };
67 SHIT_META(({.displayName = "Pivot", .tooltip = "轴心(归一化 0-1,相对自身)", .range = {0, 1}, .step = 0.01}))
68 Vector2 m_pivot{ 0.5f, 0.5f };
69 SHIT_META(({.displayName = "Anchored Position", .tooltip = "相对锚点的偏移(像素)"}))
70 Vector2 m_anchoredPosition{ 0.0f, 0.0f };
71 SHIT_META(({.displayName = "Width", .tooltip = "宽度(仅 anchorMin==anchorMax 轴生效)", .range = {0, 99999}}))
72 float m_width = 100.0f;
73 SHIT_META(({.displayName = "Height", .tooltip = "高度", .range = {0, 99999}}))
74 float m_height = 100.0f;
75 SHIT_META(({.displayName = "Z-Index", .tooltip = "渲染层级(值越大越靠上)"}))
76 int m_zIndex = 0;
77 };
78}
#define SHIT_API
定义 Core.h:14
#define SHIT_REFLECT_BODY(Type)
定义 Macros.h:62
#define SHIT_REFLECT(Mode)
定义 Macros.h:59
#define SHIT_META(...)
定义 Macros.h:68
游戏物体类
定义 GameObject.h:23
UI 层级根节点
定义 UICanvas.h:16
const Vector2 & getAnchorMax() const
定义 UITransform.h:38
UITransform(float anchoredPositionX, float anchoredPositionY, float width, float height)
便捷构造:居中锚点 + 给定偏移与尺寸
~UITransform() override=default
SDL_FRect getScreenRect(const SDL_FRect *parentRect) const
计算最终屏幕空间矩形(传入已知父级矩形;nullptr 表示用 Canvas 屏幕矩形)
void setHeight(float height)
定义 UITransform.h:51
void setWidth(float width)
定义 UITransform.h:48
void setPivot(const Vector2 &pivot)
定义 UITransform.h:42
const Vector2 & getPivot() const
定义 UITransform.h:41
void setAnchoredPosition(const Vector2 &position)
定义 UITransform.h:45
void setAnchorMax(const Vector2 &anchorMax)
定义 UITransform.h:39
void setAnchorMin(const Vector2 &anchorMin)
定义 UITransform.h:36
float getWidth() const
定义 UITransform.h:47
void setZIndex(int zIndex)
定义 UITransform.h:54
int getZIndex() const
定义 UITransform.h:53
SDL_FRect resolveParentRect() const
自动查找父级矩形:沿 GameObject 父链找 UITransform,否则用 Canvas;二者都无返回全屏
const Vector2 & getAnchoredPosition() const
定义 UITransform.h:44
float getHeight() const
定义 UITransform.h:50
UITransform()=default
const Vector2 & getAnchorMin() const
定义 UITransform.h:35
定义 AudioPlayer.h:10
glm::vec2 Vector2
定义 Math.h:5