From fcf14b20c4fdfd1693583ae88416e080408ae79a Mon Sep 17 00:00:00 2001 From: Nimac0 Date: Sun, 28 Jan 2024 14:56:09 +0100 Subject: [PATCH 1/5] framework for randomly spawning items not collectable yet, dont get destroyed either, WIP --- include/AssetManager.h | 3 +++ include/Component.h | 3 ++- include/Constants.h | 2 ++ include/Powerup.h | 26 ++++++++++++++++++++++++++ include/TextureDict.h | 10 +++++++++- src/AssetManager.cpp | 21 +++++++++++++++++++++ src/Game.cpp | 28 ++++++++++++++++++---------- src/Powerup.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/SpriteComponent.cpp | 7 +------ src/TileComponent.cpp | 6 ++---- src/main.cpp | 2 ++ 11 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 include/Powerup.h create mode 100644 src/Powerup.cpp diff --git a/include/AssetManager.h b/include/AssetManager.h index 61b94d2..fe73d00 100644 --- a/include/AssetManager.h +++ b/include/AssetManager.h @@ -2,6 +2,8 @@ #include #include +#include "Powerup.h" + class Vector2D; class Manager; @@ -13,6 +15,7 @@ public: ~AssetManager(); void createProjectile(Vector2D pos, Vector2D velocity, bool source, int scale, int range, int speed, const char* texturePath); + void createPowerup(Vector2D pos, PowerupType type); //texture management void addTexture(std::string id, const char* path); diff --git a/include/Component.h b/include/Component.h index bc788ac..e84b64d 100644 --- a/include/Component.h +++ b/include/Component.h @@ -9,7 +9,8 @@ enum class GroupLabel ENEMIES, COLLIDERS, PROJECTILE, - HEARTS + HEARTS, + POWERUPS }; class Component diff --git a/include/Constants.h b/include/Constants.h index 502bd2b..55dc3a2 100644 --- a/include/Constants.h +++ b/include/Constants.h @@ -17,3 +17,5 @@ constexpr int TILE_SIZE = 32; constexpr int MAP_SIZE_X = 25; constexpr int MAP_SIZE_Y = 20; +constexpr int SPAWN_ATTEMPTS = 30; + diff --git a/include/Powerup.h b/include/Powerup.h new file mode 100644 index 0000000..eaef7ac --- /dev/null +++ b/include/Powerup.h @@ -0,0 +1,26 @@ +#pragma once + +#include "Component.h" +#include "Manager.h" +#include "Vector2D.h" +#include + +enum class PowerupType +{ + HEART, + WALKINGSPEED, + SHOOTINGSPEED +}; + +class Powerup +{ +public: + Powerup(){} + ~Powerup(){} + + static Vector2D calculateSpawnPosition(); + static PowerupType calculateType(); + +private: + Manager* manager; +}; \ No newline at end of file diff --git a/include/TextureDict.h b/include/TextureDict.h index 847e649..40d146f 100644 --- a/include/TextureDict.h +++ b/include/TextureDict.h @@ -2,15 +2,23 @@ #include #include +#include "Powerup.h" class TextureDict { public: - const std::map textureDictionary = { + const std::map tileDictionary = { {1, "assets/water.png"}, {2, "assets/dirt.png"}, {3, "assets/grass.png"}, {7, "assets/grass_water_left.png"}, {9, "assets/grass_water_right.png"} }; + + + std::map powerupDictionary = { + {PowerupType::HEART, "assets/heart.png"}, + {PowerupType::WALKINGSPEED, "assets/heart.png"}, + {PowerupType::SHOOTINGSPEED, "assets/heart.png"} + }; }; diff --git a/src/AssetManager.cpp b/src/AssetManager.cpp index 766fe27..7cbf0b9 100644 --- a/src/AssetManager.cpp +++ b/src/AssetManager.cpp @@ -23,4 +23,25 @@ void AssetManager::createProjectile(Vector2D pos, Vector2D velocity, bool source projectile.addComponent(range, speed, velocity, source); projectile.addComponent("projectile", 0.6f); projectile.addGroup((size_t)GroupLabel::PROJECTILE); +} + +void AssetManager::createPowerup(Vector2D pos, PowerupType type) { + TextureDict textureDict; + + auto& powerups(man->addEntity()); + powerups.addComponent(pos.x, pos.y, 32, 32, 1); //32x32 is standard size for objects + auto it = textureDict.powerupDictionary.find(type); + if (it == textureDict.powerupDictionary.end()) { + std::cout << "it end" << std::endl; + } + + try { + powerups.addComponent(it->second.data()); + } + catch (std::runtime_error e) { + std::cout << e.what() << std::endl; + } + + powerups.addComponent("powerup", 0.6f); + powerups.addGroup((size_t)GroupLabel::POWERUPS); } \ No newline at end of file diff --git a/src/Game.cpp b/src/Game.cpp index a979a8b..665226e 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -5,6 +5,7 @@ #include "AssetManager.h" #include "Map.h" #include "TextureManager.h" +#include "Powerup.h" Map* map; Manager manager; @@ -20,7 +21,6 @@ std::vector Game::colliders; auto& player(manager.addEntity()); auto& enemy(manager.addEntity()); auto& wall(manager.addEntity()); -//auto& projectile (manager.addEntity()); Game::Game() = default; @@ -131,6 +131,7 @@ auto& players(manager.getGroup((size_t)GroupLabel::PLAYERS)); auto& enemies(manager.getGroup((size_t)GroupLabel::ENEMIES)); auto& projectiles(manager.getGroup((size_t)GroupLabel::PROJECTILE)); auto& hearts(manager.getGroup((size_t)GroupLabel::HEARTS)); +auto& powerups(manager.getGroup((size_t)GroupLabel::POWERUPS)); void Game::handleEvents() { @@ -151,16 +152,23 @@ void Game::update() Vector2D playerPos = player.getComponent().position; Vector2D enemyPos = enemy.getComponent().position; + int powerupSpawn = rand() % 500; + manager.refresh(); manager.update(); + if (powerupSpawn == 0) + { + assets->createPowerup(Powerup::calculateSpawnPosition(), Powerup::calculateType()); + } + for (auto cc : colliders) { - if (SDL_HasIntersection(&player.getComponent().collider, &cc->collider) && strcmp(cc->tag, "player") && cc->hasCollision) + if (SDL_HasIntersection(&player.getComponent().collider, &cc->collider) && strcmp(cc->tag, "player")) { player.getComponent().position = playerPos; } - if (SDL_HasIntersection(&enemy.getComponent().collider, &cc->collider) && strcmp(cc->tag, "enemy") && cc->hasCollision) + if (SDL_HasIntersection(&enemy.getComponent().collider, &cc->collider) && strcmp(cc->tag, "enemy")) { enemy.getComponent().position = enemyPos; } @@ -218,17 +226,17 @@ void Game::render() { SDL_RenderClear(renderer); for (auto& t : tiles) - { t->draw(); - } - for (auto& p : players) - { + + for (auto& p : powerups) p->draw(); - } + + for (auto& p : players) + p->draw(); + for (auto& e : enemies) - { e->draw(); - } + for (auto& p : projectiles) p->draw(); diff --git a/src/Powerup.cpp b/src/Powerup.cpp new file mode 100644 index 0000000..3110c5c --- /dev/null +++ b/src/Powerup.cpp @@ -0,0 +1,38 @@ +#include "Powerup.h" + +#include "TextureDict.h" +#include +#include "Constants.h" +#include "Game.h" +#include "ColliderComponent.h" + +Vector2D Powerup::calculateSpawnPosition() +{ + Vector2D spawnPos = Vector2D(-1,-1); + bool conflict = false; + for (int i = 0; i <= SPAWN_ATTEMPTS; i++) + { + SDL_Rect spawnRect; + spawnRect.h = spawnRect.w = 32; + spawnRect.x = rand() % (SCREEN_SIZE_WIDTH - spawnRect.w); + spawnRect.y = rand() % (SCREEN_SIZE_HEIGHT - spawnRect.h); + conflict = false; + for (auto cc : Game::colliders) + { + if (SDL_HasIntersection(&spawnRect, &cc->collider) && strcmp(cc->tag, "projectile")) + { + conflict = true; + break; + } + } + if (conflict) continue; + spawnPos = Vector2D(spawnRect.x, spawnRect.y); + } + return spawnPos; +} + +PowerupType Powerup::calculateType() +{ + PowerupType type = PowerupType(rand() % 3); + return type; +} \ No newline at end of file diff --git a/src/SpriteComponent.cpp b/src/SpriteComponent.cpp index 6af7d6b..79221f9 100644 --- a/src/SpriteComponent.cpp +++ b/src/SpriteComponent.cpp @@ -73,10 +73,5 @@ void SpriteComponent::playAnimation(AnimationType type) void SpriteComponent::setDirection(SpriteDirection direction) { - if (direction == RIGHT) { - this->flipped = true; - return; - } - - this->flipped = false; + this->flipped = direction == RIGHT; } \ No newline at end of file diff --git a/src/TileComponent.cpp b/src/TileComponent.cpp index accd38a..c6e5cec 100644 --- a/src/TileComponent.cpp +++ b/src/TileComponent.cpp @@ -15,13 +15,11 @@ TileComponent::TileComponent(int x, int y, int w, int h, int id) this->tileRect.h = h; tileID = id; - auto it = textureDict.textureDictionary.find(tileID); //every id has its own distinct texture (in texturedict.h) - if (it == textureDict.textureDictionary.end()) { + auto it = textureDict.tileDictionary.find(tileID); //every id has its own distinct texture (in texturedict.h) + if (it == textureDict.tileDictionary.end()) { std::cout << "it end" << std::endl; return; } - bool test = it == textureDict.textureDictionary.end(); - // std::cout << it->second.data() << std::endl; this->path = it->second.data(); } diff --git a/src/main.cpp b/src/main.cpp index 2e7a993..f33d4c6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,10 +1,12 @@ #include "Game.h" #include "Constants.h" +#include Game* game = nullptr; int main(int argc, char* argv[]) { + srand(time(NULL)); const int frameDelay = 1000 / FPS; Uint32 frameStart; From c49ce18ed0a38545a73ceb77b1eff51fc002d432 Mon Sep 17 00:00:00 2001 From: Nimac0 Date: Tue, 30 Jan 2024 05:05:42 +0100 Subject: [PATCH 2/5] Implemented powerups --- include/AnimationHandler.h | 2 +- include/AssetManager.h | 15 +++++++-- include/Constants.h | 5 +++ include/KeyboardController.h | 3 ++ include/Powerup.h | 26 ---------------- include/PowerupComponent.h | 19 ++++++++++++ include/ProjectileComponent.h | 1 + include/StatEffectsComponent.h | 27 ++++++++++++++++ include/TextureDict.h | 2 +- include/TransformComponent.h | 2 ++ src/AssetManager.cpp | 44 +++++++++++++++++++++++++- src/Game.cpp | 6 ++-- src/KeyboardController.cpp | 6 ++++ src/Powerup.cpp | 40 ------------------------ src/PowerupComponent.cpp | 56 ++++++++++++++++++++++++++++++++++ src/StatEffectsComponent.cpp | 54 ++++++++++++++++++++++++++++++++ src/TransformComponent.cpp | 19 +++++++----- 17 files changed, 246 insertions(+), 81 deletions(-) delete mode 100644 include/Powerup.h create mode 100644 include/PowerupComponent.h create mode 100644 include/StatEffectsComponent.h delete mode 100644 src/Powerup.cpp create mode 100644 src/PowerupComponent.cpp create mode 100644 src/StatEffectsComponent.cpp diff --git a/include/AnimationHandler.h b/include/AnimationHandler.h index 6fc8081..069fc2f 100644 --- a/include/AnimationHandler.h +++ b/include/AnimationHandler.h @@ -1,5 +1,5 @@ #pragma once -#include +#include struct Animation { uint8_t index; diff --git a/include/AssetManager.h b/include/AssetManager.h index c6038c0..c0e4db4 100644 --- a/include/AssetManager.h +++ b/include/AssetManager.h @@ -1,14 +1,20 @@ -#include "Entity.h" - +#pragma once #include #include #include -#include "Powerup.h" +#include "Entity.h" class Vector2D; class Manager; +enum class PowerupType +{ + HEART, + WALKINGSPEED, + SHOOTINGSPEED +}; + class AssetManager { public: @@ -19,6 +25,9 @@ public: void createProjectile(Vector2D pos, Vector2D velocity, bool source, int scale, int range, int speed, const char* texturePath, TeamLabel teamLabel); void createPowerup(Vector2D pos, PowerupType type); + Vector2D calculateSpawnPosition(); + PowerupType calculateType(); + //texture management void addTexture(std::string id, const char* path); diff --git a/include/Constants.h b/include/Constants.h index 855b461..e4acb6c 100644 --- a/include/Constants.h +++ b/include/Constants.h @@ -7,6 +7,7 @@ using Team = std::size_t; constexpr std::size_t MAX_COMPONENTS = 32; constexpr std::size_t MAX_GROUPS = 32; +constexpr std::size_t MAX_STATS = 32; constexpr std::size_t MAX_TEAMS = 8; // constexpr int SCREEN_SIZE_HEIGHT = 640; @@ -21,3 +22,7 @@ constexpr int MAP_SIZE_Y = 20; constexpr int SPAWN_ATTEMPTS = 30; +constexpr int BUFF_DURATION = 5000; + +constexpr int BUFF_VALUE = 1; + diff --git a/include/KeyboardController.h b/include/KeyboardController.h index 1466719..eb36173 100644 --- a/include/KeyboardController.h +++ b/include/KeyboardController.h @@ -3,6 +3,7 @@ #include "Component.h" #include "Vector2D.h" +#include "Constants.h" class TransformComponent; class SpriteComponent; @@ -31,6 +32,8 @@ public: void init() override; void update() override; + void modifyAtkSpeed(int8_t modifier); + private: //for creation of projectiles TransformComponent* player; //for starting position of projectile diff --git a/include/Powerup.h b/include/Powerup.h deleted file mode 100644 index eaef7ac..0000000 --- a/include/Powerup.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "Component.h" -#include "Manager.h" -#include "Vector2D.h" -#include - -enum class PowerupType -{ - HEART, - WALKINGSPEED, - SHOOTINGSPEED -}; - -class Powerup -{ -public: - Powerup(){} - ~Powerup(){} - - static Vector2D calculateSpawnPosition(); - static PowerupType calculateType(); - -private: - Manager* manager; -}; \ No newline at end of file diff --git a/include/PowerupComponent.h b/include/PowerupComponent.h new file mode 100644 index 0000000..f83ea29 --- /dev/null +++ b/include/PowerupComponent.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Component.h" +#include "AssetManager.h" + +class PowerupComponent : public Component +{ +public: + PowerupComponent(PowerupType type); + ~PowerupComponent() {}; + + void update() override; + void heartEffect(Entity* player); + void movementSpeedEffect(Entity* player); + void atkSpeedEffect(Entity* player); + +private: + void (PowerupComponent::*pickupFunc)(Entity* player); +}; \ No newline at end of file diff --git a/include/ProjectileComponent.h b/include/ProjectileComponent.h index 8fa949c..2ce171f 100644 --- a/include/ProjectileComponent.h +++ b/include/ProjectileComponent.h @@ -2,6 +2,7 @@ #include "Component.h" #include "Vector2D.h" +#include "Constants.h" class TransformComponent; diff --git a/include/StatEffectsComponent.h b/include/StatEffectsComponent.h new file mode 100644 index 0000000..9dd8c5b --- /dev/null +++ b/include/StatEffectsComponent.h @@ -0,0 +1,27 @@ +#pragma once +#include "Component.h" +#include "Constants.h" +#include +#include + +enum class Stats +{ + MOVEMENT_SPEED, + ATTACK_SPEED +}; + +class StatEffectsComponent : public Component{ +public: + StatEffectsComponent() {}; + ~StatEffectsComponent() {}; + + void init() override; + void update() override; + + void modifyStatDur(Stats stat, uint8_t duration); + + void modifyStatValue(Stats stat, int modifier); + +private: + std::array buffs = { 0 }; +}; \ No newline at end of file diff --git a/include/TextureDict.h b/include/TextureDict.h index 40d146f..e0dabf6 100644 --- a/include/TextureDict.h +++ b/include/TextureDict.h @@ -2,7 +2,7 @@ #include #include -#include "Powerup.h" +#include "AssetManager.h" class TextureDict { diff --git a/include/TransformComponent.h b/include/TransformComponent.h index deed7f9..e41cfaa 100644 --- a/include/TransformComponent.h +++ b/include/TransformComponent.h @@ -2,6 +2,7 @@ #include "Component.h" #include "Vector2D.h" +#include "Constants.h" class TransformComponent : public Component { @@ -23,4 +24,5 @@ public: void init() override; void update() override; + void modifySpeed(int8_t modifier); }; diff --git a/src/AssetManager.cpp b/src/AssetManager.cpp index 2932b1a..60315ac 100644 --- a/src/AssetManager.cpp +++ b/src/AssetManager.cpp @@ -1,9 +1,19 @@ #include "AssetManager.h" -#include "Entity.h" #include "TextureManager.h" #include "Components.h" +#include "TransformComponent.h" + +#include "CollisionHandler.h" +#include "ColliderComponent.h" +#include "Constants.h" +#include "Entity.h" +#include "Game.h" +#include "Vector2D.h" +#include "PowerupComponent.h" +#include + AssetManager::AssetManager(Manager* manager) : man(manager) {} AssetManager::~AssetManager() {} @@ -45,5 +55,37 @@ void AssetManager::createPowerup(Vector2D pos, PowerupType type) { } powerups.addComponent("powerup", 0.6f); + powerups.addComponent(type); powerups.addGroup((size_t)GroupLabel::POWERUPS); +} + +Vector2D AssetManager::calculateSpawnPosition() +{ + Vector2D spawnPos = Vector2D(-1, -1); + bool conflict = false; + for (int i = 0; i <= SPAWN_ATTEMPTS; i++) + { + SDL_Rect spawnRect; + spawnRect.h = spawnRect.w = 32; + spawnRect.x = rand() % (SCREEN_SIZE_WIDTH - spawnRect.w); + spawnRect.y = rand() % (SCREEN_SIZE_HEIGHT - spawnRect.h); + conflict = false; + for (auto cc : Game::collisionHandler->getColliders({ GroupLabel::MAPTILES })) + { + if (SDL_HasIntersection(&spawnRect, &cc->collider) && strcmp(cc->tag, "projectile")) + { + conflict = true; + break; + } + } + if (conflict) continue; + spawnPos = Vector2D(spawnRect.x, spawnRect.y); + } + return spawnPos; +} + +PowerupType AssetManager::calculateType() +{ + PowerupType type = PowerupType(rand() % 3); + return type; } \ No newline at end of file diff --git a/src/Game.cpp b/src/Game.cpp index 9571df6..c0045c8 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -9,7 +9,7 @@ #include "HealthComponent.h" #include "Map.h" #include "TextureManager.h" -#include "Powerup.h" +#include "StatEffectsComponent.h" Map* map; Manager manager; @@ -122,6 +122,7 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo player1.addComponent(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_E, Vector2D(1, 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(); player1.addGroup((size_t) GroupLabel::PLAYERS); //tell programm what group it belongs to for rendering order @@ -131,6 +132,7 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo player2.addComponent(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL, Vector2D(-1, 0)); player2.addComponent("enemy", 0.8f); player2.addComponent(5, Direction::RIGHT); + player2.addComponent(); player2.addGroup((size_t) GroupLabel::PLAYERS); } @@ -167,7 +169,7 @@ void Game::update() if (powerupSpawn == 0) { - assets->createPowerup(Powerup::calculateSpawnPosition(), Powerup::calculateType()); + assets->createPowerup(assets->calculateSpawnPosition(), assets->calculateType()); } // needs to be in game.cpp to have access to internal functions diff --git a/src/KeyboardController.cpp b/src/KeyboardController.cpp index 507a44e..66462c2 100644 --- a/src/KeyboardController.cpp +++ b/src/KeyboardController.cpp @@ -71,4 +71,10 @@ void KeyboardController::update() } } +} + +void KeyboardController::modifyAtkSpeed(int8_t modifier) +{ + this->fireCooldown -= modifier * 500; + std::cout << "curr fire cooldown: " << this->fireCooldown << std::endl; } \ No newline at end of file diff --git a/src/Powerup.cpp b/src/Powerup.cpp deleted file mode 100644 index 5dd2d2a..0000000 --- a/src/Powerup.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "Powerup.h" - -#include "CollisionHandler.h" -#include "Entity.h" -#include "TextureDict.h" -#include -#include "Constants.h" -#include "Game.h" -#include "ColliderComponent.h" - -Vector2D Powerup::calculateSpawnPosition() -{ - Vector2D spawnPos = Vector2D(-1,-1); - bool conflict = false; - for (int i = 0; i <= SPAWN_ATTEMPTS; i++) - { - SDL_Rect spawnRect; - spawnRect.h = spawnRect.w = 32; - spawnRect.x = rand() % (SCREEN_SIZE_WIDTH - spawnRect.w); - spawnRect.y = rand() % (SCREEN_SIZE_HEIGHT - spawnRect.h); - conflict = false; - for (auto cc : Game::collisionHandler->getColliders(GroupLabel::MAPTILES)) - { - if (SDL_HasIntersection(&spawnRect, &cc->collider) && strcmp(cc->tag, "projectile")) - { - conflict = true; - break; - } - } - if (conflict) continue; - spawnPos = Vector2D(spawnRect.x, spawnRect.y); - } - return spawnPos; -} - -PowerupType Powerup::calculateType() -{ - PowerupType type = PowerupType(rand() % 3); - return type; -} \ No newline at end of file diff --git a/src/PowerupComponent.cpp b/src/PowerupComponent.cpp new file mode 100644 index 0000000..6a36051 --- /dev/null +++ b/src/PowerupComponent.cpp @@ -0,0 +1,56 @@ +#include "PowerupComponent.h" +#include "Game.h" +#include "CollisionHandler.h" +#include "Entity.h" +#include "HealthComponent.h" +#include "StatEffectsComponent.h" +#include "Constants.h" + +PowerupComponent::PowerupComponent(PowerupType type) +{ + switch (type) + { + case PowerupType::HEART: + this->pickupFunc = (&PowerupComponent::heartEffect); + break; + case PowerupType::WALKINGSPEED: + this->pickupFunc = (&PowerupComponent::movementSpeedEffect); + break; + case PowerupType::SHOOTINGSPEED: + this->pickupFunc = (&PowerupComponent::atkSpeedEffect); + break; + default: + break; + } +} + +void PowerupComponent::update() +{ + Entity* player; + if ((player = Game::collisionHandler->getAnyIntersection( + entity, + Vector2D(0, 0), + { GroupLabel::PLAYERS }, + {}, + true)) != nullptr) + { + std::cout << "collided with powerup" << std::endl; + (this->*pickupFunc)(player); + this->entity->destroy(); + } +} + +void PowerupComponent::heartEffect(Entity* player) +{ + player->getComponent().modifyHealth(1); +} + +void PowerupComponent::movementSpeedEffect(Entity* player) +{ + player->getComponent().modifyStatDur(Stats::MOVEMENT_SPEED, BUFF_DURATION); +} + +void PowerupComponent::atkSpeedEffect(Entity* player) +{ + player->getComponent().modifyStatDur(Stats::ATTACK_SPEED, BUFF_DURATION); +} \ No newline at end of file diff --git a/src/StatEffectsComponent.cpp b/src/StatEffectsComponent.cpp new file mode 100644 index 0000000..b6ba763 --- /dev/null +++ b/src/StatEffectsComponent.cpp @@ -0,0 +1,54 @@ +#include "StatEffectsComponent.h" +#include "Entity.h" +#include "TransformComponent.h" +#include "KeyboardController.h" +#include +#include + +void StatEffectsComponent::init() +{} + +void StatEffectsComponent::update() +{ + /*int i = 0; + std::transform(this->buffs.begin(), this->buffs.end(), this->buffs.begin(), + [this, &i](uint8_t statDuration) { + i++; + uint8_t newDur = statDuration - 1; + if (statDuration > 0 && newDur == 0) { + if (statDuration > 1) + std::cout << (int) statDuration << (int) newDur << std::endl; + this->modifyStatValue((Stats)i, BUFF_VALUE * -1); + } + return newDur; + });*/ + for (int i = 0; i < MAX_STATS; i++) + { + if (this->buffs.at(i) == 0) continue; + if (this->buffs.at(i) - 1 == 0) + { + this->modifyStatValue((Stats)i, BUFF_VALUE * -1); + } + this->buffs.at(i) -= 1; + } +} + +void StatEffectsComponent::modifyStatDur(Stats stat, uint8_t duration) +{ + if(this->buffs.at((uint8_t)stat) == 0) this->modifyStatValue(stat, BUFF_VALUE); + this->buffs.at((uint8_t)stat) += duration; +} + +void StatEffectsComponent::modifyStatValue(Stats stat, int modifier) +{ + switch (stat) + { + case Stats::MOVEMENT_SPEED: + this->entity->getComponent().modifySpeed(modifier); + break; + case Stats::ATTACK_SPEED: + this->entity->getComponent().modifyAtkSpeed(modifier); + break; + default: break; + } +} \ No newline at end of file diff --git a/src/TransformComponent.cpp b/src/TransformComponent.cpp index f6ab5d1..6b2dba4 100644 --- a/src/TransformComponent.cpp +++ b/src/TransformComponent.cpp @@ -60,21 +60,26 @@ void TransformComponent::update() // TODO: move to separate functions - if (this->entity->hasGroup((size_t) GroupLabel::PLAYERS)) { + if (this->entity->hasGroup((size_t)GroupLabel::PLAYERS)) { IntersectionBitSet intersections = (CollisionHandler::getIntersectionWithBounds(entity, Vector2D(positionChange.x, 0)) | - (Game::collisionHandler->getAnyIntersection(entity, Vector2D(positionChange.x, 0), {GroupLabel::MAPTILES, GroupLabel::COLLIDERS})) & + (Game::collisionHandler->getAnyIntersection(entity, Vector2D(positionChange.x, 0), { GroupLabel::MAPTILES, GroupLabel::COLLIDERS })) & IntersectionBitSet("0011")) | (CollisionHandler::getIntersectionWithBounds(entity, Vector2D(0, positionChange.y)) | - (Game::collisionHandler->getAnyIntersection(entity, Vector2D(0, positionChange.y), {GroupLabel::MAPTILES, GroupLabel::COLLIDERS})) & + (Game::collisionHandler->getAnyIntersection(entity, Vector2D(0, positionChange.y), { GroupLabel::MAPTILES, GroupLabel::COLLIDERS })) & IntersectionBitSet("1100")); - if (intersections.test((size_t) direction::LEFT) || intersections.test((size_t) direction::RIGHT)) - positionChange.x = 0; + if (intersections.test((size_t)direction::LEFT) || intersections.test((size_t)direction::RIGHT)) + positionChange.x = 0; - if (intersections.test((size_t) direction::UP) || intersections.test((size_t) direction::DOWN)) + if (intersections.test((size_t)direction::UP) || intersections.test((size_t)direction::DOWN)) positionChange.y = 0; } position += positionChange; -}; \ No newline at end of file +} + +void TransformComponent::modifySpeed(int8_t modifier) +{ + this->speed += modifier * 2; +} \ No newline at end of file From b814fa3298890c477fcf338cc85810c571185c61 Mon Sep 17 00:00:00 2001 From: Nimac0 Date: Tue, 30 Jan 2024 15:29:02 +0100 Subject: [PATCH 3/5] powerups work + sprites for each powerup added --- assets/characterSelection.png | Bin 0 -> 18659 bytes include/Constants.h | 4 ++-- include/TextureDict.h | 6 +++--- src/KeyboardController.cpp | 3 +-- src/PowerupComponent.cpp | 4 ++-- src/StatEffectsComponent.cpp | 14 +------------- src/TransformComponent.cpp | 2 +- 7 files changed, 10 insertions(+), 23 deletions(-) create mode 100644 assets/characterSelection.png diff --git a/assets/characterSelection.png b/assets/characterSelection.png new file mode 100644 index 0000000000000000000000000000000000000000..68e958a07b15ca51c6cbcb235d7684905d231cbb GIT binary patch literal 18659 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 F6978@D^&mh literal 0 HcmV?d00001 diff --git a/include/Constants.h b/include/Constants.h index e4acb6c..fababc7 100644 --- a/include/Constants.h +++ b/include/Constants.h @@ -8,7 +8,7 @@ using Team = std::size_t; constexpr std::size_t MAX_COMPONENTS = 32; constexpr std::size_t MAX_GROUPS = 32; constexpr std::size_t MAX_STATS = 32; -constexpr std::size_t MAX_TEAMS = 8; // +constexpr std::size_t MAX_TEAMS = 8; constexpr int SCREEN_SIZE_HEIGHT = 640; constexpr int SCREEN_SIZE_WIDTH = 800; @@ -22,7 +22,7 @@ constexpr int MAP_SIZE_Y = 20; constexpr int SPAWN_ATTEMPTS = 30; -constexpr int BUFF_DURATION = 5000; +constexpr int BUFF_DURATION = 6000; constexpr int BUFF_VALUE = 1; diff --git a/include/TextureDict.h b/include/TextureDict.h index e0dabf6..0a4b6ed 100644 --- a/include/TextureDict.h +++ b/include/TextureDict.h @@ -17,8 +17,8 @@ public: std::map powerupDictionary = { - {PowerupType::HEART, "assets/heart.png"}, - {PowerupType::WALKINGSPEED, "assets/heart.png"}, - {PowerupType::SHOOTINGSPEED, "assets/heart.png"} + {PowerupType::HEART, "assets/heart_powerup.png"}, + {PowerupType::WALKINGSPEED, "assets/movement_speed_powerup.png"}, + {PowerupType::SHOOTINGSPEED, "assets/atk_speed_powerup.png"} }; }; diff --git a/src/KeyboardController.cpp b/src/KeyboardController.cpp index 66462c2..f3466a6 100644 --- a/src/KeyboardController.cpp +++ b/src/KeyboardController.cpp @@ -75,6 +75,5 @@ void KeyboardController::update() void KeyboardController::modifyAtkSpeed(int8_t modifier) { - this->fireCooldown -= modifier * 500; - std::cout << "curr fire cooldown: " << this->fireCooldown << std::endl; + this->fireCooldown -= modifier * 400; } \ No newline at end of file diff --git a/src/PowerupComponent.cpp b/src/PowerupComponent.cpp index 6a36051..0479e60 100644 --- a/src/PowerupComponent.cpp +++ b/src/PowerupComponent.cpp @@ -34,7 +34,6 @@ void PowerupComponent::update() {}, true)) != nullptr) { - std::cout << "collided with powerup" << std::endl; (this->*pickupFunc)(player); this->entity->destroy(); } @@ -42,7 +41,8 @@ void PowerupComponent::update() void PowerupComponent::heartEffect(Entity* player) { - player->getComponent().modifyHealth(1); + if(player->getComponent().getHealth() < 5) + player->getComponent().modifyHealth(1); } void PowerupComponent::movementSpeedEffect(Entity* player) diff --git a/src/StatEffectsComponent.cpp b/src/StatEffectsComponent.cpp index b6ba763..3d48989 100644 --- a/src/StatEffectsComponent.cpp +++ b/src/StatEffectsComponent.cpp @@ -10,18 +10,6 @@ void StatEffectsComponent::init() void StatEffectsComponent::update() { - /*int i = 0; - std::transform(this->buffs.begin(), this->buffs.end(), this->buffs.begin(), - [this, &i](uint8_t statDuration) { - i++; - uint8_t newDur = statDuration - 1; - if (statDuration > 0 && newDur == 0) { - if (statDuration > 1) - std::cout << (int) statDuration << (int) newDur << std::endl; - this->modifyStatValue((Stats)i, BUFF_VALUE * -1); - } - return newDur; - });*/ for (int i = 0; i < MAX_STATS; i++) { if (this->buffs.at(i) == 0) continue; @@ -39,7 +27,7 @@ void StatEffectsComponent::modifyStatDur(Stats stat, uint8_t duration) this->buffs.at((uint8_t)stat) += duration; } -void StatEffectsComponent::modifyStatValue(Stats stat, int modifier) +void StatEffectsComponent::modifyStatValue(Stats stat, int modifier) //modifier is basically there so the modifyfuncs in the components know if stats should be increased or decreased { switch (stat) { diff --git a/src/TransformComponent.cpp b/src/TransformComponent.cpp index 6b2dba4..1b388ef 100644 --- a/src/TransformComponent.cpp +++ b/src/TransformComponent.cpp @@ -81,5 +81,5 @@ void TransformComponent::update() void TransformComponent::modifySpeed(int8_t modifier) { - this->speed += modifier * 2; + this->speed += modifier; } \ No newline at end of file From c79ba00b2085af8a775567276ce30f26a3515da3 Mon Sep 17 00:00:00 2001 From: Nimac0 Date: Tue, 30 Jan 2024 15:40:53 +0100 Subject: [PATCH 4/5] minor balancing to powerups and shooting speed --- include/Constants.h | 4 ++-- include/KeyboardController.h | 2 +- src/Game.cpp | 4 ++-- src/KeyboardController.cpp | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/Constants.h b/include/Constants.h index fababc7..81eddf2 100644 --- a/include/Constants.h +++ b/include/Constants.h @@ -7,7 +7,7 @@ using Team = std::size_t; constexpr std::size_t MAX_COMPONENTS = 32; constexpr std::size_t MAX_GROUPS = 32; -constexpr std::size_t MAX_STATS = 32; +constexpr std::size_t MAX_STATS = 8; constexpr std::size_t MAX_TEAMS = 8; constexpr int SCREEN_SIZE_HEIGHT = 640; @@ -20,7 +20,7 @@ constexpr int TILE_SIZE = 32; constexpr int MAP_SIZE_X = 25; constexpr int MAP_SIZE_Y = 20; -constexpr int SPAWN_ATTEMPTS = 30; +constexpr int SPAWN_ATTEMPTS = 20; constexpr int BUFF_DURATION = 6000; diff --git a/include/KeyboardController.h b/include/KeyboardController.h index eb36173..745972e 100644 --- a/include/KeyboardController.h +++ b/include/KeyboardController.h @@ -23,7 +23,7 @@ public: //for attack cooldown in between shots uint32_t lastFireTime; - uint32_t fireCooldown = 800; //in ms can be adjusted to change possible attack-speed + 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); diff --git a/src/Game.cpp b/src/Game.cpp index c0045c8..27c68ff 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -119,7 +119,7 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo player1.setTeam(TeamLabel::BLUE); player1.addComponent(80,80,2); //posx, posy, scale player1.addComponent("assets/chicken_knight_spritesheet.png", true); //adds sprite (32x32px), path needed - player1.addComponent(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_E, Vector2D(1, 0));//custom keycontrols can be added + 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(); @@ -129,7 +129,7 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo player2.setTeam(TeamLabel::RED); player2.addComponent(600, 500, 2); player2.addComponent("assets/chicken_spritesheet.png", true); - player2.addComponent(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL, Vector2D(-1, 0)); + 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(); diff --git a/src/KeyboardController.cpp b/src/KeyboardController.cpp index f3466a6..1a9c211 100644 --- a/src/KeyboardController.cpp +++ b/src/KeyboardController.cpp @@ -59,12 +59,12 @@ void KeyboardController::update() if (fireVelocity.x > 0) { sprite->setDirection(Direction::RIGHT); Game::assets->createProjectile(Vector2D(player->position.x, player->position.y), fireVelocity, - false, 1, 180, 1, "assets/egg.png", this->entity->getTeam()); + false, 1, 180, 2, "assets/egg.png", this->entity->getTeam()); } else { sprite->setDirection(Direction::LEFT); Game::assets->createProjectile(Vector2D(player->position.x, player->position.y), fireVelocity, - true, 1, 180, 1, "assets/egg.png", this->entity->getTeam()); + true, 1, 180, 2, "assets/egg.png", this->entity->getTeam()); } lastFireTime = currentTicks; From 53019aa9796b2c86806863ac27b411ee2344d389 Mon Sep 17 00:00:00 2001 From: Nimac0 Date: Tue, 30 Jan 2024 15:52:27 +0100 Subject: [PATCH 5/5] added missing textures --- assets/atk_speed_powerup.png | Bin 0 -> 571 bytes assets/heart_powerup.png | Bin 0 -> 550 bytes assets/movement_speed_powerup.png | Bin 0 -> 643 bytes assets/startscreen.png | Bin 34127 -> 35586 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/atk_speed_powerup.png create mode 100644 assets/heart_powerup.png create mode 100644 assets/movement_speed_powerup.png diff --git a/assets/atk_speed_powerup.png b/assets/atk_speed_powerup.png new file mode 100644 index 0000000000000000000000000000000000000000..9bcce6985625b0d11f65a1f80b25ed5398cd2743 GIT binary patch literal 571 zcmV-B0>u4^P)Px$^+`lQR9J=WmOpC(F&M@li;FlEoJvbY=qYx&K`7U$NN3&MrAK!^hr1}<`vIIq zx*dXplhi9nOG~Fh2XQG}hcjs|d6WCoZuWtLOD^R1yl-;J3;b)}l}j^tHSV$3z%*yI z)&E-qGT6Gl4O^R~GS>H|0Dx+%pJ?vbK|6S0InAHWVqI%MHiDRp7!72Fi(~!CfO9A# z2QgF7aD%qp5g)tl^w@F*Kp2p)oB)74HHk5DKpVXbXJaj=3E!IrATmxG0DuTwlmzEc z0Js1!LkQo!$4OZN7CmcwwyRxt1x~$370CO*xCcDjg|isKJG)Z8G5EY)37?}%6h0$N z5~2(Qmeb^L6zg!F9wH`0xOI8XA8vvfAu_QV_acXwHUrLL2mm2?v*c|i1}~LsyiYNa zWe0@?kEP)Px$;7LS5R9J=WR=;b)KotHg#ZUzQ3Ih&izE!$(anI0fB6O1?bnE0+5OEW_rbBlZ z7jeDW3*aEH$%&ox1L1i*@B7{l?>*p(OGm}Tc|9AXW~{r@?u^bW zKqPM5KOMh)f8~5bx&ol&W~3!M`3xIx-~hqb0sfG7k78PN(jm7Mnt7gNR~6LM2< zg`B($65pg;F>nlsD<=TpR`y$MPMGbH ze&+XnFfUc6TnWU1GI|;L=iMRmH#HL=dGUNY!P|a+R&teq zO1PLx9}!-}W_vi5Jo6eB%>u26vgF)k%nc;zG?dN)0UqhYjVx30^0PpTS`&US&pfw9 zPx%JxN4CR9J=Wma%KwKorJ*PJ?SAD6N+c%@S~+lQFaq$Yi=?$>hCc$kM4x{*DX{ z6tWl^vbG+AGnhcoWbhC$nF2Os@z9}!&{jc|r0O8)B%R(#=g=+rrf1#rec$))N%!Cp z4;__xk|+J0I1GyRT;1ILzXEjP#=8&UFYh9kI~}ncJk19Z4{sj zp`;>(0`5zm&Yhm_D;`P6Ldg~~xecP+=(qw14W*6~fJN!QCg-iaGsYj^DEAw^Cr19k z`zY`(XsorFj@$sD;-Ub63^^$B*4`Q8Z3lpE^^02n^frmlhb|k3ljv6{^7AX1CwBy~ z`wV&4Q_jcR4y~>iE;ui#)t9K%mvB}RFU|Ef&Gp2oZx&2+BBi>vI@vp;$KYy*rO)$;_;*ALT1~t4X zI=N{=GWI}pR+Y>~7W2S##VQtk`NegBb66QP7y!Z?P_EnrR|YR`Gb d^G7^f`~$3o?S}eJf%^ae002ovPDHLkV1n&MF$@3z literal 0 HcmV?d00001 diff --git a/assets/startscreen.png b/assets/startscreen.png index 926abe8024af28dd8d608e9133522ad820a69ab0..a1fe40dbc1b2c5c7f935dd868898788f9a991999 100644 GIT binary patch literal 35586 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 G0sjO3aPJZT