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 /src/project.cpp | |
| parent | be543940e3c561ee2ab8eb315211112b97065476 (diff) | |
checkpoint - EntityTypeDetails array
Diffstat (limited to 'src/project.cpp')
| -rw-r--r-- | src/project.cpp | 136 |
1 files changed, 59 insertions, 77 deletions
diff --git a/src/project.cpp b/src/project.cpp index fb11647..ae804ff 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -25,15 +25,13 @@ const char* const PKE_PROJ_FILE_PROJ_SETTINGS_SCENES_BEGIN = "PkeSet::Scenes: [" const char* const PKE_PROJ_FILE_PROJ_SETTINGS_SCENES_END = "PkeSet::Scenes: ]"; const char* const PKE_PROJ_FILE_ENTITY_TYPE_MODEL_ASSET_KEY = "ModelAssetKey: "; -const char* const PKE_PROJ_FILE_ENTITY_TYPE_TEXTURE_ASSET_KEY = "TextureAssetKey: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE = "EntityTypeCode: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_HANDLE = "EntityHandle: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_COLLISION_CALLBACK_SIGNATURE = "CollisionCallbackSignature: "; +const char* const PKE_PROJ_FILE_ENTITY_TYPE_DETAILS_BEGIN = "EntityHandleDetails: {"; +const char* const PKE_PROJ_FILE_ENTITY_TYPE_DETAILS_END = "EntityHandleDetails: }"; +const char* const PKE_PROJ_FILE_ENTITY_TYPE_TEXTURE_ASSET_KEY = "TextureAssetKey: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT = "StartingInstanceCount: "; -const char* const PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX = "Importer_GLTF::AccessorIndexVertex: "; -const char* const PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL = "Importer_GLTF::AccessorIndexNormal: "; -const char* const PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV = "Importer_GLTF::AccessorIndexUV: "; -const char* const PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX = "Importer_GLTF::AccessorIndexIndex: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS = "BT::StartingMass: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER = "BT::StartingCollisionLayer: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK = "BT::StartingCollisionMask: "; @@ -69,7 +67,6 @@ void Proj_SerializeEntityType(std::ofstream &stream, const EntityType &et) { NULL_CHAR_ARR(textureAssetKey, AssetKeyLength + 1); snprintf(handleStr, 19, "0x%016lX", et.entityHandle.hash); snprintf(modelAssetKey, AssetKeyLength + 1, "%s", et.modelAssetKey); - snprintf(textureAssetKey, AssetKeyLength + 1, "%s", et.textureAssetKey); EntityType e{}; CompGrBinds *grBinds = ECS_GetGrBinds(et.entityHandle); if (modelAssetKey[0] != '\0') @@ -85,22 +82,20 @@ void Proj_SerializeEntityType(std::ofstream &stream, const EntityType &et) { stream << PKE_PROJ_FILE_ENTITY_TYPE_COLLISION_CALLBACK_SIGNATURE << grBinds->collisionCallback.name << std::endl; } } - if (et.startingInstanceCount != e.startingInstanceCount) - stream << PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT << et.startingInstanceCount << std::endl; - if (et.Importer_GLTF.AccessorIndexVertex != e.Importer_GLTF.AccessorIndexVertex) - stream << PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX << et.Importer_GLTF.AccessorIndexVertex << std::endl; - if (et.Importer_GLTF.AccessorIndexNormal != e.Importer_GLTF.AccessorIndexNormal) - stream << PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL << et.Importer_GLTF.AccessorIndexNormal << std::endl; - if (et.Importer_GLTF.AccessorIndexUV != e.Importer_GLTF.AccessorIndexUV) - stream << PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV << et.Importer_GLTF.AccessorIndexUV << std::endl; - if (et.Importer_GLTF.AccessorIndexIndex != e.Importer_GLTF.AccessorIndexIndex) - stream << PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX << et.Importer_GLTF.AccessorIndexIndex << std::endl; - if (et.bt.startingMass != e.bt.startingMass) - stream << PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS << et.bt.startingMass << std::endl; - if (et.bt.startingCollisionLayer != e.bt.startingCollisionLayer) - stream << PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER << static_cast<PhysicsCollision_T>(et.bt.startingCollisionLayer) << std::endl; - if (et.bt.startingCollisionMask != e.bt.startingCollisionMask) - stream << PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK << static_cast<PhysicsCollision_T>(et.bt.startingCollisionMask) << std::endl; + for (size_t i = 0; i < et.detailsCount; ++i) { + const EntityTypeDetails &etd = et.details[i]; + snprintf(textureAssetKey, AssetKeyLength + 1, "%s", etd.textureAssetKey); + stream << PKE_PROJ_FILE_ENTITY_TYPE_DETAILS_BEGIN << std::endl; + if (etd.startingInstanceCount != e.details[0].startingInstanceCount) + stream << PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT << etd.startingInstanceCount << std::endl; + if (etd.bt.startingMass != e.details[0].bt.startingMass) + stream << PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS << etd.bt.startingMass << std::endl; + if (etd.bt.startingCollisionLayer != e.details[0].bt.startingCollisionLayer) + stream << PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER << static_cast<PhysicsCollision_T>(etd.bt.startingCollisionLayer) << std::endl; + if (etd.bt.startingCollisionMask != e.details[0].bt.startingCollisionMask) + stream << PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK << static_cast<PhysicsCollision_T>(etd.bt.startingCollisionMask) << std::endl; + stream << PKE_PROJ_FILE_ENTITY_TYPE_DETAILS_END << std::endl; + } } void Proj_SerializeAsset(std::ofstream &stream, const Asset &asset) { @@ -180,11 +175,6 @@ void Proj_ParseEntityType(std::ifstream &stream) { strncpy(et.modelAssetKey, projReadLine + prefixLen, AssetKeyLength); continue; } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_TEXTURE_ASSET_KEY)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_TEXTURE_ASSET_KEY); - strncpy(et.textureAssetKey, projReadLine + prefixLen, AssetKeyLength); - continue; - } if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE)) { uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE); uint64_t len = strlen(projReadLine + prefixLen) + 1; @@ -205,56 +195,48 @@ void Proj_ParseEntityType(std::ifstream &stream) { memcpy(collisionSig, projReadLine + prefixLen, 16); continue; } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT); - STR2NUM_ERROR result = str2num(et.startingInstanceCount, projReadLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexVertex, projReadLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexNormal, projReadLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexUV, projReadLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexIndex, projReadLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS); - STR2NUM_ERROR result = str2num(et.bt.startingMass, projReadLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER); - PhysicsCollision_T val = static_cast<PhysicsCollision_T>(et.bt.startingCollisionLayer); - STR2NUM_ERROR result = str2num(val, projReadLine + prefixLen); - et.bt.startingCollisionLayer = PhysicsCollision{val}; - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK)) { - uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK); - PhysicsCollision_T val = static_cast<PhysicsCollision_T>(et.bt.startingCollisionMask); - STR2NUM_ERROR result = str2num(val, projReadLine + prefixLen); - et.bt.startingCollisionMask = PhysicsCollision{val}; - assert(result == STR2NUM_ERROR::SUCCESS); + uint8_t count = 0; + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_DETAILS_BEGIN)) { + EntityTypeDetails &etd = et.details[count]; + while (stream.getline(projReadLine, projReadLineLength)) { + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_DETAILS_END)) { + count += 1; + break; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_TEXTURE_ASSET_KEY)) { + uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_TEXTURE_ASSET_KEY); + strncpy(etd.textureAssetKey, projReadLine + prefixLen, AssetKeyLength); + continue; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT)) { + uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT); + STR2NUM_ERROR result = str2num(etd.startingInstanceCount, projReadLine + prefixLen); + assert(result == STR2NUM_ERROR::SUCCESS); + continue; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS)) { + uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS); + STR2NUM_ERROR result = str2num(etd.bt.startingMass, projReadLine + prefixLen); + assert(result == STR2NUM_ERROR::SUCCESS); + continue; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER)) { + uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER); + PhysicsCollision_T val = static_cast<PhysicsCollision_T>(etd.bt.startingCollisionLayer); + STR2NUM_ERROR result = str2num(val, projReadLine + prefixLen); + etd.bt.startingCollisionLayer = PhysicsCollision{val}; + assert(result == STR2NUM_ERROR::SUCCESS); + continue; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK)) { + uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK); + PhysicsCollision_T val = static_cast<PhysicsCollision_T>(etd.bt.startingCollisionMask); + STR2NUM_ERROR result = str2num(val, projReadLine + prefixLen); + etd.bt.startingCollisionMask = PhysicsCollision{val}; + assert(result == STR2NUM_ERROR::SUCCESS); + continue; + } + } continue; } } |
