1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\string_shared;
6 #using scripts\shared\system_shared;
7 #using scripts\shared\util_shared;
8 #using scripts\shared\flag_shared;
9 #using scripts\shared\flagsys_shared;
11 #insert scripts\shared\shared.gsh;
15 #precache( "eventstring", "show_perk_notification" );
17 #precache( "lui_menu", "HudElementText" );
18 #precache( "lui_menu", "HudElementImage" );
19 #precache( "lui_menu", "HudElementTimer" );
20 #precache( "lui_menu", "FullScreenBlack" );
21 #precache( "lui_menu", "FullScreenWhite" );
22 #precache( "lui_menu", "ScriptMessageDialog_Compact" );
23 #precache( "lui_menu", "FullBlack" ); // InitialBlack without the spinner
25 #precache( "lui_menu_data", "text" );
26 #precache( "lui_menu_data", "material" );
27 #precache( "lui_menu_data", "x" );
28 #precache( "lui_menu_data", "y" );
29 #precache( "lui_menu_data", "width" );
30 #precache( "lui_menu_data", "height" );
31 #precache( "lui_menu_data", "alpha" );
32 #precache( "lui_menu_data", "alignment" );
33 #precache( "lui_menu_data", "fadeOverTime" );
34 #precache( "lui_menu_data", "startAlpha" );
35 #precache( "lui_menu_data", "endAlpha" );
36 #precache( "lui_menu_data", "time" );
37 #precache( "lui_menu_data", "current_animation" );
38 #precache( "lui_menu_data", "red" );
39 #precache( "lui_menu_data", "green" );
40 #precache( "lui_menu_data", "blue" );
41 #precache( "lui_menu_data", "zRot" );
43 #precache( "lui_menu", "PiPMenu" );
44 #precache( "lui_menu", "FullscreenMovie" );
45 #precache( "lui_menu_data", "additive" );
46 #precache( "lui_menu_data", "movieName" );
47 #precache( "lui_menu_data", "showBlackScreen" );
48 #precache( "lui_menu_data", "looping" );
49 #precache( "lui_menu_data", "movieKey" );
51 #precache( "lui_menu_data", "title" );
52 #precache( "lui_menu_data", "description" );
65 if ( !isdefined( level.lui_script_globals ) )
70 a_str_menus = GetArrayKeys( level.lui_script_globals );
71 for ( i = 0; i < a_str_menus.size; i++ )
73 str_menu = a_str_menus[i];
74 a_str_vars = GetArrayKeys( level.lui_script_globals[str_menu] );
75 for ( j = 0; j < a_str_vars.size; j++ )
77 str_var = a_str_vars[j];
78 value = level.lui_script_globals[str_menu][str_var];
95 str_curr_anim =
self GetLUIMenuData( menu,
"current_animation" );
96 str_new_anim = str_anim;
101 if ( isdefined( str_curr_anim ) && ( str_curr_anim == str_anim ) )
106 self SetLUIMenuData( menu,
"current_animation", str_new_anim );
111 self SetLUIMenuData( menu,
"red", color[ 0 ] );
112 self SetLUIMenuData( menu,
"green", color[ 1 ] );
113 self SetLUIMenuData( menu,
"blue", color[ 2 ] );
124 DEFAULT(
self.lui_script_menus, [] );
125 DEFAULT(
self.lui_script_menus[str_menu_id],
self OpenLuiMenu( str_menu_id ) );
126 self SetLuiMenuData(
self.lui_script_menus[str_menu_id], str_variable_id, value );
135 DEFAULT( level.lui_script_globals, [] );
136 DEFAULT( level.lui_script_globals[str_menu_id], [] );
138 level.lui_script_globals[ str_menu_id ][ str_variable_id ] = value;
142 if ( isdefined( level.players ) )
144 foreach( player
in level.players )
163 function timer( n_time, str_endon, x, y, height )
169 lui =
self OpenLUIMenu(
"HudElementTimer" );
170 self SetLUIMenuData( lui,
"x", x );
171 self SetLUIMenuData( lui,
"y", y );
172 self SetLUIMenuData( lui,
"height", height );
173 self SetLUIMenuData( lui,
"time", GetTime() + ( n_time * 1000 ) );
175 if ( isdefined( str_endon ) )
184 self CloseLUIMenu( lui );
199 foreach ( player
in level.players )
201 player PrimeMovie( str_movie, b_looping, str_key );
206 player PrimeMovie( str_movie, b_looping, str_key );
220 function play_movie( str_movie, str_type, show_black_screen =
false, b_looping =
false, str_key =
"" )
222 if( str_type ===
"fullscreen" || str_type ===
"fullscreen_additive" )
229 foreach ( player
in level.players )
231 if( isdefined(b_hide_hud) )
242 if( isdefined(b_hide_hud) )
244 foreach ( player
in level.players )
253 if( isdefined(b_hide_hud) )
261 if( isdefined(b_hide_hud) )
270 level notify(
"movie_done", str_type );
275 self endon(
"disconnect");
276 str_menu = undefined;
281 case "fullscreen_additive":
282 str_menu =
"FullscreenMovie";
286 str_menu =
"PiPMenu";
289 default: AssertMsg(
"Invalid movie type '" + str_type +
"'." );
292 if( str_type ==
"pip" )
294 self playsoundtoplayer(
"uin_pip_open",
self );
297 lui_menu =
self OpenLUIMenu( str_menu );
298 if(isDefined(lui_menu))
300 self SetLUIMenuData( lui_menu,
"movieName", str_movie );
301 self SetLUIMenuData( lui_menu,
"movieKey", str_key );
302 self SetLUIMenuData( lui_menu,
"showBlackScreen", show_black_screen );
303 self SetLUIMenuData( lui_menu,
"looping", b_looping );
304 self SetLUIMenuData( lui_menu,
"additive", 0 );
306 if ( IsSubStr( str_type,
"additive" ) )
308 self SetLUIMenuData( lui_menu,
"additive", 1 );
313 self waittill(
"menuresponse", menu, response );
315 if ( ( menu == str_menu ) && ( response ==
"finished_movie_playback" ) )
317 if( str_type ==
"pip" )
319 self playsoundtoplayer(
"uin_pip_close",
self );
322 self CloseLUIMenu( lui_menu );
323 self notify(
"movie_done" );
343 if( str_type ===
"fullscreen" || str_type ===
"fullscreen_additive" )
348 assert(
self == level );
350 foreach ( player
in level.players )
352 if( isdefined(b_hide_hud) )
363 if( isdefined(b_hide_hud) )
365 foreach ( player
in level.players )
372 level notify(
"movie_done", str_type );
377 self endon(
"disconnect");
378 str_menu = undefined;
383 case "fullscreen_additive":
384 str_menu =
"FullscreenMovie";
388 str_menu =
"PiPMenu";
391 default: AssertMsg(
"Invalid movie type '" + str_type +
"'." );
394 if( str_type ==
"pip" )
396 self playsoundtoplayer(
"uin_pip_open",
self );
399 lui_menu =
self OpenLUIMenu( str_menu );
400 if(isDefined(lui_menu))
402 self SetLUIMenuData( lui_menu,
"movieName", str_movie );
403 self SetLUIMenuData( lui_menu,
"movieKey", str_key );
404 self SetLUIMenuData( lui_menu,
"showBlackScreen", show_black_screen );
405 self SetLUIMenuData( lui_menu,
"looping", b_looping );
406 self SetLUIMenuData( lui_menu,
"additive", 0 );
408 if ( IsSubStr( str_type,
"additive" ) )
410 self SetLUIMenuData( lui_menu,
"additive", 1 );
415 if( str_type ==
"pip" )
417 self playsoundtoplayer(
"uin_pip_close",
self );
420 self CloseLUIMenu( lui_menu );
421 self notify(
"movie_done" );
438 function screen_flash( n_fadein_time, n_hold_time, n_fadeout_time, n_target_alpha = 1, v_color, b_force_close_menu =
false )
442 foreach ( player
in level.players )
444 player thread
screen_flash( n_fadein_time, n_hold_time, n_fadeout_time, n_target_alpha, v_color, b_force_close_menu );
449 self endon(
"disconnect" );
451 self _screen_fade( n_fadein_time, n_target_alpha, 0, v_color, b_force_close_menu );
453 self _screen_fade( n_fadeout_time, 0, n_target_alpha, v_color, b_force_close_menu );
469 function screen_fade( n_time, n_target_alpha = 1, n_start_alpha = 0, v_color, b_force_close_menu =
false, str_menu_id )
473 foreach ( player
in level.players )
475 player thread
_screen_fade( n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id );
480 self thread
_screen_fade( n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id );
496 screen_fade( n_time, 1, 0, v_color,
false, str_menu_id );
512 screen_fade( n_time, 0, 1, v_color,
true, str_menu_id );
526 foreach ( player
in level.players )
539 self notify(
"_screen_fade" );
540 self endon(
"_screen_fade" );
541 self endon(
"disconnect" );
543 if ( isdefined(
self.screen_fade_menus ) )
545 foreach ( str_menu_id, lui_menu
in self.screen_fade_menus )
547 self CloseLUIMenu( lui_menu.lui_menu );
548 self.screen_fade_menus[ str_menu_id ] = undefined;
553 function private _screen_fade( n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id =
"default" )
555 self notify(
"_screen_fade_" + str_menu_id );
556 self endon(
"_screen_fade_" + str_menu_id );
558 self endon(
"disconnect" );
560 DEFAULT(
self.screen_fade_menus, [] );
561 DEFAULT( level.screen_fade_network_frame, 0 );
564 n_time_ms = int( n_time * 1000 );
566 str_menu =
"FullScreenBlack";
568 if ( IsString( v_color ) )
573 v_color = ( 0, 0, 0 );
577 v_color = ( 1, 1, 1 );
584 if ( isdefined(
self.screen_fade_menus[ str_menu_id ] ) )
588 s_menu =
self.screen_fade_menus[ str_menu_id ];
589 lui_menu = s_menu.lui_menu;
595 n_start_alpha = LerpFloat( s_menu.n_start_alpha, s_menu.n_target_alpha, GetTime() - s_menu.n_start_time );
599 lui_menu =
self OpenLUIMenu( str_menu );
601 self.screen_fade_menus[ str_menu_id ] = SpawnStruct();
602 self.screen_fade_menus[ str_menu_id ].lui_menu = lui_menu;
605 self.screen_fade_menus[ str_menu_id ].n_start_alpha = n_start_alpha;
606 self.screen_fade_menus[ str_menu_id ].n_target_alpha = n_target_alpha;
607 self.screen_fade_menus[ str_menu_id ].n_target_time = n_time_ms;
608 self.screen_fade_menus[ str_menu_id ].n_start_time = GetTime();
612 self SetLUIMenuData( lui_menu,
"startAlpha", n_start_alpha );
613 self SetLUIMenuData( lui_menu,
"endAlpha", n_target_alpha );
614 self SetLUIMenuData( lui_menu,
"fadeOverTime", n_time_ms );
621 self SetLUIMenuData( lui_menu,
"fadeOverTime", 0 );
623 if ( b_force_close_menu || ( n_target_alpha == 0 ) )
625 if ( isdefined(
self.screen_fade_menus[ str_menu_id ] ) )
627 self CloseLUIMenu(
self.screen_fade_menus[ str_menu_id ].lui_menu );
630 self.screen_fade_menus[ str_menu_id ] = undefined;
632 if ( !
self.screen_fade_menus.size )
634 self.screen_fade_menus = undefined;
641 while ( s_menu.screen_fade_network_frame === level.network_frame )
646 s_menu.screen_fade_network_frame = level.network_frame;
660 self endon(
"disconnect" );
662 dialog =
self OpenLUIMenu(
"ScriptMessageDialog_Compact" );
663 self SetLUIMenuData( dialog,
"title", title );
664 self SetLUIMenuData( dialog,
"description", description );
668 self waittill(
"menuresponse", menu, response );
670 while( menu !=
"ScriptMessageDialog_Compact" || response !=
"close" );
672 self CloseLUIMenu( dialog );
685 self endon(
"disconnect" );
687 dialog =
self OpenLUIMenu( dialog_name );
691 self waittill(
"menuresponse", menu, response );
693 while( menu != dialog_name || response !=
"close" );
695 self CloseLUIMenu( dialog );