Polyphase Game Engine
Loading...
Searching...
No Matches
SpriteAnimation.h
Go to the documentation of this file.
1#pragma once
2
3#include "Asset.h"
4#include "AssetRef.h"
5
6#include "glm/glm.hpp"
7
8#include <string>
9#include <vector>
10
11class Texture;
12
13// Determines how a SpriteAnimation lays out its frames:
14// Discrete — one Texture asset per frame; frames may be different sizes.
15// AtlasGrid — single atlas Texture sliced into a regular grid; each frame is
16// a cell index into that grid. More memory-efficient and avoids
17// per-frame texture binds at runtime.
18enum class SpriteFrameSourceMode : uint8_t
19{
20 Discrete = 0,
21 AtlasGrid = 1,
22
23 Count
24};
25
26// A reusable, named sprite animation clip. Authored once, played by name from
27// any number of SpriteAnimator nodes. The asset transparently supports two
28// frame-source modes (discrete textures or one atlas + grid metadata) and the
29// SpriteAnimator's binding API works the same either way.
31{
32public:
33
35
37 virtual ~SpriteAnimation();
38
39 virtual void LoadStream(Stream& stream, Platform platform) override;
40 virtual void SaveStream(Stream& stream, Platform platform) override;
41 virtual void Create() override;
42 virtual void Destroy() override;
43 virtual bool Import(const std::string& path, ImportOptions* options) override;
44 virtual void GatherProperties(std::vector<Property>& outProps) override;
45 virtual glm::vec4 GetTypeColor() override;
46 virtual const char* GetTypeName() override;
47 virtual bool ShouldSnapshotForPie() const override { return true; }
48#if EDITOR
49 virtual bool DrawCustomProperty(Property& prop) override;
50#endif
51
52 // Common
53 SpriteFrameSourceMode GetMode() const { return mMode; }
54 void SetMode(SpriteFrameSourceMode mode) { mMode = mode; }
55
56 const std::string& GetAnimationName() const { return mAnimationName; }
57 void SetAnimationName(const std::string& name) { mAnimationName = name; }
58
59 float GetFps() const { return mFps; }
60 void SetFps(float fps) { mFps = fps; }
61
62 bool GetLoop() const { return mLoop; }
63 void SetLoop(bool loop) { mLoop = loop; }
64
65 // Discrete-mode authoring
66 const std::vector<TextureRef>& GetFrames() const { return mFrames; }
67 std::vector<TextureRef>& GetFramesMutable() { return mFrames; }
68 void AddFrame(Texture* tex);
69 void ClearFrames();
70
71 // Atlas-mode authoring
72 Texture* GetAtlasTexture() const;
73 void SetAtlasTexture(Texture* tex);
74 int32_t GetAtlasCols() const { return mAtlasCols; }
75 int32_t GetAtlasRows() const { return mAtlasRows; }
76 void SetAtlasGrid(int32_t cols, int32_t rows) { mAtlasCols = cols; mAtlasRows = rows; }
77 void SetAtlasMargin(int32_t x, int32_t y) { mAtlasMarginX = x; mAtlasMarginY = y; }
78 void SetAtlasSpacing(int32_t x, int32_t y) { mAtlasSpacingX = x; mAtlasSpacingY = y; }
79 const std::vector<int32_t>& GetAtlasFrameIndices() const { return mAtlasFrameIndices; }
80 std::vector<int32_t>& GetAtlasFrameIndicesMutable() { return mAtlasFrameIndices; }
81
82 // Unified frame query — works for either mode.
83 int32_t GetFrameCount() const;
84 Texture* GetFrameTexture(int32_t frameIndex) const;
85 // Discrete: returns (0,0)-(1,1). AtlasGrid: shared math with TileSet via TextureAtlasUtil.
86 bool GetFrameUV(int32_t frameIndex, glm::vec2& outUV0, glm::vec2& outUV1) const;
87
88protected:
89
90 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
91
92 // Common
93 std::string mAnimationName;
95 float mFps = 12.0f;
96 bool mLoop = true;
97
98 // Discrete mode
99 std::vector<TextureRef> mFrames;
100
101 // AtlasGrid mode
103 int32_t mAtlasCols = 1;
104 int32_t mAtlasRows = 1;
105 int32_t mAtlasMarginX = 0;
106 int32_t mAtlasMarginY = 0;
107 int32_t mAtlasSpacingX = 0;
108 int32_t mAtlasSpacingY = 0;
109 std::vector<int32_t> mAtlasFrameIndices;
110
111 // Synthetic Bool used as the "Edit Atlas Frames..." inspector button.
112 bool mEditAtlasButton = false;
113};
Platform
Definition EngineTypes.h:31
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
SpriteFrameSourceMode
Definition SpriteAnimation.h:19
Definition AssetRef.h:18
Definition Asset.h:113
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:244
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:236
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:254
virtual const char * GetTypeName()
Definition Asset.cpp:259
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:249
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:222
virtual void Destroy()
Definition Asset.cpp:87
Definition Datum.h:164
Definition Asset.h:102
virtual bool DrawCustomProperty(Property &prop)
Definition Object.h:46
Definition Property.h:14
Definition SpriteAnimation.h:31
virtual bool ShouldSnapshotForPie() const override
Definition SpriteAnimation.h:47
bool GetLoop() const
Definition SpriteAnimation.h:62
int32_t GetAtlasRows() const
Definition SpriteAnimation.h:75
SpriteFrameSourceMode GetMode() const
Definition SpriteAnimation.h:53
const std::string & GetAnimationName() const
Definition SpriteAnimation.h:56
const std::vector< TextureRef > & GetFrames() const
Definition SpriteAnimation.h:66
AssetRef mAtlasTexture
Definition SpriteAnimation.h:102
void SetMode(SpriteFrameSourceMode mode)
Definition SpriteAnimation.h:54
std::vector< int32_t > mAtlasFrameIndices
Definition SpriteAnimation.h:109
std::vector< TextureRef > mFrames
Definition SpriteAnimation.h:99
void SetLoop(bool loop)
Definition SpriteAnimation.h:63
float GetFps() const
Definition SpriteAnimation.h:59
void SetAtlasSpacing(int32_t x, int32_t y)
Definition SpriteAnimation.h:78
DECLARE_ASSET(SpriteAnimation, Asset)
std::vector< TextureRef > & GetFramesMutable()
Definition SpriteAnimation.h:67
std::vector< int32_t > & GetAtlasFrameIndicesMutable()
Definition SpriteAnimation.h:80
void SetAtlasMargin(int32_t x, int32_t y)
Definition SpriteAnimation.h:77
std::string mAnimationName
Definition SpriteAnimation.h:93
void SetFps(float fps)
Definition SpriteAnimation.h:60
int32_t GetAtlasCols() const
Definition SpriteAnimation.h:74
const std::vector< int32_t > & GetAtlasFrameIndices() const
Definition SpriteAnimation.h:79
void SetAtlasGrid(int32_t cols, int32_t rows)
Definition SpriteAnimation.h:76
void SetAnimationName(const std::string &name)
Definition SpriteAnimation.h:57
Definition Stream.h:21
Definition Texture.h:10