diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2013-02-25 09:55:37 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2013-02-25 09:55:37 +0400 |
commit | 2f2c0a6b02ee5db79df98a91d0bf071de1a9ffdc (patch) | |
tree | 07b6bc109f63a99e1e0d34ede41d16f1e8c6fd21 /source/gameengine/Ketsji | |
parent | 732f6f7bd0b70777b5807727d36df4a956dfe9f3 (diff) |
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.
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r-- | source/gameengine/Ketsji/BL_Action.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/source/gameengine/Ketsji/BL_Action.cpp b/source/gameengine/Ketsji/BL_Action.cpp index ff1f800a626..1a49f76e71a 100644 --- a/source/gameengine/Ketsji/BL_Action.cpp +++ b/source/gameengine/Ketsji/BL_Action.cpp @@ -176,11 +176,13 @@ bool BL_Action::Play(const char* name, // Now try materials if (m_obj->GetBlenderObject()->totcol==1) { Material *mat = give_current_material(m_obj->GetBlenderObject(), 1); - sg_contr = BL_CreateMaterialIpo(m_action, mat, 0, m_obj, kxscene->GetSceneConverter()); - if (sg_contr) { - m_sg_contr_list.push_back(sg_contr); - m_obj->GetSGNode()->AddSGController(sg_contr); - sg_contr->SetObject(m_obj->GetSGNode()); + if (mat) { + sg_contr = BL_CreateMaterialIpo(m_action, mat, 0, m_obj, kxscene->GetSceneConverter()); + if (sg_contr) { + m_sg_contr_list.push_back(sg_contr); + m_obj->GetSGNode()->AddSGController(sg_contr); + sg_contr->SetObject(m_obj->GetSGNode()); + } } } else { Material *mat; @@ -188,12 +190,14 @@ bool BL_Action::Play(const char* name, for (int matidx = 1; matidx <= m_obj->GetBlenderObject()->totcol; ++matidx) { mat = give_current_material(m_obj->GetBlenderObject(), matidx); - matname = mat->id.name; - sg_contr = BL_CreateMaterialIpo(m_action, mat, matname.hash(), m_obj, kxscene->GetSceneConverter()); - if (sg_contr) { - m_sg_contr_list.push_back(sg_contr); - m_obj->GetSGNode()->AddSGController(sg_contr); - sg_contr->SetObject(m_obj->GetSGNode()); + if (mat) { + matname = mat->id.name; + sg_contr = BL_CreateMaterialIpo(m_action, mat, matname.hash(), m_obj, kxscene->GetSceneConverter()); + if (sg_contr) { + m_sg_contr_list.push_back(sg_contr); + m_obj->GetSGNode()->AddSGController(sg_contr); + sg_contr->SetObject(m_obj->GetSGNode()); + } } } } |