summaryrefslogtreecommitdiff
path: root/src/game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.cpp')
-rw-r--r--src/game.cpp57
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)) {