From a0917f7b56c4c4682fd592b9b52e33d1a393d714 Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 27 May 2023 21:24:55 +0100 Subject: [PATCH] water trigger --- player_ragdoll.c | 17 +++++++++-------- player_skate.c | 9 +++++++++ player_walk.c | 12 +++++++++++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/player_ragdoll.c b/player_ragdoll.c index aabf6f9..eab788e 100644 --- a/player_ragdoll.c +++ b/player_ragdoll.c @@ -346,14 +346,15 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) } } - for( int j=0; jpart_count; j++ ){ - struct ragdoll_part *pj = &rd->parts[j]; - - if( run_sim ){ - v4f plane = {0.0f,1.0f,0.0f,0.0f}; - rb_effect_simple_bouyency( &pj->obj.rb, plane, - k_ragdoll_floatyiness, - k_ragdoll_floatydrag ); + if( world->water.enabled ){ + for( int j=0; jpart_count; j++ ){ + struct ragdoll_part *pj = &rd->parts[j]; + + if( run_sim ){ + rb_effect_simple_bouyency( &pj->obj.rb, world->water.plane, + k_ragdoll_floatyiness, + k_ragdoll_floatydrag ); + } } } diff --git a/player_skate.c b/player_skate.c index 87c8cba..efc0f34 100644 --- a/player_skate.c +++ b/player_skate.c @@ -2082,6 +2082,15 @@ VG_STATIC void player__skate_update( player_instance *player ) struct player_skate *s = &player->_skate; world_instance *world = world_current_instance(); + if( world->water.enabled ){ + if( player->rb.co[1]+0.25f < world->water.height ){ + audio_oneshot_3d( &audio_splash, player->rb.co, 40.0f, 1.0f ); + player__skate_kill_audio( player ); + player__dead_transition( player ); + return; + } + } + v3_copy( player->rb.co, s->state.prev_pos ); s->state.activity_prev = s->state.activity; diff --git a/player_walk.c b/player_walk.c index 10d0094..bacb48c 100644 --- a/player_walk.c +++ b/player_walk.c @@ -3,6 +3,7 @@ #include "player.h" #include "input.h" +#include "audio.h" VG_STATIC void player_walk_drop_in_vector( player_instance *player, v3f vec ) { @@ -361,6 +362,16 @@ VG_STATIC void player__walk_update( player_instance *player ) struct player_walk *w = &player->_walk; v3_copy( player->rb.co, w->state.prev_pos ); + world_instance *world = world_current_instance(); + + if( world->water.enabled ){ + if( player->rb.co[1]+0.4f < world->water.height ){ + audio_oneshot_3d( &audio_splash, player->rb.co, 40.0f, 1.0f ); + player__dead_transition( player ); + return; + } + } + enum walk_activity prev_state = w->state.activity; if( player->immobile ) @@ -390,7 +401,6 @@ VG_STATIC void player__walk_update( player_instance *player ) joystick_state( k_srjoystick_steer, steer ); w->move_speed = v2_length( steer ); - world_instance *world = world_current_instance(); /* * Collision detection -- 2.25.1