Fixed spider and worm model loading
parent
3582f107a5
commit
2ebe1fbcb6
|
@ -703,7 +703,7 @@ void CEngine::DeleteObject(int objRank)
|
||||||
|
|
||||||
void CEngine::SetObjectBaseRank(int objRank, int baseObjRank)
|
void CEngine::SetObjectBaseRank(int objRank, int baseObjRank)
|
||||||
{
|
{
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
assert(objRank == -1 || (objRank >= 0 && objRank < static_cast<int>( m_objects.size() )));
|
||||||
|
|
||||||
m_objects[objRank].baseObjRank = baseObjRank;
|
m_objects[objRank].baseObjRank = baseObjRank;
|
||||||
}
|
}
|
||||||
|
@ -770,6 +770,9 @@ void CEngine::GetObjectBBox(int objRank, Math::Vector& min, Math::Vector& max)
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
||||||
|
|
||||||
min = m_baseObjects[baseObjRank].bboxMin;
|
min = m_baseObjects[baseObjRank].bboxMin;
|
||||||
|
@ -782,6 +785,9 @@ int CEngine::GetObjectTotalTriangles(int objRank)
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
return m_baseObjects[baseObjRank].totalTriangles;
|
return m_baseObjects[baseObjRank].totalTriangles;
|
||||||
|
@ -794,6 +800,9 @@ EngineBaseObjDataTier* CEngine::FindTriangles(int objRank, const Material& mater
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -834,6 +843,9 @@ int CEngine::GetPartialTriangles(int objRank, float min, float max, float percen
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -981,6 +993,9 @@ void CEngine::ChangeSecondTexture(int objRank, const std::string& tex2Name)
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
assert(objRank >= 0 && objRank < static_cast<int>( m_objects.size() ));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -1344,6 +1359,9 @@ bool CEngine::GetBBox2D(int objRank, Math::Point &min, Math::Point &max)
|
||||||
max.y = -1000000.0f;
|
max.y = -1000000.0f;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -1613,6 +1631,9 @@ bool CEngine::DetectBBox(int objRank, Math::Point mouse)
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>(m_objects.size()));
|
assert(objRank >= 0 && objRank < static_cast<int>(m_objects.size()));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -1667,6 +1688,9 @@ int CEngine::DetectObject(Math::Point mouse)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -1777,6 +1801,9 @@ bool CEngine::IsVisible(int objRank)
|
||||||
assert(objRank >= 0 && objRank < static_cast<int>(m_objects.size()));
|
assert(objRank >= 0 && objRank < static_cast<int>(m_objects.size()));
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>(m_baseObjects.size()));
|
||||||
|
|
||||||
float radius = m_baseObjects[baseObjRank].radius;
|
float radius = m_baseObjects[baseObjRank].radius;
|
||||||
|
@ -2172,6 +2199,9 @@ bool CEngine::LoadAllTextures()
|
||||||
terrain = true;
|
terrain = true;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -2988,6 +3018,9 @@ void CEngine::Draw3DScene()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -3051,6 +3084,9 @@ void CEngine::Draw3DScene()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -3117,6 +3153,9 @@ void CEngine::Draw3DScene()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
@ -3267,6 +3306,9 @@ void CEngine::DrawInterface()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int baseObjRank = m_objects[objRank].baseObjRank;
|
int baseObjRank = m_objects[objRank].baseObjRank;
|
||||||
|
if (baseObjRank == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
assert(baseObjRank >= 0 && baseObjRank < static_cast<int>( m_baseObjects.size() ));
|
||||||
|
|
||||||
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
EngineBaseObject& p1 = m_baseObjects[baseObjRank];
|
||||||
|
|
|
@ -621,9 +621,9 @@ struct EngineMouse
|
||||||
* object equals to allocating space for EngineObject structure which holds object parameters.
|
* object equals to allocating space for EngineObject structure which holds object parameters.
|
||||||
*
|
*
|
||||||
* Object's geometric data is stored as a separate object -- base engine object. Each object
|
* Object's geometric data is stored as a separate object -- base engine object. Each object
|
||||||
* must reference a valid base engine object. This many-to-one association allows to share
|
* must reference a valid base engine object or an empty base engine object (with rank = -1).
|
||||||
* same geometric data (e.g. from same model) across objects. Base engine objects are identified
|
* This many-to-one association allows to share same geometric data (e.g. from same model)
|
||||||
* by unique rank obtained upon their creation.
|
* across objects.
|
||||||
*
|
*
|
||||||
* Base engine object data is stored in a 4-tier tree which splits the data describing triangles.
|
* Base engine object data is stored in a 4-tier tree which splits the data describing triangles.
|
||||||
*
|
*
|
||||||
|
|
|
@ -104,7 +104,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
|
||||||
rank = m_engine->CreateObject();
|
rank = m_engine->CreateObject();
|
||||||
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
|
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
|
||||||
m_object->SetObjectRank(0, rank);
|
m_object->SetObjectRank(0, rank);
|
||||||
modelManager->AddModelReference("spider0.mod", false, rank);
|
// This is an "empty" object, without triangles
|
||||||
m_object->SetPosition(0, pos);
|
m_object->SetPosition(0, pos);
|
||||||
m_object->SetAngleY(0, angle);
|
m_object->SetAngleY(0, angle);
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
|
||||||
rank = m_engine->CreateObject();
|
rank = m_engine->CreateObject();
|
||||||
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
|
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
|
||||||
m_object->SetObjectRank(0, rank);
|
m_object->SetObjectRank(0, rank);
|
||||||
modelManager->AddModelReference("worm0.mod", false, rank); // there is no purpose!
|
// This is an "empty" object, without triangles
|
||||||
m_object->SetPosition(0, pos);
|
m_object->SetPosition(0, pos);
|
||||||
m_object->SetAngleY(0, angle);
|
m_object->SetAngleY(0, angle);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue