Last active
January 28, 2017 23:14
-
-
Save PoetaKodu/a64aa78e75e5d384686a04dd4de0d7b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
////////////////////////////////////////////////////////////////////// | |
CTextureManager::CTextureManager() | |
{ | |
} | |
////////////////////////////////////////////////////////////////////// | |
CTextureManager::~CTextureManager() | |
{ | |
/* Usuwamy każdą teksturę. */ | |
for (auto textureData : m_textures) | |
{ | |
delete (textureData.second); | |
} | |
} | |
////////////////////////////////////////////////////////////////////// | |
sf::Texture* CTextureManager::Load(const std::string &textureName, const std::string &texturePath) | |
{ | |
/* Spróbujmy pobrać teksture z menedżera */ | |
sf::Texture *result = CTextureManager::Get(textureName); | |
/* Jezeli istnieje juz tekstura o takiej nazwie */ | |
if (result) | |
{ | |
/* Używamy jej do wczytania nowej tekstury. | |
Nowa tekstura zamieni starą. | |
*/ | |
result->loadFromFile(texturePath); | |
} | |
else | |
{ | |
/* Jeśli jednak tekstura jeszcze nie istaniała | |
to musimy ją utworzyć od podstaw. | |
Tworzymy nową teksture. | |
*/ | |
result = new sf::Texture(); | |
/* Wczytujemy ją z pliku. */ | |
result->loadFromFile(texturePath); | |
/* Następnie zapisujemy ją w kontenerze.*/ | |
Instance().m_textures[textureName] = result; | |
} | |
/* Tekstura wynikowa jest wskazywana wlasnie przez result. Zwracamy ją */ | |
return result; | |
} | |
////////////////////////////////////////////////////////////////////// | |
bool CTextureManager::Unload(const std::string &textureName) | |
{ | |
/* By uniknąć kilkukrotniego wywołania funkcji Instance() | |
tworzymy referencje na tą instancję. | |
*/ | |
auto &instance = Instance(); | |
/* Szukamy tekstury w kontenerze. Funkcja find zwraca iterator. */ | |
auto textureIt = instance.m_textures.find(textureName); | |
/* Jeśli iterator wskazuje na koniec kontenera to nie znaleziono tekstury.*/ | |
if (textureIt == instance.m_textures.end()) | |
{ | |
return false; | |
} | |
else | |
{ | |
/* Tekstura została znaleziona. Należy usunąć ją za pomocą jej wskaźnika, | |
który znajduje się pod textureIt->second. | |
*/ | |
delete (textureIt->second); | |
/* Iterator wskazuje dokładnie na teksturę, którą chcemy usunąć z kontenera. | |
Robimy to za pomocą metody erase. | |
*/ | |
instance.m_textures.erase(textureIt); | |
/* Tekstura została zwolniona, zwracamy prawdę. */ | |
return true; | |
} | |
} | |
////////////////////////////////////////////////////////////////////// | |
std::size_t CTextureManager::Cleanup() | |
{ | |
/* By uniknąć kilkukrotniego wywołania funkcji Instance() | |
tworzymy referencje na tą instancję. | |
*/ | |
auto &instance = Instance(); | |
/* Pobieramy ilość tekstur do usunięcia. */ | |
std::size_t textureCount = instance.m_textures.size(); | |
/* Usuwamy każdą teksture. */ | |
for (auto textureData : instance.m_textures) | |
{ | |
delete (textureData.second); | |
} | |
/* Zwracamy ilość tekstur */ | |
return textureCount; | |
} | |
////////////////////////////////////////////////////////////////////// | |
sf::Texture * CTextureManager::Get(const std::string &textureName) | |
{ | |
/* By uniknąć kilkukrotniego wywołania funkcji Instance() | |
tworzymy referencje na tą instancję. | |
*/ | |
auto &instance = Instance(); | |
/* Szukamy tekstury w kontenerze. Funkcja find zwraca iterator. */ | |
auto textureIt = instance.m_textures.find(textureName); | |
/* Jeśli iterator wskazuje na koniec kontenera to nie znaleziono tekstury.*/ | |
if (textureIt == instance.m_textures.end()) | |
{ | |
return nullptr; | |
} | |
/* Tekstura została znaleziona. Zwracamy ją. */ | |
return textureIt->second; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment