refactor separate framework from game code, add demo3d
This commit is contained in:
parent
19ae869769
commit
40f5cdcaa5
92 changed files with 2665 additions and 6547 deletions
67
demo3d/client/world/demo3d_entity.h
Normal file
67
demo3d/client/world/demo3d_entity.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#pragma once
|
||||
|
||||
#include "pxl8_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct demo3d_entity_pool demo3d_entity_pool;
|
||||
|
||||
typedef struct demo3d_entity {
|
||||
u32 idx;
|
||||
u32 gen;
|
||||
} demo3d_entity;
|
||||
|
||||
#define DEMO3D_ENTITY_INVALID ((demo3d_entity){0, 0})
|
||||
|
||||
typedef u32 demo3d_entity_component;
|
||||
typedef u32 demo3d_entity_relationship;
|
||||
|
||||
#define DEMO3D_ENTITY_COMPONENT_INVALID 0
|
||||
#define DEMO3D_ENTITY_RELATIONSHIP_INVALID 0
|
||||
|
||||
demo3d_entity_pool* demo3d_entity_pool_create(u32 capacity);
|
||||
void demo3d_entity_pool_clear(demo3d_entity_pool* pool);
|
||||
void demo3d_entity_pool_destroy(demo3d_entity_pool* pool);
|
||||
|
||||
demo3d_entity demo3d_entity_spawn(demo3d_entity_pool* pool);
|
||||
void demo3d_entity_despawn(demo3d_entity_pool* pool, demo3d_entity e);
|
||||
bool demo3d_entity_alive(const demo3d_entity_pool* pool, demo3d_entity e);
|
||||
u32 demo3d_entity_count(const demo3d_entity_pool* pool);
|
||||
|
||||
demo3d_entity_component demo3d_entity_component_register(demo3d_entity_pool* pool, const char* name, u32 size);
|
||||
demo3d_entity_component demo3d_entity_component_find(const demo3d_entity_pool* pool, const char* name);
|
||||
const char* demo3d_entity_component_name(const demo3d_entity_pool* pool, demo3d_entity_component comp);
|
||||
|
||||
void* demo3d_entity_component_add(demo3d_entity_pool* pool, demo3d_entity e, demo3d_entity_component comp);
|
||||
void* demo3d_entity_component_get(const demo3d_entity_pool* pool, demo3d_entity e, demo3d_entity_component comp);
|
||||
void demo3d_entity_component_remove(demo3d_entity_pool* pool, demo3d_entity e, demo3d_entity_component comp);
|
||||
bool demo3d_entity_component_has(const demo3d_entity_pool* pool, demo3d_entity e, demo3d_entity_component comp);
|
||||
|
||||
demo3d_entity_relationship demo3d_entity_relationship_register(demo3d_entity_pool* pool, const char* name);
|
||||
demo3d_entity_relationship demo3d_entity_relationship_find(const demo3d_entity_pool* pool, const char* name);
|
||||
const char* demo3d_entity_relationship_name(const demo3d_entity_pool* pool, demo3d_entity_relationship rel);
|
||||
|
||||
void demo3d_entity_relationship_add(demo3d_entity_pool* pool, demo3d_entity subject, demo3d_entity_relationship rel, demo3d_entity object);
|
||||
void demo3d_entity_relationship_remove(demo3d_entity_pool* pool, demo3d_entity subject, demo3d_entity_relationship rel, demo3d_entity object);
|
||||
bool demo3d_entity_relationship_has(const demo3d_entity_pool* pool, demo3d_entity subject, demo3d_entity_relationship rel, demo3d_entity object);
|
||||
|
||||
u32 demo3d_entity_relationship_subjects(const demo3d_entity_pool* pool, demo3d_entity object, demo3d_entity_relationship rel, demo3d_entity* out, u32 max);
|
||||
u32 demo3d_entity_relationship_objects(const demo3d_entity_pool* pool, demo3d_entity subject, demo3d_entity_relationship rel, demo3d_entity* out, u32 max);
|
||||
|
||||
typedef void (*demo3d_entity_each_fn)(demo3d_entity_pool* pool, demo3d_entity e, void* ctx);
|
||||
void demo3d_entity_each(demo3d_entity_pool* pool, demo3d_entity_component comp, demo3d_entity_each_fn fn, void* ctx);
|
||||
void demo3d_entity_each_with(demo3d_entity_pool* pool, const demo3d_entity_component* comps, u32 count, demo3d_entity_each_fn fn, void* ctx);
|
||||
|
||||
static inline bool demo3d_entity_valid(demo3d_entity e) {
|
||||
return e.idx != 0 || e.gen != 0;
|
||||
}
|
||||
|
||||
static inline bool demo3d_entity_eq(demo3d_entity a, demo3d_entity b) {
|
||||
return a.idx == b.idx && a.gen == b.gen;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue