diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-09 20:40:56 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-05-09 20:40:56 -0400 |
| commit | ecf91229fb5c9150f2d60d97652bf0024a5c3435 (patch) | |
| tree | d8fcffa8d436222c4304d9f4d538165ddd734055 /src/ecs.cpp | |
| parent | 9693ff2d4be85d356e07e3192baaa2262a7140ff (diff) | |
pke-test-serialization: add more complex tests
Diffstat (limited to 'src/ecs.cpp')
| -rw-r--r-- | src/ecs.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/ecs.cpp b/src/ecs.cpp index 4f81ac0..9de7866 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -439,7 +439,7 @@ CompGrBinds *ECS_GetGrBinds(pk_handle_bucket_index_T bucketIndex, pk_handle_item return ecs.bc.grBinds.buckets[bucketIndex]; } -CompInstance *ECS_CreateInstance(Entity_Base *entity, pk_uuid uuid, CompGrBinds *entityTypeGrBinds) { +CompInstance *ECS_CreateInstance(Entity_Base *entity, pk_uuid uuid, CompGrBinds *entityTypeGrBinds, InstPos *inst_pos) { assert(entity != nullptr && entity != CAFE_BABE(Entity_Base)); InstanceHandle instanceHandle{Buckets_NewHandle(ecs.bc.instances)}; @@ -461,6 +461,26 @@ CompInstance *ECS_CreateInstance(Entity_Base *entity, pk_uuid uuid, CompGrBinds if (entityTypeGrBinds->instanceCounter > entityTypeGrBinds->instanceBufferMaxCount) { EntitiesWithExcessInstances.Push(ECS_GetEntity(entityTypeGrBinds->entHandle)); } + } else if (inst_pos != nullptr) { + // TODO leaky + comp->bt.collision_shape = pk_new<btSphereShape>(MemBkt_Bullet); + new (comp->bt.collision_shape) btSphereShape(1.0); + + btVector3 localInertia(0, 0, 0); + comp->bt.collision_shape->calculateLocalInertia(inst_pos->mass, localInertia); + comp->bt.motionState = pk_new<btDefaultMotionState>(MemBkt_Bullet); + new (comp->bt.motionState) btDefaultMotionState(inst_pos->posRot); + + comp->bt.rigidBody = pk_new<btRigidBody>(MemBkt_Bullet); + new (comp->bt.rigidBody) btRigidBody(inst_pos->mass, comp->bt.motionState, comp->bt.collision_shape, localInertia); + + comp->bt.rigidBody->setLinearVelocity(btVector3(0,0,0)); + comp->bt.rigidBody->setAngularVelocity(btVector3(0,0,0)); + comp->bt.rigidBody->getCollisionShape()->setLocalScaling(inst_pos->scale); + BtDynamicsWorld->addRigidBody(comp->bt.rigidBody); + comp->bt.rigidBody->getBroadphaseProxy()->m_collisionFilterGroup = static_cast<PhysicsCollision_T>(comp->physicsLayer); + comp->bt.rigidBody->getBroadphaseProxy()->m_collisionFilterMask = static_cast<PhysicsCollision_T>(comp->physicsMask); + comp->bt.rigidBody->setUserPointer(reinterpret_cast<void *>(comp)); } return comp; |
