From a5898450654f8d2a1603077b9d1ea8f2bf702329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Wed, 27 Oct 2021 15:14:46 +0200 Subject: [PATCH] Improve overall motion + single-player now pushes out fast layer as fast as possible --- code/game/src/camera.c | 102 ++++++++++++++------------- code/game/src/prediction.c | 6 +- code/game/src/world/world.h | 2 +- code/modules/source/system_vehicle.c | 2 +- 4 files changed, 57 insertions(+), 55 deletions(-) diff --git a/code/game/src/camera.c b/code/game/src/camera.c index 44800ef..a0a23dc 100644 --- a/code/game/src/camera.c +++ b/code/game/src/camera.c @@ -1,50 +1,52 @@ -#include "zpl.h" -#include "camera.h" -#include "entity_view.h" -#include "game.h" - -#define CAMERA_LERP_FACTOR 0.13 - -static camera main_camera; - -void camera_reset(void) { - zpl_zero_item(&main_camera); - main_camera.mode = CAMERA_MODE_STATIONARY; - main_camera.first_time = true; -} - -void camera_update(void) { - switch (main_camera.mode) { - case CAMERA_MODE_FOLLOW: { - world_view *world = game_world_view_get_active(); - if (!world) break; - entity_view *view = entity_view_get(&world->entities, main_camera.ent_id); - if (!view) break; - - main_camera.x = zpl_lerp(main_camera.x, view->x, CAMERA_LERP_FACTOR); - main_camera.y = zpl_lerp(main_camera.y, view->y, CAMERA_LERP_FACTOR); - - if (main_camera.first_time) { - main_camera.first_time = false; - main_camera.x = view->x; - main_camera.y = view->y; - } - }break; - - default: { - - }break; - } -} -void camera_set_follow(uint64_t ent_id) { - main_camera.mode = CAMERA_MODE_FOLLOW; - main_camera.ent_id = ent_id; -} -void camera_set_pos(double x, double y) { - main_camera.mode = CAMERA_MODE_STATIONARY; - main_camera.x = x; - main_camera.y = y; -} -camera camera_get(void) { - return main_camera; -} +#include "zpl.h" +#include "camera.h" +#include "platform.h" +#include "entity_view.h" +#include "game.h" + +#define CAMERA_LERP_FACTOR 11.2f + +static camera main_camera; + +void camera_reset(void) { + zpl_zero_item(&main_camera); + main_camera.mode = CAMERA_MODE_STATIONARY; + main_camera.first_time = true; +} + +void camera_update(void) { + switch (main_camera.mode) { + case CAMERA_MODE_FOLLOW: { + world_view *world = game_world_view_get_active(); + if (!world) break; + entity_view *view = entity_view_get(&world->entities, main_camera.ent_id); + 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); + + if (main_camera.first_time) { + main_camera.first_time = false; + main_camera.x = view->x; + main_camera.y = view->y; + } + }break; + + default: { + + }break; + } +} +void camera_set_follow(uint64_t ent_id) { + main_camera.mode = CAMERA_MODE_FOLLOW; + main_camera.ent_id = ent_id; +} +void camera_set_pos(double x, double y) { + main_camera.mode = CAMERA_MODE_STATIONARY; + main_camera.x = x; + main_camera.y = y; +} +camera camera_get(void) { + return main_camera; +} diff --git a/code/game/src/prediction.c b/code/game/src/prediction.c index 10e2fa4..bd11d53 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 10.5 -#define PREDICT_SMOOTH_FACTOR_HI 20.5 +#define PREDICT_SMOOTH_FACTOR_LO 7.5 +#define PREDICT_SMOOTH_FACTOR_HI 12.5 static inline float map_factor(float x) { x = 1.0f - zpl_clamp01(x); @@ -69,7 +69,7 @@ void predict_receive_update(entity_view *d, entity_view *data) { data->tran_time = d->tran_time; } -#define ENTITY_DO_LERP_SP 1 +#define ENTITY_DO_LERP_SP 0 void lerp_entity_positions(uint64_t key, entity_view *data) { (void)key; diff --git a/code/game/src/world/world.h b/code/game/src/world/world.h index 466dcb6..47e927a 100644 --- a/code/game/src/world/world.h +++ b/code/game/src/world/world.h @@ -15,7 +15,7 @@ #define WORLD_LAYERING 0 #define WORLD_TRACKER_LAYERS 3 -#define WORLD_TRACKER_UPDATE_FAST_MS 10 +#define WORLD_TRACKER_UPDATE_FAST_MS 0 #define WORLD_TRACKER_UPDATE_NORMAL_MS 50 #define WORLD_TRACKER_UPDATE_SLOW_MS 100 #define WORLD_TRACKER_UPDATE_MP_FAST_MS 50 diff --git a/code/modules/source/system_vehicle.c b/code/modules/source/system_vehicle.c index 7512794..e1b2e42 100644 --- a/code/modules/source/system_vehicle.c +++ b/code/modules/source/system_vehicle.c @@ -82,7 +82,7 @@ void EnterVehicle(ecs_iter_t *it) { #define VEHICLE_DECEL 0.28f #define VEHICLE_STEER 9.89f #define VEHICLE_STEER_REVERT 6.0941816f -#define VEHICLE_POWER 34.89f +#define VEHICLE_POWER 97.89f #define VEHICLE_BRAKE_FORCE 0.84f void VehicleHandling(ecs_iter_t *it) {