/*
- * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
- */
-
-/*
- * TODO: Tilt camera down to face borde when its behind you or out of vision
+ * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved
*/
#ifndef PLAYER_H
k_board_radius = 0.3f,
k_board_length = 0.45f,
k_board_allowance = 0.04f,
- //k_friction_lat = 8.8f,
k_friction_lat = 12.0f,
k_friction_resistance = 0.01f,
k_max_push_speed = 16.0f,
VG_VAR_F32_PERSISTENT( fc_speed );
/* TODO: NOT PERSISTENT */
- VG_VAR_F32_PERSISTENT( k_ragdoll_limit_scale );
- VG_VAR_I32_PERSISTENT( k_ragdoll_div );
- VG_VAR_I32_PERSISTENT( k_ragdoll_debug_collider );
- VG_VAR_I32_PERSISTENT( k_ragdoll_debug_constraints );
+ VG_VAR_F32( k_ragdoll_limit_scale );
+ VG_VAR_I32( k_ragdoll_div );
+ VG_VAR_I32( k_ragdoll_debug_collider );
+ VG_VAR_I32( k_ragdoll_debug_constraints );
- VG_VAR_F32_PERSISTENT( k_friction_lat );
+ VG_VAR_F32( k_friction_lat );
- VG_VAR_F32_PERSISTENT( k_cog_spring );
- VG_VAR_F32_PERSISTENT( k_cog_damp );
+ VG_VAR_F32( k_cog_spring );
+ VG_VAR_F32( k_cog_damp );
- VG_VAR_F32_PERSISTENT( k_cog_mass_ratio );
- VG_VAR_F32_PERSISTENT( k_downforce );
+ VG_VAR_F32( k_cog_mass_ratio );
+ VG_VAR_F32( k_downforce );
- VG_VAR_F32_PERSISTENT( k_spring_force );
- VG_VAR_F32_PERSISTENT( k_spring_dampener );
- VG_VAR_F32_PERSISTENT( k_spring_angular );
+ VG_VAR_F32( k_spring_force );
+ VG_VAR_F32( k_spring_dampener );
+ VG_VAR_F32( k_spring_angular );
- VG_VAR_F32_PERSISTENT( k_mmthrow_scale );
- VG_VAR_F32_PERSISTENT( k_mmcollect_lat );
- VG_VAR_F32_PERSISTENT( k_mmcollect_vert );
- VG_VAR_F32_PERSISTENT( k_mmdecay );
+ VG_VAR_F32( k_mmthrow_scale );
+ VG_VAR_F32( k_mmcollect_lat );
+ VG_VAR_F32( k_mmcollect_vert );
+ VG_VAR_F32( k_mmdecay );
vg_function_push( (struct vg_cmd){
.name = "reset",
sizeof(struct rewind_frame) * PLAYER_REWIND_FRAMES );
player_model_init();
-
- /* controls */
-
}
VG_STATIC void player_save_rewind_frame(void)
k_car_friction_lat = 0.6f,
k_car_friction_roll = 0.01f,
k_car_drive_force = 1.0f,
- k_car_air_resistance = 0.1f;
+ k_car_air_resistance = 0.1f,
+ k_car_downforce = 0.5f;
VG_STATIC struct gvehicle
{
VG_VAR_F32_PERSISTENT( k_car_friction_roll );
VG_VAR_F32_PERSISTENT( k_car_drive_force );
VG_VAR_F32_PERSISTENT( k_car_air_resistance );
+ VG_VAR_F32_PERSISTENT( k_car_downforce );
+
+ VG_VAR_I32( gzoomer.inside );
vg_function_push( (struct vg_cmd){
.name = "spawn_car",
.function = spawn_car
});
- v3_copy((v3f){ -1.0f, -0.25f, -1.0f }, gzoomer.wheels_local[0] );
- v3_copy((v3f){ 1.0f, -0.25f, -1.0f }, gzoomer.wheels_local[1] );
- v3_copy((v3f){ -1.0f, -0.25f, 1.0f }, gzoomer.wheels_local[2] );
- v3_copy((v3f){ 1.0f, -0.25f, 1.0f }, gzoomer.wheels_local[3] );
+ v3_copy((v3f){ -1.0f, -0.25f, -1.5f }, gzoomer.wheels_local[0] );
+ v3_copy((v3f){ 1.0f, -0.25f, -1.5f }, gzoomer.wheels_local[1] );
+ v3_copy((v3f){ -1.0f, -0.25f, 1.5f }, gzoomer.wheels_local[2] );
+ v3_copy((v3f){ 1.0f, -0.25f, 1.5f }, gzoomer.wheels_local[3] );
}
VG_STATIC void vehicle_wheel_force( int index )
return;
gzoomer.steer = vg_lerpf( gzoomer.steer,
- player.input_walkh->axis.value * 0.2f,
+ player.input_walkh->axis.value * 0.4f,
k_rb_delta * 8.0f );
gzoomer.drive = player.input_walkv->axis.value * k_car_drive_force;
sinf(gzoomer.steer), gzoomer.steerv );
/* apply air resistance */
- v3_muladds( gzoomer.rb.v, gzoomer.rb.v,
- -k_car_air_resistance * k_rb_delta, gzoomer.rb.v );
+ v3f Fair, Fdown;
+
+ v3_muls( gzoomer.rb.v, -k_car_air_resistance, Fair );
+ v3_muls( gzoomer.rb.up, -fabsf(v3_dot( gzoomer.rb.v, gzoomer.rb.forward )) *
+ k_car_downforce, Fdown );
+
+ v3_muladds( gzoomer.rb.v, Fair, k_rb_delta, gzoomer.rb.v );
+ v3_muladds( gzoomer.rb.v, Fdown, k_rb_delta, gzoomer.rb.v );
for( int i=0; i<4; i++ )
vehicle_wheel_force( i );
}
}
+VG_STATIC void vehicle_camera(void)
+{
+ float yaw = atan2f( gzoomer.rb.forward[0], -gzoomer.rb.forward[2] ),
+ pitch = atan2f
+ (
+ -gzoomer.rb.forward[1],
+ sqrtf
+ (
+ gzoomer.rb.forward[0]*gzoomer.rb.forward[0] +
+ gzoomer.rb.forward[2]*gzoomer.rb.forward[2]
+ )
+ );
+
+
+ main_camera.angles[0] = yaw;
+ main_camera.angles[1] = pitch;
+ v3_copy( gzoomer.rb.co, main_camera.pos );
+}
+
#endif /* VEHICLE_H */