BGE: Fixing a crash reported by Ace Dragon on BA. It looks like Object->totcol can give a number higher than the number of materials, so I've added some NULL checks.

This commit is contained in:
Mitchell Stokes
2013-02-25 05:55:37 +00:00
parent 732f6f7bd0
commit 2f2c0a6b02

View File

@@ -176,11 +176,13 @@ bool BL_Action::Play(const char* name,
// Now try materials // Now try materials
if (m_obj->GetBlenderObject()->totcol==1) { if (m_obj->GetBlenderObject()->totcol==1) {
Material *mat = give_current_material(m_obj->GetBlenderObject(), 1); Material *mat = give_current_material(m_obj->GetBlenderObject(), 1);
sg_contr = BL_CreateMaterialIpo(m_action, mat, 0, m_obj, kxscene->GetSceneConverter()); if (mat) {
if (sg_contr) { sg_contr = BL_CreateMaterialIpo(m_action, mat, 0, m_obj, kxscene->GetSceneConverter());
m_sg_contr_list.push_back(sg_contr); if (sg_contr) {
m_obj->GetSGNode()->AddSGController(sg_contr); m_sg_contr_list.push_back(sg_contr);
sg_contr->SetObject(m_obj->GetSGNode()); m_obj->GetSGNode()->AddSGController(sg_contr);
sg_contr->SetObject(m_obj->GetSGNode());
}
} }
} else { } else {
Material *mat; Material *mat;
@@ -188,12 +190,14 @@ bool BL_Action::Play(const char* name,
for (int matidx = 1; matidx <= m_obj->GetBlenderObject()->totcol; ++matidx) { for (int matidx = 1; matidx <= m_obj->GetBlenderObject()->totcol; ++matidx) {
mat = give_current_material(m_obj->GetBlenderObject(), matidx); mat = give_current_material(m_obj->GetBlenderObject(), matidx);
matname = mat->id.name; if (mat) {
sg_contr = BL_CreateMaterialIpo(m_action, mat, matname.hash(), m_obj, kxscene->GetSceneConverter()); matname = mat->id.name;
if (sg_contr) { sg_contr = BL_CreateMaterialIpo(m_action, mat, matname.hash(), m_obj, kxscene->GetSceneConverter());
m_sg_contr_list.push_back(sg_contr); if (sg_contr) {
m_obj->GetSGNode()->AddSGController(sg_contr); m_sg_contr_list.push_back(sg_contr);
sg_contr->SetObject(m_obj->GetSGNode()); m_obj->GetSGNode()->AddSGController(sg_contr);
sg_contr->SetObject(m_obj->GetSGNode());
}
} }
} }
} }