parent
0d70b6e2f8
commit
ff97de5477
|
@ -591,6 +591,27 @@ void CEngine::CopyBaseObject(int sourceBaseObjRank, int destBaseObjRank)
|
|||
assert(destBaseObjRank >= 0 && destBaseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||
|
||||
m_baseObjects[destBaseObjRank] = m_baseObjects[sourceBaseObjRank];
|
||||
|
||||
EngineBaseObject& p1 = m_baseObjects[destBaseObjRank];
|
||||
|
||||
if (! p1.used)
|
||||
return;
|
||||
|
||||
for (int l2 = 0; l2 < static_cast<int>( p1.next.size() ); l2++)
|
||||
{
|
||||
EngineBaseObjTexTier& p2 = p1.next[l2];
|
||||
|
||||
for (int l3 = 0; l3 < static_cast<int>( p2.next.size() ); l3++)
|
||||
{
|
||||
EngineBaseObjLODTier& p3 = p2.next[l3];
|
||||
|
||||
for (int l4 = 0; l4 < static_cast<int>( p3.next.size() ); l4++)
|
||||
{
|
||||
EngineBaseObjDataTier& p4 = p3.next[l4];
|
||||
p4.staticBufferId = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CEngine::AddBaseObjTriangles(int baseObjRank, const std::vector<VertexTex2>& vertices,
|
||||
|
|
|
@ -111,6 +111,8 @@ bool CModelManager::AddModelCopy(const std::string& fileName, bool mirrored, int
|
|||
m_engine->CopyBaseObject((*it).second.baseObjRank, copyBaseObjRank);
|
||||
m_engine->SetObjectBaseRank(objRank, copyBaseObjRank);
|
||||
|
||||
m_copiesBaseRanks.push_back(copyBaseObjRank);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -128,6 +130,16 @@ int CModelManager::GetModelBaseObjRank(const std::string& fileName, bool mirrore
|
|||
return (*it).second.baseObjRank;
|
||||
}
|
||||
|
||||
void CModelManager::DeleteAllModelCopies()
|
||||
{
|
||||
for (int baseObjRank : m_copiesBaseRanks)
|
||||
{
|
||||
m_engine->DeleteBaseObject(baseObjRank);
|
||||
}
|
||||
|
||||
m_copiesBaseRanks.clear();
|
||||
}
|
||||
|
||||
void CModelManager::UnloadModel(const std::string& fileName, bool mirrored)
|
||||
{
|
||||
auto it = m_models.find(FileInfo(fileName, mirrored));
|
||||
|
|
|
@ -53,6 +53,9 @@ public:
|
|||
//! Returns the rank of base engine object of given loaded model
|
||||
int GetModelBaseObjRank(const std::string& fileName, bool mirrored);
|
||||
|
||||
//! Deletes all copied objects
|
||||
void DeleteAllModelCopies();
|
||||
|
||||
//! Unloads the given model
|
||||
void UnloadModel(const std::string& fileName, bool mirrored);
|
||||
//! Unloads all models
|
||||
|
@ -91,6 +94,7 @@ private:
|
|||
}
|
||||
};
|
||||
std::map<FileInfo, ModelInfo> m_models;
|
||||
std::vector<int> m_copiesBaseRanks;
|
||||
CEngine* m_engine;
|
||||
};
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "graphics/engine/engine.h"
|
||||
#include "graphics/engine/lightman.h"
|
||||
#include "graphics/engine/lightning.h"
|
||||
#include "graphics/engine/modelfile.h"
|
||||
#include "graphics/engine/modelmanager.h"
|
||||
#include "graphics/engine/particle.h"
|
||||
#include "graphics/engine/planet.h"
|
||||
#include "graphics/engine/pyro.h"
|
||||
|
@ -1047,6 +1047,7 @@ void CRobotMain::ChangePhase(Phase phase)
|
|||
FlushDisplayInfo();
|
||||
m_engine->SetRankView(0);
|
||||
m_engine->DeleteAllObjects();
|
||||
Gfx::CModelManager::GetInstancePointer()->DeleteAllModelCopies();
|
||||
m_engine->SetWaterAddColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f));
|
||||
m_engine->SetBackground("");
|
||||
m_engine->SetBackForce(false);
|
||||
|
@ -3736,6 +3737,7 @@ void CRobotMain::ScenePerso()
|
|||
{
|
||||
DeleteAllObjects(); // removes all the current 3D Scene
|
||||
m_engine->DeleteAllObjects();
|
||||
Gfx::CModelManager::GetInstancePointer()->DeleteAllModelCopies();
|
||||
m_terrain->FlushRelief(); // all flat
|
||||
m_terrain->FlushBuildingLevel();
|
||||
m_terrain->FlushFlyingLimit();
|
||||
|
|
Loading…
Reference in New Issue