Files
NS_unknown_game/Frostbite2D/include/frostbite2D/2d/sprite.h
T
2026-06-08 19:58:35 +08:00

73 lines
2.0 KiB
C++

#pragma once
#include <frostbite2D/2d/actor.h>
#include <frostbite2D/graphics/texture.h>
#include <frostbite2D/graphics/shader.h>
#include <frostbite2D/graphics/types.h>
#include <string>
namespace frostbite2D {
class Sprite : public Actor {
public:
Sprite();
explicit Sprite(Ptr<Texture> texture);
virtual ~Sprite();
static Ptr<Sprite> createFromFile(const std::string& path);
static Ptr<Sprite> createFromMemory(const uint8* data, int width, int height, int channels);
static Ptr<Sprite> createFromNpk(const std::string& imgPath, size_t frameIndex = 0);
void Render() override;
void SetTexture(Ptr<Texture> texture);
Ptr<Texture> GetTexture() const { return texture_; }
void SetShader(const std::string& shaderName);
void SetDefaultShader();
const std::string& GetShaderName() const { return shaderName_; }
bool HasCustomShader() const { return !shaderName_.empty(); }
void SetSourceRect(const Rect& rect);
const Rect& GetSourceRect() const { return srcRect_; }
void SetColor(const Color& color);
void SetColor(float r, float g, float b, float a = 1.0f);
const Color& GetColor() const { return color_; }
void SetFlippedX(bool flipped);
void SetFlippedY(bool flipped);
bool IsFlippedX() const { return flippedX_; }
bool IsFlippedY() const { return flippedY_; }
void SetBlendMode(BlendMode mode);
BlendMode GetBlendMode() const { return blendMode_; }
void SetSizeToTexture();
const Vec2& GetOffset() const { return offset_; }
void SetOffset(const Vec2& offset);
void SetOffset(float x, float y);
protected:
virtual void ConfigureShader(Shader* shader) const;
void updateTransform();
Shader* getActiveShader() const;
Quad createQuad() const;
private:
Ptr<Texture> texture_;
std::string shaderName_;
Color color_ = Color(1.0f, 1.0f, 1.0f, 1.0f);
Rect srcRect_;
bool flippedX_ = false;
bool flippedY_ = false;
BlendMode blendMode_ = BlendMode::Normal;
Vec2 offset_ = Vec2::Zero();
Transform2D transform_;
static constexpr const char* DEFAULT_SHADER = "sprite";
};
}