8 #include "ent_miniworld.h"
12 #include "shaders/model_menu.h"
14 struct global_menu menu
= { .skip_starter
= 0 };
16 void menu_at_begin(void)
18 if( menu
.skip_starter
) return;
20 skaterift
.activity
= k_skaterift_menu
;
21 menu
.page
= k_menu_page_starter
;
26 vg_console_reg_var( "skip_starter_menu", &menu
.skip_starter
,
27 k_var_dtype_i32
, VG_VAR_PERSISTENT
);
30 void menu_open( enum menu_page page
)
32 skaterift
.activity
= k_skaterift_menu
;
34 if( page
!= k_menu_page_any
)
40 bool menu_viewing_map(void)
42 return (skaterift
.activity
== k_skaterift_menu
) &&
43 (menu
.page
== k_menu_page_main
) &&
44 (menu
.main_index
== 0);
49 if( button_down( k_srbind_mopen
) )
51 if( skaterift
.activity
== k_skaterift_default
)
53 menu_open( k_menu_page_main
);
58 if( skaterift
.activity
!= k_skaterift_menu
)
62 * -------------------------------------------------------------------*/
63 int ml
= button_down( k_srbind_mleft
),
64 mr
= button_down( k_srbind_mright
),
65 mu
= button_down( k_srbind_mup
),
66 md
= button_down( k_srbind_mdown
),
69 enter
= button_down( k_srbind_maccept
);
73 menu
.input_mode
= k_menu_input_mode_keys
;
77 * --------------------------------------------------------------------*/
78 menu
.mouse_dist
+= v2_length( vg
.mouse_delta
); /* TODO: Move to UI */
79 if( menu
.mouse_dist
> 10.0f
)
81 menu
.input_mode
= k_menu_input_mode_mouse
;
82 menu
.mouse_dist
= 0.0f
;
85 if( ui_clicking(UI_MOUSE_LEFT
) || ui_clicking(UI_MOUSE_RIGHT
) )
87 menu
.input_mode
= k_menu_input_mode_mouse
;
90 if( menu
.input_mode
== k_menu_input_mode_mouse
)
94 * ------------------------------------------------------------*/
95 vg_ui
.wants_mouse
= 1;
98 if( skaterift
.activity
!= k_skaterift_menu
) return;
101 ui_font_face( &vgf_default_title
);
102 ui_px height
= vg_ui
.font
->ch
+ 16;
103 ui_rect topbar
= { 0, 0, vg
.window_x
, height
};
105 const char *opts
[] = {
106 "Map", "Online", "Settings", "Video"
110 u8 lb_down
= 0, rb_down
= 0;
111 vg_exec_input_program( k_vg_input_type_button_u8
,
113 vg_joy_button
, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
, vg_end
115 vg_exec_input_program( k_vg_input_type_button_u8
,
117 vg_joy_button
, SDL_CONTROLLER_BUTTON_LEFTSHOULDER
, vg_end
120 if( menu
.repeater
> 0.0f
)
122 menu
.repeater
-= vg_minf( vg
.time_frame_delta
, 0.5f
);
126 if( lb_down
!= rb_down
)
128 menu
.main_index
+= rb_down
;
129 menu
.main_index
-= lb_down
;
130 menu
.repeater
+= 0.2f
;
132 if( menu
.main_index
== -1 )
135 if( menu
.main_index
== vg_list_size(opts
) )
142 for( u32 draw
=0; draw
<2; draw
++ )
146 ui_rect inf_lb
= { x
, 0, 32, height
};
147 ui_fill( inf_lb
, lb_down
? GUI_COL_NORM
: GUI_COL_NORM
);
148 ui_text( inf_lb
, "\x91", 1, k_ui_align_middle_center
, 0 );
152 for( i32 i
=0; i
<vg_list_size(opts
); i
++ )
154 ui_rect box
= { x
, 0, ui_text_line_width(opts
[i
]) + 32, height
};
158 enum ui_button_state state
= ui_button_base( box
);
159 if( state
== k_ui_button_click
)
161 ui_fill( box
, GUI_COL_DARK
);
164 else if( state
== k_ui_button_holding_inside
)
166 ui_fill( box
, GUI_COL_DARK
);
168 else if( state
== k_ui_button_holding_outside
)
170 ui_fill( box
, GUI_COL_DARK
);
171 ui_outline( box
, 1, GUI_COL_CLICK
, 0 );
173 else if( state
== k_ui_button_hover
)
175 ui_fill( box
, GUI_COL_NORM
);
176 ui_outline( box
, 1, GUI_COL_ACTIVE
, 0 );
179 ui_fill( box
, i
==menu
.main_index
? GUI_COL_ACTIVE
: GUI_COL_NORM
);
181 ui_text( box
, opts
[i
], 1, k_ui_align_middle_center
, 0 );
184 x
+= box
[2] + spacer
;
189 ui_rect inf_rb
= { x
, 0, 32, height
};
190 ui_fill( inf_rb
, rb_down
? GUI_COL_NORM
: GUI_COL_NORM
);
191 ui_text( inf_rb
, "\x92", 1, k_ui_align_middle_center
, 0 );
196 ui_fill( (ui_rect
){ x
+8,0, vg
.window_x
-(x
+8),height
}, GUI_COL_NORM
);
199 x
= vg
.window_x
/2 - x
/2;
200 ui_fill( (ui_rect
){ 0, 0, x
-8, height
}, GUI_COL_NORM
);
204 if( menu
.main_index
== 0 )
209 if( button_down( k_srbind_mback
) )
211 skaterift
.activity
= k_skaterift_default
;
216 vg_ui
.frosting
= gui
.factive
*0.015f
;
217 ui_flush( k_ui_shader_colour
, vg
.window_x
, vg
.window_y
);
218 vg_ui
.frosting
= 0.0f
;
220 ui_font_face( &vgf_default_small
);