summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-01-03 16:35:09 -0500
committerJonathan Bradley <jcb@pikum.xyz>2024-01-03 16:35:09 -0500
commit1ffa486edd70406627f3e329351184dafebc1aea (patch)
tree494a3289a185260b089b3396944d7268090bceba /editor
parentbe543940e3c561ee2ab8eb315211112b97065476 (diff)
checkpoint - EntityTypeDetails array
Diffstat (limited to 'editor')
-rw-r--r--editor/editor.cpp89
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);