diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-07 11:03:38 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-07 11:13:40 -0500 |
| commit | 8bbe530d7e5162ed47977c0381e61ed68c8f8ada (patch) | |
| tree | d405a054461a308784efcff2d27392d0e40ed946 /src/game.cpp | |
| parent | e2e1d4646fa3a196b6247ba2dc04603d393df62f (diff) | |
Breaking change - add project file - EntityType
Diffstat (limited to 'src/game.cpp')
| -rw-r--r-- | src/game.cpp | 165 |
1 files changed, 2 insertions, 163 deletions
diff --git a/src/game.cpp b/src/game.cpp index 6c47381..98962d7 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -12,6 +12,7 @@ #include "physics.hpp" #include "player-input.hpp" #include "plugins.hpp" +#include "project.hpp" #include "vendor/glm_include.hpp" #include "window.hpp" @@ -32,23 +33,9 @@ const char *PKE_FILE_BEGIN = ":PKFB:"; const char *PKE_FILE_END = ":PKFE:"; const char *PKE_FILE_VERSION = ":0:"; const char *PKE_FILE_OBJ_END = ""; -const char *PKE_FILE_OBJ_ENTITY_TYPE = "EntityType:"; const char *PKE_FILE_OBJ_INSTANCE = "Instance:"; const char *PKE_FILE_OBJ_CAMERA = "Camera:"; -const char *PKE_FILE_ENTITY_TYPE_MODELS_DIR = "ModelsDir: "; -const char *PKE_FILE_ENTITY_TYPE_MODEL_FILE = "ModelFile: "; -const char *PKE_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE = "EntityTypeCode: "; -const char *PKE_FILE_ENTITY_TYPE_ENTITY_HANDLE = "EntityHandle: "; -const char *PKE_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT = "StartingInstanceCount: "; -const char *PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX = "Importer_GLTF::AccessorIndexVertex: "; -const char *PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL = "Importer_GLTF::AccessorIndexNormal: "; -const char *PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV = "Importer_GLTF::AccessorIndexUV: "; -const char *PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX = "Importer_GLTF::AccessorIndexIndex: "; -const char *PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS = "BT::StartingMass: "; -const char *PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER = "BT::StartingCollisionLayer: "; -const char *PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK = "BT::StartingCollisionMask: "; - const char *PKE_FILE_INSTANCE_ENTITY_HANDLE = "EntityHandle: "; const char *PKE_FILE_INSTANCE_ENTITY_TYPE_CODE = "EntityTypeCode: "; const char *PKE_FILE_INSTANCE_POS_POS = "InstPos::Pos: "; @@ -93,36 +80,6 @@ void SerializeCamera(std::ofstream &stream, const PkeCamera &cam) { } } -void SerializeEntityType(std::ofstream &stream, const EntityType &et) { - char handleStr[19] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; - snprintf(handleStr, 19, "0x%016lX",static_cast<EntityHandle_T>(et.entityHandle)); - EntityType e{}; - if (et.modelsDir != e.modelsDir) - stream << PKE_FILE_ENTITY_TYPE_MODELS_DIR << et.modelsDir << std::endl; - if (et.modelFile != e.modelFile) - stream << PKE_FILE_ENTITY_TYPE_MODEL_FILE << et.modelFile << std::endl; - if (et.entityTypeCode != e.entityTypeCode) - stream << PKE_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE << et.entityTypeCode << std::endl; - if (et.entityHandle != e.entityHandle) - stream << PKE_FILE_ENTITY_TYPE_ENTITY_HANDLE << handleStr << std::endl; - if (et.startingInstanceCount != e.startingInstanceCount) - stream << PKE_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT << et.startingInstanceCount << std::endl; - if (et.Importer_GLTF.AccessorIndexVertex != e.Importer_GLTF.AccessorIndexVertex) - stream << PKE_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_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_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_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX << et.Importer_GLTF.AccessorIndexIndex << std::endl; - if (et.bt.startingMass != e.bt.startingMass) - stream << PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS << et.bt.startingMass << std::endl; - if (et.bt.startingCollisionLayer != e.bt.startingCollisionLayer) - stream << PKE_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_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK << static_cast<PhysicsCollision_T>(et.bt.startingCollisionMask) << std::endl; -} - void SerializeInstance(std::ofstream &stream, const CompInstance &comp) { char handleStr[19] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' }; snprintf(handleStr, 19, "0x%016lX",static_cast<EntityHandle_T>(comp.entHandle)); @@ -252,109 +209,6 @@ void ParseCamera(std::ifstream &stream) { } } -void ParseEntityType(std::ifstream &stream) { - EntityType et{}; - while (stream.getline(readLine, readLineLength)) { - if (strcmp(PKE_FILE_OBJ_END, readLine) == 0) { - int64_t existingEntityTypeIndex = EntityType_FindByTypeCode(et.entityTypeCode); - if (existingEntityTypeIndex != -1) { - continue; - } - et.entityHandle = ECS_CreateEntity(); - EntityType_Load(et); - GlobalEntityTypes.Push(et); - return; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_MODELS_DIR)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_MODELS_DIR); - uint64_t len = strlen(readLine + prefixLen) + 1; - char *val = Pke_New<char>(len); - memset(reinterpret_cast<void *>(val), '\0', len); - memcpy(val, readLine + prefixLen, len); - et.modelsDir = val; - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_MODEL_FILE)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_MODEL_FILE); - uint64_t len = strlen(readLine + prefixLen) + 1; - char *val = Pke_New<char>(len); - memset(reinterpret_cast<void *>(val), '\0', len); - memcpy(val, readLine + prefixLen, len); - et.modelFile = val; - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE); - uint64_t len = strlen(readLine + prefixLen) + 1; - char *val = Pke_New<char>(len); - memset(reinterpret_cast<void *>(val), '\0', len); - memcpy(val, readLine + prefixLen, len); - et.entityTypeCode = val; - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_ENTITY_HANDLE)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_ENTITY_HANDLE); - EntityHandle_T handle_t; - STR2NUM_ERROR result = str2num(handle_t, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - et.entityHandle = EntityHandle{handle_t}; - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_STARTING_INSTANCE_COUNT); - STR2NUM_ERROR result = str2num(et.startingInstanceCount, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_VERTEX); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexVertex, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_NORMAL); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexNormal, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_UV); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexUV, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_IMPORTER_GLTF_ACCESSOR_INDEX_INDEX); - STR2NUM_ERROR result = str2num(et.Importer_GLTF.AccessorIndexIndex, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_MASS); - STR2NUM_ERROR result = str2num(et.bt.startingMass, readLine + prefixLen); - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_LAYER); - PhysicsCollision_T val = static_cast<PhysicsCollision_T>(et.bt.startingCollisionLayer); - STR2NUM_ERROR result = str2num(val, readLine + prefixLen); - et.bt.startingCollisionLayer = PhysicsCollision{val}; - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - if (strstr(readLine, PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK)) { - uint64_t prefixLen = strlen(PKE_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK); - PhysicsCollision_T val = static_cast<PhysicsCollision_T>(et.bt.startingCollisionMask); - STR2NUM_ERROR result = str2num(val, readLine + prefixLen); - et.bt.startingCollisionMask = PhysicsCollision{val}; - assert(result == STR2NUM_ERROR::SUCCESS); - continue; - } - } -} - void ParseInstance(std::ifstream &stream) { CompInstance comp{}; InstPos instPos{}; @@ -507,18 +361,6 @@ void Game_SaveSceneFile(const char *sceneFilePath) { } } - for (long i = 0; i < GlobalEntityTypes.Count(); ++i) { - f << PKE_FILE_OBJ_ENTITY_TYPE << std::endl; - const auto &et = GlobalEntityTypes[i]; - const CompGrBinds *grBinds = ECS_GetGrBinds(et.entityHandle); - // TODO ignore if no instances - if (grBinds == nullptr) { - continue; - } - SerializeEntityType(f, et); - f << PKE_FILE_OBJ_END << std::endl; - } - int64_t instanceBucketCount = ECS_GetInstances_BucketCount(); for (long b = 0; b < instanceBucketCount; ++b) { uint64_t count; @@ -552,10 +394,6 @@ void Game_LoadSceneFile(const char *sceneFilePath) { ParseCamera(f); continue; } - if (strcmp(PKE_FILE_OBJ_ENTITY_TYPE, readLine) == 0) { - ParseEntityType(f); - continue; - } if (strcmp(PKE_FILE_OBJ_INSTANCE, readLine) == 0) { ParseInstance(f); continue; @@ -637,6 +475,7 @@ void Game_Main(PKEWindowProperties windowProps, const char *executablePath) { if (pkePlugin.OnInit) { pkePlugin.OnInit(); } + PkeProject_Load(); GameTimePoint lastTimePoint = pkeSettings.steadyClock.now(); double deltaTillNextRender = pkeSettings.deltaPerFrame; |
