60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <string>
|
|||
|
|
#include <SDL2/SDL.h>
|
|||
|
|
#include <SDL2/SDL_ttf.h>
|
|||
|
|
#include "EngineFrame/Component/Component.h"
|
|||
|
|
class Game;
|
|||
|
|
|
|||
|
|
class Text : public Component
|
|||
|
|
{
|
|||
|
|
private:
|
|||
|
|
/* data */
|
|||
|
|
SDL_Texture *m_texture = nullptr;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
Text(/* args */);
|
|||
|
|
Text(std::string Str, TTF_Font *font, SDL_Color color);
|
|||
|
|
Text(std::string Str, TTF_Font *font, SDL_Color textColor, SDL_Color strokeColor, int strokeSize);
|
|||
|
|
~Text();
|
|||
|
|
|
|||
|
|
// 显式引入基类的Init方法,避免隐藏
|
|||
|
|
using Component::Init;
|
|||
|
|
void Init(std::string Str, TTF_Font *font, SDL_Color color);
|
|||
|
|
void Init(std::string Str, TTF_Font *font, SDL_Color textColor, SDL_Color strokeColor, int strokeSize);
|
|||
|
|
void HandleEvents(SDL_Event *e) override;
|
|||
|
|
void Update(float deltaTime) override;
|
|||
|
|
void Render(float deltaTime) override;
|
|||
|
|
void Clear() override;
|
|||
|
|
|
|||
|
|
SDL_Texture *GetTexture();
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
// 组件标签
|
|||
|
|
Tag m_tag = Tag::RENDER | Tag::UPDATE; // 标记该组件需要渲染和更新
|
|||
|
|
|
|||
|
|
std::string m_text;
|
|||
|
|
TTF_Font *m_font;
|
|||
|
|
SDL_Color m_text_color;
|
|||
|
|
SDL_Color m_stroke_color;
|
|||
|
|
int m_stroke_size = 0;
|
|||
|
|
|
|||
|
|
SDL_Point Pos = {0, 0}; // 位置坐标
|
|||
|
|
SDL_Point TextureSize = {0, 0}; // 纹理大小
|
|||
|
|
SDL_Point Size = {0, 0}; // 大小
|
|||
|
|
SDL_Point Anchor = {0, 0}; // 中心点
|
|||
|
|
float Angle = 0.0f; // 旋转角度
|
|||
|
|
SDL_RendererFlip flip = SDL_FLIP_NONE; // 翻转
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
// 设置坐标
|
|||
|
|
void SetPos(SDL_Point pos);
|
|||
|
|
// 设置文本
|
|||
|
|
void SetText(std::string Str);
|
|||
|
|
|
|||
|
|
// 获取坐标
|
|||
|
|
SDL_Point GetPos();
|
|||
|
|
// 获取文本
|
|||
|
|
std::string GetText();
|
|||
|
|
};
|