ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
SpriteRenderer.h
浏览该文件的文档.
1#pragma once
2#include "../Core/Config.h"
3#include "RendererComponent.h"
4#include "../Render/Sprite.h"
5
6#include <optional>
7#include <SDL3/SDL_rect.h>
8
9struct SDL_Texture;
10
11namespace Shit {
12 class CameraComponent;
13 class GameObject;
14
23 friend class GameObject;
25 public:
26 SpriteRenderer() = default;
27 ~SpriteRenderer() override = default;
28
29 void onRender(SDL_Renderer* renderer, const CameraComponent* camera) const override;
30
31 // --- setter & getter ---
32 void setTexturePath(const std::string& texturePath); // 非内联:含纹理存在性检查
33 const std::string& getTexturePath() const { return m_sprite.getTexturePath(); }
34
35 void setSourceRect(const std::optional<SDL_FRect>& sourceRect) { m_sprite.setSourceRect(sourceRect); }
36 const std::optional<SDL_FRect>& getSourceRect() const { return m_sprite.getSourceRect(); }
37
38 void setFlipped(bool flipped) { m_sprite.setFlipped(flipped); }
39 bool isFlipped() const { return m_sprite.isFlipped(); }
40
41 void onAfterDeserialize() override; // 反序列化后按 m_texturePath 重载纹理
42
43 SDL_FRect getGlobalBounds() override;
44 private:
45 SHIT_META(({.displayName = "Texture Path", .tooltip = "纹理文件路径(持久化;反序列化后自动重载)"}))
46 std::string m_texturePath;
47 SHIT_META(({.displayName = "Sprite Data", .readOnly = true}))
48 Sprite m_sprite;
49 };
50}
#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
相机组件,定义"从哪个角度观察世界"
定义 CameraComponent.h:16
游戏物体类
定义 GameObject.h:23
friend class GameObject
定义 SpriteRenderer.h:23
SDL_FRect getGlobalBounds() override
世界坐标下的轴对齐包围盒
void setTexturePath(const std::string &texturePath)
SpriteRenderer()=default
void setSourceRect(const std::optional< SDL_FRect > &sourceRect)
定义 SpriteRenderer.h:35
void onAfterDeserialize() override
反序列化完成后回调(Prefab::apply 逐组件调用一次,字段已写入)。 用于重建"直写字段绕过了 setter、无法自动触发的引擎状态"(如精灵纹理加载)。
~SpriteRenderer() override=default
const std::string & getTexturePath() const
定义 SpriteRenderer.h:33
const std::optional< SDL_FRect > & getSourceRect() const
定义 SpriteRenderer.h:36
void setFlipped(bool flipped)
定义 SpriteRenderer.h:38
void onRender(SDL_Renderer *renderer, const CameraComponent *camera) const override
纯虚:子类实现绘制逻辑
bool isFlipped() const
定义 SpriteRenderer.h:39
定义 AudioPlayer.h:10