parent
e302d1c865
commit
a9898527ee
|
@ -2,20 +2,12 @@
|
||||||
#include "flecs.h"
|
#include "flecs.h"
|
||||||
#include "models/assets.h"
|
#include "models/assets.h"
|
||||||
|
|
||||||
#define ecs_get_mut_ex(world, entity, T) \
|
|
||||||
(ECS_CAST(T*, ecs_get_mut(world, entity, T)))
|
|
||||||
|
|
||||||
#define ecs_get_if(world, entity, T) \
|
#define ecs_get_if(world, entity, T) \
|
||||||
(world_entity_valid(entity) ? ecs_get(world, entity, T) : NULL)
|
(world_entity_valid(entity) ? ecs_get(world, entity, T) : NULL)
|
||||||
|
|
||||||
#define ecs_get_mut_if_ex(world, entity, component) \
|
#define ecs_get_mut_if(world, entity, component) \
|
||||||
(ecs_get_if(world, entity, component) ? ecs_get_mut(world, entity, component) : NULL)
|
(ecs_get_if(world, entity, component) ? ecs_get_mut(world, entity, component) : NULL)
|
||||||
|
|
||||||
#ifndef ecs_get_mut_if
|
|
||||||
#define ecs_get_mut_if(world, entity, component)\
|
|
||||||
(ecs_get(world, entity, component) ? ecs_get_mut(world, entity, component) : NULL)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ITEMS_INVENTORY_SIZE 9
|
#define ITEMS_INVENTORY_SIZE 9
|
||||||
#define ITEMS_CONTAINER_SIZE 16
|
#define ITEMS_CONTAINER_SIZE 16
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ void entity_despawn(uint64_t ent_id) {
|
||||||
|
|
||||||
void entity_set_position(uint64_t ent_id, float x, float y) {
|
void entity_set_position(uint64_t ent_id, float x, float y) {
|
||||||
ecs_set(world_ecs(), ent_id, Position, {x, y});
|
ecs_set(world_ecs(), ent_id, Position, {x, y});
|
||||||
Position *p = ecs_get_mut_ex(world_ecs(), ent_id, Position);
|
Position *p = ecs_get_mut(world_ecs(), ent_id, Position);
|
||||||
p->x = x;
|
p->x = x;
|
||||||
p->y = y;
|
p->y = y;
|
||||||
librg_entity_chunk_set(world_tracker(), ent_id, librg_chunk_from_realpos(world_tracker(), x, y, 0));
|
librg_entity_chunk_set(world_tracker(), ent_id, librg_chunk_from_realpos(world_tracker(), x, y, 0));
|
||||||
|
@ -79,7 +79,7 @@ void entity_set_position(uint64_t ent_id, float x, float y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void entity_wake(uint64_t ent_id) {
|
void entity_wake(uint64_t ent_id) {
|
||||||
StreamInfo *si = ecs_get_mut_ex(world_ecs(), ent_id, StreamInfo);
|
StreamInfo *si = ecs_get_mut(world_ecs(), ent_id, StreamInfo);
|
||||||
si->tick_delay = 0.0f;
|
si->tick_delay = 0.0f;
|
||||||
si->last_update = 0.0f;
|
si->last_update = 0.0f;
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,6 @@ void entity_update_action_timers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool entity_can_stream(uint64_t ent_id) {
|
bool entity_can_stream(uint64_t ent_id) {
|
||||||
StreamInfo *si = ecs_get_mut_ex(world_ecs(), ent_id, StreamInfo);
|
StreamInfo *si = ecs_get_mut(world_ecs(), ent_id, StreamInfo);
|
||||||
return (si->last_update < get_cached_time());
|
return (si->last_update < get_cached_time());
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ item_id item_find_no_proxy(asset_id kind) {
|
||||||
|
|
||||||
Item *item_get_data(uint64_t ent) {
|
Item *item_get_data(uint64_t ent) {
|
||||||
if (!world_entity_valid(ent)) return NULL;
|
if (!world_entity_valid(ent)) return NULL;
|
||||||
return ecs_get_mut_if_ex(world_ecs(), ent, Item);
|
return ecs_get_mut_if(world_ecs(), ent, Item);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Item *item_get_data_const(uint64_t ent) {
|
const Item *item_get_data_const(uint64_t ent) {
|
||||||
|
|
|
@ -68,7 +68,7 @@ uint64_t craftbench_spawn(void) {
|
||||||
uint64_t creature_spawn(void) {
|
uint64_t creature_spawn(void) {
|
||||||
ecs_entity_t e = entity_spawn(EKIND_DEMO_NPC);
|
ecs_entity_t e = entity_spawn(EKIND_DEMO_NPC);
|
||||||
|
|
||||||
Creature *c = ecs_get_mut_ex(world_ecs(), e, Creature);
|
Creature *c = ecs_get_mut(world_ecs(), e, Creature);
|
||||||
c->hunger_satisfied = 0;
|
c->hunger_satisfied = 0;
|
||||||
c->mating_satisfied = rand() % 1800;
|
c->mating_satisfied = rand() % 1800;
|
||||||
c->life_remaining = 500 + rand() % 5200;
|
c->life_remaining = 500 + rand() % 5200;
|
||||||
|
@ -121,7 +121,7 @@ uint64_t storage_spawn(void) {
|
||||||
uint64_t mob_spawn(void) {
|
uint64_t mob_spawn(void) {
|
||||||
ecs_entity_t e = entity_spawn(EKIND_MONSTER);
|
ecs_entity_t e = entity_spawn(EKIND_MONSTER);
|
||||||
|
|
||||||
Health *hp = ecs_get_mut_ex(world_ecs(), e, Health);
|
Health *hp = ecs_get_mut(world_ecs(), e, Health);
|
||||||
hp->max_hp = hp->hp = 100.0f;
|
hp->max_hp = hp->hp = 100.0f;
|
||||||
|
|
||||||
ecs_add(world_ecs(), e, Mob);
|
ecs_add(world_ecs(), e, Mob);
|
||||||
|
|
|
@ -64,11 +64,11 @@ void CreatureSeekFood(ecs_iter_t *it) {
|
||||||
for (size_t j = 0; j < ents_count; j++) {
|
for (size_t j = 0; j < ents_count; j++) {
|
||||||
Item *drop = 0;
|
Item *drop = 0;
|
||||||
uint64_t ent_id = ents[j];
|
uint64_t ent_id = ents[j];
|
||||||
if ((drop = ecs_get_mut_if_ex(it->world, ent_id, Item))) {
|
if ((drop = ecs_get_mut_if(it->world, ent_id, Item))) {
|
||||||
if (drop->kind != ASSET_CREATURE_FOOD)
|
if (drop->kind != ASSET_CREATURE_FOOD)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
p2 = ecs_get_mut_ex(it->world, ent_id, Position);
|
p2 = ecs_get_mut(it->world, ent_id, Position);
|
||||||
float dx = p2->x - p[i].x;
|
float dx = p2->x - p[i].x;
|
||||||
float dy = p2->y - p[i].y;
|
float dy = p2->y - p[i].y;
|
||||||
float range = (dx*dx + dy*dy);
|
float range = (dx*dx + dy*dy);
|
||||||
|
@ -120,7 +120,7 @@ void CreatureSeekCompanion(ecs_iter_t *it) {
|
||||||
for (size_t j = 0; j < ents_count; j++) {
|
for (size_t j = 0; j < ents_count; j++) {
|
||||||
uint64_t ent_id = ents[j];
|
uint64_t ent_id = ents[j];
|
||||||
if (ent_id != it->entities[i] && ecs_get_if(it->world, ent_id, SeeksCompanion)) {
|
if (ent_id != it->entities[i] && ecs_get_if(it->world, ent_id, SeeksCompanion)) {
|
||||||
p2 = ecs_get_mut_ex(it->world, ent_id, Position);
|
p2 = ecs_get_mut(it->world, ent_id, Position);
|
||||||
float dx = p2->x - p[i].x;
|
float dx = p2->x - p[i].x;
|
||||||
float dy = p2->y - p[i].y;
|
float dy = p2->y - p[i].y;
|
||||||
float range = (dx*dx + dy*dy);
|
float range = (dx*dx + dy*dy);
|
||||||
|
|
|
@ -46,7 +46,7 @@ void ProcessHealthDamage(ecs_iter_t *it) {
|
||||||
void OnDead(ecs_iter_t *it) {
|
void OnDead(ecs_iter_t *it) {
|
||||||
for (int i = 0; i < it->count; i++) {
|
for (int i = 0; i < it->count; i++) {
|
||||||
const ClientInfo *ci = ecs_get(it->world, it->entities[i], ClientInfo);
|
const ClientInfo *ci = ecs_get(it->world, it->entities[i], ClientInfo);
|
||||||
Input *pi = ecs_get_mut_if_ex(it->world, it->entities[i], Input);
|
Input *pi = ecs_get_mut_if(it->world, it->entities[i], Input);
|
||||||
|
|
||||||
if (ci) {
|
if (ci) {
|
||||||
pkt_notification_send(0, 0, "Someone died!", zpl_bprintf("Player %d has died!", it->entities[i]));
|
pkt_notification_send(0, 0, "Someone died!", zpl_bprintf("Player %d has died!", it->entities[i]));
|
||||||
|
|
|
@ -13,9 +13,9 @@ void PickItem(ecs_iter_t *it) {
|
||||||
for (size_t j = 0; j < ents_count; j++) {
|
for (size_t j = 0; j < ents_count; j++) {
|
||||||
Item *drop = 0;
|
Item *drop = 0;
|
||||||
uint64_t ent_id = ents[j];
|
uint64_t ent_id = ents[j];
|
||||||
if ((drop = ecs_get_mut_if_ex(it->world, ent_id, Item))) {
|
if ((drop = ecs_get_mut_if(it->world, ent_id, Item))) {
|
||||||
Position *p2 = ecs_get_mut_ex(it->world, ent_id, Position);
|
Position *p2 = ecs_get_mut(it->world, ent_id, Position);
|
||||||
Velocity *v2 = ecs_get_mut_ex(it->world, ent_id, Velocity);
|
Velocity *v2 = ecs_get_mut(it->world, ent_id, Velocity);
|
||||||
|
|
||||||
float dx = p2->x - p[i].x;
|
float dx = p2->x - p[i].x;
|
||||||
float dy = p2->y - p[i].y;
|
float dy = p2->y - p[i].y;
|
||||||
|
@ -63,7 +63,7 @@ void CraftItem(ecs_iter_t *it) {
|
||||||
if (in[i].craft_item == 0) continue;
|
if (in[i].craft_item == 0) continue;
|
||||||
if (world_entity_valid(in[i].storage_ent)){
|
if (world_entity_valid(in[i].storage_ent)){
|
||||||
Producer *ic = 0;
|
Producer *ic = 0;
|
||||||
if ((ic = ecs_get_mut_if_ex(it->world, in[i].storage_ent, Producer))){
|
if ((ic = ecs_get_mut_if(it->world, in[i].storage_ent, Producer))){
|
||||||
ic->target_item = in[i].craft_item;
|
ic->target_item = in[i].craft_item;
|
||||||
if (ic->pending_task == PRODUCER_CRAFT_WAITING) {
|
if (ic->pending_task == PRODUCER_CRAFT_WAITING) {
|
||||||
ic->pending_task = PRODUCER_CRAFT_ENQUEUED;
|
ic->pending_task = PRODUCER_CRAFT_ENQUEUED;
|
||||||
|
@ -87,7 +87,7 @@ void DropItem(ecs_iter_t *it) {
|
||||||
if (in[i].storage_action){
|
if (in[i].storage_action){
|
||||||
if (world_entity_valid(in[i].storage_ent)){
|
if (world_entity_valid(in[i].storage_ent)){
|
||||||
ItemContainer *ic = 0;
|
ItemContainer *ic = 0;
|
||||||
if ((ic = ecs_get_mut_if_ex(it->world, in[i].storage_ent, ItemContainer))){
|
if ((ic = ecs_get_mut_if(it->world, in[i].storage_ent, ItemContainer))){
|
||||||
items = ic->items;
|
items = ic->items;
|
||||||
}else{
|
}else{
|
||||||
continue;
|
continue;
|
||||||
|
@ -116,10 +116,10 @@ void DropItem(ecs_iter_t *it) {
|
||||||
|
|
||||||
item_show(item_slot_ent, true);
|
item_show(item_slot_ent, true);
|
||||||
|
|
||||||
Position *ipos = ecs_get_mut_ex(it->world, item_slot_ent, Position);
|
Position *ipos = ecs_get_mut(it->world, item_slot_ent, Position);
|
||||||
entity_set_position(item_slot_ent, p[i].x, p[i].y);
|
entity_set_position(item_slot_ent, p[i].x, p[i].y);
|
||||||
|
|
||||||
Velocity *v = ecs_get_mut_ex(it->world, item_slot_ent, Velocity);
|
Velocity *v = ecs_get_mut(it->world, item_slot_ent, Velocity);
|
||||||
v->x = in[i].mx * 800.0f;
|
v->x = in[i].mx * 800.0f;
|
||||||
v->y = in[i].my * 800.0f;
|
v->y = in[i].my * 800.0f;
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ void DropItem(ecs_iter_t *it) {
|
||||||
|
|
||||||
// for (size_t j = 0; j < ents_count; j++) {
|
// for (size_t j = 0; j < ents_count; j++) {
|
||||||
// ItemDrop *drop = 0;
|
// ItemDrop *drop = 0;
|
||||||
// if ((drop = ecs_get_mut_if_ex(it->world, ents[j], ItemDrop))) {
|
// if ((drop = ecs_get_mut_if(it->world, ents[j], ItemDrop))) {
|
||||||
// if (drop->kind != item->kind || (ecs_entity_t)ents[j] == it->entities[i] || drop->quantity == 0 || item->quantity == 0)
|
// if (drop->kind != item->kind || (ecs_entity_t)ents[j] == it->entities[i] || drop->quantity == 0 || item->quantity == 0)
|
||||||
// continue;
|
// continue;
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ void SwapItems(ecs_iter_t *it) {
|
||||||
if (in[i].storage_action){
|
if (in[i].storage_action){
|
||||||
if (world_entity_valid(in[i].storage_ent)){
|
if (world_entity_valid(in[i].storage_ent)){
|
||||||
ItemContainer *ic = 0;
|
ItemContainer *ic = 0;
|
||||||
if ((ic = ecs_get_mut_if_ex(it->world, in[i].storage_ent, ItemContainer))){
|
if ((ic = ecs_get_mut_if(it->world, in[i].storage_ent, ItemContainer))){
|
||||||
items = ic->items;
|
items = ic->items;
|
||||||
}else{
|
}else{
|
||||||
continue;
|
continue;
|
||||||
|
@ -208,7 +208,7 @@ void SwapItems(ecs_iter_t *it) {
|
||||||
}else{
|
}else{
|
||||||
if (world_entity_valid(in[i].storage_ent)){
|
if (world_entity_valid(in[i].storage_ent)){
|
||||||
ItemContainer *ic = 0;
|
ItemContainer *ic = 0;
|
||||||
if ((ic = ecs_get_mut_if_ex(it->world, in[i].storage_ent, ItemContainer))){
|
if ((ic = ecs_get_mut_if(it->world, in[i].storage_ent, ItemContainer))){
|
||||||
from_ent = &ic->items[in[i].swap_from];
|
from_ent = &ic->items[in[i].swap_from];
|
||||||
from = item_get_data(*from_ent);
|
from = item_get_data(*from_ent);
|
||||||
}else{
|
}else{
|
||||||
|
@ -363,8 +363,8 @@ void HarvestIntoContainers(ecs_iter_t *it) {
|
||||||
|
|
||||||
for (size_t j = 0; j < ents_count; j++) {
|
for (size_t j = 0; j < ents_count; j++) {
|
||||||
Item *drop = 0;
|
Item *drop = 0;
|
||||||
if ((drop = ecs_get_mut_if_ex(it->world, ents[j], Item))) {
|
if ((drop = ecs_get_mut_if(it->world, ents[j], Item))) {
|
||||||
Position *p2 = ecs_get_mut_ex(it->world, ents[j], Position);
|
Position *p2 = ecs_get_mut(it->world, ents[j], Position);
|
||||||
uint64_t ent_id = ents[j];
|
uint64_t ent_id = ents[j];
|
||||||
|
|
||||||
float dx = p2->x - p[i].x;
|
float dx = p2->x - p[i].x;
|
||||||
|
|
|
@ -65,7 +65,7 @@ void PushItemsOnNodes(ecs_iter_t *it) {
|
||||||
// We need a way to refer to specific blocks in the world so we can do easy block ID checks
|
// We need a way to refer to specific blocks in the world so we can do easy block ID checks
|
||||||
// and re-build the cache when a change is detected.
|
// and re-build the cache when a change is detected.
|
||||||
|
|
||||||
Producer *producer = ecs_get_mut_if_ex(it->world, it->entities[i], Producer);
|
Producer *producer = ecs_get_mut_if(it->world, it->entities[i], Producer);
|
||||||
|
|
||||||
if (producer) {
|
if (producer) {
|
||||||
if (producer->push_filter == PRODUCER_PUSH_NONE)
|
if (producer->push_filter == PRODUCER_PUSH_NONE)
|
||||||
|
@ -113,7 +113,7 @@ void PushItemsOnNodes(ecs_iter_t *it) {
|
||||||
uint64_t e = item_spawn(item->kind, zpl_min(r->push_qty, item->quantity));
|
uint64_t e = item_spawn(item->kind, zpl_min(r->push_qty, item->quantity));
|
||||||
entity_set_position(e, p[i].x + push_dx[r[i].counter], p[i].y + push_dy[r[i].counter]);
|
entity_set_position(e, p[i].x + push_dx[r[i].counter], p[i].y + push_dy[r[i].counter]);
|
||||||
|
|
||||||
Velocity *e_vel = ecs_get_mut_ex(it->world, e, Velocity);
|
Velocity *e_vel = ecs_get_mut(it->world, e, Velocity);
|
||||||
e_vel->x = push_dx[r[i].counter];
|
e_vel->x = push_dx[r[i].counter];
|
||||||
e_vel->y = push_dy[r[i].counter];
|
e_vel->y = push_dy[r[i].counter];
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ void LeaveVehicle(ecs_iter_t *it) {
|
||||||
if (!in[i].use) continue;
|
if (!in[i].use) continue;
|
||||||
|
|
||||||
Vehicle *veh = 0;
|
Vehicle *veh = 0;
|
||||||
if ((veh = ecs_get_mut_if_ex(it->world, vehp->veh, Vehicle))) {
|
if ((veh = ecs_get_mut_if(it->world, vehp->veh, Vehicle))) {
|
||||||
for (int k = 0; k < 4; k++) {
|
for (int k = 0; k < 4; k++) {
|
||||||
if (veh->seats[k] == it->entities[i]) {
|
if (veh->seats[k] == it->entities[i]) {
|
||||||
veh->seats[k] = 0;
|
veh->seats[k] = 0;
|
||||||
|
@ -50,9 +50,9 @@ void EnterVehicle(ecs_iter_t *it) {
|
||||||
|
|
||||||
if (has_entered_veh) break;
|
if (has_entered_veh) break;
|
||||||
|
|
||||||
veh = ecs_get_mut_if_ex(it->world, ents[j], Vehicle);
|
veh = ecs_get_mut_if(it->world, ents[j], Vehicle);
|
||||||
|
|
||||||
if ((veh = ecs_get_mut_if_ex(it->world, ents[j], Vehicle))) {
|
if ((veh = ecs_get_mut_if(it->world, ents[j], Vehicle))) {
|
||||||
Position const* p2 = ecs_get(it->world, ents[j], Position);
|
Position const* p2 = ecs_get(it->world, ents[j], Position);
|
||||||
|
|
||||||
float dx = p2->x - p[i].x;
|
float dx = p2->x - p[i].x;
|
||||||
|
@ -153,7 +153,7 @@ void VehicleHandling(ecs_iter_t *it) {
|
||||||
|
|
||||||
// NOTE(zaklaus): Update passenger position
|
// NOTE(zaklaus): Update passenger position
|
||||||
{
|
{
|
||||||
Velocity *v2 = ecs_get_mut_ex(it->world, pe, Velocity);
|
Velocity *v2 = ecs_get_mut(it->world, pe, Velocity);
|
||||||
entity_set_position(pe, p[i].x, p[i].y);
|
entity_set_position(pe, p[i].x, p[i].y);
|
||||||
*v2 = v[i];
|
*v2 = v[i];
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,7 @@ entity_view* world_build_entity_view(int64_t e) {
|
||||||
view.inside_vehicle = ecs_get(world_ecs(), e, IsInVehicle) != 0 ? true : false;
|
view.inside_vehicle = ecs_get(world_ecs(), e, IsInVehicle) != 0 ? true : false;
|
||||||
|
|
||||||
Inventory* inv = 0;
|
Inventory* inv = 0;
|
||||||
if ((inv = ecs_get_mut_if_ex(world_ecs(), e, Inventory))) {
|
if ((inv = ecs_get_mut_if(world_ecs(), e, Inventory))) {
|
||||||
view.has_items = true;
|
view.has_items = true;
|
||||||
|
|
||||||
for (int i = 0; i < ITEMS_INVENTORY_SIZE; i += 1) {
|
for (int i = 0; i < ITEMS_INVENTORY_SIZE; i += 1) {
|
||||||
|
@ -114,7 +114,7 @@ entity_view* world_build_entity_view(int64_t e) {
|
||||||
|
|
||||||
if (world_entity_valid(in->storage_ent)) {
|
if (world_entity_valid(in->storage_ent)) {
|
||||||
ItemContainer* ic = 0;
|
ItemContainer* ic = 0;
|
||||||
if ((ic = ecs_get_mut_if_ex(world_ecs(), in->storage_ent, ItemContainer))) {
|
if ((ic = ecs_get_mut_if(world_ecs(), in->storage_ent, ItemContainer))) {
|
||||||
view.has_storage_items = true;
|
view.has_storage_items = true;
|
||||||
|
|
||||||
for (int i = 0; i < ITEMS_CONTAINER_SIZE; i += 1) {
|
for (int i = 0; i < ITEMS_CONTAINER_SIZE; i += 1) {
|
||||||
|
@ -733,23 +733,3 @@ bool world_entity_valid(ecs_entity_t e) {
|
||||||
if (!e) return false;
|
if (!e) return false;
|
||||||
return ecs_is_alive(world_ecs(), e);
|
return ecs_is_alive(world_ecs(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* world_component_cached(ecs_world_t* world_ecs, ecs_entity_t entity, ecs_id_t id) {
|
|
||||||
if (!component_cache.entries || world.ecs_stage == NULL) {
|
|
||||||
return ecs_get_mut_id(world_ecs, entity, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
static char buffer[256] = { 0 };
|
|
||||||
zpl_snprintf(buffer, 256, "%llu_%llu", entity, id);
|
|
||||||
|
|
||||||
uint64_t uid = zpl_crc64(buffer, zpl_strlen(buffer));
|
|
||||||
zpl_uintptr* value = world_component_cache_get(&component_cache, uid);
|
|
||||||
|
|
||||||
if (!value) {
|
|
||||||
void* the_value = ecs_get_mut_id(world_ecs, entity, id);
|
|
||||||
world_component_cache_set(&component_cache, uid, (zpl_uintptr)the_value);
|
|
||||||
value = world_component_cache_get(&component_cache, uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (void*)*value;
|
|
||||||
}
|
|
||||||
|
|
|
@ -126,4 +126,3 @@ int64_t *world_chunk_fetch_entities_realpos(float x, float y, size_t *ents_len);
|
||||||
int64_t *world_chunk_query_entities(int64_t e, size_t *ents_len, int8_t radius);
|
int64_t *world_chunk_query_entities(int64_t e, size_t *ents_len, int8_t radius);
|
||||||
|
|
||||||
bool world_entity_valid(ecs_entity_t e);
|
bool world_entity_valid(ecs_entity_t e);
|
||||||
void *world_component_cached(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id);
|
|
||||||
|
|
|
@ -15,36 +15,17 @@
|
||||||
|
|
||||||
#include "world/worldgen_utils.h"
|
#include "world/worldgen_utils.h"
|
||||||
|
|
||||||
block_id worldgen_biome_find(uint32_t biome, uint32_t kind) {
|
|
||||||
asset_id asset = ASSET_INVALID;
|
|
||||||
switch (biome) {
|
|
||||||
case BLOCK_BIOME_DEV: {
|
|
||||||
switch (kind) {
|
|
||||||
case BLOCK_KIND_GROUND: asset = ASSET_GROUND; break;
|
|
||||||
case BLOCK_KIND_DIRT: asset = ASSET_DIRT; break;
|
|
||||||
case BLOCK_KIND_WALL: asset = ASSET_WALL; break;
|
|
||||||
case BLOCK_KIND_HILL_SNOW:
|
|
||||||
case BLOCK_KIND_HILL: asset = ASSET_HILL; break;
|
|
||||||
case BLOCK_KIND_WATER: asset = ASSET_WATER; break;
|
|
||||||
case BLOCK_KIND_LAVA: asset = ASSET_LAVA; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return blocks_find(asset);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t worldgen_build(world_data *wld) {
|
int32_t worldgen_build(world_data *wld) {
|
||||||
// TODO(zaklaus): pass world as an arg instead
|
// TODO(zaklaus): pass world as an arg instead
|
||||||
world = wld;
|
world = wld;
|
||||||
|
|
||||||
// TODO: perform world gen
|
// TODO: perform world gen
|
||||||
// atm, we will fill the world with ground and surround it by walls
|
// atm, we will fill the world with ground and surround it by walls
|
||||||
block_id wall_id = worldgen_biome_find(BLOCK_BIOME_DEV, BLOCK_KIND_WALL);
|
block_id wall_id = blocks_find(ASSET_WALL);
|
||||||
block_id grnd_id = worldgen_biome_find(BLOCK_BIOME_DEV, BLOCK_KIND_GROUND);
|
block_id grnd_id = blocks_find(ASSET_GROUND);
|
||||||
block_id dirt_id = worldgen_biome_find(BLOCK_BIOME_DEV, BLOCK_KIND_DIRT);
|
block_id dirt_id = blocks_find(ASSET_DIRT);
|
||||||
block_id watr_id = worldgen_biome_find(BLOCK_BIOME_DEV, BLOCK_KIND_WATER);
|
block_id watr_id = blocks_find(ASSET_WATER);
|
||||||
block_id lava_id = worldgen_biome_find(BLOCK_BIOME_DEV, BLOCK_KIND_LAVA);
|
block_id lava_id = blocks_find(ASSET_LAVA);
|
||||||
block_id tree_id = blocks_find(ASSET_TREE);
|
block_id tree_id = blocks_find(ASSET_TREE);
|
||||||
|
|
||||||
srand(world->seed);
|
srand(world->seed);
|
||||||
|
@ -63,6 +44,5 @@ int32_t worldgen_build(world_data *wld) {
|
||||||
// narrow boy cirlce
|
// narrow boy cirlce
|
||||||
world_fill_circle(world->data, grnd_id, world->dim / 2, world->dim / 2, (uint32_t)(radius * 0.7f), NULL);
|
world_fill_circle(world->data, grnd_id, world->dim / 2, world->dim / 2, (uint32_t)(radius * 0.7f), NULL);
|
||||||
|
|
||||||
|
|
||||||
return WORLD_ERROR_NONE;
|
return WORLD_ERROR_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ ZPL_DIAGNOSTIC_POP
|
||||||
|
|
||||||
#define DEFAULT_WORLD_SEED 302097
|
#define DEFAULT_WORLD_SEED 302097
|
||||||
#define DEFAULT_CHUNK_SIZE 16 /* amount of blocks within a chunk (single axis) */
|
#define DEFAULT_CHUNK_SIZE 16 /* amount of blocks within a chunk (single axis) */
|
||||||
#define DEFAULT_WORLD_SIZE 5 /* amount of chunks within a world (single axis) */
|
#define DEFAULT_WORLD_SIZE 20 /* amount of chunks within a world (single axis) */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TODO
|
TODO
|
||||||
|
|
|
@ -74,7 +74,7 @@ void MobMeleeAtk(ecs_iter_t *it) {
|
||||||
float range = (dx*dx + dy*dy);
|
float range = (dx*dx + dy*dy);
|
||||||
|
|
||||||
if (range < MOB_MELEE_DIST) {
|
if (range < MOB_MELEE_DIST) {
|
||||||
Health *health = ecs_get_mut_ex(it->world, m->plr, Health);
|
Health *health = ecs_get_mut(it->world, m->plr, Health);
|
||||||
health->dmg += MOB_MELEE_DMG;
|
health->dmg += MOB_MELEE_DMG;
|
||||||
mob[i].atk_delay = MOB_ATK_DELAY;
|
mob[i].atk_delay = MOB_ATK_DELAY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ int32_t worldgen_build(world_data *wld) {
|
||||||
// ground
|
// ground
|
||||||
world_fill_rect(world->data, wall_id, 1, 1, world->dim-2, world->dim-2, NULL);
|
world_fill_rect(world->data, wall_id, 1, 1, world->dim-2, world->dim-2, NULL);
|
||||||
|
|
||||||
int radius = 30;
|
int radius = 90;
|
||||||
|
|
||||||
// wide boy circle
|
// wide boy circle
|
||||||
world_fill_circle(world->data, dirt_id, world->dim / 2, world->dim / 2, radius, NULL);
|
world_fill_circle(world->data, dirt_id, world->dim / 2, world->dim / 2, radius, NULL);
|
||||||
|
@ -63,7 +63,7 @@ int32_t worldgen_build(world_data *wld) {
|
||||||
// narrow boy cirlce
|
// narrow boy cirlce
|
||||||
world_fill_circle(world->data, grnd_id, world->dim / 2, world->dim / 2, (uint32_t)(radius * 0.7f), NULL);
|
world_fill_circle(world->data, grnd_id, world->dim / 2, world->dim / 2, (uint32_t)(radius * 0.7f), NULL);
|
||||||
|
|
||||||
world_fill_circle(world->data, wall_id, world->dim / 2 + 9, world->dim / 2+ 9, (uint32_t)(radius * 0.2f), NULL);
|
world_fill_circle(world->data, wall_id, world->dim / 2 + radius/3, world->dim / 2 + radius/3, (uint32_t)(radius * 0.2f), NULL);
|
||||||
|
|
||||||
return WORLD_ERROR_NONE;
|
return WORLD_ERROR_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<ExcludeFilter>*.obj,*.lib,*.pch,*.dll,*.pdb,.vs,Debug,Release,x64,obj,*.user,Intermediate,</ExcludeFilter>
|
<ExcludeFilter>*.obj,*.lib,*.pch,*.dll,*.pdb,.vs,Debug,Release,x64,obj,*.user,Intermediate,</ExcludeFilter>
|
||||||
<SyncFiles>true</SyncFiles>
|
<SyncFiles>true</SyncFiles>
|
||||||
<Recursive>true</Recursive>
|
<Recursive>true</Recursive>
|
||||||
|
<ShowEmptyFolders>true</ShowEmptyFolders>
|
||||||
<IsVirtual>false</IsVirtual>
|
<IsVirtual>false</IsVirtual>
|
||||||
<IsFolder>false</IsFolder>
|
<IsFolder>false</IsFolder>
|
||||||
<BuildCommand>build.bat</BuildCommand>
|
<BuildCommand>build.bat</BuildCommand>
|
||||||
|
|
Loading…
Reference in New Issue