42 const TCHAR szFOBBoneName[] =
"FOB";
48 const TCHAR* szModelName;
53 {
"data\\models\\treelittle.trb", 1 },
54 {
"data\\models\\tree_bent_trunk.trb", 2 },
55 {
"data\\models\\tree_standard_trunk.trb", 3 },
56 {
"data\\models\\tree_tall_trunk.trb", 4 },
57 {
"data\\models\\treewall_sim_trunks.trb", 5 },
62 m_pTrunks =
new Model[ m_iNumTrunks ];
64 for (
TINT i = 0; i < m_iNumTrunks; i++ )
66 const TCHAR* pchModelName = aModels[ i ].szModelName;
67 Model* pTreeModel = &m_pTrunks[ i ];
69 pTreeModel->m_uiID = aModels[ i ].iIndex;
71 if ( pchModelName[ 0 ] ==
'\0' )
74 pTreeModel->m_iNumFOBs = 1;
75 pTreeModel->m_pFOBMatrices =
new TMatrix44[ 1 ];
76 pTreeModel->m_pFOBMatrices[ 0 ].Identity();
77 pTreeModel->m_fUnk1 = 0.0f;
78 pTreeModel->m_fRadius = 1.6f;
81 pTreeModel->m_fRadius = 4.4f;
87 pTreeModel->
Load( pchModelName );
90 TModel* pModel = pTreeModel->m_pManagedModel->GetModel();
96 TSkeletonInstance* pSkeletonInstance = pTreeModel->m_pSceneObject->GetInstance()->GetSkeletonInstance();
100 pTreeModel->m_iNumFOBs = 0;
106 pTreeModel->m_iNumFOBs += 1;
111 TINT iCurrentFOB = 0;
112 pTreeModel->m_pFOBMatrices =
new TMatrix44[ pTreeModel->m_iNumFOBs ];
127 const TCHAR* aFOBModelNames[] = {
128 "data\\models\\busha.trb",
129 "data\\models\\busha_LOD1.trb",
130 "data\\models\\foblittle.trb",
132 "data\\models\\tree_bent_fob.trb",
134 "data\\models\\tree_standard_fob.trb",
136 "data\\models\\tree_tall_fob.trb",
138 "data\\models\\treewall_sim_fobs.trb",
140 "data\\models\\fob_bens.trb",
142 "data\\models\\Fob_pond.trb",
147 m_pFOBs =
new Model[ m_iNumFOBs ];
149 for (
TINT i = 0; i < m_iNumFOBs; i++ )
151 if (
const TCHAR* pchModelName = aFOBModelNames[ i ] )
154 m_pFOBs[ i ].Load( pchModelName );
162 m_llFreeTreeInstances.PushFront( &m_aTreeInstances[ i ] );
181 { 3,
"tree02",
TTRUE },
182 { 5,
"tree03",
TTRUE },
183 { 4,
"tree05",
TTRUE },
184 { 1,
"fob2",
TTRUE },
185 { 1,
"fobw",
TTRUE },
187 { 6,
"treewall2",
TTRUE },
188 { 6,
"treewall",
TTRUE },
189 { 2,
"treelittle",
TFALSE },
190 { 3,
"tree_bent",
TTRUE },
191 { 4,
"tree_standard",
TTRUE },
192 { 5,
"tree_tall",
TTRUE },
193 { 6,
"treewall_sim",
TTRUE },
194 { 0,
"fob_bens",
TTRUE },
195 { 7,
"fob_pond",
TTRUE },
200 matGlobalTransform.
m_f11 = 1.0f;
201 matGlobalTransform.
m_f12 = 0.0f;
202 matGlobalTransform.
m_f13 = 0.0f;
203 matGlobalTransform.
m_f14 = 0.0f;
204 matGlobalTransform.
m_f21 = 0.0f;
205 matGlobalTransform.
m_f22 = 0.0f;
206 matGlobalTransform.
m_f23 = 1.0f;
207 matGlobalTransform.
m_f24 = 0.0f;
208 matGlobalTransform.
m_f31 = 0.0f;
209 matGlobalTransform.
m_f32 = -1.0f;
210 matGlobalTransform.
m_f33 = 0.0f;
211 matGlobalTransform.
m_f34 = 0.0f;
212 matGlobalTransform.
m_f41 = 0.0f;
213 matGlobalTransform.
m_f42 = 0.0f;
214 matGlobalTransform.
m_f43 = 0.0f;
215 matGlobalTransform.
m_f44 = 1.0f;
217 TINT iNumCollisionObjects = 0;
220 if ( iNumLocators > 0 )
225 TBOOL* pFlag = aFlags;
231 for (
TINT i = 0; i < iNumLocators; i++ )
239 aLocators[ k ].szName,
245 if ( m_llFreeTreeInstances.IsEmpty() )
247 TERROR(
"ATreeManager::CreateInstances - Failed to create all instances due to not having empty instance slots!\n" );
251 TINT iIndex = aLocators[ k ].iIndex;
255 if ( m_bFlag && m_pTrunks[ iIndex ].m_pManagedModel ==
TNULL )
258 iNumCollisionObjects += 1;
260 else if ( pLocators[ i ].iFlags2 < 0 )
267 iNumCollisionObjects += 1;
268 bHasCollision =
TTRUE;
276 TreeInstance* pTreeInstance = m_llFreeTreeInstances.PopFront();
279 pLocators[ i ].
GetMatrix( matLocatorTransform );
282 matFinalTransform.
Multiply( matGlobalTransform, matLocatorTransform );
299 if ( iLocatorNameLength >= 4 && pchLocatorName[ iLocatorNameLength - 4 ] ==
'_' )
301 if ( pchLocatorName[ iLocatorNameLength - 3 ] ==
'b' &&
302 pchLocatorName[ iLocatorNameLength - 2 ] ==
'r' &&
303 pchLocatorName[ iLocatorNameLength - 2 ] ==
'n' )
308 else if ( pchLocatorName[ iLocatorNameLength - 3 ] ==
'd' && pchLocatorName[ iLocatorNameLength - 2 ] ==
'k' && pchLocatorName[ iLocatorNameLength - 2 ] ==
'g' )
318 pTreeInstance->
uiUnk3 = 255;
319 m_llUsedTreeInstances.PushBack( pTreeInstance );
321 TTODO(
"Spawn FOBs, create collisions and probably something else, idk..." );
372 m_pSceneObject = m_pManagedModel->CreateSceneObject();
374 m_pSceneObject->GetTransform().SetEuler(
TVector3(
TMath::PI / 2, 0.0f, 0.0f ) );
379 m_pSceneObject->GetTransform().GetLocalMatrixImp( matTransform );
380 m_pSceneObject->GetTransform().SetMatrix( matTransform );
381 m_pSceneObject->DisableSkeletonUpdate();
383 TModel* pModel = m_pManagedModel->GetModel();
394 pSkinMat->SetHDLighting(
TTRUE );