summaryrefslogtreecommitdiff
path: root/src/ecs.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-05-09 20:40:56 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-05-09 20:40:56 -0400
commitecf91229fb5c9150f2d60d97652bf0024a5c3435 (patch)
treed8fcffa8d436222c4304d9f4d538165ddd734055 /src/ecs.cpp
parent9693ff2d4be85d356e07e3192baaa2262a7140ff (diff)
pke-test-serialization: add more complex tests
Diffstat (limited to 'src/ecs.cpp')
-rw-r--r--src/ecs.cpp22
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;