1 #include "control_overlay.h"
5 #include "player_skate.h"
6 #include "player_walk.h"
7 #include "shaders/model_menu.h"
8 #include "vg/vg_engine.h"
12 struct control_overlay control_overlay
= { .enabled
= 1 };
14 static void render_overlay_mesh( enum control_overlay_mesh index
)
16 mdl_draw_submesh( mdl_arritm( &control_overlay
.mdl
.submeshs
, index
) );
19 void control_overlay_init(void)
21 void *alloc
= vg_mem
.rtmemory
;
22 mdl_context
*mdl
= &control_overlay
.mdl
;
24 mdl_open( mdl
, "models/rs_overlay.mdl", alloc
);
25 mdl_load_metadata_block( mdl
, alloc
);
26 mdl_async_full_load_std( mdl
);
31 if( mdl_arrcount( &mdl
->textures
) )
33 mdl_texture
*tex
= mdl_arritm( &mdl
->textures
, 0 );
34 control_overlay
.tex
= tex
->glname
;
38 control_overlay
.tex
= vg
.tex_missing
;
39 vg_error( "No texture in control overlay\n" );
42 vg_console_reg_var( "control_overlay", &control_overlay
.enabled
,
43 k_var_dtype_i32
, VG_VAR_PERSISTENT
);
46 static void draw_key( bool press
, bool wide
)
48 if( wide
) render_overlay_mesh( press
? ov_shift_down
: ov_shift
);
49 else render_overlay_mesh( press
? ov_key_down
: ov_key
);
52 static void colorize( bool press
, bool condition
)
54 v4f cnorm
= { 1,1,1,0.76f
},
55 cdis
= { 1,1,1,0.35f
},
56 chit
= { 1,0.5f
,0.2f
,0.8f
};
60 shader_model_menu_uColour( chit
);
62 shader_model_menu_uColour( cnorm
);
64 shader_model_menu_uColour( cdis
);
67 void control_overlay_render(void)
69 if( !control_overlay
.enabled
) return;
70 if( skaterift
.activity
!= k_skaterift_default
) return;
73 glDisable(GL_DEPTH_TEST
);
74 glBlendFunc( GL_SRC_ALPHA
, GL_ONE_MINUS_SRC_ALPHA
);
75 glBlendEquation(GL_FUNC_ADD
);
78 f32 r
= (f32
)vg
.window_x
/ (f32
)vg
.window_y
,
87 ortho
[0][0] = 2.0f
* rl
;
88 ortho
[2][1] = 2.0f
* tb
;
89 ortho
[3][0] = (fr
+ fl
) * -rl
;
90 ortho
[3][1] = (ft
+ fb
) * -tb
;
93 v4f cnorm
= { 1,1,1,0.76f
},
94 cdis
= { 1,1,1,0.35f
},
95 chit
= { 1,0.5f
,0.2f
,0.8f
};
97 shader_model_menu_use();
98 shader_model_menu_uTexMain( 1 );
99 shader_model_menu_uPv( ortho
);
100 shader_model_menu_uColour( cnorm
);
102 mdl_context
*mdl
= &control_overlay
.mdl
;
103 mesh_bind( &mdl
->mesh
);
104 glActiveTexture( GL_TEXTURE1
);
105 glBindTexture( GL_TEXTURE_2D
, control_overlay
.tex
);
107 enum player_subsystem subsytem
= localplayer
.subsystem
;
110 m4x3_identity( mmdl
);
112 bool in_air
= 0, grinding
= 0;
114 if( subsytem
== k_player_subsystem_walk
)
115 in_air
= player_walk
.state
.activity
== k_walk_activity_air
;
116 else if( subsytem
== k_player_subsystem_skate
)
117 in_air
= player_skate
.state
.activity
< k_skate_activity_ground
;
119 grinding
= (subsytem
== k_player_subsystem_skate
) &&
120 (player_skate
.state
.activity
>= k_skate_activity_grind_any
);
122 if( vg_input
.display_input_method
== k_input_method_controller
)
124 bool press_jump
= player_skate
.state
.jump_charge
> 0.2f
;
125 u8 lb_down
= 0, rb_down
= 0;
126 vg_exec_input_program( k_vg_input_type_button_u8
,
128 vg_joy_button
, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
, vg_end
130 vg_exec_input_program( k_vg_input_type_button_u8
,
132 vg_joy_button
, SDL_CONTROLLER_BUTTON_LEFTSHOULDER
, vg_end
134 f32 lt_amt
= 0.0f
, rt_amt
= 0.0f
;
135 vg_exec_input_program( k_vg_input_type_axis_f32
,
136 (vg_input_op
[]){ vg_joy_axis
, SDL_CONTROLLER_AXIS_TRIGGERLEFT
, vg_end
},
138 vg_exec_input_program( k_vg_input_type_axis_f32
,
139 (vg_input_op
[]){ vg_joy_axis
, SDL_CONTROLLER_AXIS_TRIGGERRIGHT
, vg_end
},
144 joystick_state( k_srjoystick_steer
, steer
);
146 mmdl
[3][0] = -r
+ 0.375f
;
147 mmdl
[3][2] = 1.0f
- 0.375f
;
148 shader_model_menu_uMdl( mmdl
);
150 if( subsytem
== k_player_subsystem_skate
)
153 render_overlay_mesh( ov_ls_circ_skate
);
155 colorize( steer
[1]>=0.5f
, press_jump
);
156 render_overlay_mesh( ov_ls_circ_backflip
);
157 colorize( steer
[1]<=-0.5f
, press_jump
);
158 render_overlay_mesh( ov_ls_circ_frontflip
);
160 colorize( steer
[1] > 0.7f
, !press_jump
&& !in_air
);
161 render_overlay_mesh( ov_ls_circ_manual
);
163 else if( subsytem
== k_player_subsystem_walk
)
166 render_overlay_mesh( ov_ls_circ_walk
);
169 mmdl
[3][0] += steer
[0]*0.125f
*0.75f
;
170 mmdl
[3][2] += steer
[1]*0.125f
*0.75f
;
173 shader_model_menu_uMdl( mmdl
);
174 render_overlay_mesh( ov_ls
);
177 mmdl
[3][0] = r
- 0.375f
;
178 mmdl
[3][2] = 1.0f
- 0.375f
;
179 shader_model_menu_uMdl( mmdl
);
181 if( subsytem
== k_player_subsystem_skate
)
183 colorize( rt_amt
> 0.5f
, in_air
);
184 render_overlay_mesh( ov_rs_circ_grab
);
185 colorize( 0, in_air
);
187 else if( subsytem
== k_player_subsystem_walk
)
190 render_overlay_mesh( ov_rs_circ_look
);
194 joystick_state( k_srjoystick_look
, jlook
);
196 mmdl
[3][0] += jlook
[0]*0.125f
*0.75f
;
197 mmdl
[3][2] += jlook
[1]*0.125f
*0.75f
;
198 shader_model_menu_uMdl( mmdl
);
199 render_overlay_mesh( ov_rs
);
206 shader_model_menu_uMdl( mmdl
);
208 /* LB -------------------------------------------------------------- */
210 if( subsytem
== k_player_subsystem_skate
)
212 colorize( lb_down
, !in_air
);
213 render_overlay_mesh( ov_carve_l
);
218 render_overlay_mesh( lb_down
? ov_lb_down
: ov_lb
);
220 /* LT ---------------------------------------------------------------- */
222 if( subsytem
== k_player_subsystem_skate
)
226 else if( subsytem
== k_player_subsystem_walk
)
228 colorize( lt_amt
>0.2f
, 1 );
229 render_overlay_mesh( ov_lt_run
);
232 render_overlay_mesh( ov_lt
);
234 mmdl
[3][2] += lt_amt
*0.125f
*0.5f
;
235 shader_model_menu_uMdl( mmdl
);
236 render_overlay_mesh( ov_lt_act
);
241 shader_model_menu_uMdl( mmdl
);
243 if( subsytem
== k_player_subsystem_skate
)
245 colorize( rb_down
, !in_air
);
246 render_overlay_mesh( ov_carve_r
);
251 render_overlay_mesh( rb_down
? ov_rb_down
: ov_rb
);
253 /* RT ---------------------------------------------------------------- */
255 if( subsytem
== k_player_subsystem_skate
)
257 colorize( rt_amt
>0.2f
, in_air
);
258 render_overlay_mesh( ov_rt_grab
);
259 colorize( rt_amt
>0.2f
, !in_air
);
260 render_overlay_mesh( ov_rt_crouch
);
261 colorize( rt_amt
>0.2f
, 1 );
263 else if( subsytem
== k_player_subsystem_walk
)
268 render_overlay_mesh( ov_rt
);
270 mmdl
[3][2] += rt_amt
*0.125f
*0.5f
;
271 shader_model_menu_uMdl( mmdl
);
272 render_overlay_mesh( ov_rt_act
);
274 /* RIGHT SIDE BUTTONS */
275 bool press_a
= 0, press_b
= 0, press_x
= 0, press_y
= 0,
276 press_dpad_w
= 0, press_dpad_e
= 0, press_dpad_n
= 0, press_dpad_s
= 0,
277 press_menu
= 0, press_back
= 0;
280 if( (vg_input
.display_input_type
== SDL_CONTROLLER_TYPE_PS3
) ||
281 (vg_input
.display_input_type
== SDL_CONTROLLER_TYPE_PS4
) ||
282 (vg_input
.display_input_type
== SDL_CONTROLLER_TYPE_PS5
) )
287 vg_exec_input_program( k_vg_input_type_button_u8
,
289 vg_joy_button
, SDL_CONTROLLER_BUTTON_A
, vg_end
}, &press_a
);
290 vg_exec_input_program( k_vg_input_type_button_u8
,
292 vg_joy_button
, SDL_CONTROLLER_BUTTON_B
, vg_end
}, &press_b
);
293 vg_exec_input_program( k_vg_input_type_button_u8
,
295 vg_joy_button
, SDL_CONTROLLER_BUTTON_X
, vg_end
}, &press_x
);
296 vg_exec_input_program( k_vg_input_type_button_u8
,
298 vg_joy_button
, SDL_CONTROLLER_BUTTON_Y
, vg_end
}, &press_y
);
299 vg_exec_input_program( k_vg_input_type_button_u8
,
301 vg_joy_button
, SDL_CONTROLLER_BUTTON_DPAD_LEFT
, vg_end
}, &press_dpad_w
);
302 vg_exec_input_program( k_vg_input_type_button_u8
,
304 vg_joy_button
, SDL_CONTROLLER_BUTTON_DPAD_RIGHT
, vg_end
}, &press_dpad_e
);
305 vg_exec_input_program( k_vg_input_type_button_u8
,
307 vg_joy_button
, SDL_CONTROLLER_BUTTON_DPAD_UP
, vg_end
}, &press_dpad_n
);
308 vg_exec_input_program( k_vg_input_type_button_u8
,
310 vg_joy_button
, SDL_CONTROLLER_BUTTON_DPAD_DOWN
, vg_end
}, &press_dpad_s
);
311 vg_exec_input_program( k_vg_input_type_button_u8
,
313 vg_joy_button
, SDL_CONTROLLER_BUTTON_BACK
, vg_end
}, &press_back
);
314 vg_exec_input_program( k_vg_input_type_button_u8
,
316 vg_joy_button
, SDL_CONTROLLER_BUTTON_START
, vg_end
}, &press_menu
);
320 shader_model_menu_uMdl( mmdl
);
322 /* B / KICKFLIP / PUSH */
323 if( subsytem
== k_player_subsystem_skate
)
325 colorize( press_b
, !in_air
);
326 render_overlay_mesh( ov_text_b_push
);
327 colorize( press_b
, in_air
);
328 render_overlay_mesh( ov_text_b_kickflip
);
329 colorize( press_b
, 1 );
336 if( is_ps
) render_overlay_mesh( press_b
? ov_b_down_ps
: ov_b_ps
);
337 else render_overlay_mesh( press_b
? ov_b_down
: ov_b
);
339 /* Y / SKATE / WALK / GLIDE */
341 if( subsytem
== k_player_subsystem_skate
)
343 if( localplayer
.have_glider
)
345 colorize( press_y
, !in_air
);
346 render_overlay_mesh( ov_text_y_walk_lwr
);
347 colorize( press_y
, in_air
);
348 render_overlay_mesh( ov_text_y_glide
);
352 colorize( press_y
, 1 );
353 render_overlay_mesh( ov_text_y_walk
);
356 else if( subsytem
== k_player_subsystem_walk
)
358 colorize( press_y
, player_walk
.state
.activity
< k_walk_activity_inone
);
359 render_overlay_mesh( ov_text_y_skate
);
361 else if( subsytem
== k_player_subsystem_glide
)
363 colorize( press_y
, 1 );
364 render_overlay_mesh( ov_text_y_skate
);
369 if( is_ps
) render_overlay_mesh( press_y
? ov_y_down_ps
: ov_y_ps
);
370 else render_overlay_mesh( press_y
? ov_y_down
: ov_y
);
373 if( subsytem
== k_player_subsystem_skate
)
375 colorize( press_x
, in_air
);
376 render_overlay_mesh( ov_text_x_treflip
);
379 colorize( press_x
, 0 );
381 if( is_ps
) render_overlay_mesh( press_x
? ov_x_down_ps
: ov_x_ps
);
382 else render_overlay_mesh( press_x
? ov_x_down
: ov_x
);
384 /* A / JUMP / SHUVIT */
385 if( subsytem
== k_player_subsystem_skate
)
387 colorize( press_a
, !in_air
);
388 render_overlay_mesh( ov_text_a_jump
);
389 colorize( press_a
, in_air
);
390 render_overlay_mesh( ov_text_a_shuvit
);
391 colorize( press_a
, 1 );
393 else if( subsytem
== k_player_subsystem_walk
)
395 colorize( press_a
, !in_air
);
396 render_overlay_mesh( ov_text_a_jump_mid
);
399 if( is_ps
) render_overlay_mesh( press_a
? ov_a_down_ps
: ov_a_ps
);
400 else render_overlay_mesh( press_a
? ov_a_down
: ov_a
);
403 if( subsytem
== k_player_subsystem_skate
)
405 if( player_skate
.state
.jump_charge
> 0.01f
)
407 mmdl
[0][0] = player_skate
.state
.jump_charge
* 0.465193f
;
408 mmdl
[3][0] += -0.4375f
;
409 mmdl
[3][2] += 0.09375f
;
410 shader_model_menu_uMdl( mmdl
);
411 render_overlay_mesh( ov_jump_ind
);
417 /* DPAD --------------------------------------------------- */
421 shader_model_menu_uMdl( mmdl
);
423 render_overlay_mesh( ov_dpad
);
425 colorize( press_dpad_e
, 1 );
426 render_overlay_mesh( ov_text_de_camera
);
428 render_overlay_mesh( ov_dpad_e
);
430 colorize( press_dpad_w
, 1 );
431 render_overlay_mesh( ov_text_dw_rewind
);
433 render_overlay_mesh( ov_dpad_w
);
435 if( subsytem
== k_player_subsystem_dead
)
437 colorize( press_dpad_n
, 1 );
438 render_overlay_mesh( ov_text_dn_respawn
);
440 else colorize( press_dpad_n
, 0 );
442 render_overlay_mesh( ov_dpad_n
);
444 colorize( press_dpad_s
, 0 );
446 render_overlay_mesh( ov_dpad_s
);
450 if( subsytem
== k_player_subsystem_skate
)
452 /* stored indicator text */
453 mmdl
[3][0] = r
-0.842671f
;
454 mmdl
[3][2] = -1.0f
+ 0.435484f
;
455 colorize( 0, !in_air
);
456 shader_model_menu_uMdl( mmdl
);
457 render_overlay_mesh( ov_text_stored
);
459 mmdl
[0][0] = v3_length( player_skate
.state
.throw_v
) / k_mmthrow_scale
;
460 shader_model_menu_uMdl( mmdl
);
461 colorize( 0, !in_air
);
462 render_overlay_mesh( ov_stored_ind
);
464 static f32 collect
= 0.0f
;
465 collect
= vg_lerpf( collect
, player_skate
.collect_feedback
,
466 vg
.time_frame_delta
* 15.0f
);
467 collect
= vg_clampf( collect
, 0.0f
, 1.0f
);
469 mmdl
[0][0] = collect
;
470 mmdl
[3][2] += 0.015625f
;
471 shader_model_menu_uMdl( mmdl
);
472 render_overlay_mesh( ov_stored_ind
);
478 shader_model_menu_uMdl( mmdl
);
479 colorize( press_menu
, 1 );
480 render_overlay_mesh( press_menu
? ov_met_r_down
: ov_met_r
);
481 render_overlay_mesh( ov_text_met_menu
);
483 colorize( press_back
, 0 );
484 render_overlay_mesh( press_back
? ov_met_l_down
: ov_met_l
);
487 render_overlay_mesh( ov_met
);
492 v2_lerp( gd
, player_skate
.state
.grab_mouse_delta
, vg
.time_frame_delta
*20.0f
, gd
);
495 if( subsytem
== k_player_subsystem_skate
)
497 bool press_ctrl
= vg_getkey(SDLK_LCTRL
);
498 mmdl
[3][0] = -r
+ 0.25f
;
499 mmdl
[3][2] = 1.0f
- 0.125f
;
500 shader_model_menu_uMdl( mmdl
);
501 colorize( press_ctrl
, !in_air
&& !grinding
);
502 draw_key( press_ctrl
, 1 );
503 render_overlay_mesh( ov_text_carve
);
506 /* SHIFT || CROUCH / GRAB / RUN */
507 bool press_shift
= vg_getkey( SDLK_LSHIFT
);
508 if( subsytem
== k_player_subsystem_skate
||
509 subsytem
== k_player_subsystem_walk
)
511 mmdl
[3][0] = -r
+ 0.25f
;
512 mmdl
[3][2] = 1.0f
- 0.125f
- 0.25f
;
513 shader_model_menu_uMdl( mmdl
);
514 colorize( press_shift
, !grinding
);
515 draw_key( press_shift
, 1 );
516 render_overlay_mesh( ov_text_shift
);
518 if( subsytem
== k_player_subsystem_skate
)
520 colorize( press_shift
, !in_air
&& !grinding
);
521 render_overlay_mesh( ov_text_crouch
);
522 colorize( press_shift
, in_air
&& !grinding
);
523 render_overlay_mesh( ov_text_grab
);
525 else if( subsytem
== k_player_subsystem_walk
)
527 render_overlay_mesh( ov_text_run
);
531 if( subsytem
== k_player_subsystem_skate
)
533 /* stored indicator text */
534 mmdl
[3][0] = -r
+ 0.25f
+ 0.203125f
+ 0.007812f
;
535 colorize( 0, !in_air
);
536 shader_model_menu_uMdl( mmdl
);
537 render_overlay_mesh( ov_text_stored
);
539 mmdl
[0][0] = v3_length( player_skate
.state
.throw_v
) / k_mmthrow_scale
;
540 shader_model_menu_uMdl( mmdl
);
541 colorize( 0, !in_air
);
542 render_overlay_mesh( ov_stored_ind
);
544 static f32 collect
= 0.0f
;
545 collect
= vg_lerpf( collect
, player_skate
.collect_feedback
,
546 vg
.time_frame_delta
* 15.0f
);
547 collect
= vg_clampf( collect
, 0.0f
, 1.0f
);
549 mmdl
[0][0] = collect
;
550 mmdl
[3][2] += 0.015625f
;
551 shader_model_menu_uMdl( mmdl
);
552 render_overlay_mesh( ov_stored_ind
);
556 if( subsytem
!= k_player_subsystem_dead
)
558 bool press_c
= vg_getkey(SDLK_c
);
560 mmdl
[3][0] = -r
+ 0.125f
+ 1.0f
;
561 mmdl
[3][2] = 1.0f
- 0.125f
- 0.25f
;
562 shader_model_menu_uMdl( mmdl
);
563 colorize( press_c
, 1 );
564 draw_key( press_c
, 0 );
565 render_overlay_mesh( ov_text_camera
);
570 mmdl
[3][2] = 1.0f
- 0.125f
- 0.25f
- 0.25f
;
573 if( subsytem
!= k_player_subsystem_dead
)
575 bool press_a
= vg_getkey(SDLK_a
);
576 mmdl
[3][0] = -r
+ 0.125f
;
577 shader_model_menu_uMdl( mmdl
);
578 colorize( press_a
, 1 );
579 draw_key( press_a
, 0 );
580 render_overlay_mesh( ov_text_left
);
583 bool press_jump
= player_skate
.state
.jump_charge
< 0.2f
;
585 /* S || MANUAL / BACKFLIP */
586 bool press_s
= vg_getkey(SDLK_s
);
587 mmdl
[3][0] = -r
+ 0.125f
+ 0.25f
;
588 shader_model_menu_uMdl( mmdl
);
590 if( subsytem
== k_player_subsystem_skate
)
592 colorize( press_s
, !in_air
);
593 draw_key( press_s
, 0 );
594 render_overlay_mesh( ov_text_s
);
595 /* backflip/manual */
596 colorize( press_s
, !in_air
&& !press_jump
);
597 render_overlay_mesh( ov_text_back_flip
);
598 colorize( press_s
, !in_air
&& press_jump
);
599 render_overlay_mesh( ov_text_manual
);
601 else if( subsytem
!= k_player_subsystem_dead
)
603 colorize( press_s
, 1 );
604 draw_key( press_s
, 0 );
605 render_overlay_mesh( ov_text_s
);
606 render_overlay_mesh( ov_text_back
);
610 if( subsytem
!= k_player_subsystem_dead
)
612 bool press_d
= vg_getkey(SDLK_d
);
613 mmdl
[3][0] = -r
+ 0.125f
+ 0.25f
+ 0.25f
;
614 shader_model_menu_uMdl( mmdl
);
615 colorize( press_d
, 1 );
616 draw_key( press_d
, 0 );
617 render_overlay_mesh( ov_text_right
);
621 mmdl
[3][2] = 1.0f
- 0.125f
- 0.25f
- 0.25f
- 0.25f
;
624 if( subsytem
== k_player_subsystem_dead
)
626 bool press_q
= vg_getkey(SDLK_q
);
627 mmdl
[3][0] = -r
+ 0.125f
;
628 shader_model_menu_uMdl( mmdl
);
629 colorize( press_q
, 1 );
630 draw_key( press_q
, 0 );
631 render_overlay_mesh( ov_text_respawn
);
634 /* W || PUSH / FRONTFLIP */
635 bool press_w
= vg_getkey(SDLK_w
);
636 mmdl
[3][0] = -r
+ 0.125f
+ 0.25f
;
637 shader_model_menu_uMdl( mmdl
);
639 if( subsytem
== k_player_subsystem_skate
)
641 colorize( press_w
, !in_air
);
642 draw_key( press_w
, 0 );
643 render_overlay_mesh( ov_text_w
);
645 colorize( press_w
, !in_air
&& !press_jump
);
646 render_overlay_mesh( ov_text_front_flip
);
647 colorize( press_w
, !in_air
&& press_jump
);
648 render_overlay_mesh( ov_text_push
);
650 else if( subsytem
!= k_player_subsystem_dead
)
652 colorize( press_w
, 1 );
653 draw_key( press_w
, 0 );
654 render_overlay_mesh( ov_text_w
);
655 render_overlay_mesh( ov_text_forward
);
659 bool press_e
= vg_getkey(SDLK_e
);
660 mmdl
[3][0] = -r
+ 0.125f
+ 0.25f
+ 0.25f
;
662 shader_model_menu_uMdl( mmdl
);
664 if( subsytem
== k_player_subsystem_skate
)
666 if( localplayer
.have_glider
)
668 colorize( press_e
, !in_air
);
669 render_overlay_mesh( ov_text_walk_lwr
);
670 colorize( press_e
, in_air
);
671 render_overlay_mesh( ov_text_glide
);
675 colorize( press_e
, 1 );
676 render_overlay_mesh( ov_text_walk
);
679 else if( subsytem
== k_player_subsystem_glide
)
681 colorize( press_e
, 1 );
682 render_overlay_mesh( ov_text_skate
);
684 else if( subsytem
== k_player_subsystem_walk
)
686 colorize( press_e
, player_walk
.state
.activity
< k_walk_activity_inone
);
687 render_overlay_mesh( ov_text_skate
);
690 if( subsytem
!= k_player_subsystem_dead
)
692 draw_key( press_e
, 0 );
693 render_overlay_mesh( ov_text_e
);
697 bool press_r
= vg_getkey(SDLK_r
);
698 mmdl
[3][0] = -r
+ 0.125f
+ 0.25f
+ 0.25f
+ 0.25f
;
699 shader_model_menu_uColour( cnorm
);
700 shader_model_menu_uMdl( mmdl
);
702 colorize( press_r
, 1 );
703 draw_key( press_r
, 0 );
704 render_overlay_mesh( ov_text_rewind
);
707 bool press_space
= vg_getkey(SDLK_SPACE
);
709 mmdl
[3][2] = 1.0f
- 0.125f
;
712 if( subsytem
== k_player_subsystem_skate
||
713 subsytem
== k_player_subsystem_walk
)
715 shader_model_menu_uMdl( mmdl
);
716 colorize( press_space
, !in_air
);
718 render_overlay_mesh( press_space
?
719 ov_space_down
: ov_space
);
720 render_overlay_mesh( ov_text_jump
);
723 if( subsytem
== k_player_subsystem_skate
)
725 if( player_skate
.state
.jump_charge
> 0.01f
)
727 mmdl
[0][0] = player_skate
.state
.jump_charge
;
728 mmdl
[3][0] = -0.4375f
;
729 shader_model_menu_uMdl( mmdl
);
730 render_overlay_mesh( ov_jump_ind
);
734 bool press_esc
= vg_getkey(SDLK_ESCAPE
);
736 mmdl
[3][0] = -r
+ 0.125f
;;
737 mmdl
[3][2] = -1.0f
+ 0.125f
;
738 shader_model_menu_uMdl( mmdl
);
739 colorize( press_esc
, 1 );
740 render_overlay_mesh( ov_text_menu
);
741 render_overlay_mesh( press_esc
? ov_key_menu_down
: ov_key_menu
);
742 mmdl
[3][0] = r
- 0.38f
;
744 shader_model_menu_uMdl( mmdl
);
745 colorize( press_shift
, in_air
);
747 if( subsytem
== k_player_subsystem_skate
)
749 render_overlay_mesh( ov_mouse_grabs
);
751 if( in_air
&& press_shift
)
753 mmdl
[3][0] += gd
[0]*0.125f
;
754 mmdl
[3][2] += gd
[1]*0.125f
;
758 shader_model_menu_uMdl( mmdl
);
760 bool lmb
= button_press( k_srbind_trick0
),
761 rmb
= button_press( k_srbind_trick1
);
763 if( subsytem
== k_player_subsystem_skate
)
765 colorize( 0, press_space
|| in_air
);
766 render_overlay_mesh( ov_mouse
);
768 colorize( lmb
&&!rmb
, press_space
|| in_air
);
769 render_overlay_mesh( ov_text_shuvit
);
771 colorize( lmb
, press_space
|| in_air
);
772 render_overlay_mesh( lmb
? ov_lmb_down
: ov_lmb
);
774 colorize( rmb
&&!lmb
, press_space
|| in_air
);
775 render_overlay_mesh( ov_text_kickflip
);
777 colorize( rmb
, press_space
|| in_air
);
778 render_overlay_mesh( rmb
? ov_rmb_down
: ov_rmb
);
780 colorize( rmb
&&lmb
, press_space
|| in_air
);
781 render_overlay_mesh( ov_text_treflip
);
783 else if( subsytem
== k_player_subsystem_walk
)
786 render_overlay_mesh( ov_mouse
);
787 render_overlay_mesh( ov_text_look
);
789 render_overlay_mesh( lmb
? ov_lmb_down
: ov_lmb
);
790 render_overlay_mesh( rmb
? ov_rmb_down
: ov_rmb
);