summaryrefslogtreecommitdiff
path: root/src/project.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/project.cpp')
-rw-r--r--src/project.cpp33
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;
}
}