From 9510e4fbbe817ab62ce014ee50283edd62fa00d9 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Tue, 9 Feb 2021 18:27:03 -0500 Subject: Entity prototypes can be stored in the map file now --- res/maps/map1.tmx | 15 ++++++++++++++- src/main.cpp | 12 +++++++----- src/map.cpp | 29 +++++++++++++++++++++++++++++ src/map.h | 13 +++++++++++++ 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/res/maps/map1.tmx b/res/maps/map1.tmx index fe46192..6ad312b 100644 --- a/res/maps/map1.tmx +++ b/res/maps/map1.tmx @@ -1,5 +1,5 @@ - + @@ -759,6 +759,19 @@ 150,205,198,116,116,116,116,116,116,138,141,116,116,2147483846,194,198,116,138,141,200,231,138,141,138,141,138,141,116,116,138,141,116,116,138,141,116,116,116,116,116,116,116,2147483846,2147483853,150,150,150,150 + + + + + + + + + + + + + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, diff --git a/src/main.cpp b/src/main.cpp index c23897b..b1fc373 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -47,11 +47,13 @@ void loop(Renderer& renderer) { game.getSystem().initSprite(boneySprite, "../res/sprites/boney_anim.txt", renderer); game.getSystem().addSpriteToParty(lucasSprite, boneySprite); - int flintSprite = game.emplaceSprite("flint"); - game.getSystem().initSprite(flintSprite, {35*16, 19*16}); - game.getSystem().setUpCollision(flintSprite, {-8, -8}, {12, 8}); - game.getSystem().initSprite(flintSprite, "../res/sprites/flint_anim.txt", renderer); - game.getSprite(flintSprite).interactionScript = "script0001"; + for (const Prototype& p : game.getMap().getPrototypes()) { + int spriteId = game.emplaceSprite(p.name); + game.getSystem().initSprite(spriteId, p.pos); + game.getSystem().setUpCollision(spriteId, p.collisionOffset, p.collisionSize); + game.getSystem().initSprite(spriteId, p.animationFilename, renderer); + game.getSprite(spriteId).interactionScript = p.interactionScript; + } game.getSystem().setFollowingSprite(lucasSprite); game.getSystem().unlockCamera(); diff --git a/src/map.cpp b/src/map.cpp index 0c4f9d6..1a2a250 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -51,6 +51,35 @@ Map::Map(std::string_view filename, Renderer& renderer) { } layers_.push_back(std::move(tilesToStore)); + } else if (layer->getType() == tmx::Layer::Type::Object) { + const auto& objectLayer = layer->getLayerAs(); + + for (const tmx::Object& object : objectLayer.getObjects()) { + if (object.getType() == "sprite") { + Prototype p; + p.name = object.getName(); + p.pos.x() = object.getPosition().x; + p.pos.y() = object.getPosition().y; + + for (const tmx::Property& property : object.getProperties()) { + if (property.getName() == "collisionOffsetX") { + p.collisionOffset.x() = property.getIntValue(); + } else if (property.getName() == "collisionOffsetY") { + p.collisionOffset.y() = property.getIntValue(); + } else if (property.getName() == "collisionWidth") { + p.collisionSize.w() = property.getIntValue(); + } else if (property.getName() == "collisionHeight") { + p.collisionSize.h() = property.getIntValue(); + } else if (property.getName() == "animation") { + p.animationFilename = property.getStringValue(); + } else if (property.getName() == "interactionScript") { + p.interactionScript = property.getStringValue(); + } + } + + prototypes_.push_back(std::move(p)); + } + } } } } diff --git a/src/map.h b/src/map.h index de18e68..a896b00 100644 --- a/src/map.h +++ b/src/map.h @@ -1,6 +1,7 @@ #ifndef MAP_H_D95D6D47 #define MAP_H_D95D6D47 +#include #include #include #include "renderer.h" @@ -17,6 +18,15 @@ struct Tile { StepType step = StepType::none; }; +struct Prototype { + std::string name; + vec2i pos; + vec2i collisionOffset; + vec2i collisionSize; + std::string animationFilename; + std::string interactionScript; +}; + class Map { public: @@ -36,6 +46,8 @@ public: StepType getStepType(int x, int y) const; + const std::vector& getPrototypes() const { return prototypes_; } + private: vec2i mapSize_; @@ -43,6 +55,7 @@ private: std::vector> layers_; int tilesetTextureId_; int tilesetColumns_; + std::vector prototypes_; }; #endif /* end of include guard: MAP_H_D95D6D47 */ -- cgit 1.4.1