aboutsummaryrefslogtreecommitdiff
path: root/source/Sprite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Sprite.cpp')
-rw-r--r--source/Sprite.cpp63
1 files changed, 46 insertions, 17 deletions
diff --git a/source/Sprite.cpp b/source/Sprite.cpp
index 876b75a..6cff1d3 100644
--- a/source/Sprite.cpp
+++ b/source/Sprite.cpp
@@ -5,6 +5,7 @@
#include "EditorUtils.hpp"
#include "Image.hpp"
#include "RapidJsonHelper.hpp"
+#include "Rect.hpp"
#include <imgui.h>
#include <misc/cpp/imgui_stdlib.h>
@@ -13,7 +14,7 @@
using namespace std::literals;
-bool Sprite::IsValid() const {
+bool SpriteDefinition::IsValid() const {
return mAtlas != nullptr;
}
@@ -21,7 +22,7 @@ bool IresSpriteFiles::IsValid() const {
return !spriteFiles.empty();
}
-Sprite* IresSpriteFiles::CreateInstance() const {
+SpriteDefinition* IresSpriteFiles::CreateInstance() const {
if (IsValid()) {
return nullptr;
}
@@ -42,7 +43,7 @@ Sprite* IresSpriteFiles::CreateInstance() const {
return nullptr;
}
- auto sprite = std::make_unique<Sprite>();
+ auto sprite = std::make_unique<SpriteDefinition>();
sprite->mAtlas.Attach(atlas.release());
sprite->mBoundingBox = atlasOut.elements[0].subregionSize;
sprite->mFrames.reserve(atlasOut.elements.size());
@@ -58,7 +59,7 @@ Sprite* IresSpriteFiles::CreateInstance() const {
return sprite.release();
}
-Sprite* IresSpriteFiles::GetInstance() {
+SpriteDefinition* IresSpriteFiles::GetInstance() {
if (mInstance == nullptr) {
mInstance.Attach(CreateInstance());
}
@@ -91,11 +92,11 @@ bool IresSpritesheet::IsValid() const {
sheetHSplit != 0;
}
-void IresSpritesheet::ResplitSpritesheet(Sprite* sprite, const IresSpritesheet* conf) {
+void IresSpritesheet::ResplitSpritesheet(SpriteDefinition* sprite, const IresSpritesheet* conf) {
ResplitSpritesheet(sprite, conf->sheetWSplit, conf->sheetHSplit, conf->frameCountOverride);
}
-void IresSpritesheet::ResplitSpritesheet(Sprite* sprite, int wSplit, int hSplit, int frameCount) {
+void IresSpritesheet::ResplitSpritesheet(SpriteDefinition* sprite, int wSplit, int hSplit, int frameCount) {
auto atlas = sprite->GetAtlas();
auto size = atlas->GetInfo().size;
int frameWidth = size.x / wSplit;
@@ -131,26 +132,26 @@ void IresSpritesheet::ResplitSpritesheet(Sprite* sprite, int wSplit, int hSplit,
}
}
-Sprite* IresSpritesheet::CreateInstance() const {
+SpriteDefinition* IresSpritesheet::CreateInstance() const {
if (!IsValid()) {
return nullptr;
}
char path[256];
- snprintf(path, sizeof(path), "%s/Ires/%s", AppConfig::assetDir.c_str(), spritesheetFile.c_str());
+ snprintf(path, sizeof(path), "%s/%s", AppConfig::assetDir.c_str(), spritesheetFile.c_str());
auto atlas = std::make_unique<Texture>();
if (atlas->InitFromFile(path) != Texture::EC_Success) {
return nullptr;
}
- auto sprite = std::make_unique<Sprite>();
+ auto sprite = std::make_unique<SpriteDefinition>();
sprite->mAtlas.Attach(atlas.release());
ResplitSpritesheet(sprite.get(), this);
return sprite.release();
}
-Sprite* IresSpritesheet::GetInstance() {
+SpriteDefinition* IresSpritesheet::GetInstance() {
if (mInstance == nullptr) {
mInstance.Attach(CreateInstance());
}
@@ -281,18 +282,46 @@ void IresSpritesheet::Read(IresLoadingContext& ctx, const rapidjson::Value& valu
BRUSSEL_JSON_GET_DEFAULT(value, "FrameCount", int, frameCountOverride, 0);
}
-SpriteMesh::SpriteMesh(Sprite* sprite)
- : mSprite(sprite) {
+Sprite::Sprite()
+ : mDefinition(nullptr) {
}
-void SpriteMesh::SetFrame(int frame) {
- // TODO
+bool Sprite::IsValid() const {
+ return mDefinition != nullptr;
}
-void SpriteMesh::PlayFrame() {
- // TODO
+void Sprite::SetDefinition(SpriteDefinition* definition) {
+ mDefinition.Attach(definition);
+ mCurrentFrame = 0;
+}
+
+int Sprite::GetFrame() const {
+ return mCurrentFrame;
+}
+
+const Subregion& Sprite::GetFrameSubregion() const {
+ return mDefinition->GetFrames()[mCurrentFrame];
+}
+
+void Sprite::SetFrame(int frame) {
+ mCurrentFrame = frame;
+}
+
+void Sprite::PlayFrame() {
+ ++mTimeElapsed;
+ if (mTimeElapsed >= mPlaybackSpeed) {
+ mTimeElapsed -= mPlaybackSpeed;
+
+ int frameCount = mDefinition->GetFrames().size();
+ int nextFrame = (mCurrentFrame + 1) % frameCount;
+ SetFrame(nextFrame);
+ }
+}
+
+int Sprite::GetPlaybackSpeed() const {
+ return mPlaybackSpeed;
}
-void SpriteMesh::SetPlaybackSpeed(int speed) {
+void Sprite::SetPlaybackSpeed(int speed) {
// TODO
}