From f776df6076725d14679b31168e3ede53c966182e Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Tue, 31 Oct 2017 22:11:18 +0000 Subject: renaming base folder --- yage/core/spritesheet.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 yage/core/spritesheet.cpp (limited to 'yage/core/spritesheet.cpp') diff --git a/yage/core/spritesheet.cpp b/yage/core/spritesheet.cpp new file mode 100644 index 00000000..5c3499cc --- /dev/null +++ b/yage/core/spritesheet.cpp @@ -0,0 +1,85 @@ +/* ---------------------------------------------------------------------------- + * spritesheet.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave + * MIT License, see LICENSE file for more details. + * ---------------------------------------------------------------------------- + */ + +/** @file + */ + +#include "spritesheet.h" + +#include +#include +#include +#include + +#include +#include + +using namespace std; +using namespace rapidjson; +using namespace yage::details; + +namespace yage +{ + +SpriteSheet::SpriteSheet(string pngFileName, string jsonFileName) +{ + int jsonWidth, jsonHeight; + fileLocations_ = + parseJson(jsonWidth, jsonHeight, fileContent(jsonFileName)); + texture_ = ImageLoader::loadPng(pngFileName); + + if (texture_.width != jsonWidth) + throw runtime_error("JSON width does not match texture width"); + if (texture_.height != jsonHeight) + throw runtime_error("JSON height does not match texture height"); +} + +string SpriteSheet::fileContent(string jsonFileName) const +{ + ifstream inputFile(jsonFileName); + + stringstream stream; + stream << inputFile.rdbuf(); + + return stream.str(); +} + +SpriteMap SpriteSheet::parseJson(int &width, int &height, + string jsonContent) const +{ + SpriteMap spriteMap; + Document jsonAtlas; + jsonAtlas.Parse(jsonContent.c_str()); + + width = jsonAtlas["width"].GetInt(); + height = jsonAtlas["height"].GetInt(); + + for (auto &texture : jsonAtlas["sprites"].GetObject()) { + Coordinate coord; + for (auto &value : texture.value.GetObject()) { + string keyName{value.value.GetString()}; + int keyValue{value.value.GetInt()}; + if (keyName == "x") { + coord.x = keyValue; + } else if (keyName == "y") { + coord.y = keyValue; + } else if (keyName == "width") { + coord.width = keyValue; + } else if (keyName == "height") { + coord.height = keyValue; + } else { + throw runtime_error("JSON key incorrect: " + keyName); + } + } + spriteMap[texture.name.GetString()] = coord; + } + + return spriteMap; +} + +} // namespace yage -- cgit