Skip to content

Instantly share code, notes, and snippets.

@waldnercharles
Created August 30, 2024 23:02
Show Gist options
  • Save waldnercharles/d9715e1c5da5ec007e7be1dac0925611 to your computer and use it in GitHub Desktop.
Save waldnercharles/d9715e1c5da5ec007e7be1dac0925611 to your computer and use it in GitHub Desktop.
#pragma once
#include <pico_ecs.h>
// -- System API --
template<ecs_system_fn F>
inline ecs_id_t ecs_system;
template<ecs_system_fn F, typename... Cs>
ecs_id_t ecs_register_system(ecs_t *ecs, void *udata)
{
ecs_id_t id = ecs_system<F> = ecs_register_system(ecs, F, NULL, NULL, udata);
(ecs_require_component<Cs>(ecs, id), ...);
return id;
}
template<typename T>
inline void ecs_require_component(ecs_t *ecs, ecs_id_t sys_id)
{
ecs_require_component(ecs, sys_id, ecs_component<T>);
}
template<auto F>
inline ecs_ret_t ecs_update_system(ecs_t *ecs, ecs_dt_t dt)
{
const ecs_id_t system_id = ecs_system<F>;
return ecs_update_system(ecs, system_id, dt);
}
// -- Component API --
template<typename T>
inline ecs_id_t ecs_component;
template<typename T>
inline ecs_id_t ecs_register_component(ecs_t *ecs, ecs_constructor_fn constructor = NULL, ecs_destructor_fn destructor = NULL)
{
return ecs_component<T> = ecs_register_component(ecs, sizeof(T), constructor, destructor);
}
// -- Entity API --
template<typename T>
inline T *ecs_add(ecs_t *ecs, ecs_id_t entity_id, void *args = NULL)
{
return (T *)ecs_add(ecs, entity_id, ecs_component<T>, args);
}
template<typename T>
inline T *ecs_get(ecs_t *ecs, ecs_id_t entity_id)
{
return (T *)ecs_get(ecs, entity_id, ecs_component<T>);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment