v3f handl_target, handr_target,
handl, handr;
+
+ /* Input */
+ struct input_binding *input_js1h,
+ *input_js1v,
+ *input_js2h,
+ *input_js2v,
+ *input_emjs2h,
+ *input_emjs2v,
+ *input_jump,
+ *input_push,
+ *input_walk,
+ *input_switch_mode,
+ *input_reset,
+ *input_grab;
/* Camera */
float air_blend;
VG_STATIC void player_init(void) /* 1 */
{
+ player.input_js1h = vg_create_named_input( "steer-h", k_input_type_axis );
+ player.input_js1v = vg_create_named_input( "steer-v", k_input_type_axis );
+ player.input_grab = vg_create_named_input( "grab", k_input_type_axis_norm );
+ player.input_js2h = vg_create_named_input( "grab-h", k_input_type_axis );
+ player.input_js2v = vg_create_named_input( "grab-v", k_input_type_axis );
+ player.input_emjs2h = vg_create_named_input( "kbgrab-h", k_input_type_axis );
+ player.input_emjs2v = vg_create_named_input( "kbgrab-v", k_input_type_axis );
+ player.input_jump = vg_create_named_input( "jump", k_input_type_button );
+ player.input_push = vg_create_named_input( "push", k_input_type_axis_norm );
+ player.input_walk = vg_create_named_input( "walk", k_input_type_axis_norm );
+ player.input_switch_mode = vg_create_named_input( "switch-mode",
+ k_input_type_button );
+ player.input_reset = vg_create_named_input( "reset", k_input_type_button );
+
+ const char *default_cfg[] =
+ {
+ "bind steer-h gp-ls-h",
+ "bind steer-h gp-ls-h",
+ "bind -steer-h a",
+ "bind +steer-h d",
+
+ "bind steer-v gp-ls-v",
+ "bind -steer-v s",
+ "bind +steer-v w",
+
+ "bind grab gp-rt",
+ "bind grab-h gp-rs-h",
+ "bind grab-v gp-rs-v",
+
+ "bind -kbgrab-h left",
+ "bind +kbgrab-h right",
+ "bind -kbgrab-v down",
+ "bind +kbgrab-v up",
+
+ "bind jump space",
+ "bind jump gp-a",
+
+ "bind push gp-lt",
+ "bind +push shift",
+
+ "bind walk gp-lt",
+ "bind +walk w",
+
+ "bind reset gp-lb",
+ "bind reset r",
+
+ "bind switch-mode gp-y",
+ "bind switch-mode e",
+ };
+
+ for( int i=0; i<vg_list_size(default_cfg); i++ )
+ execute_console_input(default_cfg[i]);
+
rb_init( &player.phys.rb );
rb_init( &player.collide_front );
rb_init( &player.collide_back );
sizeof(struct rewind_frame) * PLAYER_REWIND_FRAMES );
player_model_init();
+
+ /* controls */
+
}
VG_STATIC void player_save_rewind_frame(void)
return;
}
- if( vg_get_button_down( "reset" ) )
+ if( vg_input_button_down( player.input_reset ) )
{
if( player.is_dead )
{
}
}
- if( vg_get_button_down( "switchmode" ) )
+ if( vg_input_button_down( player.input_switch_mode ) )
{
phys->on_board ^= 0x1;
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;
}
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( !vg_get_button("jump") && 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;
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;
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 );
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 );
+#endif
}
/*
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;
}
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 )
{
}
}
- 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;
{
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 )
static v2f mouse_last,
view_vel = { 0.0f, 0.0f };
+#if 0
if( vg_get_button_down( "primary" ) )
v2_copy( vg.mouse, mouse_last );
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 );
VG_STATIC void vg_ui(void)
{
#if 0
- if( cl_menu )
- {
- ui_rect menu =
- {
- vg.window_x / 2 - 150,
- vg.window_y / 2 - 50,
- 300,
- 130
- };
-
- ui_fill_rect( &ui_global_ctx, menu, 0xa0000000 );
-
- ui_text( &ui_global_ctx, (ui_rect){ menu[0]+menu[2]/2,menu[1]+6, 0, 0 },
- steam_username_at_startup,
- 1, k_text_align_center );
- menu[1] += 24;
- menu[3] -= 30;
-
- ui_rect_pad( menu, 8 );
- ui_fill_rect( &ui_global_ctx, menu, 0x90ffffff );
- ui_rect_pad( menu, 2 );
- ui_fill_rect( &ui_global_ctx, menu, 0xa0000000 );
-
- menu[1] += 32;
- ui_text( &ui_global_ctx, (ui_rect){ menu[0]+menu[2]/2,menu[1], 0, 0 },
- "Exit", 2, k_text_align_center );
-
- if( vg_get_button_down( "jump" ) )
- {
- glfwSetWindowShouldClose( vg.window, 1 );
- }
- }
-
if( lightedit )
{
ui_global_ctx.cursor[0] = 10;