From 0ebdf27f86b7ed46d8a60b6c6df6f297a7f1430a Mon Sep 17 00:00:00 2001 From: Robear Selwans Date: Wed, 2 Jun 2021 07:59:39 +0200 Subject: [PATCH] Added JSONLoader and JSONAsset Signed-off-by: Robear Selwans --- meson.build | 1 + meta/evmod.namespaces | 7 +++++++ meta/evmod.types | 4 ++++ src/mod.c | 16 ++++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/meson.build b/meson.build index 79ffad7..777649b 100644 --- a/meson.build +++ b/meson.build @@ -14,6 +14,7 @@ mod_src = [ # Loaders 'src/loaders/TextLoader/TextLoader.c', + 'src/loaders/JSONLoader/JSONLoader.c', ] mod_incdir = [ diff --git a/meta/evmod.namespaces b/meta/evmod.namespaces index 4954a64..a1214d3 100644 --- a/meta/evmod.namespaces +++ b/meta/evmod.namespaces @@ -16,3 +16,10 @@ EV_NS_DEF_BEGIN(TextLoader) EV_NS_DEF_FN(TextAsset, loadAsset, (AssetHandle, handle)) EV_NS_DEF_END(TextLoader) + + +EV_NS_DEF_BEGIN(JSONLoader) + +EV_NS_DEF_FN(JSONAsset, loadAsset, (AssetHandle, handle)) + +EV_NS_DEF_END(JSONLoader) diff --git a/meta/evmod.types b/meta/evmod.types index cff8bfa..0ac4ae3 100644 --- a/meta/evmod.types +++ b/meta/evmod.types @@ -5,3 +5,7 @@ TYPE(AssetHandle, GenericHandle) TYPE(TextAsset, struct { evstring text; }) + +TYPE(JSONAsset, struct { + PTR json_data; +}) diff --git a/src/mod.c b/src/mod.c index 5881110..2fcfede 100644 --- a/src/mod.c +++ b/src/mod.c @@ -8,6 +8,7 @@ #include "loaders/LoaderCommon.h" #include "loaders/TextLoader/TextLoader.h" +#include "loaders/JSONLoader/JSONLoader.h" #define AssetSysCheck(...) do { \ assetsys_error_t res = __VA_ARGS__; \ @@ -45,6 +46,16 @@ onRemoveTextAsset( } } +void +onRemoveJSONAsset( + ECSQuery query) +{ + JSONAsset *assets = ECS->getQueryColumn(query, sizeof(JSONAsset), 1); + for(int i = 0; i < ECS->getQueryMatchCount(query); i++) { + ev_jsonloader_jsonasset_destr(assets[i]); + } +} + EV_CONSTRUCTOR { static_assert(sizeof(AssetEntityID) == sizeof(AssetHandle), "AssetEntityID not the same size of AssetHandle"); @@ -62,6 +73,9 @@ EV_CONSTRUCTOR ev_textloader_setassettype(AssetECS->registerComponent("TextAsset", sizeof(TextAsset), EV_ALIGNOF(TextAsset))); AssetECS->setOnRemoveTrigger("TextAssetOnRemove", "TextAsset", onRemoveTextAsset); + + ev_jsonloader_setassettype(AssetECS->registerComponent("JSONAsset", sizeof(JSONAsset), EV_ALIGNOF(JSONAsset))); + AssetECS->setOnRemoveTrigger("JSONAssetOnRemove", "JSONAsset", onRemoveJSONAsset); } } @@ -158,5 +172,7 @@ EV_BINDINGS EV_NS_BIND_FN(TextLoader, loadAsset, ev_textloader_loadasset); + EV_NS_BIND_FN(JSONLoader, loadAsset, ev_jsonloader_loadasset); + return 0; }