2 * Copyright 2021-2022 (C) Mount0 Software, Harry Godden - All Rights Reserved
3 * -----------------------------------------------------------------------------
7 * -----------------------------------------------------------------------------
20 k_walkspeed
= 7.0f
, /* no longer used */
22 k_board_radius
= 0.3f
,
23 k_board_length
= 0.45f
,
24 k_board_allowance
= 0.04f
,
25 k_friction_lat
= 8.8f
,
26 k_friction_resistance
= 0.01f
,
27 k_max_push_speed
= 16.0f
,
29 k_push_cycle_rate
= 8.0f
,
30 k_steer_ground
= 2.5f
,
32 k_steer_air_lerp
= 0.3f
,
35 k_jump_charge_speed
= (1.0f
/1.0f
),
40 k_walk_friction
= 8.0f
;
42 static int freecam
= 0;
43 static int walk_grid_iterations
= 1;
44 static float fc_speed
= 10.0f
;
47 * -----------------------------------------------------------------------------
49 * -----------------------------------------------------------------------------
55 rigidbody rb
, collide_front
, collide_back
, rb_gate_frame
;
58 m3x3f gate_vr_frame
, gate_vr_pstep_frame
;
59 int on_board_frame
, in_air_frame
;
61 v3f a
, v_last
, m
, bob
, vl
;
64 float vswitch
, slip
, slip_last
,
67 float iY
; /* Yaw inertia */
68 int in_air
, is_dead
, on_board
;
73 float pushing
, push_time
;
75 int jump_charge
, jump_dir
;
78 v3f land_target_log
[22];
79 u32 land_target_colours
[22];
83 v3f handl_target
, handr_target
,
89 v3f camera_pos
, smooth_localcam
;
91 m4x3f camera
, camera_inverse
;
111 struct skeleton_anim
*anim_stand
,
115 *anim_push
, *anim_push_reverse
,
116 *anim_ollie
, *anim_ollie_reverse
,
117 *anim_grabs
, *anim_stop
,
118 *anim_walk
, *anim_run
, *anim_idle
;
151 .collide_front
= { .type
= k_rb_shape_sphere
, .inf
.sphere
.radius
= 0.3f
},
152 .collide_back
= { .type
= k_rb_shape_sphere
, .inf
.sphere
.radius
= 0.3f
}
158 static float *player_get_pos(void);
159 static void player_kill(void);
160 static float *player_cam_pos(void);
165 #include "player_physics.h"
166 #include "player_ragdoll.h"
167 #include "player_model.h"
168 #include "player_animation.h"
169 #include "player_audio.h"
172 * -----------------------------------------------------------------------------
174 * -----------------------------------------------------------------------------
177 static void player_register(void) /* 0 */
179 player_model_register();
182 static void player_init(void) /* 1 */
186 rb_init( &player
.collide_front
);
187 rb_init( &player
.collide_back
);
190 static void player_update(void) /* 2 */
192 for( int i
=0; i
<player
.land_log_count
; i
++ )
193 vg_line_cross( player
.land_target_log
[i
],
194 player
.land_target_colours
[i
], 0.25f
);
196 if( vg_get_axis("grabl")>0.0f
)
198 player
.rb
= player
.rb_gate_frame
;
199 player
.on_board
= player
.on_board_frame
;
200 player
.in_air
= player
.in_air_frame
;
201 m3x3_copy( player
.gate_vr_frame
, player
.vr
);
202 m3x3_copy( player
.gate_vr_pstep_frame
, player
.vr_pstep
);
207 if( !player
.on_board
)
209 player
.angles
[0] = atan2f( -player
.rb
.forward
[2],
210 -player
.rb
.forward
[0] );
213 m3x3_identity( player
.vr
);
215 player
.mdl
.shoes
[0] = 1;
216 player
.mdl
.shoes
[1] = 1;
218 world_routes_notify_reset();
221 if( vg_get_button_down( "switchmode" ) )
223 player
.on_board
^= 0x1;
226 if( (glfwGetKey( vg_window
, GLFW_KEY_O
) || (player
.rb
.co
[1] < 0.0f
)) &&
229 player_ragdoll_copy_model( player
.rb
.v
);
235 player_ragdoll_iter();
236 player_debug_ragdoll();
239 player_animate_death_cam();
247 player_animate_camera();
253 player_camera_update();
257 static void draw_player(void) /* 3 */
260 player_model_copy_ragdoll();
262 shader_viewchar_use();
263 vg_tex2d_bind( &tex_characters
, 0 );
264 shader_viewchar_uTexMain( 0 );
265 shader_viewchar_uCamera( player
.camera
[3] );
266 shader_viewchar_uPv( vg_pv
);
267 shader_link_standard_ub( _shader_viewchar
.id
, 2 );
268 glUniformMatrix4x3fv( _uniform_viewchar_uTransforms
,
269 player
.mdl
.sk
.bone_count
,
271 (float *)player
.mdl
.sk
.final_mtx
);
273 mesh_bind( &player
.mdl
.mesh
);
274 mesh_draw( &player
.mdl
.mesh
);
278 * -----------------------------------------------------------------------------
280 * -----------------------------------------------------------------------------
283 static float *player_get_pos(void)
288 static void player_kill(void)
291 player_ragdoll_copy_model( player
.rb
.v
);
294 static float *player_cam_pos(void)
296 return player
.camera_pos
;
300 #endif /* PLAYER_H */