| 90 | } |
| 91 | |
| 92 | void CGamePersistent::RegisterModel(IRenderVisual* V) |
| 93 | { |
| 94 | // Check types |
| 95 | switch (V->getType()) |
| 96 | { |
| 97 | case MT_SKELETON_ANIM: |
| 98 | case MT_SKELETON_RIGID: { |
| 99 | u16 def_idx = GMLib.GetMaterialIdx("default_object"); |
| 100 | R_ASSERT2(GMLib.GetMaterialByIdx(def_idx)->Flags.is(SGameMtl::flDynamic), "'default_object' - must be dynamic"); |
| 101 | IKinematics* K = smart_cast<IKinematics*>(V); |
| 102 | VERIFY(K); |
| 103 | int cnt = K->LL_BoneCount(); |
| 104 | for (u16 k = 0; k < cnt; k++) |
| 105 | { |
| 106 | CBoneData& bd = K->LL_GetData(k); |
| 107 | if (*(bd.game_mtl_name)) |
| 108 | { |
| 109 | bd.game_mtl_idx = GMLib.GetMaterialIdx(*bd.game_mtl_name); |
| 110 | R_ASSERT2(GMLib.GetMaterialByIdx(bd.game_mtl_idx)->Flags.is(SGameMtl::flDynamic), "Required dynamic game material"); |
| 111 | } |
| 112 | else |
| 113 | { |
| 114 | bd.game_mtl_idx = def_idx; |
| 115 | } |
| 116 | } |
| 117 | } |
| 118 | break; |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | extern void clean_game_globals(); |
| 123 | extern void init_game_globals(); |
no test coverage detected