aboutsummaryrefslogtreecommitdiff
path: root/source/Sprite.hpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-04-25 20:22:07 -0700
committerrtk0c <[email protected]>2022-04-25 20:22:07 -0700
commit855da86feae1a5cc14dc2d486ccf115f484dbc2e (patch)
tree8284c6a6bdfb1a919eb1a22f466f4180a329c7f3 /source/Sprite.hpp
parentd78a55de5003dbb040f1d1c369409e63a2c806d8 (diff)
Changeset: 16 Initial work on rendering sprites to screen
Diffstat (limited to 'source/Sprite.hpp')
-rw-r--r--source/Sprite.hpp50
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);
};