general improvements and cleanup
parent
242fd9250b
commit
cf173f3d50
|
@ -1,5 +1,6 @@
|
||||||
build
|
build
|
||||||
build_rel
|
build_rel
|
||||||
|
screenshots
|
||||||
build.bat
|
build.bat
|
||||||
run.bat
|
run.bat
|
||||||
clean.bat
|
clean.bat
|
||||||
|
|
|
@ -120,10 +120,7 @@ DrawNetworkStats(debug_item *it, float xpos, float ypos) {
|
||||||
#define _kb(x) ((x) / 1024)
|
#define _kb(x) ((x) / 1024)
|
||||||
|
|
||||||
debug_draw_result r;
|
debug_draw_result r;
|
||||||
r = DrawFormattedText(xpos, ypos, TextFormat("dn total: %d kb", _kb(s.incoming_total)));
|
r = DrawFormattedText(xpos, ypos, TextFormat("recv total: %lld kb", _kb(s.total_received)));
|
||||||
r = DrawFormattedText(xpos, r.y, TextFormat("recv total: %lld kb", _kb(s.total_received)));
|
|
||||||
|
|
||||||
r = DrawFormattedText(xpos, r.y, TextFormat("up total: %lld kb", _kb(s.outgoing_total)));
|
|
||||||
r = DrawFormattedText(xpos, r.y, TextFormat("sent total: %lld kb", _kb(s.total_sent)));
|
r = DrawFormattedText(xpos, r.y, TextFormat("sent total: %lld kb", _kb(s.total_sent)));
|
||||||
|
|
||||||
r = DrawFormattedText(xpos, r.y, TextFormat("dn rate: %.02f kb/sec (%.02f kbit/sec)", _kb(s.incoming_bandwidth), _kb(s.incoming_bandwidth * 8.0f)));
|
r = DrawFormattedText(xpos, r.y, TextFormat("dn rate: %.02f kb/sec (%.02f kbit/sec)", _kb(s.incoming_bandwidth), _kb(s.incoming_bandwidth * 8.0f)));
|
||||||
|
|
|
@ -37,6 +37,7 @@ void platform_init() {
|
||||||
renderer_init();
|
renderer_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline static
|
||||||
void display_conn_status() {
|
void display_conn_status() {
|
||||||
if (game_is_networked()) {
|
if (game_is_networked()) {
|
||||||
if (network_client_is_connected()) {
|
if (network_client_is_connected()) {
|
||||||
|
@ -60,6 +61,7 @@ uint8_t platform_is_running() {
|
||||||
|
|
||||||
static game_keystate_data last_input_data = {0};
|
static game_keystate_data last_input_data = {0};
|
||||||
|
|
||||||
|
inline static
|
||||||
void platform_input_update_input_frame(game_keystate_data data) {
|
void platform_input_update_input_frame(game_keystate_data data) {
|
||||||
// NOTE(zaklaus): Test if there are any changes
|
// NOTE(zaklaus): Test if there are any changes
|
||||||
if (data.x != last_input_data.x) goto send_data;
|
if (data.x != last_input_data.x) goto send_data;
|
||||||
|
@ -110,7 +112,7 @@ void platform_input() {
|
||||||
mouse_pos.y -= 0.5f;
|
mouse_pos.y -= 0.5f;
|
||||||
mouse_pos = Vector2Normalize(mouse_pos);
|
mouse_pos = Vector2Normalize(mouse_pos);
|
||||||
|
|
||||||
if (IsMouseButtonDown(MOUSE_MIDDLE_BUTTON)) {
|
if (game_get_kind() == GAMEKIND_SINGLE && IsMouseButtonDown(MOUSE_MIDDLE_BUTTON)) {
|
||||||
x = mouse_pos.x;
|
x = mouse_pos.x;
|
||||||
y = -mouse_pos.y;
|
y = -mouse_pos.y;
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,27 +142,41 @@ void world_setup_pkt_handlers(world_pkt_reader_proc *reader_proc, world_pkt_writ
|
||||||
world.writer_proc = writer_proc;
|
world.writer_proc = writer_proc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t world_init(int32_t seed, uint16_t chunk_size, uint16_t chunk_amount) {
|
static inline
|
||||||
if (world.data) {
|
world_chunk_setup_grid(void) {
|
||||||
return 0;
|
for (int i = 0; i < zpl_square(world.chunk_amount); ++i) {
|
||||||
|
ecs_entity_t e = ecs_new(world.ecs, 0);
|
||||||
|
ecs_set(world.ecs, e, Classify, {.id = EKIND_CHUNK });
|
||||||
|
Chunk *chunk = ecs_get_mut(world.ecs, e, Chunk, NULL);
|
||||||
|
librg_entity_track(world.tracker, e);
|
||||||
|
librg_entity_chunk_set(world.tracker, e, i);
|
||||||
|
librg_chunk_to_chunkpos(world.tracker, i, &chunk->x, &chunk->y, NULL);
|
||||||
|
world.chunk_mapping[i] = e;
|
||||||
|
world.block_mapping[i] = zpl_malloc(sizeof(block_id)*zpl_square(world.chunk_size));
|
||||||
|
world.outer_block_mapping[i] = zpl_malloc(sizeof(block_id)*zpl_square(world.chunk_size));
|
||||||
|
chunk->id = i;
|
||||||
|
chunk->is_dirty = false;
|
||||||
|
|
||||||
|
for (int y = 0; y < world.chunk_size; y += 1) {
|
||||||
|
for (int x = 0; x < world.chunk_size; x += 1) {
|
||||||
|
int chk_x = chunk->x * world.chunk_size;
|
||||||
|
int chk_y = chunk->y * world.chunk_size;
|
||||||
|
|
||||||
|
block_id *c = &world.block_mapping[i][(y*world.chunk_size)+x];
|
||||||
|
*c = world.data[(chk_y+y)*world.dim + (chk_x+x)];
|
||||||
|
|
||||||
|
c = &world.outer_block_mapping[i][(y*world.chunk_size)+x];
|
||||||
|
*c = world.outer_data[(chk_y+y)*world.dim + (chk_x+x)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
world.is_paused = false;
|
static inline
|
||||||
world.seed = seed;
|
void world_configure_tracker(void) {
|
||||||
world.chunk_size = chunk_size;
|
|
||||||
world.chunk_amount = chunk_amount;
|
|
||||||
|
|
||||||
world.dim = (world.chunk_size * world.chunk_amount);
|
|
||||||
world.size = world.dim * world.dim;
|
|
||||||
|
|
||||||
if (world.tracker == NULL) {
|
|
||||||
world.tracker = librg_world_create();
|
world.tracker = librg_world_create();
|
||||||
}
|
|
||||||
|
|
||||||
if (world.tracker == NULL) {
|
ZPL_ASSERT_MSG(world.tracker, "[ERROR] An error occurred while trying to create a server world.");
|
||||||
zpl_printf("[ERROR] An error occurred while trying to create a server world.\n");
|
|
||||||
return WORLD_ERROR_TRACKER_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* config our world grid */
|
/* config our world grid */
|
||||||
librg_config_chunksize_set(world.tracker, WORLD_BLOCK_SIZE * world.chunk_size, WORLD_BLOCK_SIZE * world.chunk_size, 0);
|
librg_config_chunksize_set(world.tracker, WORLD_BLOCK_SIZE * world.chunk_size, WORLD_BLOCK_SIZE * world.chunk_size, 0);
|
||||||
|
@ -172,69 +186,74 @@ int32_t world_init(int32_t seed, uint16_t chunk_size, uint16_t chunk_amount) {
|
||||||
librg_event_set(world.tracker, LIBRG_WRITE_CREATE, tracker_write_create);
|
librg_event_set(world.tracker, LIBRG_WRITE_CREATE, tracker_write_create);
|
||||||
librg_event_set(world.tracker, LIBRG_WRITE_REMOVE, tracker_write_remove);
|
librg_event_set(world.tracker, LIBRG_WRITE_REMOVE, tracker_write_remove);
|
||||||
librg_event_set(world.tracker, LIBRG_WRITE_UPDATE, tracker_write_update);
|
librg_event_set(world.tracker, LIBRG_WRITE_UPDATE, tracker_write_update);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void world_init_worldgen_data(void) {
|
||||||
world.data = zpl_malloc(sizeof(block_id)*world.size);
|
world.data = zpl_malloc(sizeof(block_id)*world.size);
|
||||||
world.outer_data = zpl_malloc(sizeof(block_id)*world.size);
|
world.outer_data = zpl_malloc(sizeof(block_id)*world.size);
|
||||||
|
|
||||||
if (!world.data || !world.outer_data) {
|
ZPL_ASSERT(world.data && world.outer_data);
|
||||||
return WORLD_ERROR_OUTOFMEM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void world_setup_ecs(void) {
|
||||||
world.ecs = ecs_init();
|
world.ecs = ecs_init();
|
||||||
|
|
||||||
ECS_IMPORT(world.ecs, Components);
|
ECS_IMPORT(world.ecs, Components);
|
||||||
ECS_IMPORT(world.ecs, Systems);
|
ECS_IMPORT(world.ecs, Systems);
|
||||||
world.ecs_update = ecs_query_new(world.ecs, "components.ClientInfo, components.Position");
|
world.ecs_update = ecs_query_new(world.ecs, "components.ClientInfo, components.Position");
|
||||||
world.chunk_mapping = zpl_malloc(sizeof(ecs_entity_t)*zpl_square(chunk_amount));
|
}
|
||||||
world.block_mapping = zpl_malloc(sizeof(block_id*)*zpl_square(chunk_amount));
|
|
||||||
world.outer_block_mapping = zpl_malloc(sizeof(block_id*)*zpl_square(chunk_amount));
|
|
||||||
world_snapshot_init(&streamer_snapshot, zpl_heap());
|
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void world_init_mapping(void) {
|
||||||
|
world.chunk_mapping = zpl_malloc(sizeof(ecs_entity_t)*zpl_square(world.chunk_amount));
|
||||||
|
world.block_mapping = zpl_malloc(sizeof(block_id*)*zpl_square(world.chunk_amount));
|
||||||
|
world.outer_block_mapping = zpl_malloc(sizeof(block_id*)*zpl_square(world.chunk_amount));
|
||||||
|
world_snapshot_init(&streamer_snapshot, zpl_heap());
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void world_generate_instance(void) {
|
||||||
int32_t world_build_status = worldgen_test(&world);
|
int32_t world_build_status = worldgen_test(&world);
|
||||||
ZPL_ASSERT(world_build_status >= 0);
|
ZPL_ASSERT(world_build_status >= 0);
|
||||||
|
|
||||||
for (int i = 0; i < zpl_square(world.dim); ++i) {
|
for (int i = 0; i < zpl_square(world.dim); ++i) {
|
||||||
if (world.data[i] == 0) {
|
if (world.data[i] == 0) {
|
||||||
ZPL_PANIC("Worldgen failure! Block %d is unset!\n", i);
|
ZPL_PANIC("Worldgen failure! Block %d is unset!\n", i);
|
||||||
return -1;
|
return;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < zpl_square(world.chunk_amount); ++i) {
|
|
||||||
ecs_entity_t e = ecs_new(world.ecs, 0);
|
|
||||||
ecs_set(world.ecs, e, Classify, {.id = EKIND_CHUNK });
|
|
||||||
Chunk *chunk = ecs_get_mut(world.ecs, e, Chunk, NULL);
|
|
||||||
librg_entity_track(world.tracker, e);
|
|
||||||
librg_entity_chunk_set(world.tracker, e, i);
|
|
||||||
librg_chunk_to_chunkpos(world.tracker, i, &chunk->x, &chunk->y, NULL);
|
|
||||||
world.chunk_mapping[i] = e;
|
|
||||||
world.block_mapping[i] = zpl_malloc(sizeof(block_id)*zpl_square(chunk_size));
|
|
||||||
world.outer_block_mapping[i] = zpl_malloc(sizeof(block_id)*zpl_square(chunk_size));
|
|
||||||
chunk->id = i;
|
|
||||||
chunk->is_dirty = false;
|
|
||||||
|
|
||||||
for (int y = 0; y < chunk_size; y += 1) {
|
|
||||||
for (int x = 0; x < chunk_size; x += 1) {
|
|
||||||
int chk_x = chunk->x * chunk_size;
|
|
||||||
int chk_y = chunk->y * chunk_size;
|
|
||||||
|
|
||||||
block_id *c = &world.block_mapping[i][(y*chunk_size)+x];
|
|
||||||
*c = world.data[(chk_y+y)*world.dim + (chk_x+x)];
|
|
||||||
|
|
||||||
c = &world.outer_block_mapping[i][(y*chunk_size)+x];
|
|
||||||
*c = world.outer_data[(chk_y+y)*world.dim + (chk_x+x)];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
void world_free_worldgen_data(void) {
|
||||||
zpl_mfree(world.data);
|
zpl_mfree(world.data);
|
||||||
zpl_mfree(world.outer_data);
|
zpl_mfree(world.outer_data);
|
||||||
world.data = NULL;
|
world.data = NULL;
|
||||||
world.outer_data = NULL;
|
world.outer_data = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t world_init(int32_t seed, uint16_t chunk_size, uint16_t chunk_amount) {
|
||||||
|
world.is_paused = false;
|
||||||
|
world.seed = seed;
|
||||||
|
world.chunk_size = chunk_size;
|
||||||
|
world.chunk_amount = chunk_amount;
|
||||||
|
|
||||||
|
world.dim = (world.chunk_size * world.chunk_amount);
|
||||||
|
world.size = world.dim * world.dim;
|
||||||
|
|
||||||
|
world_configure_tracker();
|
||||||
|
world_setup_ecs();
|
||||||
|
world_init_worldgen_data();
|
||||||
|
world_generate_instance();
|
||||||
|
world_init_mapping();
|
||||||
|
world_chunk_setup_grid();
|
||||||
|
world_free_worldgen_data();
|
||||||
|
|
||||||
zpl_printf("[INFO] Created a new server world\n");
|
zpl_printf("[INFO] Created a new server world\n");
|
||||||
|
|
||||||
return world_build_status;
|
return WORLD_ERROR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t world_destroy(void) {
|
int32_t world_destroy(void) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
call package.bat
|
call package.bat SKIP_DEPLOY
|
||||||
|
|
||||||
pkg\eco2d.exe -v %*
|
pkg\eco2d.exe -v %*
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
call package.bat
|
call package.bat SKIP_DEPLOY
|
||||||
cls
|
cls
|
||||||
pkg\eco2d.exe -d %*
|
pkg\eco2d.exe -d %*
|
||||||
|
|
Loading…
Reference in New Issue