Initial commit
This commit is contained in:
356
engines/hpl1/engine/resources/Resources.cpp
Normal file
356
engines/hpl1/engine/resources/Resources.cpp
Normal file
@@ -0,0 +1,356 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2010 - Frictional Games
|
||||
*
|
||||
* This file is part of HPL1 Engine.
|
||||
*/
|
||||
|
||||
#include "hpl1/engine/resources/Resources.h"
|
||||
|
||||
#include "hpl1/engine/resources/AnimationManager.h"
|
||||
#include "hpl1/engine/resources/ConfigFile.h"
|
||||
#include "hpl1/engine/resources/FileSearcher.h"
|
||||
#include "hpl1/engine/resources/FontManager.h"
|
||||
#include "hpl1/engine/resources/GpuProgramManager.h"
|
||||
#include "hpl1/engine/resources/ImageEntityManager.h"
|
||||
#include "hpl1/engine/resources/ImageManager.h"
|
||||
#include "hpl1/engine/resources/LanguageFile.h"
|
||||
#include "hpl1/engine/resources/MaterialManager.h"
|
||||
#include "hpl1/engine/resources/MeshLoaderHandler.h"
|
||||
#include "hpl1/engine/resources/MeshManager.h"
|
||||
#include "hpl1/engine/resources/ParticleManager.h"
|
||||
#include "hpl1/engine/resources/ScriptManager.h"
|
||||
#include "hpl1/engine/resources/SoundEntityManager.h"
|
||||
#include "hpl1/engine/resources/SoundManager.h"
|
||||
#include "hpl1/engine/resources/TextureManager.h"
|
||||
#include "hpl1/engine/resources/TileSetManager.h"
|
||||
#include "hpl1/engine/resources/VideoManager.h"
|
||||
#include "hpl1/engine/resources/low_level_resources.h"
|
||||
#include "hpl1/engine/scene/Area2D.h"
|
||||
#include "hpl1/engine/system/System.h"
|
||||
|
||||
#include "hpl1/engine/system/low_level_system.h"
|
||||
|
||||
#include "hpl1/engine/impl/tinyXML/tinyxml.h"
|
||||
|
||||
namespace hpl {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// CONSTRUCTORS
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
cResources::cResources(LowLevelResources *apLowLevelResources, iLowLevelGraphics *apLowLevelGraphics)
|
||||
: iUpdateable("Resources") {
|
||||
mpLowLevelResources = apLowLevelResources;
|
||||
mpLowLevelGraphics = apLowLevelGraphics;
|
||||
|
||||
mpFileSearcher = hplNew(cFileSearcher, (mpLowLevelResources));
|
||||
|
||||
mpDefaultEntity3DLoader = NULL;
|
||||
mpDefaultArea3DLoader = NULL;
|
||||
|
||||
mpLanguageFile = NULL;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
cResources::~cResources() {
|
||||
Log("Exiting Resources Module\n");
|
||||
Log("--------------------------------------------------------\n");
|
||||
|
||||
STLMapDeleteAll(m_mEntity3DLoaders);
|
||||
STLMapDeleteAll(m_mArea3DLoaders);
|
||||
STLMapDeleteAll(m_mMapEntity2DLoaders);
|
||||
STLMapDeleteAll(m_mMapArea2DLoaders);
|
||||
|
||||
hplDelete(mpTileSetManager);
|
||||
hplDelete(mpFontManager);
|
||||
hplDelete(mpScriptManager);
|
||||
hplDelete(mpParticleManager);
|
||||
hplDelete(mpSoundManager);
|
||||
hplDelete(mpImageEntityManager);
|
||||
hplDelete(mpMeshManager);
|
||||
hplDelete(mpMaterialManager);
|
||||
hplDelete(mpGpuProgramManager);
|
||||
hplDelete(mpImageManager);
|
||||
hplDelete(mpTextureManager);
|
||||
hplDelete(mpSoundEntityManager);
|
||||
hplDelete(mpAnimationManager);
|
||||
hplDelete(mpVideoManager);
|
||||
|
||||
Log(" All resources deleted\n");
|
||||
|
||||
hplDelete(mpFileSearcher);
|
||||
hplDelete(mpMeshLoaderHandler);
|
||||
|
||||
if (mpLanguageFile)
|
||||
hplDelete(mpLanguageFile);
|
||||
|
||||
mlstManagers.clear();
|
||||
Log("--------------------------------------------------------\n\n");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// PUBLIC METHODS
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void cResources::Init(cGraphics *apGraphics, cSystem *apSystem, cSound *apSound, cScene *apScene,
|
||||
cGui *apGui) {
|
||||
Log("Initializing Resources Module\n");
|
||||
Log("--------------------------------------------------------\n");
|
||||
|
||||
mpLowLevelSystem = apSystem->GetLowLevel();
|
||||
|
||||
Log(" Creating resource managers\n");
|
||||
|
||||
mpImageManager = hplNew(cImageManager, (mpFileSearcher, mpLowLevelGraphics, mpLowLevelResources, mpLowLevelSystem));
|
||||
mlstManagers.push_back(mpImageManager);
|
||||
mpGpuProgramManager = hplNew(cGpuProgramManager, (mpFileSearcher, mpLowLevelGraphics, mpLowLevelResources, mpLowLevelSystem));
|
||||
mlstManagers.push_back(mpGpuProgramManager);
|
||||
mpTileSetManager = hplNew(cTileSetManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpTileSetManager);
|
||||
mpImageEntityManager = hplNew(cImageEntityManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpImageEntityManager);
|
||||
mpParticleManager = hplNew(cParticleManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpParticleManager);
|
||||
mpSoundManager = hplNew(cSoundManager, (apSound, this));
|
||||
mlstManagers.push_back(mpParticleManager);
|
||||
mpFontManager = hplNew(cFontManager, (apGraphics, apGui, this));
|
||||
mlstManagers.push_back(mpFontManager);
|
||||
mpScriptManager = hplNew(cScriptManager, (apSystem, this));
|
||||
mlstManagers.push_back(mpScriptManager);
|
||||
mpTextureManager = hplNew(cTextureManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpTextureManager);
|
||||
mpMaterialManager = hplNew(cMaterialManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpMaterialManager);
|
||||
mpMeshManager = hplNew(cMeshManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpMeshManager);
|
||||
mpSoundEntityManager = hplNew(cSoundEntityManager, (apSound, this));
|
||||
mlstManagers.push_back(mpSoundEntityManager);
|
||||
mpAnimationManager = hplNew(cAnimationManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpAnimationManager);
|
||||
mpVideoManager = hplNew(cVideoManager, (apGraphics, this));
|
||||
mlstManagers.push_back(mpVideoManager);
|
||||
|
||||
Log(" Misc Creation\n");
|
||||
|
||||
mpMeshLoaderHandler = hplNew(cMeshLoaderHandler, (this, apScene));
|
||||
|
||||
mpLowLevelResources->addMeshLoaders(mpMeshLoaderHandler);
|
||||
mpLowLevelResources->addVideoLoaders(mpVideoManager);
|
||||
|
||||
Log("--------------------------------------------------------\n\n");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void cResources::Update(float afTimeStep) {
|
||||
tResourceManagerListIt it = mlstManagers.begin();
|
||||
for (; it != mlstManagers.end(); ++it) {
|
||||
iResourceManager *pManager = *it;
|
||||
|
||||
pManager->Update(afTimeStep);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
cFileSearcher *cResources::GetFileSearcher() {
|
||||
return mpFileSearcher;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* \todo File searcher should check so if the dir is already added and if so return false and not add
|
||||
* \param &asDir
|
||||
* \param &asMask
|
||||
* \return
|
||||
*/
|
||||
bool cResources::AddResourceDir(const tString &asDir, const tString &asMask) {
|
||||
mpFileSearcher->AddDirectory(asDir, asMask);
|
||||
if (iResourceBase::GetLogCreateAndDelete())
|
||||
Log(" Added resource directory '%s'\n", asDir.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
void cResources::ClearResourceDirs() {
|
||||
mpFileSearcher->ClearDirectories();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
bool cResources::SetLanguageFile(const tString &asFile) {
|
||||
if (mpLanguageFile) {
|
||||
hplDelete(mpLanguageFile);
|
||||
mpLanguageFile = NULL;
|
||||
}
|
||||
|
||||
tString asPath = mpFileSearcher->GetFilePath(asFile);
|
||||
if (asPath == "") {
|
||||
Error("Couldn't load language file '%s'\n", asFile.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
mpLanguageFile = hplNew(cLanguageFile, (this));
|
||||
|
||||
return mpLanguageFile->LoadFromFile(asPath);
|
||||
}
|
||||
|
||||
const tWString &cResources::Translate(const tString &asCat, const tString &asName) {
|
||||
if (mpLanguageFile) {
|
||||
return mpLanguageFile->Translate(asCat, asName);
|
||||
} else {
|
||||
return mwsEmptyString;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void cResources::AddEntity2DLoader(iEntity2DLoader *apLoader) {
|
||||
m_mMapEntity2DLoaders.insert(tEntity2DLoaderMap::value_type(apLoader->GetName(), apLoader));
|
||||
}
|
||||
|
||||
iEntity2DLoader *cResources::GetEntity2DLoader(const tString &asName) {
|
||||
tEntity2DLoaderMapIt it = m_mMapEntity2DLoaders.find(asName);
|
||||
if (it == m_mMapEntity2DLoaders.end()) {
|
||||
Warning("No loader for type '%s' found!\n", asName.c_str());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void cResources::AddArea2DLoader(iArea2DLoader *apLoader) {
|
||||
m_mMapArea2DLoaders.insert(tArea2DLoaderMap::value_type(apLoader->GetName(), apLoader));
|
||||
}
|
||||
|
||||
iArea2DLoader *cResources::GetArea2DLoader(const tString &asName) {
|
||||
tArea2DLoaderMapIt it = m_mMapArea2DLoaders.find(asName);
|
||||
if (it == m_mMapArea2DLoaders.end()) {
|
||||
Warning("No loader for type '%s' found!\n", asName.c_str());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void cResources::AddEntity3DLoader(iEntity3DLoader *apLoader, bool abSetAsDefault) {
|
||||
m_mEntity3DLoaders.insert(tEntity3DLoaderMap::value_type(apLoader->GetName(), apLoader));
|
||||
|
||||
if (abSetAsDefault) {
|
||||
mpDefaultEntity3DLoader = apLoader;
|
||||
}
|
||||
}
|
||||
|
||||
iEntity3DLoader *cResources::GetEntity3DLoader(const tString &asName) {
|
||||
tEntity3DLoaderMapIt it = m_mEntity3DLoaders.find(asName);
|
||||
if (it == m_mEntity3DLoaders.end()) {
|
||||
Warning("No loader for type '%s' found!\n", asName.c_str());
|
||||
|
||||
if (mpDefaultEntity3DLoader) {
|
||||
Log("Using default loader!\n");
|
||||
return mpDefaultEntity3DLoader;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void cResources::AddArea3DLoader(iArea3DLoader *apLoader, bool abSetAsDefault) {
|
||||
m_mArea3DLoaders.insert(tArea3DLoaderMap::value_type(apLoader->GetName(), apLoader));
|
||||
|
||||
if (abSetAsDefault) {
|
||||
mpDefaultArea3DLoader = apLoader;
|
||||
}
|
||||
}
|
||||
|
||||
iArea3DLoader *cResources::GetArea3DLoader(const tString &asName) {
|
||||
tArea3DLoaderMapIt it = m_mArea3DLoaders.find(asName);
|
||||
if (it == m_mArea3DLoaders.end()) {
|
||||
Warning("No loader for area type '%s' found!\n", asName.c_str());
|
||||
|
||||
if (mpDefaultArea3DLoader) {
|
||||
Log("Using default loader!\n");
|
||||
return mpDefaultArea3DLoader;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return it->second;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
bool cResources::LoadResourceDirsFile(const tString &asFile) {
|
||||
TiXmlDocument *pXmlDoc = hplNew(TiXmlDocument, (asFile.c_str()));
|
||||
if (pXmlDoc->LoadFile() == false) {
|
||||
Error("Couldn't load XML file '%s'!\n", asFile.c_str());
|
||||
hplDelete(pXmlDoc);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the root.
|
||||
TiXmlElement *pRootElem = pXmlDoc->RootElement();
|
||||
|
||||
TiXmlElement *pChildElem = pRootElem->FirstChildElement();
|
||||
for (; pChildElem != NULL; pChildElem = pChildElem->NextSiblingElement()) {
|
||||
tString sPath = cString::ToString(pChildElem->Attribute("Path"), "");
|
||||
if (sPath == "") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sPath[0] == '/' || sPath[0] == '\\')
|
||||
sPath = sPath.substr(1);
|
||||
|
||||
AddResourceDir(sPath);
|
||||
}
|
||||
|
||||
hplDelete(pXmlDoc);
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
LowLevelResources *cResources::GetLowLevel() {
|
||||
return mpLowLevelResources;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
} // namespace hpl
|
||||
Reference in New Issue
Block a user