SwitchGame/source/EngineFrame/Component/Sprite.h

104 lines
2.5 KiB
C
Raw Permalink Normal View History

2025-09-15 11:28:54 +08:00
#pragma once
#include <string>
#include "EngineCore/Asset_ImagePack.h"
#include "EngineFrame/Component/Component.h"
2025-09-19 12:18:57 +08:00
#include "EngineFrame/Render/Texture.h"
2025-09-15 11:28:54 +08:00
class Game;
/**
* @brief Sprite类Component类
*/
class Sprite : public Component
{
private:
/* data */
2025-09-18 15:21:43 +08:00
RefPtr<Texture> m_texture = nullptr;
2025-09-15 11:28:54 +08:00
public:
/**
* @brief Sprite类的默认构造函数
*/
Sprite(/* args */);
/**
* @brief Sprite类的带参数构造函数
* @param imgPath
* @param Index
*/
Sprite(std::string imgPath, int Index);
2025-09-19 12:18:57 +08:00
/**
* @brief Sprite类的带参数构造函数
* @param imgPath
*/
Sprite(std::string PngPath);
2025-09-15 11:28:54 +08:00
/**
* @brief Sprite类的析构函数
*/
~Sprite();
// 显式引入基类的Init方法避免隐藏
using Component::Init;
/**
* @brief Sprite组件
*/
2025-09-19 12:18:57 +08:00
void Init();
2025-09-15 11:28:54 +08:00
/**
* @brief
* @param e SDL事件指针
*/
void HandleEvents(SDL_Event *e) override;
/**
* @brief
* @param deltaTime
*/
void Update(float deltaTime) override;
/**
* @brief
* @param deltaTime
*/
void Render(float deltaTime) override;
/**
* @brief
*/
void Clear() override;
/**
* @brief
* @return SDL_Texture*
*/
2025-09-18 15:21:43 +08:00
RefPtr<Texture> GetTexture();
2025-09-15 11:28:54 +08:00
public:
2025-09-19 12:18:57 +08:00
VecPos Pos = {0, 0}; // 位置坐标
VecSize TextureSize = {0, 0}; // 纹理大小
VecSize Size = {0, 0}; // 大小
VecPos Anchor = {0, 0}; // 中心点
2025-09-15 11:28:54 +08:00
float Angle = 0.0f; // 旋转角度
SDL_RendererFlip flip = SDL_FLIP_NONE; // 翻转
2025-09-18 15:21:43 +08:00
// 是否在需要渲染的屏幕上
bool isRenderScreen = true;
2025-09-15 11:28:54 +08:00
public:
// 设置坐标
2025-09-19 12:18:57 +08:00
void SetPos(VecPos pos);
2025-09-15 11:28:54 +08:00
// 设置混合模式
void SetBlendMode(SDL_BlendMode blendMode);
// 设置旋转角度
void SetAngle(float angle);
2025-09-18 15:21:43 +08:00
// 设置中心点
2025-09-19 12:18:57 +08:00
void SetAnchor(VecFPos anchor);
2025-09-18 15:21:43 +08:00
// 设置大小
2025-09-19 12:18:57 +08:00
void SetSize(VecSize size);
2025-09-15 11:28:54 +08:00
// 获取坐标
2025-09-19 12:18:57 +08:00
VecPos GetPos();
2025-09-15 11:28:54 +08:00
// 获取混合模式
SDL_BlendMode GetBlendMode();
// 获取旋转角度
float GetAngle();
// 获取中心点
2025-09-19 12:18:57 +08:00
VecFPos GetAnchor();
2025-09-18 15:21:43 +08:00
// 获取大小
2025-09-19 12:18:57 +08:00
VecSize GetSize();
2025-09-15 11:28:54 +08:00
};