device code
parent
04e257ec61
commit
da8030bab8
|
@ -19,6 +19,7 @@ add_executable(eco2d
|
|||
src/player.c
|
||||
src/vehicle.c
|
||||
src/storage.c
|
||||
src/device.c
|
||||
src/signal_handling.c
|
||||
src/profiler.c
|
||||
src/debug_ui.c
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
#include "device.h"
|
||||
#include "entity.h"
|
||||
#include "entity_view.h"
|
||||
#include "world/world.h"
|
||||
|
||||
#include "modules/components.h"
|
||||
|
||||
uint64_t device_spawn(asset_id id) {
|
||||
ecs_entity_t e = entity_spawn(EKIND_DEVICE);
|
||||
|
||||
Device *dev = ecs_get_mut(world_ecs(), e, Device);
|
||||
dev->asset = id;
|
||||
|
||||
return (uint64_t)e;
|
||||
}
|
||||
|
||||
void device_despawn(uint64_t ent_id) {
|
||||
entity_despawn(ent_id);
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#pragma once
|
||||
#include "system.h"
|
||||
#include "assets.h"
|
||||
|
||||
uint64_t device_spawn(asset_id id);
|
||||
void device_despawn(uint64_t ent_id);
|
|
@ -8,6 +8,9 @@
|
|||
#include "modules/systems.h"
|
||||
#include "zpl.h"
|
||||
|
||||
// NOTE(zaklaus): bring in entity spawnlist
|
||||
#include "entity_spawnlist.c"
|
||||
|
||||
uint64_t entity_spawn(uint16_t class_id) {
|
||||
ecs_entity_t e = ecs_new(world_ecs(), 0);
|
||||
|
||||
|
@ -33,6 +36,16 @@ uint64_t entity_spawn(uint16_t class_id) {
|
|||
return (uint64_t)e;
|
||||
}
|
||||
|
||||
uint64_t entity_spawn_id(uint16_t id){
|
||||
for (size_t i = 0; i < MAX_ENTITY_SPAWNDEFS; ++i){
|
||||
if (entity_spawnlist[i].id == id){
|
||||
ZPL_ASSERT(entity_spawnlist[i].proc);
|
||||
return entity_spawnlist[i].proc();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void entity_batch_despawn(uint64_t *ids, size_t num_ids) {
|
||||
for (size_t i = 0; i < num_ids; i++ ) {
|
||||
librg_entity_untrack(world_tracker(), ids[i]);
|
||||
|
@ -45,20 +58,6 @@ void entity_despawn(uint64_t ent_id) {
|
|||
ecs_delete(world_ecs(), ent_id);
|
||||
}
|
||||
|
||||
// NOTE(zaklaus): bring in entity spawnlist
|
||||
#include "entity_spawnlist.c"
|
||||
|
||||
uint64_t entity_spawn_id(uint16_t id){
|
||||
for (size_t i = 0; i < MAX_ENTITY_SPAWNDEFS; ++i){
|
||||
if (entity_spawnlist[i].id == id){
|
||||
ZPL_ASSERT(entity_spawnlist[i].proc);
|
||||
return entity_spawnlist[i].proc();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void entity_set_position(uint64_t ent_id, float x, float y) {
|
||||
Position *p = ecs_get_mut(world_ecs(), ent_id, Position);
|
||||
p->x = x;
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
#define ENTITY_ACTION_VELOCITY_THRESHOLD 0.05f
|
||||
|
||||
uint64_t entity_spawn(uint16_t class_id /* 0 = no streaming */);
|
||||
uint64_t entity_spawn_id(uint16_t id);
|
||||
void entity_batch_despawn(uint64_t *ids, size_t num_ids);
|
||||
void entity_despawn(uint64_t ent_id);
|
||||
void entity_set_position(uint64_t ent_id, float x, float y);
|
||||
|
||||
uint64_t entity_spawn_id(uint16_t id);
|
||||
|
||||
// NOTE(zaklaus): action-based entity stream throttling
|
||||
void entity_wake(uint64_t ent_id);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// NOTE(zaklaus): access to spawners
|
||||
#include "storage.h"
|
||||
|
||||
struct {
|
||||
static struct {
|
||||
asset_id id;
|
||||
uint64_t (*proc)();
|
||||
} entity_spawnlist[] = {
|
||||
|
|
|
@ -1,61 +1,9 @@
|
|||
#include "items.h"
|
||||
#include "entity_view.h"
|
||||
|
||||
#define ITEM_HOLD(asset, qty)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_HOLD,\
|
||||
.max_quantity = qty,\
|
||||
}
|
||||
|
||||
#define ITEM_BLOCK(asset, qty, build_asset)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PLACE,\
|
||||
.max_quantity = qty,\
|
||||
.place = {\
|
||||
.kind = build_asset,\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_BLOCK_DIR(asset, qty, build_asset)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PLACE,\
|
||||
.max_quantity = qty,\
|
||||
.place = {\
|
||||
.kind = build_asset,\
|
||||
.directional = true,\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_PROXY(asset, proxy_id)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PROXY,\
|
||||
.proxy = {\
|
||||
.id = proxy_id,\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_ENT(asset, qty, eid)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PLACE_ITEM,\
|
||||
.max_quantity = qty,\
|
||||
.place_item = {\
|
||||
.id = eid\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_SELF(asset, qty) ITEM_BLOCK(asset, qty, asset)
|
||||
#define ITEM_SELF_DIR(asset, qty) ITEM_BLOCK_DIR(asset, qty, asset)
|
||||
#include "items_list_helpers.h"
|
||||
|
||||
static item_desc items[] = {
|
||||
{
|
||||
.kind = 0,
|
||||
.max_quantity = 0,
|
||||
},
|
||||
{ .kind = 0, .max_quantity = 0, },
|
||||
ITEM_BLOCK(ASSET_DEMO_ICEMAKER, 64, ASSET_WATER),
|
||||
ITEM_SELF(ASSET_FENCE, 64),
|
||||
ITEM_SELF(ASSET_WOOD, 64),
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
#pragma once
|
||||
|
||||
#define ITEM_HOLD(asset, qty)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_HOLD,\
|
||||
.max_quantity = qty,\
|
||||
}
|
||||
|
||||
#define ITEM_BLOCK(asset, qty, build_asset)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PLACE,\
|
||||
.max_quantity = qty,\
|
||||
.place = {\
|
||||
.kind = build_asset,\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_BLOCK_DIR(asset, qty, build_asset)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PLACE,\
|
||||
.max_quantity = qty,\
|
||||
.place = {\
|
||||
.kind = build_asset,\
|
||||
.directional = true,\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_PROXY(asset, proxy_id)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PROXY,\
|
||||
.proxy = {\
|
||||
.id = proxy_id,\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_ENT(asset, qty, eid)\
|
||||
{\
|
||||
.kind = asset,\
|
||||
.usage = UKIND_PLACE_ITEM,\
|
||||
.max_quantity = qty,\
|
||||
.place_item = {\
|
||||
.id = eid\
|
||||
}\
|
||||
}
|
||||
|
||||
#define ITEM_SELF(asset, qty) ITEM_BLOCK(asset, qty, asset)
|
||||
#define ITEM_SELF_DIR(asset, qty) ITEM_BLOCK_DIR(asset, qty, asset)
|
|
@ -1,4 +1,5 @@
|
|||
#include "storage.h"
|
||||
#include "device.h"
|
||||
#include "entity.h"
|
||||
#include "entity_view.h"
|
||||
#include "world/world.h"
|
||||
|
@ -6,10 +7,7 @@
|
|||
#include "modules/components.h"
|
||||
|
||||
uint64_t storage_spawn(void) {
|
||||
ecs_entity_t e = entity_spawn(EKIND_DEVICE);
|
||||
|
||||
Device *dev = ecs_get_mut(world_ecs(), e, Device);
|
||||
dev->asset = ASSET_CHEST;
|
||||
ecs_entity_t e = device_spawn(ASSET_CHEST);
|
||||
|
||||
ItemContainer *storage = ecs_get_mut(world_ecs(), e, ItemContainer);
|
||||
*storage = (ItemContainer){0};
|
||||
|
|
Loading…
Reference in New Issue