From d88ca3e870f4296d524959db6e55ea4a37edc50f Mon Sep 17 00:00:00 2001 From: xtreme8000 Date: Tue, 14 May 2019 19:43:41 +0200 Subject: [PATCH] See desc * improve first person spectator cam * add lighting based cylindrical fog for gpus where other type wont work correctly * improve network graph --- resources/config.ini | 3 ++ src/camera.c | 2 +- src/config.c | 11 ++++++++ src/config.h | 1 + src/glx.c | 67 ++++++++++++++++++++++++++++++++------------ src/hud.c | 55 ++++++++++++++++++++---------------- src/main.c | 28 ++++++++++++++---- src/ping.c | 1 + 8 files changed, 120 insertions(+), 48 deletions(-) diff --git a/resources/config.ini b/resources/config.ini index 2b4586b..1069e67 100644 --- a/resources/config.ini +++ b/resources/config.ini @@ -13,6 +13,9 @@ multisamples = 0 greedy_meshing = 0 vsync = 1 show_fps = 0 +voxlap_models = 0 +force_displaylist = 0 +smooth_fog = 0 [controls] move_forward = 87 diff --git a/src/camera.c b/src/camera.c index 34eacfa..92141fb 100644 --- a/src/camera.c +++ b/src/camera.c @@ -36,7 +36,7 @@ float camera_fov_scaled() { int render_fpv = (camera_mode==CAMERAMODE_FPS) || ((camera_mode==CAMERAMODE_BODYVIEW || camera_mode==CAMERAMODE_SPECTATOR) && cameracontroller_bodyview_mode); int local_id = (camera_mode==CAMERAMODE_FPS)?local_player_id:cameracontroller_bodyview_player; - if(render_fpv && players[local_id].held_item==TOOL_GUN && players[local_id].input.buttons.rmb && !players[local_id].input.keys.sprint) + if(render_fpv && players[local_id].held_item==TOOL_GUN && players[local_id].input.buttons.rmb && !players[local_id].input.keys.sprint && players[local_id].alive) return camera_fov*atan(tan((camera_fov/180.0F*PI)/2)/2.0F)*2.0F; return camera_fov; } diff --git a/src/config.c b/src/config.c index 49fb24e..5643716 100644 --- a/src/config.c +++ b/src/config.c @@ -64,6 +64,7 @@ void config_save() { config_seti("voxlap_models",settings.voxlap_models); config_seti("force_displaylist",settings.force_displaylist); config_seti("inverty",settings.invert_y); + config_seti("smooth_fog",settings.smooth_fog); for(int k=0;k=0.5F) { players[local_player_id].items_show = 0; } @@ -273,10 +284,14 @@ void display(float dt) { } int* pos = NULL; - switch(players[local_player_id].held_item) { + switch(players[local_id].held_item) { case TOOL_BLOCK: - if(!players[local_player_id].input.keys.sprint && camera_mode==CAMERAMODE_FPS) - pos = camera_terrain_pick(0); + if(!players[local_id].input.keys.sprint && render_fpv) { + if(is_local) + pos = camera_terrain_pick(0); + else + pos = camera_terrain_pickEx(0,camera_x,camera_y,camera_z,players[local_id].orientation_smooth.x,players[local_id].orientation_smooth.y,players[local_id].orientation_smooth.z); + } break; default: pos = NULL; @@ -289,7 +304,7 @@ void display(float dt) { glDepthMask(GL_FALSE); struct Point cubes[64]; int amount = 0; - if(local_player_drag_active && players[local_player_id].input.buttons.rmb && players[local_player_id].held_item==TOOL_BLOCK) { + if(is_local && local_player_drag_active && players[local_player_id].input.buttons.rmb && players[local_player_id].held_item==TOOL_BLOCK) { amount = map_cube_line(local_player_drag_x,local_player_drag_z,63-local_player_drag_y,pos[0],pos[2],63-pos[1],cubes); } else { amount = 1; @@ -301,7 +316,7 @@ void display(float dt) { int tmp = cubes[amount-1].y; cubes[amount-1].y = 63-cubes[amount-1].z; cubes[amount-1].z = tmp; - if(amount<=local_player_blocks) { + if(amount<=(is_local?local_player_blocks:50)) { glColor3f(1.0F,1.0F,1.0F); } @@ -391,6 +406,8 @@ void display(float dt) { } glx_disable_sphericalfog(); + if(settings.smooth_fog) + glDisable(GL_FOG); } } @@ -583,6 +600,7 @@ int main(int argc, char** argv) { settings.voxlap_models = 0; settings.force_displaylist = 0; settings.invert_y = 0; + settings.smooth_fog = 0; strcpy(settings.name,"DEV_CLIENT"); if(!file_dir_exists("logs")) diff --git a/src/ping.c b/src/ping.c index 4a51be5..39202f5 100644 --- a/src/ping.c +++ b/src/ping.c @@ -41,6 +41,7 @@ void ping_init() { } void ping_deinit() { + pthread_mutex_lock(&ping_lock); //stop the ping thread from running enet_socket_destroy(sock); enet_socket_destroy(lan); }