#include "player.h"
#include "input.h"
+#include "audio.h"
VG_STATIC void player_walk_drop_in_vector( player_instance *player, v3f vec )
{
VG_STATIC int player_walk_scan_for_drop_in( player_instance *player )
{
struct player_walk *w = &player->_walk;
- world_instance *world = get_active_world();
+ world_instance *world = world_current_instance();
v3f dir, center;
q_mulv( player->rb.q, (v3f){0.0f,0.0f,1.0f}, dir );
}
}
}
+ else if( button_down( k_srbind_jump ) && !player->immobile ){
+ w->state.jump_queued = 1;
+ w->state.jump_input_time = vg.time;
+ }
}
VG_STATIC int player_walk_normal_standable( player_instance *player, v3f n )
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 )
joystick_state( k_srjoystick_steer, steer );
w->move_speed = v2_length( steer );
- world_instance *world = get_active_world();
/*
* Collision detection
nominal_speed = k_walkspeed;
/* jump */
- if( button_down( k_srbind_jump ) ){
- float d = v3_dot( player->basis[1], player->rb.v );
- v3_muladds( player->rb.v, player->basis[1], -d, player->rb.v );
- v3_muladds( player->rb.v, player->basis[1], 5.0f, player->rb.v );
- w->state.activity = k_walk_activity_air;
- prev_state = k_walk_activity_air;
- accel_speed = k_walk_air_accel;
- nominal_speed = k_airspeed;
+ if( w->state.jump_queued ){
+ w->state.jump_queued = 0;
+
+ f32 t = vg.time - w->state.jump_input_time;
+ if( t < PLAYER_JUMP_EPSILON ){
+ float d = v3_dot( player->basis[1], player->rb.v );
+ v3_muladds( player->rb.v, player->basis[1], -d, player->rb.v );
+ v3_muladds( player->rb.v, player->basis[1], 5.0f, player->rb.v );
+ w->state.activity = k_walk_activity_air;
+ prev_state = k_walk_activity_air;
+ accel_speed = k_walk_air_accel;
+ nominal_speed = k_airspeed;
+ }
}
else{
player_friction( player->rb.v );
audio_lock();
if( w->surface == k_surface_prop_concrete ){
audio_oneshot_3d(
- &audio_footsteps[rand()%vg_list_size(audio_footsteps)],
+ &audio_footsteps[vg_randu32()%vg_list_size(audio_footsteps)],
player->rb.co, 40.0f, 1.0f
);
}
else if( w->surface == k_surface_prop_grass ){
audio_oneshot_3d(
- &audio_footsteps_grass[rand()%vg_list_size(audio_footsteps_grass)],
+ &audio_footsteps_grass[vg_randu32()%vg_list_size(audio_footsteps_grass)],
player->rb.co, 40.0f, 1.0f
);
}
else if( w->surface == k_surface_prop_wood ){
audio_oneshot_3d(
- &audio_footsteps_wood[rand()%vg_list_size(audio_footsteps_wood)],
+ &audio_footsteps_wood[vg_randu32()%vg_list_size(audio_footsteps_wood)],
player->rb.co, 40.0f, 1.0f
);
}