From 56d623f4a978f212a52348b46af1a354d6d23ee6 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Thu, 21 Sep 2017 01:10:41 +0100 Subject: Working on spritesheet --- yage/base/spritesheet.cpp | 101 ++++++++++++++++++++++++++++++++++++++++++++++ yage/base/spritesheet.h | 37 ++++++++++++++++- 2 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 yage/base/spritesheet.cpp 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 + * 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(u)); +} + +bool SpriteSheetHandler::Int64(int64_t i) +{ + return handleNumber(static_cast(i)); +} + +bool SpriteSheetHandler::Uint64(uint64_t u) +{ + return handleNumber(static_cast(u)); +} + +bool SpriteSheetHandler::Double(double d) +{ + return handleNumber(static_cast(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 + #include #include @@ -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 SpriteMap; + +class SpriteSheetHandler + : public rapidjson::BaseReaderHandler, 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 fileLocations_; + details::SpriteMap fileLocations_; }; } // namespace yage -- cgit