diff options
Diffstat (limited to 'src/game.cpp')
| -rw-r--r-- | src/game.cpp | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/src/game.cpp b/src/game.cpp index df2bddc..b6d3321 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -92,10 +92,14 @@ void SerializeInstance(std::ofstream &stream, const CompInstance &comp) { char handleStr[19] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; snprintf(handleStr, 19, "0x%016lX", comp.entHandle.hash); EntityType *et = nullptr; + // EntityTypeDetails *etd = nullptr; for (long i = 0; i < GlobalEntityTypes.Count(); ++i) { - if (GlobalEntityTypes[i].grBindsHandle == comp.grBindsHandle) { - et = &GlobalEntityTypes[i]; - break; + for (int64_t k = 0; k < GlobalEntityTypes[i].detailsCount; ++k) { + if (GlobalEntityTypes[i].details[k].grBindsHandle == comp.grBindsHandle) { + et = &GlobalEntityTypes[i]; + // etd = &GlobalEntityTypes[i].details[k]; + break; + } } } assert(et != nullptr); @@ -257,28 +261,31 @@ void ParseInstance(EntityHandle parentEntHandle, std::ifstream &stream) { break; } const auto &et = GlobalEntityTypes[existingEntityTypeIndex]; - auto entityHandle = ECS_CreateEntity(parentEntHandle); - auto &compInst = ECS_CreateInstance(entityHandle, et.entityHandle); - - strncpy(compInst.collisionCallback.name, comp.collisionCallback.name, 16); - PkePlugin_SetSignatureFunc(&compInst.collisionCallback); - - compInst.physicsLayer = comp.physicsLayer; - compInst.physicsMask = comp.physicsMask; - btVector3 localInertia(0, 0, 0); - et.bt.shape->calculateLocalInertia(instPos.mass, localInertia); - compInst.bt.motionState = Pke_New<btDefaultMotionState>(MemBkt_Bullet); - new (compInst.bt.motionState) btDefaultMotionState(instPos.posRot); - compInst.bt.rigidBody = Pke_New<btRigidBody>(MemBkt_Bullet); - new (compInst.bt.rigidBody) btRigidBody(instPos.mass, compInst.bt.motionState, et.bt.shape, localInertia); - compInst.bt.rigidBody->setLinearVelocity(btVector3(0,0,0)); - compInst.bt.rigidBody->setAngularVelocity(btVector3(0,0,0)); - compInst.bt.rigidBody->getCollisionShape()->setLocalScaling(instPos.scale); - BtDynamicsWorld->addRigidBody(compInst.bt.rigidBody); - auto *broadphaseProxy = compInst.bt.rigidBody->getBroadphaseProxy(); - broadphaseProxy->m_collisionFilterGroup = static_cast<PhysicsCollision_T>(comp.physicsLayer); - broadphaseProxy->m_collisionFilterMask = static_cast<PhysicsCollision_T>(comp.physicsMask); - compInst.bt.rigidBody->setUserPointer(reinterpret_cast<void *>(compInst.entHandle.hash)); + for (int64_t i = 0; i < et.detailsCount; ++i) { + auto &etd = et.details[i]; + auto entHandle = ECS_CreateEntity(parentEntHandle); + auto &compInst = ECS_CreateInstance(entHandle, etd.entityHandle); + + strncpy(compInst.collisionCallback.name, comp.collisionCallback.name, 16); + PkePlugin_SetSignatureFunc(&compInst.collisionCallback); + + compInst.physicsLayer = comp.physicsLayer; + compInst.physicsMask = comp.physicsMask; + btVector3 localInertia(0, 0, 0); + etd.bt.shape->calculateLocalInertia(instPos.mass, localInertia); + compInst.bt.motionState = Pke_New<btDefaultMotionState>(MemBkt_Bullet); + new (compInst.bt.motionState) btDefaultMotionState(instPos.posRot); + compInst.bt.rigidBody = Pke_New<btRigidBody>(MemBkt_Bullet); + new (compInst.bt.rigidBody) btRigidBody(instPos.mass, compInst.bt.motionState, etd.bt.shape, localInertia); + compInst.bt.rigidBody->setLinearVelocity(btVector3(0,0,0)); + compInst.bt.rigidBody->setAngularVelocity(btVector3(0,0,0)); + compInst.bt.rigidBody->getCollisionShape()->setLocalScaling(instPos.scale); + BtDynamicsWorld->addRigidBody(compInst.bt.rigidBody); + auto *broadphaseProxy = compInst.bt.rigidBody->getBroadphaseProxy(); + broadphaseProxy->m_collisionFilterGroup = static_cast<PhysicsCollision_T>(comp.physicsLayer); + broadphaseProxy->m_collisionFilterMask = static_cast<PhysicsCollision_T>(comp.physicsMask); + compInst.bt.rigidBody->setUserPointer(reinterpret_cast<void *>(compInst.entHandle.hash)); + } break; } if (strstr(readLine, PKE_FILE_INSTANCE_ENTITY_HANDLE)) { |
