diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-08-05 19:07:06 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-08-06 17:00:26 -0400 |
| commit | 9a48fc73d7a25685fc7917c3edc271f595e093da (patch) | |
| tree | 0f400205af7d419e9f4fb40ebd3ad1db12c49219 /src/project.cpp | |
| parent | f7d860cee74ad3b94e0d15ea157783b7760f6d55 (diff) | |
pke: first-pass add asset details
Diffstat (limited to 'src/project.cpp')
| -rw-r--r-- | src/project.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/project.cpp b/src/project.cpp index 0669c75..cf774a1 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -3,6 +3,7 @@ #include "asset-manager.hpp" #include "components.hpp" +#include "pk.h" #include "plugins.hpp" #include "entities.hpp" #include "helpers.hpp" @@ -46,6 +47,8 @@ const char* const PKE_PROJ_FILE_ENTITY_TYPE_PHYSICS_STARTING_COLLISION_MASK = "B const char* const PKE_PROJ_FILE_ASSET_KEY = "Asset::Key: "; const char* const PKE_PROJ_FILE_ASSET_BASE_PATH = "Asset::BasePath: "; const char* const PKE_PROJ_FILE_ASSET_TYPE = "Asset::Type: "; +const char* const PKE_PROJ_FILE_ASSET_TXTR_WIDTH = "Asset::Width: "; +const char* const PKE_PROJ_FILE_ASSET_TXTR_HEIGHT = "Asset::Height: "; /* void Proj_SerializeProjectSettings(std::ostream &stream) { @@ -124,6 +127,15 @@ void Proj_SerializeAsset(std::ostream &stream, const Asset &asset) { if (asset.type != a.type) { stream << PKE_PROJ_FILE_ASSET_TYPE << static_cast<uint64_t>(asset.type) << std::endl; } + switch (asset.type) { + case PKE_ASSET_TYPE_TEXTURE: + stream << PKE_PROJ_FILE_ASSET_TXTR_WIDTH << asset.details.texture.width << std::endl; + stream << PKE_PROJ_FILE_ASSET_TXTR_HEIGHT << asset.details.texture.height << std::endl; + break; + default: + /* no-op */ + break; + } } /* @@ -295,15 +307,18 @@ void Proj_DeserializeEntityType(std::istream &stream) { void Proj_DeserializeAssset(std::istream &stream) { size_t prefixLen, strLen; AssetKey keyStr; + union pke_asset_details details; + memset(&details, 0, sizeof(union pke_asset_details)); keyStr[AssetKeyLength-1] = '\0'; const size_t path_len = 256; char basePath[path_len]; basePath[0] = '\0'; basePath[path_len-1] = '\0'; AssetType at{PKE_ASSET_TYPE_UNSET}; + PK_STN_RES result; while (memset(projReadLine, 0, projReadLineLength), stream.getline(projReadLine, projReadLineLength)) { if (strcmp(projReadLine, PKE_PROJ_FILE_OBJ_END) == 0) { - AM_Register(keyStr, at, basePath); + AM_Register(keyStr, at, basePath, &details); return; } if (strstr(projReadLine, PKE_PROJ_FILE_ASSET_KEY) != nullptr) { @@ -322,9 +337,21 @@ void Proj_DeserializeAssset(std::istream &stream) { if (strstr(projReadLine, PKE_PROJ_FILE_ASSET_TYPE) != nullptr) { prefixLen = strlen(PKE_PROJ_FILE_ASSET_TYPE); AssetType_T val{}; - STR2NUM_ERROR result = str2num(val, projReadLine + prefixLen); + result = pk_stn<AssetType_T>(&val, projReadLine + prefixLen, nullptr); at = AssetType{val}; - assert(result == STR2NUM_ERROR::SUCCESS); + assert(result == PK_STN_RES_SUCCESS); + continue; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ASSET_TXTR_WIDTH) != nullptr) { + prefixLen = strlen(PKE_PROJ_FILE_ASSET_TXTR_WIDTH); + result = pk_stn<uint32_t>(&details.texture.width, projReadLine + prefixLen, nullptr); + assert(result == PK_STN_RES_SUCCESS); + continue; + } + if (strstr(projReadLine, PKE_PROJ_FILE_ASSET_TXTR_HEIGHT) != nullptr) { + prefixLen = strlen(PKE_PROJ_FILE_ASSET_TXTR_HEIGHT); + result = pk_stn<uint32_t>(&details.texture.height, projReadLine + prefixLen, nullptr); + assert(result == PK_STN_RES_SUCCESS); continue; } } |
