From ecf91229fb5c9150f2d60d97652bf0024a5c3435 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Fri, 9 May 2025 20:40:56 -0400 Subject: pke-test-serialization: add more complex tests --- src/ecs.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/ecs.cpp') 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(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(MemBkt_Bullet); + new (comp->bt.motionState) btDefaultMotionState(inst_pos->posRot); + + comp->bt.rigidBody = pk_new(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(comp->physicsLayer); + comp->bt.rigidBody->getBroadphaseProxy()->m_collisionFilterMask = static_cast(comp->physicsMask); + comp->bt.rigidBody->setUserPointer(reinterpret_cast(comp)); } return comp; -- cgit v1.2.3