From 682b8f5d8f3efb40713911da5a61447d8a99857b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Thu, 4 Nov 2021 15:43:23 +0100 Subject: [PATCH] code cleanup and fixes --- CMakeLists.txt | 45 +++++++++--------- art/driving.dem | Bin 60069 -> 0 bytes art/ice_rink.dem | Bin 73069 -> 0 bytes art/lava_death.dem | Bin 63709 -> 0 bytes art/mem_test.dem | Bin 279301 -> 0 bytes art/showcase.dem | Bin 81857 -> 0 bytes art/timing_test.dem | Bin 111965 -> 0 bytes art/vehicle_unset.dem | Bin 14309 -> 0 bytes code/game/src/camera.c | 4 +- code/game/src/debug_replay.c | 26 +++++----- code/game/src/debug_replay_compat_v2.c | 2 +- code/game/src/debug_ui.c | 18 +++---- code/game/src/debug_ui_actions.c | 10 ++-- code/game/src/debug_ui_widgets.c | 6 +-- code/game/src/game.c | 2 +- code/game/src/gui/build_mode.c | 2 +- code/game/src/main.c | 6 +-- code/game/src/packet.c | 12 ++--- code/game/src/packet_utils.h | 4 +- code/game/src/packets/pkt_send_librg_update.c | 2 +- code/game/src/prediction.c | 15 ++---- code/game/src/prediction.h | 4 +- code/game/src/renderer_3d.c | 12 ++--- code/game/src/renderer_bridge.c | 2 +- code/game/src/renderer_v0.c | 18 +++---- code/game/src/utils/options.c | 10 ++-- code/game/src/utils/raylib_helpers.h | 15 +++--- code/game/src/world/perlin.c | 8 ++-- code/game/src/world/world.c | 6 +-- code/game/src/world/world.h | 2 +- code/game/src/world_view.h | 4 +- 31 files changed, 114 insertions(+), 121 deletions(-) delete mode 100644 art/driving.dem delete mode 100644 art/ice_rink.dem delete mode 100644 art/lava_death.dem delete mode 100644 art/mem_test.dem delete mode 100644 art/showcase.dem delete mode 100644 art/timing_test.dem delete mode 100644 art/vehicle_unset.dem diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e476e2..8e9da94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,23 +1,22 @@ -cmake_minimum_required(VERSION 3.0) -project(eco2d) -include(cmake/utils.cmake) - -set(CMAKE_C_STANDARD 11) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}) - -if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) - add_compile_options(/W4 /nologo) -endif() - -include_directories(code/common code/vendors code/vendors/flecs) - -include(cmake/FindRaylib.cmake) - -add_subdirectory(code/modules) -add_subdirectory(code/vendors) - -add_subdirectory(code/game) +cmake_minimum_required(VERSION 3.0) +project(eco2d) +include(cmake/utils.cmake) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}) + +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif() + +include_directories(code/common code/vendors code/vendors/flecs) + +include(cmake/FindRaylib.cmake) + +add_subdirectory(code/modules) +add_subdirectory(code/vendors) + +add_subdirectory(code/game) diff --git a/art/driving.dem b/art/driving.dem deleted file mode 100644 index 3e5c15e51d32d9b4d01c2d13815674693a157bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60069 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 diff --git a/art/ice_rink.dem b/art/ice_rink.dem deleted file mode 100644 index b8adceb054469d78a424c50a711552d14a17a8f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73069 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 diff --git a/art/lava_death.dem b/art/lava_death.dem deleted file mode 100644 index c83f224ae4d992fae5d9313222bcad11215dd1b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63709 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 KMwn>Z!}&jBEQ31$ diff --git a/art/timing_test.dem b/art/timing_test.dem deleted file mode 100644 index 4c29d339bec57a1ab8f09e369ba884a02a93c77a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111965 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 diff --git a/art/vehicle_unset.dem b/art/vehicle_unset.dem deleted file mode 100644 index 1c36fb1eab48a09e7fa01d77fd8f67e8d82ef9c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14309 zcmd7XL2gq)5QO323y_2$Wy6+hAaSrLH)E3x8%~hJL{DSO2>0iai_SP~B2iS;-#znQ zobc!8x8F~@*WLG*#~b`PRqpry@>IDClv{eNtRnC{W=j z%^pvh5V*&Rd(7sv#N#w83AH^*k3GFRaN1G%w0|lNUyjP*Z~pyy`nL3ToMz?v+xfB| z`E*iKCyMvx9VAN9;~jkFb`m!4&D4qF9#bbCv-S2k%>-7QW~KN0se7y>=i@ZrYd;H4 zvtnwWPp`*pR#vfjQnOhxwLKGQAcy;Hr(hf+}wrD7XO#WqWGj}`Zr z&5CzmPr_!8dy+{LPeR~%dKJ&(9(z2g755|_r&&pQ?6K1OEO?&ee4JLzv%THUeXgp~ zhR11%Qf)NvF}0Om>ZGSS?XiR2v})4lA6t`^ieTn(TJ^htk(Tr%9lynxw7r^zOjaiQ;=;rTVU!-;jjb z9#i`i>~W8kRcW3lVN257(nA#ilJoZ@WP3yha$#(oKcv9a36IgMNJ*H0B5(2aN zOcOTuSn0jJ?(yDC;5479J?=4^)2ukn1XkQ*#dpU&zKQlEO0}Kw87Wb!9gH+974_^> znmwkr$BL<~I4xnTo~(SMrnZvI<4Jpa%x1*|iQ-8U0(-2O!1FlG9xF~u*xZvSCh(JG JPeSlNo;RtQxt{<4 diff --git a/code/game/src/camera.c b/code/game/src/camera.c index 3dc4577..3e6a738 100644 --- a/code/game/src/camera.c +++ b/code/game/src/camera.c @@ -23,8 +23,8 @@ void camera_update(void) { if (!view) break; float smooth_ms = zpl_clamp((float)platform_frametime(), 0.0f, 1.0f); - main_camera.x = zpl_lerp(main_camera.x, view->x, CAMERA_LERP_FACTOR*smooth_ms); - main_camera.y = zpl_lerp(main_camera.y, view->y, CAMERA_LERP_FACTOR*smooth_ms); + main_camera.x = zpl_lerp((float)main_camera.x, view->x, CAMERA_LERP_FACTOR*smooth_ms); + main_camera.y = zpl_lerp((float)main_camera.y, view->y, CAMERA_LERP_FACTOR*smooth_ms); if (main_camera.first_time) { main_camera.first_time = false; diff --git a/code/game/src/debug_replay.c b/code/game/src/debug_replay.c index 25ed262..0c45315 100644 --- a/code/game/src/debug_replay.c +++ b/code/game/src/debug_replay.c @@ -18,24 +18,24 @@ typedef enum { typedef struct { replay_kind kind; pkt_send_keystate pkt; - uint64_t delay; + double delay; } replay_record; #include "debug_replay_compat_v2.c" static uint8_t is_recording = false; static replay_record *records = NULL; -static uint64_t last_record_time = 0.0f; +static double last_record_time = 0; static uint8_t is_playing = false; static int record_pos = 0; -static uint64_t playback_time = 0; +static double playback_time = 0; static ecs_entity_t mime = 0; static ecs_entity_t plr = 0; static ecs_entity_t *temp_actors = NULL; #define REPLAY_MAGIC 0x421DC97E -#define REPLAY_VERSION 3 +#define REPLAY_VERSION 4 static char replay_filename[1024] = {0}; static char replaybuf[sizeof(replay_record)*UINT16_MAX + 32]; @@ -48,7 +48,7 @@ void debug_replay_store(void) { cw_pack_context_init(&pc, replaybuf, sizeof(replaybuf), 0); cw_pack_unsigned(&pc, REPLAY_MAGIC); cw_pack_unsigned(&pc, REPLAY_VERSION); - cw_pack_array_size(&pc, zpl_array_count(records)); + cw_pack_array_size(&pc, (uint32_t)zpl_array_count(records)); for (int i = 0; i < zpl_array_count(records); i++) { cw_pack_bin(&pc, &records[i], sizeof(replay_record)); @@ -72,7 +72,7 @@ void debug_replay_load(void) { zpl_file_close(&f); cw_unpack_context uc = {0}; - cw_unpack_context_init(&uc, replaybuf, file_size, 0); + cw_unpack_context_init(&uc, replaybuf, (uint32_t)file_size, 0); cw_unpack_next(&uc); ZPL_ASSERT(uc.item.type == CWP_ITEM_POSITIVE_INTEGER && uc.item.as.u64 == REPLAY_MAGIC); @@ -114,7 +114,7 @@ void debug_replay_start(void) { if (records) zpl_array_free(records); zpl_array_init_reserve(records, zpl_heap(), UINT16_MAX); - last_record_time = zpl_time_rel_ms(); + last_record_time = zpl_time_rel(); SetTargetFPS(60); } @@ -153,7 +153,7 @@ void debug_replay_run(void) { if (mime) return; is_playing = true; record_pos = 0; - playback_time = zpl_time_rel_ms(); + playback_time = zpl_time_rel(); zpl_array_init(temp_actors, zpl_heap()); plr = camera_get().ent_id; @@ -177,7 +177,7 @@ void ActSpawnIcemaker(void); void debug_replay_update(void) { if (!is_playing) return; - if (playback_time >= zpl_time_rel_ms()) return; + if (playback_time >= zpl_time_rel()) return; replay_record *r = &records[record_pos]; playback_time = zpl_time_rel() + r->delay; @@ -239,7 +239,7 @@ void debug_replay_update(void) { void debug_replay_record_keystate(pkt_send_keystate state) { if (!is_recording) return; - float record_time = zpl_time_rel_ms(); + double record_time = zpl_time_rel(); replay_record rec = { .kind = RPKIND_KEY, @@ -248,13 +248,13 @@ void debug_replay_record_keystate(pkt_send_keystate state) { }; zpl_array_append(records, rec); - last_record_time = zpl_time_rel_ms(); + last_record_time = zpl_time_rel(); } void debug_replay_special_action(replay_kind kind) { ZPL_ASSERT(kind != RPKIND_KEY); if (!is_recording || is_playing) return; - float record_time = zpl_time_rel_ms(); + double record_time = zpl_time_rel(); replay_record rec = { .kind = kind, @@ -262,5 +262,5 @@ void debug_replay_special_action(replay_kind kind) { }; zpl_array_append(records, rec); - last_record_time = zpl_time_rel_ms(); + last_record_time = zpl_time_rel(); } \ No newline at end of file diff --git a/code/game/src/debug_replay_compat_v2.c b/code/game/src/debug_replay_compat_v2.c index ee34f33..5f90676 100644 --- a/code/game/src/debug_replay_compat_v2.c +++ b/code/game/src/debug_replay_compat_v2.c @@ -24,5 +24,5 @@ void debug_replay_load_record_v2(replay_record *rec, void const *buf) { rec->kind = v2_rec.kind; rec->pkt = pkt; - rec->delay = v2_rec.delay; + rec->delay = (double)v2_rec.delay; } \ No newline at end of file diff --git a/code/game/src/debug_ui.c b/code/game/src/debug_ui.c index 6f19c21..1343f18 100644 --- a/code/game/src/debug_ui.c +++ b/code/game/src/debug_ui.c @@ -224,7 +224,7 @@ debug_draw_result debug_draw_list(debug_item *list, float xpos, float ypos, bool case DITEM_LIST: { // NOTE(zaklaus): calculate and cache name width for future use if (it->name_width == 0) { - it->name_width = UIMeasureText(it->name, DBG_FONT_SIZE); + it->name_width = (float)UIMeasureText(it->name, DBG_FONT_SIZE); } Color color = RAYWHITE; if (is_btn_pressed(xpos, ypos, it->name_width, DBG_FONT_SIZE, &color)) { @@ -242,7 +242,7 @@ debug_draw_result debug_draw_list(debug_item *list, float xpos, float ypos, bool case DITEM_TEXT: { char const *text = TextFormat("%s: ", it->name); if (it->name_width == 0) { - it->name_width = UIMeasureText(text, DBG_FONT_SIZE); + it->name_width = (float)UIMeasureText(text, DBG_FONT_SIZE); } UIDrawText(text, xpos, ypos, DBG_FONT_SIZE, RAYWHITE); ZPL_ASSERT(it->proc); @@ -261,7 +261,7 @@ debug_draw_result debug_draw_list(debug_item *list, float xpos, float ypos, bool case DITEM_BUTTON: { char const *text = TextFormat("> %s", it->name); if (it->name_width == 0) { - it->name_width = UIMeasureText(text, DBG_FONT_SIZE); + it->name_width = (float)UIMeasureText(text, DBG_FONT_SIZE); } Color color = RAYWHITE; if (is_btn_pressed(xpos, ypos, it->name_width, DBG_FONT_SIZE, &color) && it->on_click) { @@ -280,15 +280,15 @@ debug_draw_result debug_draw_list(debug_item *list, float xpos, float ypos, bool ZPL_ASSERT(it->slider.min != it->slider.max); char const *text = TextFormat("%s: ", it->name); if (it->name_width == 0) { - it->name_width = UIMeasureText(text, DBG_FONT_SIZE); + it->name_width = (float)UIMeasureText(text, DBG_FONT_SIZE); } UIDrawText(text, xpos, ypos, DBG_FONT_SIZE, RAYWHITE); xpos += it->name_width; - DrawRectangleLines(xpos, ypos, 100.0f, DBG_FONT_SIZE, RAYWHITE); + DrawRectangleLines((int)xpos, (int)ypos, 100, DBG_FONT_SIZE, RAYWHITE); float stick_x = xpos + ((it->slider.val / it->slider.max) * 100.0f) - 5.0f; - DrawRectangle(stick_x, ypos, 10.0f, DBG_FONT_SIZE, RED); + DrawRectangle((int)stick_x, (int)ypos, 10, DBG_FONT_SIZE, RED); xpos += 100.0f + 5.0f; DrawFloat(xpos, ypos, it->slider.val); @@ -322,15 +322,15 @@ void debug_draw(void) { } if (is_handle_ctrl_held) { - debug_xpos = xpos = GetMouseX() - DBG_CTRL_HANDLE_DIM/2; - debug_ypos = ypos = GetMouseY() - DBG_CTRL_HANDLE_DIM/2; + debug_xpos = xpos = (float)(GetMouseX() - DBG_CTRL_HANDLE_DIM/2); + debug_ypos = ypos = (float)(GetMouseY() - DBG_CTRL_HANDLE_DIM/2); if (area == DAREA_PRESS) { is_handle_ctrl_held = 0; } } - DrawRectangle(xpos, ypos, DBG_CTRL_HANDLE_DIM, DBG_CTRL_HANDLE_DIM, color); + DrawRectangle((int)xpos, (int)ypos, DBG_CTRL_HANDLE_DIM, DBG_CTRL_HANDLE_DIM, color); } // NOTE(zaklaus): toggle debug ui diff --git a/code/game/src/debug_ui_actions.c b/code/game/src/debug_ui_actions.c index 7b5a8dd..3a41dc3 100644 --- a/code/game/src/debug_ui_actions.c +++ b/code/game/src/debug_ui_actions.c @@ -58,7 +58,7 @@ ActSpawnCirclingDriver(void) { void ActPlaceIceRink(void) { ecs_entity_t plr = camera_get().ent_id; - uint8_t watr_id = blocks_find(ASSET_WATER); + block_id watr_id = blocks_find(ASSET_WATER); Position const *p = ecs_get(world_ecs(), plr, Position); float const bs = WORLD_BLOCK_SIZE; @@ -210,12 +210,12 @@ ActSpawnDemoNPCs(void) { uint64_t e = entity_spawn(EKIND_DEMO_NPC); ecs_add(world_ecs(), e, EcsDemoNPC); Position *pos = ecs_get_mut(world_ecs(), e, Position, NULL); - pos->x=rand() % world_dim(); - pos->y=rand() % world_dim(); + pos->x=(float)(rand() % world_dim()); + pos->y=(float)(rand() % world_dim()); Velocity *v = ecs_get_mut(world_ecs(), e, Velocity, NULL); - v->x = (rand()%3-1) * 10; - v->y = (rand()%3-1) * 10; + v->x = (float)((rand()%3-1) * 10); + v->y = (float)((rand()%3-1) * 10); zpl_array_append(demo_npcs, e); } diff --git a/code/game/src/debug_ui_widgets.c b/code/game/src/debug_ui_widgets.c index 78b2b7f..ed048b4 100644 --- a/code/game/src/debug_ui_widgets.c +++ b/code/game/src/debug_ui_widgets.c @@ -36,8 +36,8 @@ DrawCameraPos(debug_item *it, float xpos, float ypos) { static inline debug_draw_result DrawUnmeasuredTime(debug_item *it, float xpos, float ypos) { (void)it; - float total_time = profiler_delta(PROF_TOTAL_TIME); - float acc_time = profiler_delta(PROF_MAIN_LOOP); + float total_time = (float)profiler_delta(PROF_TOTAL_TIME); + float acc_time = (float)profiler_delta(PROF_MAIN_LOOP); return DrawFormattedText(xpos, ypos, TextFormat("%.02f ms", (total_time-acc_time) * 1000.0f)); } @@ -64,7 +64,7 @@ DrawLiteral(debug_item *it, float xpos, float ypos) { static inline debug_draw_result DrawProfilerDelta(debug_item *it, float xpos, float ypos) { - float dt = profiler_delta(it->val); + float dt = (float)profiler_delta(it->val); return DrawFormattedText(xpos, ypos, TextFormat("%s: %.02f ms", profiler_name(it->val), dt * 1000.0f)); } diff --git a/code/game/src/game.c b/code/game/src/game.c index 50e4b30..d4bcdef 100644 --- a/code/game/src/game.c +++ b/code/game/src/game.c @@ -119,7 +119,7 @@ void flecs_dash_init() { } float game_time() { - return zpl_time_rel(); + return (float)zpl_time_rel(); } void game_init(game_kind play_mode, uint32_t num_viewers, int32_t seed, uint16_t chunk_size, uint16_t chunk_amount, int8_t is_dash_enabled) { diff --git a/code/game/src/gui/build_mode.c b/code/game/src/gui/build_mode.c index ce0e901..eea88e0 100644 --- a/code/game/src/gui/build_mode.c +++ b/code/game/src/gui/build_mode.c @@ -86,7 +86,7 @@ void buildmode_draw(void) { } if (!is_outside_range) - renderer_draw_single(cam.x, cam.y, ASSET_BUILDMODE_HIGHLIGHT, ColorAlpha(WHITE, 0.2f)); + renderer_draw_single((float)cam.x, (float)cam.y, ASSET_BUILDMODE_HIGHLIGHT, ColorAlpha(WHITE, 0.2f)); build_num_placements = zpl_min(build_num_placements, qty); } diff --git a/code/game/src/main.c b/code/game/src/main.c index 862b983..848b919 100644 --- a/code/game/src/main.c +++ b/code/game/src/main.c @@ -46,10 +46,10 @@ int main(int argc, char** argv) { int8_t is_viewer_only = zpl_opts_has_arg(&opts, "viewer-only"); int8_t is_server_only = zpl_opts_has_arg(&opts, "server-only"); int8_t is_dash_enabled = zpl_opts_has_arg(&opts, "enable-dash"); - int32_t seed = zpl_opts_integer(&opts, "seed", DEFAULT_WORLD_SEED); - uint16_t num_viewers = zpl_opts_integer(&opts, "viewer-count", 1); + int32_t seed = (int32_t)zpl_opts_integer(&opts, "seed", DEFAULT_WORLD_SEED); + uint16_t num_viewers = (uint16_t)zpl_opts_integer(&opts, "viewer-count", 1); + uint16_t world_size = (uint16_t)zpl_opts_integer(&opts, "world-size", DEFAULT_WORLD_SIZE); uint16_t chunk_size = DEFAULT_CHUNK_SIZE; //zpl_opts_integer(&opts, "chunk-size", DEFAULT_CHUNK_SIZE); - uint16_t world_size = zpl_opts_integer(&opts, "world-size", DEFAULT_WORLD_SIZE); game_kind play_mode = GAMEKIND_SINGLE; diff --git a/code/game/src/packet.c b/code/game/src/packet.c index b530a8c..e14166d 100644 --- a/code/game/src/packet.c +++ b/code/game/src/packet.c @@ -25,13 +25,13 @@ int32_t pkt_header_encode(pkt_messages id, uint16_t view_id, void *data, size_t pkt_pack_msg(&pc, PKT_HEADER_ELEMENTS); cw_pack_unsigned(&pc, id); cw_pack_unsigned(&pc, view_id); - cw_pack_bin(&pc, data, datalen); - return pkt_pack_msg_size(&pc); + cw_pack_bin(&pc, data, (uint32_t)datalen); + return (int32_t)pkt_pack_msg_size(&pc); } int32_t pkt_header_decode(pkt_header *table, void *data, size_t datalen) { cw_unpack_context uc = {0}; - pkt_unpack_msg_raw(&uc, data, datalen, PKT_HEADER_ELEMENTS); + pkt_unpack_msg_raw(&uc, data, (uint32_t)datalen, PKT_HEADER_ELEMENTS); cw_unpack_next(&uc); if (uc.item.type != CWP_ITEM_POSITIVE_INTEGER || uc.item.as.u64 > UINT16_MAX) { @@ -53,7 +53,7 @@ int32_t pkt_header_decode(pkt_header *table, void *data, size_t datalen) { table->id = pkt_id; table->view_id = view_id; - table->data = packed_blob; + table->data = (void *)packed_blob; table->datalen = packed_size; table->ok = 1; @@ -87,7 +87,7 @@ int32_t pkt_unpack_struct(cw_unpack_context *uc, pkt_desc *desc, void *raw_blob, case CWP_ITEM_BIN: { if (uc->item.as.bin.length >= PKT_BUFSIZ) return -1; // bin blob too big static uint8_t bin_buf[PKT_BUFSIZ] = {0}; - uint32_t actual_size = decompress_rle(uc->item.as.bin.start, uc->item.as.bin.length, bin_buf); + uint32_t actual_size = decompress_rle((void *)uc->item.as.bin.start, uc->item.as.bin.length, bin_buf); if (actual_size != field->size) return -1; // bin size mismatch zpl_memcopy(blob + field->offset, bin_buf, actual_size); }break; @@ -121,7 +121,7 @@ int32_t pkt_pack_struct(cw_pack_context *pc, pkt_desc *desc, void *raw_blob, uin case CWP_ITEM_BIN: { if (field->size >= PKT_BUFSIZ) return -1; // bin blob too big static uint8_t bin_buf[PKT_BUFSIZ] = {0}; - uint32_t size = compress_rle(blob + field->offset, field->size, bin_buf); + uint32_t size = compress_rle((void *)(blob + field->offset), (uint32_t)field->size, bin_buf); cw_pack_bin(pc, bin_buf, size); }break; case CWP_ITEM_POSITIVE_INTEGER: { diff --git a/code/game/src/packet_utils.h b/code/game/src/packet_utils.h index e2a0b9b..3a206a2 100644 --- a/code/game/src/packet_utils.h +++ b/code/game/src/packet_utils.h @@ -131,8 +131,8 @@ static inline int32_t pkt_msg_decode(pkt_header *header, pkt_desc* desc, uint32_ return pkt_validate_eof_msg(&uc); } -static inline size_t pkt_pack_desc_args(pkt_desc *desc) { - size_t cnt = 0; +static inline uint32_t pkt_pack_desc_args(pkt_desc *desc) { + uint32_t cnt = 0; for (pkt_desc *field = desc; field->type != CWP_NOT_AN_ITEM; ++field, ++cnt) {} return cnt; } diff --git a/code/game/src/packets/pkt_send_librg_update.c b/code/game/src/packets/pkt_send_librg_update.c index d9ab80e..a02d4be 100644 --- a/code/game/src/packets/pkt_send_librg_update.c +++ b/code/game/src/packets/pkt_send_librg_update.c @@ -41,7 +41,7 @@ int32_t pkt_send_librg_update_handler(pkt_header *header) { int32_t state = librg_world_read(view->tracker, header->view_id, uc.item.as.bin.start, uc.item.as.bin.length, NULL); if (state < 0) zpl_printf("[ERROR] world read error: %d\n", state); - uint64_t now = zpl_time_rel_ms(); + float now = (float)zpl_time_rel(); view->delta_time[layer_id] = now - view->last_update[layer_id]; view->last_update[layer_id] = now; diff --git a/code/game/src/prediction.c b/code/game/src/prediction.c index 9c5788f..7459d58 100644 --- a/code/game/src/prediction.c +++ b/code/game/src/prediction.c @@ -4,8 +4,8 @@ #include "world/world.h" #include "game.h" -#define PREDICT_SMOOTH_FACTOR_LO 7.5 -#define PREDICT_SMOOTH_FACTOR_HI 12.5 +#define PREDICT_SMOOTH_FACTOR_LO 7.5f +#define PREDICT_SMOOTH_FACTOR_HI 12.5f static inline float map_factor(float x) { x = 1.0f - zpl_clamp01(x); @@ -32,20 +32,13 @@ static inline float spherical_lerp(float a, float b, float t) { return base_angle(zpl_lerp(a, b, t)); } -float smooth_val(float cur, float tgt, uint64_t dt) { +float smooth_val(float cur, float tgt, float dt) { float factor = zpl_clamp01(map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_MP_FAST_MS, WORLD_TRACKER_UPDATE_MP_SLOW_MS))); -#if 0 - dt = 200; - factor = map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_MP_FAST_MS, WORLD_TRACKER_UPDATE_MP_SLOW_MS)); - zpl_printf("lerp factor: %f\n", factor); - zpl_exit(0); -#endif - return zpl_lerp(cur, tgt, zpl_clamp01(zpl_lerp(PREDICT_SMOOTH_FACTOR_LO, PREDICT_SMOOTH_FACTOR_HI, factor)*platform_frametime())); } -float smooth_val_spherical(float cur, float tgt, uint64_t dt) { +float smooth_val_spherical(float cur, float tgt, float dt) { float factor = zpl_clamp01(map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_MP_FAST_MS, WORLD_TRACKER_UPDATE_MP_SLOW_MS))); return spherical_lerp(cur, tgt, zpl_clamp01(zpl_lerp(PREDICT_SMOOTH_FACTOR_LO, PREDICT_SMOOTH_FACTOR_HI, factor)*platform_frametime())); diff --git a/code/game/src/prediction.h b/code/game/src/prediction.h index 8308190..76ae45f 100644 --- a/code/game/src/prediction.h +++ b/code/game/src/prediction.h @@ -1,9 +1,9 @@ #pragma once #include "entity_view.h" -float smooth_val(float cur, float tgt, uint64_t dt); +float smooth_val(float cur, float tgt, float dt); +float smooth_val_spherical(float cur, float tgt, float dt); void predict_receive_update(entity_view *d, entity_view *data); -float smooth_val_spherical(float cur, float tgt, uint64_t dt); void do_entity_fadeinout(uint64_t key, entity_view * data); void lerp_entity_positions(uint64_t key, entity_view *data); diff --git a/code/game/src/renderer_3d.c b/code/game/src/renderer_3d.c index 86fe49c..7606edf 100644 --- a/code/game/src/renderer_3d.c +++ b/code/game/src/renderer_3d.c @@ -11,9 +11,9 @@ void DEBUG_draw_ground_3d(uint64_t key, entity_view * data) { switch (data->kind) { case EKIND_CHUNK: { world_view *view = game_world_view_get_active(); - int32_t size = view->chunk_size * WORLD_BLOCK_SIZE; - int32_t half_size = size >> 1; - int32_t half_block_size = WORLD_BLOCK_SIZE >> 1; + float size = (float)(view->chunk_size * WORLD_BLOCK_SIZE); + float half_size = size / 2.0f; + float half_block_size = (float)(WORLD_BLOCK_SIZE >> 1); int16_t offset = 0; float x = data->x * size + offset; @@ -24,7 +24,7 @@ void DEBUG_draw_ground_3d(uint64_t key, entity_view * data) { for (size_t ty = 0; ty < view->chunk_size; ty++) { for (size_t tx = 0; tx < view->chunk_size; tx++) { - uint8_t blk_id = data->outer_blocks[(ty*view->chunk_size)+tx]; + block_id blk_id = data->outer_blocks[(ty*view->chunk_size)+tx]; if (blk_id != 0) { DrawCubeTexture(GetBlockImage(blk_id), (Vector3){x + tx*WORLD_BLOCK_SIZE+half_block_size, 32.0f, y + ty*WORLD_BLOCK_SIZE+half_block_size}, 64, 0.01f, 64, WHITE); } @@ -96,8 +96,8 @@ void renderer_draw_3d(void) { camera game_camera_3d = camera_get(); #if 1 - render_camera_3d.position = (Vector3){game_camera_3d.x, 260.0f*(10.0f-cam_zoom), game_camera_3d.y+50.0f*(10.0f-cam_zoom/2.0f)}; - render_camera_3d.target = (Vector3){game_camera_3d.x, 0.0f, game_camera_3d.y}; + render_camera_3d.position = (Vector3){(float)game_camera_3d.x, 260.0f*(10.0f-cam_zoom), (float)game_camera_3d.y+50.0f*(10.0f-cam_zoom/2.0f)}; + render_camera_3d.target = (Vector3){(float)game_camera_3d.x, 0.0f, (float)game_camera_3d.y}; #else UpdateCamera(&render_camera_3d); #endif diff --git a/code/game/src/renderer_bridge.c b/code/game/src/renderer_bridge.c index 37d11e0..f01bfb1 100644 --- a/code/game/src/renderer_bridge.c +++ b/code/game/src/renderer_bridge.c @@ -96,7 +96,7 @@ void renderer_draw_single(float x, float y, asset_id id, Color color) { void renderer_bake_chunk(uint64_t key, entity_view * data) { if (data->kind != EKIND_CHUNK) return; world_view *view = game_world_view_get_active(); - blocks_build_chunk_tex(key, data->blocks, data->outer_blocks, view); + blocks_build_chunk_tex(key, data->blocks, view); } void renderer_switch(int kind) { diff --git a/code/game/src/renderer_v0.c b/code/game/src/renderer_v0.c index 5f75e3a..ad9dd19 100644 --- a/code/game/src/renderer_v0.c +++ b/code/game/src/renderer_v0.c @@ -12,28 +12,28 @@ void DEBUG_draw_ground(uint64_t key, entity_view * data) { switch (data->kind) { case EKIND_CHUNK: { world_view *view = game_world_view_get_active(); - int32_t size = view->chunk_size * WORLD_BLOCK_SIZE; - int16_t offset = 0; + float size = (float)(view->chunk_size * WORLD_BLOCK_SIZE); + float offset = 0.0; float x = data->x * size + offset; float y = data->y * size + offset; RenderTexture2D tex = GetChunkTexture(key); float scale = (size)/(float)(tex.texture.width); - tex.texture.width *= scale; - tex.texture.height *= scale; + tex.texture.width *= (int32_t)scale; + tex.texture.height *= (int32_t)scale; DrawTextureRec(tex.texture, (Rectangle){0, 0, size, -size}, (Vector2){x, y}, ColorAlpha(WHITE, data->tran_time)); if (zoom_overlay_tran > 0.02f) { - DrawRectangleEco(x, y, size-offset, size-offset, ColorAlpha(ColorFromHSV(data->color, 0.13f, 0.89f), data->tran_time*zoom_overlay_tran*0.75f)); + DrawRectangleEco(x, y, size-offset, size-offset, ColorAlpha(ColorFromHSV((float)data->color, 0.13f, 0.89f), data->tran_time*zoom_overlay_tran*0.75f)); - DrawTextEco(TextFormat("%d %d", (int)data->x, (int)data->y), (int16_t)x+15, (int16_t)y+15, 200 , ColorAlpha(BLACK, data->tran_time*zoom_overlay_tran), 0.0); + DrawTextEco(TextFormat("%d %d", (int)data->x, (int)data->y), x+15.0f, y+15.0f, 200 , ColorAlpha(BLACK, data->tran_time*zoom_overlay_tran), 0.0); } for (size_t ty = 0; ty < view->chunk_size; ty++) { for (size_t tx = 0; tx < view->chunk_size; tx++) { - uint8_t blk_id = data->outer_blocks[(ty*view->chunk_size)+tx]; + block_id blk_id = data->outer_blocks[(ty*view->chunk_size)+tx]; if (blk_id != 0) { DrawTextureRec(GetBlockImage(blk_id), ASSET_SRC_RECT(), (Vector2){x+tx*WORLD_BLOCK_SIZE, y+ty*WORLD_BLOCK_SIZE}, ColorAlpha(WHITE, data->tran_time)); } @@ -123,7 +123,7 @@ void renderer_draw_v0(void) { camera_update(); camera game_camera = camera_get(); - render_camera.target = (Vector2){game_camera.x, game_camera.y}; + render_camera.target = (Vector2){(float)game_camera.x, (float)game_camera.y}; zoom_overlay_tran = zpl_lerp(zoom_overlay_tran, (target_zoom <= CAM_OVERLAY_ZOOM_LEVEL) ? 1.0f : 0.0f, GetFrameTime()*2.0f); @@ -141,7 +141,7 @@ float renderer_zoom_get_v0(void) { void renderer_init_v0(void) { render_camera.target = (Vector2){0.0f,0.0f}; - render_camera.offset = (Vector2){screenWidth >> 1, screenHeight >> 1}; + render_camera.offset = (Vector2){(float)(screenWidth >> 1), (float)(screenHeight >> 1)}; render_camera.rotation = 0.0f; render_camera.zoom = 1.5f; diff --git a/code/game/src/utils/options.c b/code/game/src/utils/options.c index 61b068b..a14a330 100644 --- a/code/game/src/utils/options.c +++ b/code/game/src/utils/options.c @@ -6,18 +6,18 @@ void generate_minimap(int32_t seed, uint16_t block_size, uint16_t chunk_size, uint16_t world_size) { world_init(seed, chunk_size, world_size); - - uint8_t const *world; + + block_id const *world; uint32_t world_length = chunk_size * world_size; uint32_t len = world_buf(&world, NULL); - - for (int i=0; i 0 && i % world_length == 0) { putc('\n', stdout); } putc(blocks_get_symbol(world[i]), stdout); } - + putc('\n', stdout); world_destroy(); } diff --git a/code/game/src/utils/raylib_helpers.h b/code/game/src/utils/raylib_helpers.h index 97ecc2f..a72c488 100644 --- a/code/game/src/utils/raylib_helpers.h +++ b/code/game/src/utils/raylib_helpers.h @@ -16,8 +16,8 @@ void DrawTextEco(const char *text, float posX, float posY, int fontSize, Color c if (GetFontDefault().texture.id != 0) { Vector2 position = { (float)posX , (float)posY }; - int defaultFontSize = 10; // Default Font chars height in pixel - int new_spacing = spacing == 0.0f ? fontSize/defaultFontSize : spacing; + float defaultFontSize = 10.0; // Default Font chars height in pixel + float new_spacing = spacing == 0.0f ? (float)fontSize/defaultFontSize : spacing; DrawTextEx(GetFontDefault(), text, position, (float)fontSize , (float)new_spacing , color); } @@ -31,8 +31,8 @@ int MeasureTextEco(const char *text, int fontSize, float spacing) { // Check if default font has been loaded if (GetFontDefault().texture.id != 0) { - int defaultFontSize = 10; // Default Font chars height in pixel - int new_spacing = spacing == 0.0f ? fontSize/defaultFontSize : spacing; + float defaultFontSize = 10.0; // Default Font chars height in pixel + float new_spacing = spacing == 0.0f ? (float)fontSize/defaultFontSize : spacing; vec = MeasureTextEx(GetFontDefault(), text, (float)fontSize, (float)new_spacing); } @@ -56,7 +56,7 @@ void DrawRectangleEco(float posX, float posY, float width, float height, Color c } static inline -Texture2D GetBlockImage(uint8_t id) { +Texture2D GetBlockImage(block_id id) { return *(Texture2D*)blocks_get_img(id); } @@ -329,13 +329,14 @@ Vector3 MeasureText3D(Font font, const char* text, float fontSize, float fontSpa return vec; #endif - + Vector3 todo = {0}; + return todo; } Color GenerateRandomColor(float s, float v) { const float Phi = 0.618033988749895f; // Golden ratio conjugate - float h = GetRandomValue(0, 360); + float h = (float)GetRandomValue(0, 360); h = fmodf((h + h*Phi), 360.0f); return ColorFromHSV(h, s, v); } diff --git a/code/game/src/world/perlin.c b/code/game/src/world/perlin.c index a4fddc6..4798519 100644 --- a/code/game/src/world/perlin.c +++ b/code/game/src/world/perlin.c @@ -37,8 +37,8 @@ static double perlin_smooth_lerp(double x, double y, double t) { } double perlin_noise2d(int32_t seed, double x, double y) { - int32_t x_int = floor(x); - int32_t y_int = floor(y); + int32_t x_int = (int32_t)floor(x); + int32_t y_int = (int32_t)floor(y); double x_frac = x - x_int; double y_frac = y - y_int; int32_t s = perlin_noise2_sample(seed, x_int, y_int); @@ -57,7 +57,7 @@ double perlin_fbm(int32_t seed, double x, double y, double freq, uint32_t octave double amp = 1.0; double res = 0.0; double div = 0.0; - + for (uint32_t i=0; i zpl_time_rel_ms()) return; - world.tracker_update[ticker] = zpl_time_rel_ms() + freq; +static void world_tracker_update(uint8_t ticker, uint32_t freq, uint8_t radius) { + if (world.tracker_update[ticker] > (float)zpl_time_rel()) return; + world.tracker_update[ticker] = (float)zpl_time_rel() + freq; profile(PROF_WORLD_WRITE) { ecs_iter_t it = ecs_query_iter(world.ecs_update); diff --git a/code/game/src/world/world.h b/code/game/src/world/world.h index 6116486..438a883 100644 --- a/code/game/src/world/world.h +++ b/code/game/src/world/world.h @@ -41,7 +41,7 @@ typedef struct { block_id **block_mapping; block_id **outer_block_mapping; uint16_t dim; - uint64_t tracker_update[3]; + float tracker_update[3]; uint8_t active_layer_id; ecs_world_t *ecs; ecs_world_t *ecs_stage; diff --git a/code/game/src/world_view.h b/code/game/src/world_view.h index 3cc2485..5c7f4d1 100644 --- a/code/game/src/world_view.h +++ b/code/game/src/world_view.h @@ -16,8 +16,8 @@ typedef struct { uint16_t chunk_amount; // NOTE(zaklaus): metrics - uint64_t last_update[WORLD_TRACKER_LAYERS]; - uint64_t delta_time[WORLD_TRACKER_LAYERS]; + float last_update[WORLD_TRACKER_LAYERS]; + float delta_time[WORLD_TRACKER_LAYERS]; uint8_t active_layer_id; } world_view;