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 */
|
/* #include LOADERS_TYPES_H */
|
||||||
|
|
||||||
TYPE(TextAsset, struct {
|
TYPE(TextAsset, struct {
|
||||||
CONST_STR text;
|
evstring text;
|
||||||
U64 length;
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -10,7 +10,17 @@ typedef struct {
|
|||||||
U32 ticks_left;
|
U32 ticks_left;
|
||||||
} Asset;
|
} Asset;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
GenericHandle assetType;
|
||||||
|
} LoaderData;
|
||||||
|
|
||||||
|
|
||||||
const Asset *
|
const Asset *
|
||||||
ev_asset_getfromhandle(
|
ev_asset_getfromhandle(
|
||||||
AssetHandle handle);
|
AssetHandle handle);
|
||||||
|
|
||||||
|
void
|
||||||
|
ev_asset_markas(
|
||||||
|
AssetHandle handle,
|
||||||
|
GenericHandle assetType,
|
||||||
|
PTR data);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#define TYPE_MODULE evmod_assets
|
#define TYPE_MODULE evmod_assets
|
||||||
#include <evol/meta/type_import.h>
|
#include <evol/meta/type_import.h>
|
||||||
|
#include <evol/common/ev_log.h>
|
||||||
|
|
||||||
#include "../LoaderCommon.h"
|
#include "../LoaderCommon.h"
|
||||||
#include "TextLoader.h"
|
#include "TextLoader.h"
|
||||||
@@ -9,8 +10,25 @@ ev_textloader_loadasset(
|
|||||||
AssetHandle handle)
|
AssetHandle handle)
|
||||||
{
|
{
|
||||||
const Asset *asset = ev_asset_getfromhandle(handle);
|
const Asset *asset = ev_asset_getfromhandle(handle);
|
||||||
return (TextAsset) {
|
TextAsset inter = (TextAsset) {
|
||||||
.text = asset->data,
|
.text = evstring_new(asset->data),
|
||||||
.length = asset->size
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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
|
TextAsset
|
||||||
ev_textloader_loadasset(
|
ev_textloader_loadasset(
|
||||||
AssetHandle handle);
|
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(
|
onRemoveAssetComponent(
|
||||||
ECSQuery query)
|
ECSQuery query)
|
||||||
{
|
{
|
||||||
Asset *asset = ECS->getQueryColumn(query, sizeof(Asset), 1);
|
Asset *assets = ECS->getQueryColumn(query, sizeof(Asset), 1);
|
||||||
aligned_free(asset->data);
|
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
|
EV_CONSTRUCTOR
|
||||||
@@ -47,6 +59,9 @@ EV_CONSTRUCTOR
|
|||||||
|
|
||||||
AssetManagerData.assetcomponent_id = AssetECS->registerComponent("Asset", sizeof(Asset), EV_ALIGNOF(Asset));
|
AssetManagerData.assetcomponent_id = AssetECS->registerComponent("Asset", sizeof(Asset), EV_ALIGNOF(Asset));
|
||||||
AssetECS->setOnRemoveTrigger("AssetComponentOnRemove", "Asset", onRemoveAssetComponent);
|
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);
|
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_BINDINGS
|
||||||
{
|
{
|
||||||
EV_NS_BIND_FN(AssetManager, mount, ev_assetmanager_mount);
|
EV_NS_BIND_FN(AssetManager, mount, ev_assetmanager_mount);
|
||||||
|
|||||||
Reference in New Issue
Block a user