diff options
Diffstat (limited to 'source/Sprite.hpp')
-rw-r--r-- | source/Sprite.hpp | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/source/Sprite.hpp b/source/Sprite.hpp index b7d357f..de2077f 100644 --- a/source/Sprite.hpp +++ b/source/Sprite.hpp @@ -1,11 +1,12 @@ #pragma once -#include "CpuMesh.hpp" +#include "CommonVertexIndex.hpp" #include "Ires.hpp" -#include "Mesh.hpp" #include "PodVector.hpp" #include "RcPtr.hpp" +#include "Renderer.hpp" #include "Texture.hpp" +#include "VertexIndex.hpp" #include <rapidjson/fwd.h> #include <glm/glm.hpp> @@ -13,7 +14,7 @@ #include <string_view> #include <vector> -class Sprite : public RefCounted { +class SpriteDefinition : public RefCounted { friend class IresSpriteFiles; friend class IresSpritesheet; @@ -31,7 +32,7 @@ public: class IresSpriteFiles : public IresObject { public: - RcPtr<Sprite> mInstance; + RcPtr<SpriteDefinition> mInstance; std::vector<std::string> spriteFiles; public: @@ -41,8 +42,8 @@ public: // NOTE: does not check whether all specified files have the same dimensions bool IsValid() const; - Sprite* CreateInstance() const; - Sprite* GetInstance(); + SpriteDefinition* CreateInstance() const; + SpriteDefinition* GetInstance(); void InvalidateInstance(); void Write(IresWritingContext& ctx, rapidjson::Value& value, rapidjson::Document& root) const override; @@ -51,7 +52,7 @@ public: class IresSpritesheet : public IresObject { public: - RcPtr<Sprite> mInstance; + RcPtr<SpriteDefinition> mInstance; std::string spritesheetFile; int sheetWSplit = 1; int sheetHSplit = 1; @@ -63,11 +64,11 @@ public: bool IsValid() const; - static void ResplitSpritesheet(Sprite* sprite, const IresSpritesheet* conf); - static void ResplitSpritesheet(Sprite* sprite, int wSplit, int hSplit, int frameCountOverride = -1); + static void ResplitSpritesheet(SpriteDefinition* sprite, const IresSpritesheet* conf); + static void ResplitSpritesheet(SpriteDefinition* sprite, int wSplit, int hSplit, int frameCountOverride = -1); - Sprite* CreateInstance() const; - Sprite* GetInstance(); + SpriteDefinition* CreateInstance() const; + SpriteDefinition* GetInstance(); void InvalidateInstance(); bool IsFrameCountOverriden() const; @@ -79,27 +80,34 @@ public: void Read(IresLoadingContext& ctx, const rapidjson::Value& value) override; }; -class SpriteMesh { +// TODO +class SpriteCollection { private: - RcPtr<GpuMesh> mMesh; - RcPtr<Sprite> mSprite; - PodVector<StandardVertex> mVertices; - PodVector<uint16_t> mIndices; + std::vector<SpriteDefinition> mSprites; +}; + +class Sprite { +private: + RcPtr<SpriteDefinition> mDefinition; int mCurrentFrame = 0; + int mTimeElapsed = 0; // # of frames per second int mPlaybackSpeed = 5; public: - SpriteMesh(Sprite* sprite); + Sprite(); + + bool IsValid() const; - Sprite* GetSprite() const { return mSprite.Get(); } - GpuMesh* GetGpuMesh() const { return mMesh.Get(); } + SpriteDefinition* GetDefinition() const { return mDefinition.Get(); } + void SetDefinition(SpriteDefinition* definition); - int GetFrame() const { return mCurrentFrame; } + int GetFrame() const; + const Subregion& GetFrameSubregion() const; void SetFrame(int frame); // Update as if a render frame has passed void PlayFrame(); - int GetPlaybackSpeed() const { return mPlaybackSpeed; } + int GetPlaybackSpeed() const; void SetPlaybackSpeed(int speed); }; |