vehicle stuff
authorhgn <hgodden00@gmail.com>
Sun, 22 Jan 2023 19:09:13 +0000 (19:09 +0000)
committerhgn <hgodden00@gmail.com>
Sun, 22 Jan 2023 19:09:13 +0000 (19:09 +0000)
player.h
skaterift.c
vehicle.h

index f368c9284b3f332a4a7555b6112ccbaf2f579e95..119b3f71348fde480427b721ec77860be2d0b6d2 100644 (file)
--- a/player.h
+++ b/player.h
@@ -1,9 +1,5 @@
 /*
- * 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
@@ -25,7 +21,6 @@ VG_STATIC float
    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,
@@ -358,27 +353,27 @@ VG_STATIC void player_init(void)                                         /* 1 */
    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",
@@ -400,9 +395,6 @@ VG_STATIC void player_init(void)                                         /* 1 */
                        sizeof(struct rewind_frame) * PLAYER_REWIND_FRAMES );
 
    player_model_init();
-
-   /* controls */
-   
 }
 
 VG_STATIC void player_save_rewind_frame(void)
index 130bedfe14716564cb17662aa6e2f3d24bb4b75b..272cff9ba4df78002bbb512041558270760bdfe2 100644 (file)
@@ -132,8 +132,10 @@ VG_STATIC void vg_update(void)
    {
       draw_origin_axis();
       network_update();
+      
+      if( !gzoomer.inside )
+         player_update_pre();
 
-      player_update_pre();
       world_update( player.phys.rb.co );
    }
 }
@@ -142,7 +144,9 @@ VG_STATIC void vg_update_fixed(void)
 {
    if( vg.is_loaded )
    {
-      player_update_fixed();
+      if( !gzoomer.inside )
+         player_update_fixed();
+
       vehicle_update_fixed();
    }
 }
@@ -151,7 +155,14 @@ VG_STATIC void vg_update_post(void)
 {
    if( vg.is_loaded )
    {
-      player_update_post();
+      if( gzoomer.inside )
+      {
+         vehicle_camera();
+      }
+      else
+      {
+         player_update_post();
+      }
       menu_update();
       vehicle_update_post();
    }
index a08871c2e3f116eff1f9a936b79b5ffa29bb9fca..4caf21cbbc91f1ad15fe553427bda84a674f717d 100644 (file)
--- a/vehicle.h
+++ b/vehicle.h
@@ -14,7 +14,8 @@ VG_STATIC float k_car_spring = 1.0f,
                 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
 {
@@ -79,16 +80,19 @@ VG_STATIC void vehicle_init(void)
    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 )
@@ -237,7 +241,7 @@ VG_STATIC void vehicle_update_fixed(void)
       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;
@@ -246,8 +250,14 @@ VG_STATIC void vehicle_update_fixed(void)
                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 );
@@ -298,4 +308,23 @@ VG_STATIC void vehicle_update_post(void)
    }
 }
 
+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 */