various networking improvements

isolation_bkp/dynres
Dominik Madarász 2021-09-08 18:53:50 +02:00
parent 1b0951057d
commit 4449738580
5 changed files with 38 additions and 20 deletions

View File

@ -186,7 +186,9 @@ void game_shutdown() {
if (game_mode != GAMEKIND_HEADLESS) { if (game_mode != GAMEKIND_HEADLESS) {
world_viewers_destroy(); world_viewers_destroy();
platform_shutdown();
// TODO(zaklaus): crashes on exit
//platform_shutdown();
} }
} }

View File

@ -33,11 +33,11 @@ static inline float spherical_lerp(float a, float b, float t) {
} }
float smooth_val(float cur, float tgt, uint64_t dt) { float smooth_val(float cur, float tgt, uint64_t dt) {
float factor = zpl_clamp01(map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_FAST_MS, WORLD_TRACKER_UPDATE_SLOW_MS))); float factor = zpl_clamp01(map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_MP_FAST_MS, WORLD_TRACKER_UPDATE_MP_SLOW_MS)));
#if 0 #if 0
dt = 200; dt = 200;
factor = map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_FAST_MS, WORLD_TRACKER_UPDATE_SLOW_MS)); 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_printf("lerp factor: %f\n", factor);
zpl_exit(0); zpl_exit(0);
#endif #endif
@ -46,7 +46,7 @@ float smooth_val(float cur, float tgt, uint64_t dt) {
} }
float smooth_val_spherical(float cur, float tgt, uint64_t dt) { float smooth_val_spherical(float cur, float tgt, uint64_t dt) {
float factor = zpl_clamp01(map_factor(zpl_unlerp(dt, WORLD_TRACKER_UPDATE_FAST_MS, WORLD_TRACKER_UPDATE_SLOW_MS))); 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_lerp(PREDICT_SMOOTH_FACTOR_LO, PREDICT_SMOOTH_FACTOR_HI, factor)); return spherical_lerp(cur, tgt, zpl_lerp(PREDICT_SMOOTH_FACTOR_LO, PREDICT_SMOOTH_FACTOR_HI, factor));
} }
@ -75,17 +75,16 @@ void lerp_entity_positions(uint64_t key, entity_view *data) {
world_view *view = game_world_view_get_active(); world_view *view = game_world_view_get_active();
if (data->flag == EFLAG_INTERP) { if (data->flag == EFLAG_INTERP) {
if (game_get_kind() == GAMEKIND_CLIENT) {
#if 0 data->x = smooth_val(data->x, data->tx, view->delta_time[data->layer_id]);
data->x = smooth_val(data->x, data->tx, view->delta_time[data->layer_id]); data->y = smooth_val(data->y, data->ty, view->delta_time[data->layer_id]);
data->y = smooth_val(data->y, data->ty, view->delta_time[data->layer_id]); data->heading = smooth_val_spherical(data->heading, data->theading, view->delta_time[data->layer_id]);
data->heading = smooth_val_spherical(data->heading, data->theading, view->delta_time[data->layer_id]); } else {
#else (void)view;
(void)view; data->x = data->tx;
data->x = data->tx; data->y = data->ty;
data->y = data->ty; data->heading = data->theading;
data->heading = data->theading; }
#endif
} }
} }

View File

@ -9,6 +9,7 @@
#include "world/worldgen/worldgen.h" #include "world/worldgen/worldgen.h"
#include "platform.h" #include "platform.h"
#include "profiler.h" #include "profiler.h"
#include "game.h"
#include "packets/pkt_send_librg_update.h" #include "packets/pkt_send_librg_update.h"
@ -282,15 +283,24 @@ static void world_tracker_update(uint8_t ticker, uint32_t freq, uint8_t radius)
} }
} }
int32_t world_update() { int32_t world_update() {
profile (PROF_UPDATE_SYSTEMS) { profile (PROF_UPDATE_SYSTEMS) {
ecs_progress(world.ecs, 0.0f); ecs_progress(world.ecs, 0.0f);
} }
world_tracker_update(0, WORLD_TRACKER_UPDATE_FAST_MS, 2); uint32_t fast_ms = WORLD_TRACKER_UPDATE_FAST_MS;
world_tracker_update(1, WORLD_TRACKER_UPDATE_NORMAL_MS, 4); uint32_t normal_ms = WORLD_TRACKER_UPDATE_NORMAL_MS;
world_tracker_update(2, WORLD_TRACKER_UPDATE_SLOW_MS, 6); uint32_t slow_ms = WORLD_TRACKER_UPDATE_SLOW_MS;
if (game_get_kind() != GAMEKIND_SINGLE) {
fast_ms = WORLD_TRACKER_UPDATE_MP_FAST_MS;
normal_ms = WORLD_TRACKER_UPDATE_MP_NORMAL_MS;
slow_ms = WORLD_TRACKER_UPDATE_MP_SLOW_MS;
}
world_tracker_update(0, fast_ms, 2);
world_tracker_update(1, normal_ms, 4);
world_tracker_update(2, slow_ms, 6);
debug_replay_update(); debug_replay_update();
return 0; return 0;

View File

@ -18,6 +18,9 @@
#define WORLD_TRACKER_UPDATE_FAST_MS 10 #define WORLD_TRACKER_UPDATE_FAST_MS 10
#define WORLD_TRACKER_UPDATE_NORMAL_MS 50 #define WORLD_TRACKER_UPDATE_NORMAL_MS 50
#define WORLD_TRACKER_UPDATE_SLOW_MS 100 #define WORLD_TRACKER_UPDATE_SLOW_MS 100
#define WORLD_TRACKER_UPDATE_MP_FAST_MS 50
#define WORLD_TRACKER_UPDATE_MP_NORMAL_MS 150
#define WORLD_TRACKER_UPDATE_MP_SLOW_MS 300
#define WORLD_BLOCK_SIZE 64 #define WORLD_BLOCK_SIZE 64
#define WORLD_PKT_READER(name) int32_t name(void* data, uint32_t datalen, void *udata) #define WORLD_PKT_READER(name) int32_t name(void* data, uint32_t datalen, void *udata)

View File

@ -96,8 +96,12 @@ void DropItem(ecs_iter_t *it) {
if (in[i].sprint) { if (in[i].sprint) {
dropped_count /= 2; dropped_count /= 2;
} else if (in[i].ctrl) { } else if (in[i].ctrl) {
dropped_count = 1; dropped_count = dropped_count > 0 ? 1 : 0;
} }
if (dropped_count == 0)
continue;
ecs_entity_t te = item_spawn(item->kind, dropped_count); ecs_entity_t te = item_spawn(item->kind, dropped_count);
item->quantity -= dropped_count; item->quantity -= dropped_count;