summaryrefslogtreecommitdiffstats
path: root/src/graphics/engine
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-05-12 14:55:41 +0200
committerkrzys-h <krzys_h@interia.pl>2013-05-12 14:55:41 +0200
commit04f747b00b95ebbd32457eae8a397695dc6981af (patch)
tree7562002a77ad50c637a6e90cca3956972917460e /src/graphics/engine
parent06cf93f466871eb9f6d6d93feaeaef14f58573af (diff)
downloadcolobot-04f747b00b95ebbd32457eae8a397695dc6981af.tar.gz
colobot-04f747b00b95ebbd32457eae8a397695dc6981af.tar.bz2
colobot-04f747b00b95ebbd32457eae8a397695dc6981af.zip
Added simple texturepack support (#208)
Diffstat (limited to 'src/graphics/engine')
-rw-r--r--src/graphics/engine/engine.cpp35
-rw-r--r--src/graphics/engine/engine.h9
2 files changed, 37 insertions, 7 deletions
diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp
index 806cb5f..5bd51fe 100644
--- a/src/graphics/engine/engine.cpp
+++ b/src/graphics/engine/engine.cpp
@@ -62,6 +62,8 @@ CEngine::CEngine(CApplication *app)
m_sound = nullptr;
m_terrain = nullptr;
+ m_texPack = "";
+
m_showStats = false;
m_focus = 0.75f;
@@ -236,6 +238,11 @@ void CEngine::SetTerrain(CTerrain* terrain)
m_terrain = terrain;
}
+void CEngine::SetTexturePack(const std::string& texpackName)
+{
+ m_texPack = texpackName;
+}
+
bool CEngine::Create()
{
@@ -2109,7 +2116,7 @@ void CEngine::SetViewParams(const Math::Vector& eyePt, const Math::Vector& looka
m_sound->SetListener(eyePt, lookatPt);
}
-Texture CEngine::CreateTexture(const std::string& texName, const TextureCreateParams& params, CImage* image)
+Texture CEngine::CreateTexture(const std::string& texName, const TextureCreateParams& params, CImage* image, std::string orginalName)
{
if (texName.empty())
return Texture(); // invalid texture
@@ -2125,7 +2132,7 @@ Texture CEngine::CreateTexture(const std::string& texName, const TextureCreatePa
if (! img.Load(m_app->GetDataFilePath(DIR_TEXTURE, texName)))
{
std::string error = img.GetError();
- GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", texName.c_str(), error.c_str());
+ if(orginalName == "") GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", texName.c_str(), error.c_str());
m_texBlacklist.insert(texName);
return Texture(); // invalid texture
}
@@ -2139,13 +2146,18 @@ Texture CEngine::CreateTexture(const std::string& texName, const TextureCreatePa
if (! tex.Valid())
{
- GetLogger()->Error("Couldn't load texture '%s', blacklisting\n", texName.c_str());
+ if(orginalName == "") GetLogger()->Error("Couldn't load texture '%s', blacklisting\n", texName.c_str());
m_texBlacklist.insert(texName);
return tex;
}
- m_texNameMap[texName] = tex;
- m_revTexNameMap[tex] = texName;
+ if(orginalName == "") {
+ m_texNameMap[texName] = tex;
+ m_revTexNameMap[tex] = texName;
+ } else {
+ m_texNameMap[orginalName] = tex;
+ m_revTexNameMap[tex] = orginalName;
+ }
return tex;
}
@@ -2170,7 +2182,18 @@ Texture CEngine::LoadTexture(const std::string& name, const TextureCreateParams&
if (it != m_texNameMap.end())
return (*it).second;
- Texture tex = CreateTexture(name, params);
+ Texture tex;
+ if (m_texPack != "") {
+ std::string name_texpack = m_texPack + "/" + name;
+
+ if (m_texBlacklist.find(name_texpack) == m_texBlacklist.end()) {
+ tex = CreateTexture(name_texpack, params, nullptr, name);
+ if (tex.Valid())
+ return tex;
+ }
+ }
+
+ tex = CreateTexture(name, params);
return tex;
}
diff --git a/src/graphics/engine/engine.h b/src/graphics/engine/engine.h
index 16fb4e6..8df912e 100644
--- a/src/graphics/engine/engine.h
+++ b/src/graphics/engine/engine.h
@@ -726,6 +726,10 @@ public:
//! Writes a screenshot containing the current frame
bool WriteScreenShot(const std::string& fileName, int width, int height);
+ //! Set texture pack
+ void SetTexturePack(const std::string& texpackName);
+
+
//@{
//! Management of game pause mode
void SetPause(bool pause);
@@ -1229,7 +1233,7 @@ protected:
const Material& mat, int state);
//! Create texture and add it to cache
- Texture CreateTexture(const std::string &texName, const TextureCreateParams &params, CImage* image = nullptr);
+ Texture CreateTexture(const std::string &texName, const TextureCreateParams &params, CImage* image = nullptr, std::string orginalName = "");
//! Tests whether the given object is visible
bool IsVisible(int objRank);
@@ -1403,6 +1407,9 @@ protected:
* so are disabled for subsequent load calls. */
std::set<std::string> m_texBlacklist;
+ //! Texture pack
+ std::string m_texPack;
+
//! Mouse cursor definitions
EngineMouse m_mice[ENG_MOUSE_COUNT];
//! Texture with mouse cursors