ShitEngine 1.4.2
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
SpriteRenderer.h
浏览该文件的文档.
1#pragma once
2#include "../Core/Config.h"
3#include "RendererComponent.h"
4#include "../Render/Sprite.h"
5#include "../Math.h"
6
7#include <optional>
8#include <SDL3/SDL_rect.h>
9
10struct SDL_Texture;
11
12namespace Shit {
13 class CameraComponent;
14 class GameObject;
15
24 friend class GameObject;
26 public:
27 SpriteRenderer() = default;
28 ~SpriteRenderer() override = default;
29
30 void onRender(SDL_Renderer* renderer, const CameraComponent* camera) const override;
31
32 // --- setter & getter ---
33 void setTexturePath(const std::string& texturePath); // 非内联:含纹理存在性检查
34 const std::string& getTexturePath() const { return m_sprite.getTexturePath(); }
35
36 void setSourceRect(const std::optional<Rect>& sourceRect) { m_sprite.setSourceRect(sourceRect); }
37 const std::optional<Rect>& getSourceRect() const { return m_sprite.getSourceRect(); }
38
39 void setFlipped(bool flipped) { m_sprite.setFlipped(flipped); }
40
42 SHIT_PROPERTY(isFlipped, setFlipped)
43 bool isFlipped() const { return m_sprite.isFlipped(); }
44
45 // --- 属性 getter/setter(SHIT_PROPERTY 用)---
46
48 SHIT_PROPERTY(getSourceRectX, setSourceRectX)
49 float getSourceRectX() const;
50 void setSourceRectX(float v);
51
54 float getSourceRectY() const;
55 void setSourceRectY(float v);
56
59 float getSourceRectW() const;
60 void setSourceRectW(float v);
61
64 float getSourceRectH() const;
65 void setSourceRectH(float v);
66
67 void onAfterDeserialize() override; // 反序列化后按 m_texturePath 重载纹理
68
69 SDL_FRect getGlobalBounds() override;
70private:
73 Rect fullTextureRect() const;
74
75 SHIT_META(({.displayName = "Texture Path", .tooltip = "纹理文件路径(持久化;反序列化后自动重载)"}))
76 std::string m_texturePath;
77 SHIT_META(({.displayName = "Sprite Data", .readOnly = true}))
78 Sprite m_sprite;
79 };
80}
#define SHIT_API
定义 Core.h:14
#define SHIT_PROPERTY(Getter, Setter)
定义 Macros.h:119
#define SHIT_REFLECT_BODY(Type)
定义 Macros.h:89
#define SHIT_REFLECT(Mode)
定义 Macros.h:86
#define SHIT_META(...)
定义 Macros.h:95
相机组件,定义"从哪个角度观察世界"
定义 CameraComponent.h:16
游戏物体类
定义 GameObject.h:23
friend class GameObject
定义 SpriteRenderer.h:24
SDL_FRect getGlobalBounds() override
世界坐标下的轴对齐包围盒
float getSourceRectX() const
Source Rect X
void setSourceRectX(float v)
void setSourceRectH(float v)
void setTexturePath(const std::string &texturePath)
SpriteRenderer()=default
float getSourceRectY() const
Source Rect Y
void setSourceRectW(float v)
void onAfterDeserialize() override
反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。
void setSourceRect(const std::optional< Rect > &sourceRect)
定义 SpriteRenderer.h:36
~SpriteRenderer() override=default
const std::string & getTexturePath() const
定义 SpriteRenderer.h:34
void setSourceRectY(float v)
void setFlipped(bool flipped)
定义 SpriteRenderer.h:39
void onRender(SDL_Renderer *renderer, const CameraComponent *camera) const override
纯虚:子类实现绘制逻辑
float getSourceRectW() const
Source Rect Width
float getSourceRectH() const
Source Rect Height
const std::optional< Rect > & getSourceRect() const
定义 SpriteRenderer.h:37
bool isFlipped() const
是否水平翻转
定义 SpriteRenderer.h:43
定义 AnimationClip.h:12
Rectangle struct (float precision), with SDL_FRect conversion
定义 Math.h:10