‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
lui_shared.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
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;
10 
11 #insert scripts\shared\shared.gsh;
12 
13 #namespace lui;
14 
15 #precache( "eventstring", "show_perk_notification" );
16 
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
24 
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" );
42 
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" );
50 
51 #precache( "lui_menu_data", "title" );
52 #precache( "lui_menu_data", "description" );
53 
54 ‪REGISTER_SYSTEM( "lui_shared", &‪__init__, undefined )
55 
56 function ‪__init__()
57 {
59 }
60 
61 // Refresh all global lui variables for connecting players.
62 //
63 function private ‪refresh_menu_values()
64 {
65  if ( !isdefined( level.lui_script_globals ) )
66  {
67  return;
68  }
69 
70  a_str_menus = GetArrayKeys( level.lui_script_globals );
71  for ( i = 0; i < a_str_menus.size; i++ )
72  {
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++ )
76  {
77  str_var = a_str_vars[j];
78  value = level.lui_script_globals[str_menu][str_var];
79  self ‪set_value_for_player( str_menu, str_var, value );
80  }
81  }
82 }
83 
93 function ‪play_animation( menu, str_anim )
94 {
95  str_curr_anim = self GetLUIMenuData( menu, "current_animation" );
96  str_new_anim = str_anim;
97 
98  // This is because if we set the anim name again to what it was before, it will not trigger the model subscription
99  // which will in turn not play the animation. This case is handled specially in lua, to check if its an empty string,
100  // if so, play the same anim again.
101  if ( isdefined( str_curr_anim ) && ( str_curr_anim == str_anim ) )
102  {
103  str_new_anim = "";
104  }
105 
106  self SetLUIMenuData( menu, "current_animation", str_new_anim );
107 }
108 
109 function ‪set_color( menu, color )
110 {
111  self SetLUIMenuData( menu, "red", color[ 0 ] );
112  self SetLUIMenuData( menu, "green", color[ 1 ] );
113  self SetLUIMenuData( menu, "blue", color[ 2 ] );
114 }
115 
116 // Set a LUI data model value for a specific player.
117 //
118 // Self == player
119 //
120 // Note: be sure to precache the lui_menu and the lui_menu_data for str_menu_id and str_variable_id respectively.
121 //
122 function ‪set_value_for_player( str_menu_id, str_variable_id, value )
123 {
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 );
127  }
128 
129 // Set a LUI data model value for all players.
130 //
131 // Note: be sure to precache the lui_menu and the lui_menu_data for str_menu_id and str_variable_id respectively.
132 //
133 function ‪set_global( str_menu_id, str_variable_id, value )
134 {
135  ‪DEFAULT( level.lui_script_globals, [] );
136  ‪DEFAULT( level.lui_script_globals[str_menu_id], [] );
137 
138  level.lui_script_globals[ str_menu_id ][ str_variable_id ] = value;
139 
140  // If there are no players now, no worries--it'll automagically get assigned when they connect.
141  //
142  if ( isdefined( level.players ) )
143  {
144  foreach( player in level.players )
145  {
146  player ‪set_value_for_player( str_menu_id, str_variable_id, value );
147  }
148  }
149 }
150 
163 function ‪timer( n_time, str_endon, x, y, height )
164 {
165  ‪DEFAULT( x, ‪SCREEN_WIDTH - 200 );
166  ‪DEFAULT( y, 200 );
167  ‪DEFAULT( height, 60 );
168 
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 ) );
174 
175  if ( isdefined( str_endon ) )
176  {
177  self ‪util::waittill_notify_or_timeout( str_endon, n_time );
178  }
179  else
180  {
181  wait n_time;
182  }
183 
184  self CloseLUIMenu( lui );
185 }
186 
195 function ‪prime_movie( str_movie, b_looping = false, str_key = "" )
196 {
197  if ( self == level )
198  {
199  foreach ( player in level.players )
200  {
201  player PrimeMovie( str_movie, b_looping, str_key );
202  }
203  }
204  else
205  {
206  player PrimeMovie( str_movie, b_looping, str_key );
207  }
208 }
209 
220 function ‪play_movie( str_movie, str_type, show_black_screen = false, b_looping = false, str_key = "" )
221 {
222  if( str_type === "fullscreen" || str_type === "fullscreen_additive" )
223  {
224  b_hide_hud = true;
225  }
226 
227  if ( self == level )
228  {
229  foreach ( player in level.players )
230  {
231  if( isdefined(b_hide_hud) )
232  {
233  player ‪flagsys::set( "playing_movie_hide_hud" );
234  player ‪util::show_hud( 0 );
235  }
236 
237  player thread ‪_play_movie_for_player( str_movie, str_type, show_black_screen, b_looping, str_key );
238  }
239 
240  ‪array::wait_till( level.players, "movie_done" );
241 
242  if( isdefined(b_hide_hud) )
243  {
244  foreach ( player in level.players )
245  {
246  player ‪flagsys::clear( "playing_movie_hide_hud" );
247  player ‪util::show_hud( 1 );
248  }
249  }
250  }
251  else
252  {
253  if( isdefined(b_hide_hud) )
254  {
255  self ‪flagsys::set( "playing_movie_hide_hud" );
256  self ‪util::show_hud( 0 );
257  }
258 
259  ‪_play_movie_for_player( str_movie, str_type, false, b_looping, str_key );
260 
261  if( isdefined(b_hide_hud) )
262  {
263  self ‪flagsys::clear( "playing_movie_hide_hud" );
264  self ‪util::show_hud( 1 );
265  }
266  }
267 
268 
269 
270  level notify( "movie_done", str_type );
271 }
272 
273 function private ‪_play_movie_for_player( str_movie, str_type, show_black_screen, b_looping, str_key )
274 {
275  self endon("disconnect");
276  str_menu = undefined;
277 
278  switch ( str_type )
279  {
280  case "fullscreen":
281  case "fullscreen_additive":
282  str_menu = "FullscreenMovie";
283  break;
284 
285  case "pip":
286  str_menu = "PiPMenu";
287  break;
288 
289  default: AssertMsg( "Invalid movie type '" + str_type + "'." );
290  }
291 
292  if( str_type == "pip" )
293  {
294  self playsoundtoplayer( "uin_pip_open", self );
295  }
296 
297  lui_menu = self OpenLUIMenu( str_menu );
298  if(isDefined(lui_menu))
299  {
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 );
305 
306  if ( IsSubStr( str_type, "additive" ) )
307  {
308  self SetLUIMenuData( lui_menu, "additive", 1 );
309  }
310 
311  while ( true )
312  {
313  self waittill( "menuresponse", menu, response );
314 
315  if ( ( menu == str_menu ) && ( response == "finished_movie_playback" ) )
316  {
317  if( str_type == "pip" )
318  {
319  self playsoundtoplayer( "uin_pip_close", self );
320  }
321 
322  self CloseLUIMenu( lui_menu );
323  self notify( "movie_done" );
324  }
325  }
326  }
327 }
328 
341 function ‪play_movie_with_timeout( str_movie, str_type, ‪timeout, show_black_screen = false, b_looping = false, str_key = "" )
342 {
343  if( str_type === "fullscreen" || str_type === "fullscreen_additive" )
344  {
345  b_hide_hud = true;
346  }
347 
348  assert( self == level );
349 
350  foreach ( player in level.players )
351  {
352  if( isdefined(b_hide_hud) )
353  {
354  player ‪flagsys::set( "playing_movie_hide_hud" );
355  player ‪util::show_hud( 0 );
356  }
357 
358  player thread ‪_play_movie_for_player_with_timeout( str_movie, str_type, ‪timeout, show_black_screen, b_looping, str_key );
359  }
360 
361  ‪array::wait_till( level.players, "movie_done" );
362 
363  if( isdefined(b_hide_hud) )
364  {
365  foreach ( player in level.players )
366  {
367  player ‪flagsys::clear( "playing_movie_hide_hud" );
368  player ‪util::show_hud( 1 );
369  }
370  }
371 
372  level notify( "movie_done", str_type );
373 }
374 
375 function private ‪_play_movie_for_player_with_timeout( str_movie, str_type, ‪timeout, show_black_screen, b_looping, str_key )
376 {
377  self endon("disconnect");
378  str_menu = undefined;
379 
380  switch ( str_type )
381  {
382  case "fullscreen":
383  case "fullscreen_additive":
384  str_menu = "FullscreenMovie";
385  break;
386 
387  case "pip":
388  str_menu = "PiPMenu";
389  break;
390 
391  default: AssertMsg( "Invalid movie type '" + str_type + "'." );
392  }
393 
394  if( str_type == "pip" )
395  {
396  self playsoundtoplayer( "uin_pip_open", self );
397  }
398 
399  lui_menu = self OpenLUIMenu( str_menu );
400  if(isDefined(lui_menu))
401  {
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 );
407 
408  if ( IsSubStr( str_type, "additive" ) )
409  {
410  self SetLUIMenuData( lui_menu, "additive", 1 );
411  }
412 
413  wait ‪timeout;
414 
415  if( str_type == "pip" )
416  {
417  self playsoundtoplayer( "uin_pip_close", self );
418  }
419 
420  self CloseLUIMenu( lui_menu );
421  self notify( "movie_done" );
422  }
423 }
424 
438 function ‪screen_flash( n_fadein_time, n_hold_time, n_fadeout_time, n_target_alpha = 1, v_color, b_force_close_menu = false )
439 {
440  if ( self == level )
441  {
442  foreach ( player in level.players )
443  {
444  player thread ‪screen_flash( n_fadein_time, n_hold_time, n_fadeout_time, n_target_alpha, v_color, b_force_close_menu );
445  }
446  }
447  else
448  {
449  self endon( "disconnect" );
450 
451  self ‪_screen_fade( n_fadein_time, n_target_alpha, 0, v_color, b_force_close_menu );
452  wait n_hold_time;
453  self ‪_screen_fade( n_fadeout_time, 0, n_target_alpha, v_color, b_force_close_menu );
454  }
455 }
456 
469 function ‪screen_fade( n_time, n_target_alpha = 1, n_start_alpha = 0, v_color, b_force_close_menu = false, str_menu_id )
470 {
471  if ( self == level )
472  {
473  foreach ( player in level.players )
474  {
475  player thread ‪_screen_fade( n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id );
476  }
477  }
478  else
479  {
480  self thread ‪_screen_fade( n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id );
481  }
482 }
483 
494 function ‪screen_fade_out( n_time, v_color, str_menu_id )
495 {
496  ‪screen_fade( n_time, 1, 0, v_color, false, str_menu_id );
497  wait n_time;
498 }
499 
510 function ‪screen_fade_in( n_time, v_color, str_menu_id )
511 {
512  ‪screen_fade( n_time, 0, 1, v_color, true, str_menu_id );
513  wait n_time;
514 }
515 
523 {
524  if ( self == level )
525  {
526  foreach ( player in level.players )
527  {
528  player thread ‪_screen_close_menu();
529  }
530  }
531  else
532  {
533  self thread ‪_screen_close_menu();
534  }
535 }
536 
537 function private ‪_screen_close_menu()
538 {
539  self notify( "_screen_fade" );
540  self endon( "_screen_fade" );
541  self endon( "disconnect" );
542 
543  if ( isdefined( self.screen_fade_menus ) )
544  {
545  foreach ( str_menu_id, lui_menu in self.screen_fade_menus )
546  {
547  self CloseLUIMenu( lui_menu.lui_menu );
548  self.screen_fade_menus[ str_menu_id ] = undefined;
549  }
550  }
551 }
552 
553 function private ‪_screen_fade( n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id = "default" )
554 {
555  self notify( "_screen_fade_" + str_menu_id );
556  self endon( "_screen_fade_" + str_menu_id );
557 
558  self endon( "disconnect" );
559 
560  ‪DEFAULT( self.screen_fade_menus, [] );
561  ‪DEFAULT( level.screen_fade_network_frame, 0 );
562  ‪DEFAULT( v_color, ( 0, 0, 0 ) );
563 
564  n_time_ms = int( n_time * 1000 );
565 
566  str_menu = "FullScreenBlack";
567 
568  if ( IsString( v_color ) )
569  {
570  switch ( v_color )
571  {
572  case "black":
573  v_color = ( 0, 0, 0 );
574  break;
575 
576  case "white":
577  v_color = ( 1, 1, 1 );
578  break;
579  }
580  }
581 
582  lui_menu = "";
583 
584  if ( isdefined( self.screen_fade_menus[ str_menu_id ] ) )
585  {
586  /* Use current menu */
587 
588  s_menu = self.screen_fade_menus[ str_menu_id ];
589  lui_menu = s_menu.lui_menu;
590 
591  ‪_one_screen_fade_per_network_frame( s_menu ); // menu commands can't run on the same network frame
592 
593  /* Calculate the current alpha since we can't get it directly from the menu */
594 
595  n_start_alpha = LerpFloat( s_menu.n_start_alpha, s_menu.n_target_alpha, GetTime() - s_menu.n_start_time );
596  }
597  else
598  {
599  lui_menu = self OpenLUIMenu( str_menu );
600 
601  self.screen_fade_menus[ str_menu_id ] = SpawnStruct();
602  self.screen_fade_menus[ str_menu_id ].lui_menu = lui_menu;
603  }
604 
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();
609 
610  self ‪set_color( lui_menu, v_color );
611 
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 );
615 
616  if ( n_time > 0 )
617  {
618  wait n_time;
619  }
620 
621  self SetLUIMenuData( lui_menu, "fadeOverTime", 0 );
622 
623  if ( b_force_close_menu || ( n_target_alpha == 0 ) )
624  {
625  if ( isdefined( self.screen_fade_menus[ str_menu_id ] ) )
626  {
627  self CloseLUIMenu( self.screen_fade_menus[ str_menu_id ].lui_menu );
628  }
629 
630  self.screen_fade_menus[ str_menu_id ] = undefined;
631 
632  if ( !self.screen_fade_menus.size )
633  {
634  self.screen_fade_menus = undefined;
635  }
636  }
637 }
638 
639 function private ‪_one_screen_fade_per_network_frame( s_menu )
640 {
641  while ( s_menu.screen_fade_network_frame === level.network_frame )
642  {
644  }
645 
646  s_menu.screen_fade_network_frame = level.network_frame;
647 }
648 
658 function ‪open_generic_script_dialog( title, description )
659 {
660  self endon( "disconnect" );
661 
662  dialog = self OpenLUIMenu( "ScriptMessageDialog_Compact" );
663  self SetLUIMenuData( dialog, "title", title );
664  self SetLUIMenuData( dialog, "description", description );
665 
666  do
667  {
668  self waittill( "menuresponse", menu, response );
669  }
670  while( menu != "ScriptMessageDialog_Compact" || response != "close" );
671 
672  self CloseLUIMenu( dialog );
673 }
674 
683 function ‪open_script_dialog( dialog_name )
684 {
685  self endon( "disconnect" );
686 
687  dialog = self OpenLUIMenu( dialog_name );
688 
689  do
690  {
691  self waittill( "menuresponse", menu, response );
692  }
693  while( menu != dialog_name || response != "close" );
694 
695  self CloseLUIMenu( dialog );
696 }
‪timeout
‪function timeout(n_time, func, arg1, arg2, arg3, arg4, arg5, arg6)
Definition: util_shared.csc:762
‪screen_flash
‪function screen_flash(n_fadein_time, n_hold_time, n_fadeout_time, n_target_alpha=1, v_color, b_force_close_menu=false)
Definition: lui_shared.gsc:438
‪play_movie_with_timeout
‪function play_movie_with_timeout(str_movie, str_type, timeout, show_black_screen=false, b_looping=false, str_key="")
Definition: lui_shared.gsc:341
‪set_value_for_player
‪function set_value_for_player(str_menu_id, str_variable_id, value)
Definition: lui_shared.gsc:122
‪prime_movie
‪function prime_movie(str_movie, b_looping=false, str_key="")
Definition: lui_shared.gsc:195
‪timer
‪function timer(n_time, str_endon, x, y, height)
Definition: lui_shared.gsc:163
‪SCREEN_WIDTH
‪#define SCREEN_WIDTH
Definition: shared.gsh:200
‪clear
‪function clear(str_flag)
Definition: flag_shared.csc:130
‪_play_movie_for_player
‪function private _play_movie_for_player(str_movie, str_type, show_black_screen, b_looping, str_key)
Definition: lui_shared.gsc:273
‪open_script_dialog
‪function open_script_dialog(dialog_name)
Definition: lui_shared.gsc:683
‪__init__
‪function __init__()
Definition: lui_shared.gsc:56
‪show_hud
‪function show_hud(b_show)
Definition: util_shared.gsc:4025
‪set_global
‪function set_global(str_menu_id, str_variable_id, value)
Definition: lui_shared.gsc:133
‪screen_fade_in
‪function screen_fade_in(n_time, v_color, str_menu_id)
Definition: lui_shared.gsc:510
‪play_animation
‪function play_animation(menu, str_anim)
Definition: lui_shared.gsc:93
‪refresh_menu_values
‪function private refresh_menu_values()
Definition: lui_shared.gsc:63
‪DEFAULT
‪#define DEFAULT(__var, __default)
Definition: shared.gsh:270
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪_one_screen_fade_per_network_frame
‪function private _one_screen_fade_per_network_frame(s_menu)
Definition: lui_shared.gsc:639
‪play_movie
‪function play_movie(str_movie, str_type, show_black_screen=false, b_looping=false, str_key="")
Definition: lui_shared.gsc:220
‪screen_fade
‪function screen_fade(n_time, n_target_alpha=1, n_start_alpha=0, v_color, b_force_close_menu=false, str_menu_id)
Definition: lui_shared.gsc:469
‪wait_network_frame
‪function wait_network_frame(n_count=1)
Definition: util_shared.gsc:64
‪set_color
‪function set_color(menu, color)
Definition: lui_shared.gsc:109
‪waittill_notify_or_timeout
‪function waittill_notify_or_timeout(msg, timer)
Definition: util_shared.csc:473
‪_screen_fade
‪function private _screen_fade(n_time, n_target_alpha, n_start_alpha, v_color, b_force_close_menu, str_menu_id="default")
Definition: lui_shared.gsc:553
‪screen_close_menu
‪function screen_close_menu()
Definition: lui_shared.gsc:522
‪wait_till
‪function wait_till(str_flag)
Definition: flag_shared.csc:189
‪open_generic_script_dialog
‪function open_generic_script_dialog(title, description)
Definition: lui_shared.gsc:658
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪_play_movie_for_player_with_timeout
‪function private _play_movie_for_player_with_timeout(str_movie, str_type, timeout, show_black_screen, b_looping, str_key)
Definition: lui_shared.gsc:375
‪_screen_close_menu
‪function private _screen_close_menu()
Definition: lui_shared.gsc:537
‪screen_fade_out
‪function screen_fade_out(n_time, v_color, str_menu_id)
Definition: lui_shared.gsc:494