diff --git a/include/Constants.h b/include/Constants.h index 20ccf44..8237a71 100644 --- a/include/Constants.h +++ b/include/Constants.h @@ -24,7 +24,3 @@ constexpr int MAP_SIZE_Y = 20; constexpr int SPAWN_ATTEMPTS = 20; -constexpr int BUFF_DURATION = 240; - -constexpr int BUFF_VALUE = 1; - diff --git a/include/HealthComponent.h b/include/HealthComponent.h index fad7a23..1d57330 100644 --- a/include/HealthComponent.h +++ b/include/HealthComponent.h @@ -1,5 +1,6 @@ #pragma once +#include #include "Direction.h" #include "Component.h" @@ -9,7 +10,7 @@ class HealthComponent : public Component { public: - HealthComponent(int health, Direction side) : health(health), side(side) {} + HealthComponent(int health, Direction side, std::string healthTexture) : health(health), side(side), healthTexture(healthTexture) {} ~HealthComponent() {} void modifyHealth(int health = -1); @@ -26,4 +27,5 @@ private: int health; Direction side; + std::string healthTexture; }; \ No newline at end of file diff --git a/include/KeyboardController.h b/include/KeyboardController.h index 9079b73..1514dd7 100644 --- a/include/KeyboardController.h +++ b/include/KeyboardController.h @@ -24,7 +24,6 @@ public: //for attack cooldown in between shots uint32_t lastFireTime = 0; - uint32_t fireCooldown = 1000; //in ms can be adjusted to change possible attack-speed KeyboardController() = default; KeyboardController(SDL_Scancode up, SDL_Scancode down, SDL_Scancode left, SDL_Scancode right, SDL_Scancode fire, Vector2D fireVelocity); @@ -33,7 +32,10 @@ public: void init() override; void update() override; + uint32_t getFireCooldown() { return this->fireCooldown + this->fireCooldownMod > 0 ? this->fireCooldown + this->fireCooldownMod : 0; }; + void modifyAtkSpeed(int8_t modifier); + void resetAtkSpeedMod(); private: //for creation of projectiles @@ -41,4 +43,7 @@ private: Vector2D fireVelocity; //decide source of projectile and flying direction // SoundManager* soundEffect = Game::assets->getSound; //SoundManager* soundEffect = new SoundManager(); + + uint32_t fireCooldown = 1000; //in ms can be adjusted to change possible attack-speed + int32_t fireCooldownMod = 0; }; diff --git a/include/StatEffectsComponent.h b/include/StatEffectsComponent.h index 9daa19d..bc93f2b 100644 --- a/include/StatEffectsComponent.h +++ b/include/StatEffectsComponent.h @@ -18,9 +18,10 @@ public: void init() override; void update() override; - void modifyStatDur(Stats stat, int duration); + void modifyStatDur(Stats stat, int duration, int value); void modifyStatValue(Stats stat, int modifier); + void resetStatValue(Stats stat); private: std::array buffs = { 0 }; diff --git a/include/TransformComponent.h b/include/TransformComponent.h index c88a81d..14afe87 100644 --- a/include/TransformComponent.h +++ b/include/TransformComponent.h @@ -14,7 +14,8 @@ public: int width = 32; int scale = 1; - int speed = 3; + int getSpeed() { return speed + speedMod; }; + void resetSpeedMod() { speedMod = 0; }; TransformComponent(); explicit TransformComponent(int scale); @@ -26,4 +27,8 @@ public: void update() override; void setPositionAfterCollision(Vector2D& positionChange); void modifySpeed(int8_t modifier); + +private: + int speed = 3; + int speedMod = 0; }; diff --git a/src/Game.cpp b/src/Game.cpp index 22bf7bf..c2b13a0 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -163,7 +163,7 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo player1.addComponent(player1Sprite, true); //adds sprite (32x32px), path needed player1.addComponent(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_E, Vector2D(2, 0));//custom keycontrols can be added player1.addComponent("player", 0.8f); //adds tag (for further use, reference tag) - player1.addComponent(5, Direction::LEFT); + player1.addComponent(5, Direction::LEFT, "assets/heart.png"); player1.addComponent(); player1.addGroup((size_t) Entity::GroupLabel::PLAYERS); //tell programm what group it belongs to for rendering order @@ -173,7 +173,7 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo player2.addComponent(player2Sprite, true); player2.addComponent(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL, Vector2D(-2, 0)); player2.addComponent("enemy", 0.8f); - player2.addComponent(5, Direction::RIGHT); + player2.addComponent(5, Direction::RIGHT, "assets/heart.png"); player2.addComponent(); player2.addGroup((size_t) Entity::GroupLabel::PLAYERS); } diff --git a/src/HealthComponent.cpp b/src/HealthComponent.cpp index 7bbaa60..5a6a533 100644 --- a/src/HealthComponent.cpp +++ b/src/HealthComponent.cpp @@ -58,7 +58,7 @@ void HealthComponent::createHeartComponents(int x) { auto& heart(this->entity->getManager().addEntity()); heart.addComponent(x,5,2); - heart.addComponent("assets/heart.png"); + heart.addComponent(this->healthTexture.data()); heart.addGroup((size_t)Entity::GroupLabel::HEARTS); heart.setTeam(this->entity->getTeam()); } \ No newline at end of file diff --git a/src/KeyboardController.cpp b/src/KeyboardController.cpp index df1d193..e18070c 100644 --- a/src/KeyboardController.cpp +++ b/src/KeyboardController.cpp @@ -54,7 +54,7 @@ void KeyboardController::update() Uint32 currentTicks = SDL_GetTicks(); - if (currentTicks - lastFireTime >= fireCooldown) { + if (currentTicks - lastFireTime >= this->getFireCooldown()) { player = &entity->getComponent(); @@ -78,5 +78,10 @@ void KeyboardController::update() void KeyboardController::modifyAtkSpeed(int8_t modifier) { - this->fireCooldown -= modifier * 400; + this->fireCooldownMod -= modifier * 400; +} + +void KeyboardController::resetAtkSpeedMod() +{ + this->fireCooldownMod = 0; } \ No newline at end of file diff --git a/src/StatEffectsComponent.cpp b/src/StatEffectsComponent.cpp index 6c06263..557b6b7 100644 --- a/src/StatEffectsComponent.cpp +++ b/src/StatEffectsComponent.cpp @@ -15,15 +15,15 @@ void StatEffectsComponent::update() if (this->buffs.at(i) == 0) continue; if (this->buffs.at(i) - 1 == 0) { - this->modifyStatValue((Stats)i, BUFF_VALUE * -1); + this->resetStatValue((Stats)i); } this->buffs.at(i) -= 1; } } -void StatEffectsComponent::modifyStatDur(Stats stat, int duration) +void StatEffectsComponent::modifyStatDur(Stats stat, int duration, int value) { - if(this->buffs.at((uint8_t)stat) == 0) this->modifyStatValue(stat, BUFF_VALUE); + if(this->buffs.at((uint8_t)stat) == 0) this->modifyStatValue(stat, value); this->buffs.at((uint8_t)stat) += duration; } @@ -39,4 +39,18 @@ void StatEffectsComponent::modifyStatValue(Stats stat, int modifier) //modifier break; default: break; } +} + +void StatEffectsComponent::resetStatValue(Stats stat) +{ + switch (stat) + { + case Stats::MOVEMENT_SPEED: + this->entity->getComponent().resetSpeedMod(); + break; + case Stats::ATTACK_SPEED: + this->entity->getComponent().resetAtkSpeedMod(); + break; + default: break; + } } \ No newline at end of file diff --git a/src/TransformComponent.cpp b/src/TransformComponent.cpp index 3175968..1b64791 100644 --- a/src/TransformComponent.cpp +++ b/src/TransformComponent.cpp @@ -56,8 +56,8 @@ void TransformComponent::update() float multiplier = direction.x != 0 && direction.y != 0 ? 0.707 : 1; // normalizes vector; only works if directions are in increments of 45° Vector2D positionChange( - direction.x * speed * multiplier, - direction.y * speed * multiplier + direction.x * this->getSpeed() * multiplier, + direction.y * this->getSpeed() * multiplier ); if (this->entity->hasGroup((size_t)Entity::GroupLabel::PLAYERS)){ @@ -69,7 +69,7 @@ void TransformComponent::update() void TransformComponent::modifySpeed(int8_t modifier) { - this->speed += modifier; + this->speedMod += modifier; } void TransformComponent::setPositionAfterCollision(Vector2D& positionChange)