diff --git a/source/Game.cpp b/source/Game.cpp index 9aca64a..684d80c 100644 --- a/source/Game.cpp +++ b/source/Game.cpp @@ -61,11 +61,11 @@ Game::generate() { Instances instances(mPathfinder, mTileManager, mCollection, mWorld); - mCollection.insert(std::shared_ptr(new Enemy(instances, Vector2f(400.0f, 200.0f)))); + mCollection.insert(std::shared_ptr(new Enemy(instances, Vector2f(400.0f, 200.0f), Yaml("enemy.yaml")))); mCollection.insert(std::shared_ptr(new Cover(Vector2f(300, 200), Vector2i(100, 150), - mWorld))); + mWorld, Yaml("cover.yaml")))); - mPlayer = std::unique_ptr(new Player(instances, Vector2f(200.0f, 100.0f))); + mPlayer = std::unique_ptr(new Player(instances, Vector2f(200.0f, 100.0f), Yaml("player.yaml"))); } /** * Closes window. diff --git a/source/abstract/Character.cpp b/source/abstract/Character.cpp index af8e951..5e89bcb 100644 --- a/source/abstract/Character.cpp +++ b/source/abstract/Character.cpp @@ -12,16 +12,17 @@ #include "../sprite/Body.h" +const String Character::KEY_HEALTH = "health"; std::vector Character::mCharacterInstances = std::vector(); /** * Saves pointer to this instance in static var for think(). */ Character::Character(const Instances& instances, const String& texturePath, - const PhysicalData& data, int health) : + const PhysicalData& data, const Yaml& config) : Sprite(texturePath, data), - mMaxHealth(health), - mCurrentHealth(health), + mMaxHealth(config.get(KEY_HEALTH)), + mCurrentHealth(mMaxHealth), mInstances(instances) { mCharacterInstances.push_back(this); } @@ -36,7 +37,7 @@ Character::~Character() { mCharacterInstances.erase(it); mInstances.collection.insert(std::shared_ptr(new Body(mInstances.world, - getPosition()))); + getPosition(), Yaml("body.yaml")))); } /** diff --git a/source/abstract/Character.h b/source/abstract/Character.h index 0c6ceca..58c9e6c 100644 --- a/source/abstract/Character.h +++ b/source/abstract/Character.h @@ -13,9 +13,11 @@ #include "Sprite.h" #include "../Instances.h" #include "../util/String.h" +#include "../util/Yaml.h" class Instances; class Sprite; +class Yaml; /** * Provides think function for AI, manages health, drops body on death. @@ -24,7 +26,7 @@ class Character : public Sprite { // Public functions. public: Character(const Instances& instances, const String& texturePath, - const PhysicalData& data, int health); + const PhysicalData& data, const Yaml& config); virtual ~Character() = 0; static void think(float elapsedTime); @@ -38,6 +40,8 @@ protected: // Private variables. private: + static const String KEY_HEALTH; + static std::vector mCharacterInstances; const int mMaxHealth; diff --git a/source/effects/Bullet.cpp b/source/effects/Bullet.cpp index 6236f06..e960bb9 100755 --- a/source/effects/Bullet.cpp +++ b/source/effects/Bullet.cpp @@ -26,7 +26,7 @@ Bullet::Bullet(const Vector2f& position, b2World& world, Physical& shooter, floa const Yaml& config) : Particle(ResourceManager::i().acquire(Loader::i().fromFile("bullet.png")), PhysicalData(position, SIZE, world, CATEGORY_PARTICLE, CATEGORY_PARTICLE, - true, true, true)), + true, true, true), config), mShooter(shooter), mDamage(config.get(KEY_DAMAGE)), mSpeed(config.get(KEY_SPEED)) { diff --git a/source/particle/Particle.cpp b/source/particle/Particle.cpp index 3a90a1e..42dfbf2 100755 --- a/source/particle/Particle.cpp +++ b/source/particle/Particle.cpp @@ -7,7 +7,8 @@ #include "Particle.h" -Particle::Particle(const std::shared_ptr& texture, const PhysicalData& data) : +Particle::Particle(const std::shared_ptr& texture, const PhysicalData& data, + const Yaml& config) : Sprite(texture, data) { } diff --git a/source/particle/Particle.h b/source/particle/Particle.h index f5b587b..48cc6fd 100755 --- a/source/particle/Particle.h +++ b/source/particle/Particle.h @@ -9,8 +9,10 @@ #define DG_PARTICLE_H_ #include "../abstract/Sprite.h" +#include "../util/Yaml.h" class Sprite; +class Yaml; /** * Prototype for a particle. @@ -18,7 +20,8 @@ class Sprite; class Particle : public Sprite { // Public functions. public: - Particle(const std::shared_ptr& texture, const PhysicalData& data); + Particle(const std::shared_ptr& texture, const PhysicalData& data, + const Yaml& config); virtual ~Particle(); }; diff --git a/source/sprite/Body.cpp b/source/sprite/Body.cpp index ef87618..bf6d052 100755 --- a/source/sprite/Body.cpp +++ b/source/sprite/Body.cpp @@ -7,7 +7,7 @@ #include "Body.h" -Body::Body(b2World& world, const Vector2f& position) : +Body::Body(b2World& world, const Vector2f& position, const Yaml& config) : Sprite("body.png", PhysicalData(position, Vector2i(50, 50), world, CATEGORY_NONSOLID, MASK_NONE, false)) { } diff --git a/source/sprite/Body.h b/source/sprite/Body.h index 34c006f..4c69003 100755 --- a/source/sprite/Body.h +++ b/source/sprite/Body.h @@ -9,13 +9,15 @@ #define DG_BODY_H_ #include "../abstract/Sprite.h" +#include "../util/Yaml.h" class Sprite; +class Yaml; class Body : public Sprite { // Public functions. public: - Body(b2World& world, const Vector2f& position); + Body(b2World& world, const Vector2f& position, const Yaml& config); }; #endif /* DG_BODY_H_ */ diff --git a/source/sprite/Cover.cpp b/source/sprite/Cover.cpp index 526dd9d..4b91a52 100755 --- a/source/sprite/Cover.cpp +++ b/source/sprite/Cover.cpp @@ -7,7 +7,7 @@ #include "Cover.h" -Cover::Cover(const Vector2f& position, const Vector2i& size, b2World& world) : +Cover::Cover(const Vector2f& position, const Vector2i& size, b2World& world, const Yaml& config) : Sprite("cover.png", PhysicalData(position, size, world, CATEGORY_WORLD, MASK_ALL, false)) { } diff --git a/source/sprite/Cover.h b/source/sprite/Cover.h index 4a6f1eb..1c96952 100755 --- a/source/sprite/Cover.h +++ b/source/sprite/Cover.h @@ -9,8 +9,10 @@ #define DG_COVER_H_ #include "../abstract/Sprite.h" +#include "../util/Yaml.h" class Sprite; +class Yaml; /** * A wall that can be placed anywhere (not limited by tiles) and have any (rectangular) size. @@ -18,7 +20,7 @@ class Sprite; class Cover : public Sprite { // Public functions. public: - Cover(const Vector2f& position, const Vector2i& size, b2World& world); + Cover(const Vector2f& position, const Vector2i& size, b2World& world, const Yaml& config); }; #endif /* DG_COVER_H_ */ diff --git a/source/sprite/Enemy.cpp b/source/sprite/Enemy.cpp index 1035a3b..f1daa09 100644 --- a/source/sprite/Enemy.cpp +++ b/source/sprite/Enemy.cpp @@ -9,9 +9,9 @@ #include "Body.h" -Enemy::Enemy(const Instances& instances, const Vector2f& position) : +Enemy::Enemy(const Instances& instances, const Vector2f& position, const Yaml& config) : Character(instances, "enemy.png", PhysicalData(position, Vector2i(50, 50), instances.world, - CATEGORY_ACTOR, MASK_ALL, true, false, true), 100), + CATEGORY_ACTOR, MASK_ALL, true, false, true), config), mWorld(instances.world), mCollection(instances.collection) { } diff --git a/source/sprite/Enemy.h b/source/sprite/Enemy.h index f888686..c253e9c 100644 --- a/source/sprite/Enemy.h +++ b/source/sprite/Enemy.h @@ -12,15 +12,17 @@ #include "../abstract/Character.h" #include "../util/Collection.h" #include "../util/Vector.h" +#include "../util/Yaml.h" class Character; class Collection; class Instances; +class Yaml; class Enemy : public Character { // Public functions. public: - Enemy(const Instances& instances, const Vector2f& position); + Enemy(const Instances& instances, const Vector2f& position, const Yaml& config); // Private functions. private: diff --git a/source/sprite/Player.cpp b/source/sprite/Player.cpp index da6568b..c30ae29 100644 --- a/source/sprite/Player.cpp +++ b/source/sprite/Player.cpp @@ -12,7 +12,6 @@ #include "../util/Vector.h" #include "../items/Weapon.h" #include "../util/String.h" -#include "../util/Yaml.h" const float Player::SPEED = 100.0f; const Vector2i Player::SIZE = Vector2i(50, 50); @@ -21,9 +20,9 @@ const float Player::POINT_REACHED_DISTANCE = 1.0f; /** * Initializes Sprite. */ -Player::Player(const Instances& instances, const Vector2f& position) : +Player::Player(const Instances& instances, const Vector2f& position, const Yaml& config) : Character(instances, "player.png", PhysicalData(position, SIZE, instances.world, - CATEGORY_ACTOR, MASK_ALL, true, false, true), 100), + CATEGORY_ACTOR, MASK_ALL, true, false, true), config), mWeapon(instances, *this, Yaml("weapon.yaml")), mDirection(0), mPathfinder(instances.pathfinder) { diff --git a/source/sprite/Player.h b/source/sprite/Player.h index 52183f3..e270475 100644 --- a/source/sprite/Player.h +++ b/source/sprite/Player.h @@ -16,11 +16,13 @@ #include "../abstract/Character.h" #include "../items/Weapon.h" #include "../util/Vector.h" +#include "../util/Yaml.h" class Character; class Instances; class Pathfinder; class Weapon; +class Yaml; /** * Player object. @@ -40,7 +42,7 @@ public: // Public functions. public: - Player(const Instances& instances, const Vector2f& position); + Player(const Instances& instances, const Vector2f& position, const Yaml& config); void setCrosshairPosition(const Vector2f& position); void fire();