Added the ability for assets to be considered components and have OnRemove callbacks
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
@@ -3,6 +3,5 @@ TYPE(AssetHandle, GenericHandle)
|
||||
/* #include LOADERS_TYPES_H */
|
||||
|
||||
TYPE(TextAsset, struct {
|
||||
CONST_STR text;
|
||||
U64 length;
|
||||
evstring text;
|
||||
})
|
||||
|
||||
@@ -10,7 +10,17 @@ typedef struct {
|
||||
U32 ticks_left;
|
||||
} Asset;
|
||||
|
||||
static struct {
|
||||
GenericHandle assetType;
|
||||
} LoaderData;
|
||||
|
||||
|
||||
const Asset *
|
||||
ev_asset_getfromhandle(
|
||||
AssetHandle handle);
|
||||
|
||||
void
|
||||
ev_asset_markas(
|
||||
AssetHandle handle,
|
||||
GenericHandle assetType,
|
||||
PTR data);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#define TYPE_MODULE evmod_assets
|
||||
#include <evol/meta/type_import.h>
|
||||
#include <evol/common/ev_log.h>
|
||||
|
||||
#include "../LoaderCommon.h"
|
||||
#include "TextLoader.h"
|
||||
@@ -9,8 +10,25 @@ ev_textloader_loadasset(
|
||||
AssetHandle handle)
|
||||
{
|
||||
const Asset *asset = ev_asset_getfromhandle(handle);
|
||||
return (TextAsset) {
|
||||
.text = asset->data,
|
||||
.length = asset->size
|
||||
TextAsset inter = (TextAsset) {
|
||||
.text = evstring_new(asset->data),
|
||||
};
|
||||
|
||||
ev_asset_markas(handle, LoaderData.assetType, &inter);
|
||||
|
||||
return inter;
|
||||
}
|
||||
|
||||
void
|
||||
ev_textloader_textasset_destr(
|
||||
TextAsset txt)
|
||||
{
|
||||
evstring_free(txt.text);
|
||||
}
|
||||
|
||||
void
|
||||
ev_textloader_setassettype(
|
||||
GenericHandle type)
|
||||
{
|
||||
LoaderData.assetType = type;
|
||||
}
|
||||
|
||||
@@ -3,3 +3,11 @@
|
||||
TextAsset
|
||||
ev_textloader_loadasset(
|
||||
AssetHandle handle);
|
||||
|
||||
void
|
||||
ev_textloader_textasset_destr(
|
||||
TextAsset txt);
|
||||
|
||||
void
|
||||
ev_textloader_setassettype(
|
||||
GenericHandle type);
|
||||
|
||||
28
src/mod.c
28
src/mod.c
@@ -29,8 +29,20 @@ void
|
||||
onRemoveAssetComponent(
|
||||
ECSQuery query)
|
||||
{
|
||||
Asset *asset = ECS->getQueryColumn(query, sizeof(Asset), 1);
|
||||
aligned_free(asset->data);
|
||||
Asset *assets = ECS->getQueryColumn(query, sizeof(Asset), 1);
|
||||
for(int i = 0; i < ECS->getQueryMatchCount(query); i++) {
|
||||
aligned_free(assets[i].data);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
onRemoveTextAsset(
|
||||
ECSQuery query)
|
||||
{
|
||||
TextAsset *assets = ECS->getQueryColumn(query, sizeof(TextAsset), 1);
|
||||
for(int i = 0; i < ECS->getQueryMatchCount(query); i++) {
|
||||
ev_textloader_textasset_destr(assets[i]);
|
||||
}
|
||||
}
|
||||
|
||||
EV_CONSTRUCTOR
|
||||
@@ -47,6 +59,9 @@ EV_CONSTRUCTOR
|
||||
|
||||
AssetManagerData.assetcomponent_id = AssetECS->registerComponent("Asset", sizeof(Asset), EV_ALIGNOF(Asset));
|
||||
AssetECS->setOnRemoveTrigger("AssetComponentOnRemove", "Asset", onRemoveAssetComponent);
|
||||
|
||||
ev_textloader_setassettype(AssetECS->registerComponent("TextAsset", sizeof(TextAsset), EV_ALIGNOF(TextAsset)));
|
||||
AssetECS->setOnRemoveTrigger("TextAssetOnRemove", "TextAsset", onRemoveTextAsset);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,6 +139,15 @@ ev_asset_getfromhandle(
|
||||
return AssetECS->getComponent(AssetManagerData.world, handle, AssetManagerData.assetcomponent_id);
|
||||
}
|
||||
|
||||
void
|
||||
ev_asset_markas(
|
||||
AssetHandle handle,
|
||||
GenericHandle assetType,
|
||||
PTR data)
|
||||
{
|
||||
AssetECS->setComponent(AssetManagerData.world, handle, assetType, data);
|
||||
}
|
||||
|
||||
EV_BINDINGS
|
||||
{
|
||||
EV_NS_BIND_FN(AssetManager, mount, ev_assetmanager_mount);
|
||||
|
||||
Reference in New Issue
Block a user