| 396 | } |
| 397 | |
| 398 | Collection* AllocCollection(const char* name, HRegister regist, uint32_t max_instances, dmGameObjectDDF::CollectionDesc* collection_desc) |
| 399 | { |
| 400 | uint32_t instances_in_collection = GetMaxComponentInstances(GAME_OBJECT_EXT, collection_desc); |
| 401 | if (instances_in_collection == 0) |
| 402 | { |
| 403 | instances_in_collection = max_instances; |
| 404 | } |
| 405 | else |
| 406 | { |
| 407 | instances_in_collection = dmMath::Min(max_instances, instances_in_collection); |
| 408 | } |
| 409 | Collection* collection = new Collection(0, 0, instances_in_collection, GetInputStackDefaultCapacity(regist)); |
| 410 | collection->m_Mutex = dmMutex::New(); |
| 411 | |
| 412 | for (uint32_t i = 0; i < regist->m_ComponentTypeCount; ++i) |
| 413 | { |
| 414 | if (regist->m_ComponentTypes[i].m_NewWorldFunction) |
| 415 | { |
| 416 | ComponentNewWorldParams params; |
| 417 | params.m_Context = regist->m_ComponentTypes[i].m_Context; |
| 418 | params.m_ComponentIndex = i; |
| 419 | params.m_MaxComponentInstances = GetMaxComponentInstances(regist->m_ComponentTypes[i].m_NameHash, collection_desc); |
| 420 | params.m_MaxInstances = max_instances; |
| 421 | params.m_World = &collection->m_ComponentWorlds[i]; |
| 422 | regist->m_ComponentTypes[i].m_NewWorldFunction(params); |
| 423 | } |
| 424 | } |
| 425 | |
| 426 | return collection; |
| 427 | } |
| 428 | |
| 429 | void DeallocCollection(Collection* collection) |
| 430 | { |
no test coverage detected