diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-03 16:35:09 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-03 16:35:09 -0500 |
| commit | 1ffa486edd70406627f3e329351184dafebc1aea (patch) | |
| tree | 494a3289a185260b089b3396944d7268090bceba /editor | |
| parent | be543940e3c561ee2ab8eb315211112b97065476 (diff) | |
checkpoint - EntityTypeDetails array
Diffstat (limited to 'editor')
| -rw-r--r-- | editor/editor.cpp | 89 |
1 files changed, 52 insertions, 37 deletions
diff --git a/editor/editor.cpp b/editor/editor.cpp index ada13bf..40f187a 100644 --- a/editor/editor.cpp +++ b/editor/editor.cpp @@ -267,28 +267,33 @@ void PkeEditor_Tick(double delta) { while (entityInstancesToCreate.Count() > 0) { auto createInfo = entityInstancesToCreate.Pop(); // TODO needs to be more elegant - int64_t etIndex = EntityType_FindByEntityHandle(createInfo.entityTypeEntityHandle); + int64_t detailIndex = 0; + int64_t etIndex = EntityType_FindByEntityHandle(createInfo.entityTypeEntityHandle, detailIndex); auto &et = GlobalEntityTypes[etIndex]; - EntityHandle newEntity = ECS_CreateEntity(); - auto &compInst = ECS_CreateInstance(newEntity, createInfo.entityTypeEntityHandle); - - compInst.physicsLayer = et.bt.startingCollisionLayer; - compInst.physicsMask = et.bt.startingCollisionMask; - btVector3 localInertia(0, 0, 0); - et.bt.shape->calculateLocalInertia(et.bt.startingMass, localInertia); - btTransform posRot{}; - posRot.setIdentity(); - compInst.bt.motionState = Pke_New<btDefaultMotionState>(MemBkt_Bullet); - new (compInst.bt.motionState) btDefaultMotionState(posRot); - compInst.bt.rigidBody = Pke_New<btRigidBody>(MemBkt_Bullet); - new (compInst.bt.rigidBody) btRigidBody(et.bt.startingMass, 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(btVector3(1, 1, 1)); - BtDynamicsWorld->addRigidBody(compInst.bt.rigidBody); - compInst.bt.rigidBody->getBroadphaseProxy()->m_collisionFilterGroup = static_cast<PhysicsCollision_T>(et.bt.startingCollisionLayer); - compInst.bt.rigidBody->getBroadphaseProxy()->m_collisionFilterMask = static_cast<PhysicsCollision_T>(et.bt.startingCollisionMask); - compInst.bt.rigidBody->setUserPointer(reinterpret_cast<void *>(compInst.entHandle.hash)); + EntityHandle parentEntity = ECS_CreateEntity(); + + for (size_t i = 0; i < et.detailsCount; ++i) { + auto &etd = et.details[i]; + EntityHandle newEntity = ECS_CreateEntity(parentEntity); + auto &compInst = ECS_CreateInstance(newEntity, etd.entityHandle); + compInst.physicsLayer = etd.bt.startingCollisionLayer; + compInst.physicsMask = etd.bt.startingCollisionMask; + btVector3 localInertia(0, 0, 0); + etd.bt.shape->calculateLocalInertia(etd.bt.startingMass, localInertia); + btTransform posRot{}; + posRot.setIdentity(); + compInst.bt.motionState = Pke_New<btDefaultMotionState>(MemBkt_Bullet); + new (compInst.bt.motionState) btDefaultMotionState(posRot); + compInst.bt.rigidBody = Pke_New<btRigidBody>(MemBkt_Bullet); + new (compInst.bt.rigidBody) btRigidBody(etd.bt.startingMass, 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(btVector3(1, 1, 1)); + BtDynamicsWorld->addRigidBody(compInst.bt.rigidBody); + compInst.bt.rigidBody->getBroadphaseProxy()->m_collisionFilterGroup = static_cast<PhysicsCollision_T>(etd.bt.startingCollisionLayer); + compInst.bt.rigidBody->getBroadphaseProxy()->m_collisionFilterMask = static_cast<PhysicsCollision_T>(etd.bt.startingCollisionMask); + compInst.bt.rigidBody->setUserPointer(reinterpret_cast<void *>(compInst.entHandle.hash)); + } } PkeInputEventHolder holder = PkeInput_Query(dbgCtrl_CameraButtonMask); @@ -870,22 +875,31 @@ void RecordImGuiModalCreateEntityType() { } ImGui::SameLine(); ImGui::Text("%s", apssModel.safeKey); - RecordImGui_AssetPicker(apssModel); - if (ImGui::Button("Texture Key")) { - ImGui::OpenPopup(apssTexture.source); - } - ImGui::SameLine(); - ImGui::Text("%s", apssTexture.safeKey); - RecordImGui_AssetPicker(apssTexture); ImGui::InputText("Entity Type Code", entityTypeCode, 31); - ImGui::InputScalar("Starting Instance Count", ImGuiDataType_U32, &entityTypeToCreate.startingInstanceCount); - ImGui::InputScalar("GLTF Import Index - Vertex", ImGuiDataType_S16, &entityTypeToCreate.Importer_GLTF.AccessorIndexVertex); - ImGui::InputScalar("GLTF Import Index - Normal", ImGuiDataType_S16, &entityTypeToCreate.Importer_GLTF.AccessorIndexNormal); - ImGui::InputScalar("GLTF Import Index - UV", ImGuiDataType_S16, &entityTypeToCreate.Importer_GLTF.AccessorIndexUV); - ImGui::InputScalar("GLTF Import Index - Index", ImGuiDataType_S16, &entityTypeToCreate.Importer_GLTF.AccessorIndexIndex); - ImGui::InputFloat("Physics - Mass", &entityTypeToCreate.bt.startingMass); - ImGui::InputScalar("Physics - Collision Layer", ImGuiDataType_U16, &entityTypeToCreate.bt.startingCollisionLayer); - ImGui::InputScalar("Physics - Collision Mask", ImGuiDataType_U16, &entityTypeToCreate.bt.startingCollisionMask); + + ImGui::BeginDisabled(); + ImGui::InputScalar("Sub-Types", ImGuiDataType_S64, &entityTypeToCreate.detailsCount); + ImGui::SameLine(); + if (ImGui::Button("-")) entityTypeToCreate.detailsCount -= 1; + ImGui::SameLine(); + if (ImGui::Button("+")) entityTypeToCreate.detailsCount += 1; + ImGui::EndDisabled(); + + for (int64_t i = 0; i < entityTypeToCreate.detailsCount; ++i) { + auto &etd = entityTypeToCreate.details[i]; + ImGui::Separator(); + RecordImGui_AssetPicker(apssModel); + if (ImGui::Button("Texture Key")) { + ImGui::OpenPopup(apssTexture.source); + } + ImGui::SameLine(); + ImGui::Text("%s", apssTexture.safeKey); + RecordImGui_AssetPicker(apssTexture); + ImGui::InputScalar("Starting Instance Count", ImGuiDataType_U32, &etd.startingInstanceCount); + ImGui::InputFloat("Physics - Mass", &etd.bt.startingMass); + ImGui::InputScalar("Physics - Collision Layer", ImGuiDataType_U16, &etd.bt.startingCollisionLayer); + ImGui::InputScalar("Physics - Collision Mask", ImGuiDataType_U16, &etd.bt.startingCollisionMask); + } ImGui::Separator(); @@ -893,7 +907,8 @@ void RecordImGuiModalCreateEntityType() { // TODO some type of validation strncpy(entityTypeToCreate.modelAssetKey, apssModel.safeKey, AssetKeyLength); - strncpy(entityTypeToCreate.textureAssetKey, apssTexture.safeKey, AssetKeyLength); + // TODO this needs to be an array + strncpy(entityTypeToCreate.details[0].textureAssetKey, apssTexture.safeKey, AssetKeyLength); char *sEntityTypeCode = Pke_New<char>(strlen(entityTypeCode) + 1); strncpy(sEntityTypeCode, entityTypeCode, 31); |
