From 65e00c231477cd7422222fb8d9cb0ed9433a0655 Mon Sep 17 00:00:00 2001 From: freezarite Date: Tue, 15 Oct 2024 13:24:56 +0200 Subject: [PATCH] changed texture_cache map to use enums instead of string for keys and functions using said map --- include/AssetManager.h | 2 +- include/SpriteComponent.h | 10 ++++++---- include/TextureEnumBase.h | 3 +++ include/TextureManager.h | 7 +++++-- src/AssetManager.cpp | 9 ++++++--- src/GameInternal.cpp | 5 +++-- src/SpriteComponent.cpp | 14 +++++++------- src/TextureManager.cpp | 35 +++++++++++++++++++++++++---------- src/TileComponent.cpp | 2 ++ 9 files changed, 58 insertions(+), 29 deletions(-) create mode 100644 include/TextureEnumBase.h diff --git a/include/AssetManager.h b/include/AssetManager.h index 1d3c97a..ee4a447 100644 --- a/include/AssetManager.h +++ b/include/AssetManager.h @@ -24,7 +24,7 @@ public: AssetManager(Manager* manager); ~AssetManager(); - void createProjectile(Vector2D pos, Vector2D velocity, int scale, int range, int speed, const char* texturePath, Entity* owner); + void createProjectile(Vector2D pos, Vector2D velocity, int scale, int range, int speed, TexturesEnum textureEnum, Entity* owner); void createPowerup(Vector2D pos, std::function pickupFunc, std::string texturePath); Vector2D calculateSpawnPosition(); diff --git a/include/SpriteComponent.h b/include/SpriteComponent.h index ed584a2..bbeac64 100644 --- a/include/SpriteComponent.h +++ b/include/SpriteComponent.h @@ -4,10 +4,12 @@ #include #include #include +#include #include "AnimationHandler.h" #include "Component.h" #include "Direction.h" +#include "TextureEnumBase.h" class TransformComponent; @@ -23,7 +25,7 @@ private: SDL_Texture* texture; SDL_Rect srcRect, destRect; - const char* texturePath; + TexturesEnum textureEnum; bool animated = false; uint8_t frames = 0; @@ -32,15 +34,15 @@ private: public: SpriteComponent() = default; - SpriteComponent(const char* path); + SpriteComponent(TexturesEnum textureEnum); SpriteComponent( - const char* path, + TexturesEnum textureEnum, bool isAnimated, std::map>* animationList, std::string defaultAnimation); ~SpriteComponent(); - void setTexture(const char* path); + void setTexture(TexturesEnum texture); void init() override; void update() override; diff --git a/include/TextureEnumBase.h b/include/TextureEnumBase.h new file mode 100644 index 0000000..0857f12 --- /dev/null +++ b/include/TextureEnumBase.h @@ -0,0 +1,3 @@ +#pragma once + +enum class TexturesEnum; \ No newline at end of file diff --git a/include/TextureManager.h b/include/TextureManager.h index dcf88d2..2cc9469 100644 --- a/include/TextureManager.h +++ b/include/TextureManager.h @@ -6,6 +6,7 @@ #include #include #include +#include "TextureEnumBase.h" class TextureManager { @@ -17,10 +18,12 @@ class TextureManager } } - SDL_Texture* loadTexture(const char* fileName); + void addSingleTexture(TexturesEnum texture, const char* filePath); + void addTextures(const std::map& textures); + SDL_Texture* loadTexture(TexturesEnum texture); static std::vector splitSpriteSheet(SDL_Texture* spriteSheet, int width, int height, int spritesOnSheet); static void draw(SDL_Renderer* renderer, SDL_Texture* texture, SDL_Rect src, SDL_Rect dest, bool flipped = false); private: Manager* manager; - std::map texture_cache; + std::map texture_cache; }; \ No newline at end of file diff --git a/src/AssetManager.cpp b/src/AssetManager.cpp index a772fe6..b2d960c 100644 --- a/src/AssetManager.cpp +++ b/src/AssetManager.cpp @@ -15,12 +15,15 @@ #include "PowerupComponent.h" #include +#include "TextureEnumBase.h" + AssetManager::AssetManager(Manager* manager) : man(manager) {} AssetManager::~AssetManager() {} +//seems to not be used anymore void AssetManager::addTexture(std::string id, const char* path) { - textures.emplace(id, this->man->getGame()->textureManager->loadTexture(path)); + //textures.emplace(id, this->man->getGame()->textureManager->loadTexture(path)); } void AssetManager::addSoundEffect(std::string id, const char* path) @@ -46,11 +49,11 @@ Mix_Music* AssetManager::getMusic(std::string id) return music.at(id); } -void AssetManager::createProjectile(Vector2D pos, Vector2D velocity, int scale, int range, int speed, const char* texturePath, Entity* owner) { +void AssetManager::createProjectile(Vector2D pos, Vector2D velocity, int scale, int range, int speed, TexturesEnum textureEnum, Entity* owner) { auto& projectile(man->addEntity()); projectile.addComponent(pos.x, pos.y, 32, 32, scale); //32x32 is standard size for objects - projectile.addComponent(texturePath); + projectile.addComponent(textureEnum); projectile.addComponent(range, speed, velocity, owner); projectile.addComponent("projectile", 0.6f); projectile.addGroup((size_t)Entity::GroupLabel::PROJECTILE); diff --git a/src/GameInternal.cpp b/src/GameInternal.cpp index 0e7587b..29d1622 100644 --- a/src/GameInternal.cpp +++ b/src/GameInternal.cpp @@ -78,10 +78,11 @@ void GameInternal::init(const char* title, int xpos, int ypos, int width, int he } SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); - SDL_Texture* backgroundTexture = GameInternal::textureManager->loadTexture("assets/startscreen.png"); + + //SDL_Texture* backgroundTexture = GameInternal::textureManager->loadTexture("assets/startscreen.png"); SDL_RenderClear(renderer); - SDL_RenderCopy(renderer, backgroundTexture, NULL, NULL); + //SDL_RenderCopy(renderer, backgroundTexture, NULL, NULL); SDL_RenderPresent(renderer); if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0) diff --git a/src/SpriteComponent.cpp b/src/SpriteComponent.cpp index 2c730cf..8ec85e9 100644 --- a/src/SpriteComponent.cpp +++ b/src/SpriteComponent.cpp @@ -12,13 +12,13 @@ #include "GameInternal.h" #include "Manager.h" -SpriteComponent::SpriteComponent(const char* path) +SpriteComponent::SpriteComponent(TexturesEnum textureEnum) { - this->texturePath = path; + this->textureEnum = textureEnum; } SpriteComponent::SpriteComponent( - const char* path, + TexturesEnum textureEnum, bool isAnimated, std::map>* animationMap, std::string defaultAnimation) @@ -29,19 +29,19 @@ SpriteComponent::SpriteComponent( playAnimation(defaultAnimation); - this->texturePath = path; + this->textureEnum = textureEnum; } SpriteComponent::~SpriteComponent() {} -void SpriteComponent::setTexture(const char* path) +void SpriteComponent::setTexture(TexturesEnum texture) { - this->texture = this->entity->getManager().getGame()->textureManager->loadTexture(path); + this->texture = this->entity->getManager().getGame()->textureManager->loadTexture(texture); } void SpriteComponent::init() { - setTexture(this->texturePath); + setTexture(this->textureEnum); this->transform = &entity->getComponent(); diff --git a/src/TextureManager.cpp b/src/TextureManager.cpp index 3e46d46..03852ad 100644 --- a/src/TextureManager.cpp +++ b/src/TextureManager.cpp @@ -6,17 +6,32 @@ #include "GameInternal.h" -SDL_Texture* TextureManager::loadTexture(const char* fileName) -{ - auto it = this->texture_cache.find(fileName); - if (it != this->texture_cache.end()) { - return it->second; + +void TextureManager::addSingleTexture(TexturesEnum texture, const char* filePath) { + auto sdlTexture = IMG_LoadTexture(this->manager->getGame()->renderer, filePath); + + if (sdlTexture == nullptr) + throw std::runtime_error(std::string("Couldn't load texture '") + filePath + "'"); + + this->texture_cache.emplace(texture, sdlTexture); + std::cout << "Loaded texture at " << filePath << std::endl; +} + +void TextureManager::addTextures(const std::map &textures) { + for (auto texture : textures) { + addSingleTexture(texture.first, texture.second); } - auto texture = IMG_LoadTexture(this->manager->getGame()->renderer, fileName); - if (texture == NULL) throw std::runtime_error(std::string("Couldn't load texture '") + fileName + "'"); - this->texture_cache.emplace(std::string(fileName), texture); - printf("Loaded texture at '%s'\n", fileName); - return texture; +} + + +SDL_Texture* TextureManager::loadTexture(TexturesEnum texture) { + auto it = this->texture_cache.find(texture); + + if (it != this->texture_cache.end()) + return it->second; + + std::cout << "ERROR: Couldn't load texture!" << std::endl; + return nullptr; } void TextureManager::draw(SDL_Renderer* renderer, SDL_Texture* texture, SDL_Rect src, SDL_Rect dest, bool flipped) diff --git a/src/TileComponent.cpp b/src/TileComponent.cpp index eeebb92..8658e93 100644 --- a/src/TileComponent.cpp +++ b/src/TileComponent.cpp @@ -7,6 +7,8 @@ #include "SpriteComponent.h" #include "TileComponent.h" +#include "TextureEnumBase.h" + TileComponent::TileComponent(int x, int y, int w, int h, int id, const std::map>* textureDict) { this->tileRect.x = x;