projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
keyboard
[carveJwlIkooP6JGAAIwe30JlM.git]
/
player_physics.h
diff --git
a/player_physics.h
b/player_physics.h
index ff8d1f7a25a921848254f2a6d1725d39713a316a..0213fc7b65a18deb66d756b3d20f4b18e64ce8fb 100644
(file)
--- a/
player_physics.h
+++ b/
player_physics.h
@@
-81,7
+81,8
@@
VG_STATIC void player_start_air(void)
u32 scolour = (u8)(vg_minf(-land_delta * 2.0f, 255.0f));
/* Bias prediction towords ramps */
u32 scolour = (u8)(vg_minf(-land_delta * 2.0f, 255.0f));
/* Bias prediction towords ramps */
- if( ray_hit_is_ramp( &contact ) )
+ if( ray_hit_material( &contact )->info.flags
+ & k_material_flag_skate_surface )
{
land_delta *= 0.1f;
scolour |= 0x0000a000;
{
land_delta *= 0.1f;
scolour |= 0x0000a000;
@@
-149,7
+150,7
@@
VG_STATIC void player_physics_control(void)
vel[0] = stable_force( vel[0],vg_signf(vel[0]) * -k_friction_lat*substep);
}
vel[0] = stable_force( vel[0],vg_signf(vel[0]) * -k_friction_lat*substep);
}
- if(
vg_get_button( "jump" )
)
+ if(
player.input_jump->button.value
)
{
phys->jump += VG_TIMESTEP_FIXED * k_jump_charge_speed;
{
phys->jump += VG_TIMESTEP_FIXED * k_jump_charge_speed;
@@
-160,15
+161,15
@@
VG_STATIC void player_physics_control(void)
}
static int push_thresh_last = 0;
}
static int push_thresh_last = 0;
- float push
_amt = vg_get_axis( "walk/push" ) * 0.5f + 0.5f
;
- int push_thresh = push
_amt
>0.15f? 1: 0;
+ float push
= player.input_push->axis.value
;
+ int push_thresh = push>0.15f? 1: 0;
if( push_thresh && !push_thresh_last )
player.phys.start_push = vg.time;
push_thresh_last = push_thresh;
if( push_thresh && !push_thresh_last )
player.phys.start_push = vg.time;
push_thresh_last = push_thresh;
- if( !
vg_get_button("break")
&& push_thresh )
+ if( !
player.input_jump->button.value
&& push_thresh )
{
player.phys.pushing = 1.0f;
player.phys.push_time = vg.time - player.phys.start_push;
{
player.phys.pushing = 1.0f;
player.phys.push_time = vg.time - player.phys.start_push;
@@
-197,7
+198,7
@@
VG_STATIC void player_physics_control(void)
m3x3_mulv( phys->rb.to_world, vel, phys->rb.v );
m3x3_mulv( phys->rb.to_world, vel, phys->rb.v );
- float steer =
vg_get_axis( "lookh" )
,
+ float steer =
player.input_js1h->axis.value
,
steer_scaled = vg_signf(steer) * powf(steer,2.0f) * k_steer_ground;
phys->iY -= steer_scaled * VG_TIMESTEP_FIXED;
steer_scaled = vg_signf(steer) * powf(steer,2.0f) * k_steer_ground;
phys->iY -= steer_scaled * VG_TIMESTEP_FIXED;
@@
-268,10
+269,14
@@
VG_STATIC void player_physics_control_air(void)
time_to_impact += pstep;
}
time_to_impact += pstep;
}
- phys->iY -= vg_get_axis( "lookh" ) * k_steer_air * VG_TIMESTEP_FIXED;
+ float steerh = player.input_js1h->axis.value,
+ steerv = player.input_js1v->axis.value;
+
+ phys->iY -= steerh * k_steer_air * VG_TIMESTEP_FIXED;
+
{
{
- float iX =
vg_get_axis( "lookv" )
*
- phys->reverse * k_steer_air * limiter * VG_TIMESTEP_FIXED;
+ float iX =
steerv
*
+
phys->reverse * k_steer_air * limiter * VG_TIMESTEP_FIXED;
static float siX = 0.0f;
siX = vg_lerpf( siX, iX, k_steer_air_lerp );
static float siX = 0.0f;
siX = vg_lerpf( siX, iX, k_steer_air_lerp );
@@
-281,9
+286,11
@@
VG_STATIC void player_physics_control_air(void)
q_mul( rotate, phys->rb.q, phys->rb.q );
}
q_mul( rotate, phys->rb.q, phys->rb.q );
}
+#if 0
v2f target = {0.0f,0.0f};
v2_muladds( target, (v2f){ vg_get_axis("grabh"), vg_get_axis("grabv") },
phys->grab, target );
v2f target = {0.0f,0.0f};
v2_muladds( target, (v2f){ vg_get_axis("grabh"), vg_get_axis("grabv") },
phys->grab, target );
+#endif
}
/*
}
/*
@@
-359,14
+366,21
@@
VG_STATIC void player_walk_physics(void)
}
}
}
}
- phys->in_air = len==0?1:0;
+ if( len == 0 )
+ phys->in_air = 1;
+ else
+ {
+ phys->in_air = 0;
+ struct world_material *surface_mat = world_contact_material( manifold );
+ player.surface_prop = surface_mat->info.surface_prop;
+ }
if( !phys->in_air )
{
float const DOWNFORCE = -k_walk_downforce*VG_TIMESTEP_FIXED;
v3_muladds( phys->rb.v, (v3f){0.0f,-1.0f,0.0f}, DOWNFORCE, phys->rb.v );
if( !phys->in_air )
{
float const DOWNFORCE = -k_walk_downforce*VG_TIMESTEP_FIXED;
v3_muladds( phys->rb.v, (v3f){0.0f,-1.0f,0.0f}, DOWNFORCE, phys->rb.v );
- if(
vg_get_button("jump")
)
+ if(
player.input_jump->button.value
)
{
phys->rb.v[1] = 5.0f;
}
{
phys->rb.v[1] = 5.0f;
}
@@
-381,7
+395,8
@@
VG_STATIC void player_walk_physics(void)
v3_muladds( phys->rb.co, forward_dir, 2.0f, p1 );
vg_line( phys->rb.co, p1, 0xff0000ff );
v3_muladds( phys->rb.co, forward_dir, 2.0f, p1 );
vg_line( phys->rb.co, p1, 0xff0000ff );
- player.walk = powf( vg_get_axis("walk/push")*0.5f + 0.5f, 4.0f );
+ float walk = player.input_walk->axis.value;
+ player.walk = powf( walk, 4.0f );
if( player.walk > 0.025f )
{
if( player.walk > 0.025f )
{
@@
-517,7
+532,11
@@
VG_STATIC void player_physics(void)
}
}
}
}
- float grabt = vg_get_axis( "grab" )*0.5f+0.5f;
+ float grabt = vg_maxf( player.input_grab->axis.value,
+ vg_maxf( fabsf( player.input_emjs2h->axis.value ),
+ fabsf( player.input_emjs2v->axis.value ) )
+ );
+
phys->grab = vg_lerpf( phys->grab, grabt, 0.14f );
player.phys.pushing = 0.0f;
phys->grab = vg_lerpf( phys->grab, grabt, 0.14f );
player.phys.pushing = 0.0f;
@@
-630,9
+649,6
@@
VG_STATIC void player_do_motion(void)
{
struct player_phys *phys = &player.phys;
{
struct player_phys *phys = &player.phys;
- float horizontal = vg_get_axis("horizontal"),
- vertical = vg_get_axis("vertical");
-
if( world.water.enabled )
{
if( (phys->rb.co[1] < 0.0f) && !player.is_dead )
if( world.water.enabled )
{
if( (phys->rb.co[1] < 0.0f) && !player.is_dead )
@@
-743,6
+759,7
@@
VG_STATIC void player_mouseview(void)
static v2f mouse_last,
view_vel = { 0.0f, 0.0f };
static v2f mouse_last,
view_vel = { 0.0f, 0.0f };
+#if 0
if( vg_get_button_down( "primary" ) )
v2_copy( vg.mouse, mouse_last );
if( vg_get_button_down( "primary" ) )
v2_copy( vg.mouse, mouse_last );
@@
-754,6
+771,7
@@
VG_STATIC void player_mouseview(void)
v2_muladds( view_vel, delta, 0.06f*vg.time_delta, view_vel );
}
v2_muladds( view_vel, delta, 0.06f*vg.time_delta, view_vel );
}
+#endif
v2_muls( view_vel, 1.0f-4.2f*vg.time_delta, view_vel );
v2_add( view_vel, player.angles, player.angles );
v2_muls( view_vel, 1.0f-4.2f*vg.time_delta, view_vel );
v2_add( view_vel, player.angles, player.angles );
@@
-835,10
+853,20
@@
VG_STATIC int reset_player( int argc, char const *argv[] )
player.is_dead = 0;
player.is_dead = 0;
+ m3x3f the_long_way;
+ q_m3x3( rp->q, the_long_way );
+
+ v3f delta = {1.0f,0.0f,0.0f};
+ m3x3_mulv( the_long_way, delta, delta );
+
+ player.angles[0] = atan2f( delta[0], -delta[2] );
+ player.angles[1] = -asinf( delta[1] );
+
+
v4_copy( rp->q, phys->rb.q );
v3_copy( rp->co, phys->rb.co );
v3_zero( phys->rb.v );
v4_copy( rp->q, phys->rb.q );
v3_copy( rp->co, phys->rb.co );
v3_zero( phys->rb.v );
-
+
phys->vswitch = 1.0f;
phys->slip_last = 0.0f;
phys->in_air = 1;
phys->vswitch = 1.0f;
phys->slip_last = 0.0f;
phys->in_air = 1;