diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-21 17:44:03 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-12-23 11:42:23 -0500 |
| commit | fa7fc343a0e444da72938fad58d219cf52228976 (patch) | |
| tree | 24630be0c54f9768a13f32c5970558768e343543 /src/project.cpp | |
| parent | 6fa3b137c74536d2bab77f3309ca5b4c60953fe0 (diff) | |
plugin checkpoint - multiple plugins and collision callbacks
Diffstat (limited to 'src/project.cpp')
| -rw-r--r-- | src/project.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/project.cpp b/src/project.cpp index e5b5583..08c7c2a 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -27,6 +27,7 @@ const char* const PKE_PROJ_FILE_ENTITY_TYPE_MODELS_DIR = "ModelsDir: "; const char* const PKE_PROJ_FILE_ENTITY_TYPE_MODEL_FILE = "ModelFile: "; 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_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: "; @@ -61,6 +62,7 @@ void Proj_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", et.entityHandle.hash); EntityType e{}; + CompGrBinds *grBinds = ECS_GetGrBinds(et.entityHandle); if (et.modelsDir != e.modelsDir) stream << PKE_PROJ_FILE_ENTITY_TYPE_MODELS_DIR << et.modelsDir << std::endl; if (et.modelFile != e.modelFile) @@ -69,6 +71,11 @@ void Proj_SerializeEntityType(std::ofstream &stream, const EntityType &et) { stream << PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_TYPE_CODE << et.entityTypeCode << std::endl; if (et.entityHandle != e.entityHandle) stream << PKE_PROJ_FILE_ENTITY_TYPE_ENTITY_HANDLE << handleStr << std::endl; + if (grBinds) { + if (grBinds->collisionCallback.name[0] != '\0') { + 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) @@ -126,6 +133,8 @@ void Proj_ParseProjectSettings(std::ifstream &stream) { */ void Proj_ParseEntityType(std::ifstream &stream) { + CallbackSignature collisionSig; + collisionSig[0] = '\0'; EntityType et{}; while (stream.getline(projReadLine, projReadLineLength)) { if (strcmp(PKE_PROJ_FILE_OBJ_END, projReadLine) == 0) { @@ -136,6 +145,11 @@ void Proj_ParseEntityType(std::ifstream &stream) { et.entityHandle = ECS_CreateEntity(); EntityType_Load(et); GlobalEntityTypes.Push(et); + CompGrBinds *grBinds = ECS_GetGrBinds(et.entityHandle); + if (grBinds) { + strncpy(grBinds->collisionCallback.name, collisionSig, 16); + PkePlugin_SetSignatureFunc(&grBinds->collisionCallback); + } return; } if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_MODELS_DIR)) { @@ -171,6 +185,11 @@ void Proj_ParseEntityType(std::ifstream &stream) { assert(result == STR2NUM_ERROR::SUCCESS); continue; } + if (strstr(projReadLine, PKE_PROJ_FILE_ENTITY_TYPE_COLLISION_CALLBACK_SIGNATURE)) { + uint64_t prefixLen = strlen(PKE_PROJ_FILE_ENTITY_TYPE_COLLISION_CALLBACK_SIGNATURE); + 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); |
