diff options
Diffstat (limited to 'src/ecs.cpp')
| -rw-r--r-- | src/ecs.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/ecs.cpp b/src/ecs.cpp index b4207f8..17c5a89 100644 --- a/src/ecs.cpp +++ b/src/ecs.cpp @@ -1,9 +1,12 @@ #include "ecs.hpp" +#include "memory.hpp" #include "vendor/glm_include.hpp" #include "window.hpp" +#include <btBulletDynamicsCommon.h> + TypeSafeInt_B(EntityHandle); const uint64_t maxBucketItemCount = 256; @@ -28,6 +31,13 @@ BucketContainer<EntityBucket, EntityHandle_T> Entities_BucketContainer{}; BucketContainer<GrBindsBucket, GrBindsHandle_T> Comp_GrBinds_BucketContainer{}; BucketContainer<InstanceBucket, InstanceHandle_T> Comp_Instance_BucketContainer{}; +MemBucket *bulletBucket = nullptr; +btDefaultCollisionConfiguration *btConfiguration = nullptr; +btCollisionDispatcher *btDispatcher = nullptr; +btBroadphaseInterface *btBroadphase = nullptr; +btConstraintSolver *btSolver = nullptr; +btDiscreteDynamicsWorld *btDynamicsWorld = nullptr; + void ECS_GetEntity_Inner(EntityHandle entHandle, Entity*& ent) { EntityHandle_T entHandle_t{static_cast<EntityHandle_T>(entHandle)}; assert(entHandle_t != EntityHandle_T_MAX && "Unknown entity handle"); @@ -40,6 +50,18 @@ void ECS_Init() { Buckets_Init(Entities_BucketContainer); Buckets_Init(Comp_GrBinds_BucketContainer); Buckets_Init(Comp_Instance_BucketContainer); + // bullet + { + bulletBucket = Pke_BeginTransientBucket(); + btConfiguration = Pke_New<btDefaultCollisionConfiguration>(bulletBucket); + btDispatcher = Pke_New<btCollisionDispatcher>(bulletBucket); + new (btDispatcher) btCollisionDispatcher(btConfiguration); + btBroadphase = Pke_New<btDbvtBroadphase>(bulletBucket); + btSolver = Pke_New<btSequentialImpulseConstraintSolver>(bulletBucket); + btDynamicsWorld = Pke_New<btDiscreteDynamicsWorld>(bulletBucket); + new (btDynamicsWorld) btDiscreteDynamicsWorld(btDispatcher, btBroadphase, btSolver, btConfiguration); + btDynamicsWorld->setGravity(btVector3(0, -1, 0)); + } } uint64_t ECS_GetEntities_BucketCount() { @@ -401,6 +423,7 @@ CompInstance *ECS_GetInstances(uint64_t bucketIndex, uint64_t &itemCount) { } void ECS_Teardown() { + Pke_EndTransientBucket(bulletBucket); EntitiesWithExcessInstances.~DynArray(); entitiesYetToBeRemoved.~DynArray(); EntitiesToBeRemoved.~DynArray(); |
