aboutsummaryrefslogtreecommitdiffstats
path: root/yage
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-09-21 01:10:41 +0100
committerYann Herklotz <ymherklotz@gmail.com>2017-09-21 01:10:41 +0100
commit56d623f4a978f212a52348b46af1a354d6d23ee6 (patch)
tree9c3a1c4260a25e7c4febf986e61622c7e344253a /yage
parent8c218b8f04d7a8ef5e9dbed48cad938b4fc62e5b (diff)
downloadYAGE-56d623f4a978f212a52348b46af1a354d6d23ee6.tar.gz
YAGE-56d623f4a978f212a52348b46af1a354d6d23ee6.zip
Working on spritesheet
Diffstat (limited to 'yage')
-rw-r--r--yage/base/spritesheet.cpp101
-rw-r--r--yage/base/spritesheet.h37
2 files changed, 137 insertions, 1 deletions
diff --git a/yage/base/spritesheet.cpp b/yage/base/spritesheet.cpp
new file mode 100644
index 00000000..ed4055ab
--- /dev/null
+++ b/yage/base/spritesheet.cpp
@@ -0,0 +1,101 @@
+/* ----------------------------------------------------------------------------
+ * spritesheet.cpp
+ *
+ * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com>
+ * MIT License, see LICENSE file for more details.
+ * ----------------------------------------------------------------------------
+ */
+
+#include "spritesheet.h"
+
+namespace yage
+{
+
+namespace details
+{
+
+bool SpriteSheetHandler::Null()
+{
+ return true;
+}
+
+bool SpriteSheetHandler::Bool(bool)
+{
+ return true;
+}
+
+bool SpriteSheetHandler::Int(int i)
+{
+ return handleNumber(i);
+}
+
+bool SpriteSheetHandler::Uint(unsigned u)
+{
+ return handleNumber(static_cast<int>(u));
+}
+
+bool SpriteSheetHandler::Int64(int64_t i)
+{
+ return handleNumber(static_cast<int>(i));
+}
+
+bool SpriteSheetHandler::Uint64(uint64_t u)
+{
+ return handleNumber(static_cast<int>(u));
+}
+
+bool SpriteSheetHandler::Double(double d)
+{
+ return handleNumber(static_cast<int>(d));
+}
+
+bool SpriteSheetHandler::String(const char *, rapidjson::SizeType, bool)
+{
+ return true;
+}
+
+bool SpriteSheetHandler::Key(const char *str, rapidjson::SizeType length, bool)
+{
+ current_key_ = std::string(str, length);
+ return true;
+}
+
+bool SpriteSheetHandler::StartObject()
+{
+ if(depth_ == 2) {
+ map_[current_key_] = Coordinate();
+ }
+
+ depth_++;
+ return true;
+}
+
+bool SpriteSheetHandler::EndObject(rapidjson::SizeType)
+{
+ depth_--;
+ return true;
+}
+
+bool SpriteSheetHandler::StartArray()
+{
+ return true;
+}
+
+bool SpriteSheetHandler::EndArray(rapidjson::SizeType)
+{
+ return true;
+}
+
+bool SpriteSheetHandler::handleNumber(int i)
+{
+ if(current_key_ == "width") {
+ if(depth_ == 1) {
+
+ }
+ }
+ return true;
+}
+
+} // namespace details
+
+} // namespace yage
diff --git a/yage/base/spritesheet.h b/yage/base/spritesheet.h
index 763ad2d5..60c98840 100644
--- a/yage/base/spritesheet.h
+++ b/yage/base/spritesheet.h
@@ -11,6 +11,8 @@
#include "texture.h"
+#include <rapidjson/reader.h>
+
#include <map>
#include <string>
@@ -26,12 +28,45 @@ struct Coordinate {
int width;
int height;
+ Coordinate() = default;
+
Coordinate(int x_i, int y_i, int width_i, int height_i)
: x(x_i), y(y_i), width(width_i), height(height_i)
{
}
};
+typedef std::map<std::string, details::Coordinate> SpriteMap;
+
+class SpriteSheetHandler
+ : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>, SpriteSheetHandler>
+{
+public:
+ bool Null();
+ bool Bool(bool b);
+ bool Int(int i);
+ bool Uint(unsigned u);
+ bool Int64(int64_t i);
+ bool Uint64(uint64_t u);
+ bool Double(double d);
+ bool String(const char *str, rapidjson::SizeType length, bool copy);
+
+ bool Key(const char *str, rapidjson::SizeType length, bool copy);
+ bool StartObject();
+ bool EndObject(rapidjson::SizeType memberCount);
+ bool StartArray();
+ bool EndArray(rapidjson::SizeType memberCount);
+
+ SpriteMap spriteMap() const;
+
+private:
+ std::string current_key_;
+ int depth_;
+ SpriteMap map_;
+
+ bool handleNumber(int i);
+};
+
} // namespace details
class SpriteSheet
@@ -43,7 +78,7 @@ public:
private:
Texture texture_;
- std::map<std::string, details::Coordinate> fileLocations_;
+ details::SpriteMap fileLocations_;
};
} // namespace yage