‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
visionset_mgr_shared.gsc
Go to the documentation of this file.
1 #using scripts\shared\callbacks_shared;
2 #using scripts\shared\clientfield_shared;
3 #using scripts\shared\math_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\util_shared;
6 
7 #insert scripts\shared\shared.gsh;
8 #insert scripts\shared\version.gsh;
9 
10 #namespace visionset_mgr;
11 
12 ‪REGISTER_SYSTEM( "visionset_mgr", &‪__init__, undefined )
13 
14 function ‪__init__()
15 {
16  level.vsmgr_initializing = true;
17  level.vsmgr_default_info_name = "__none"; // underscores force this into the zeroth slot
18 
19  level.vsmgr = [];
20 
21  level thread ‪register_type( "visionset" );
22  level thread ‪register_type( "overlay" );
23 
25  level thread ‪monitor();
27 }
28 
29 
30 function ‪register_info( type, ‪name, version, priority, lerp_step_count, should_activate_per_player, lerp_thread, ref_count_lerp_thread )
31 {
32  assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" );
33 
34  lower_name = ToLower( ‪name );
35  ‪validate_info( type, lower_name, priority );
36 
37  ‪add_sorted_name_key( type, lower_name );
38  ‪add_sorted_priority_key( type, lower_name, priority );
39 
40  level.vsmgr[type].info[lower_name] = spawnstruct();
41  level.vsmgr[type].info[lower_name] ‪add_info( type, lower_name, version, priority, lerp_step_count, should_activate_per_player, lerp_thread, ref_count_lerp_thread );
42 
43  if ( level.vsmgr[type].highest_version < version )
44  {
45  level.vsmgr[type].highest_version = version;
46  }
47 }
48 
49 
50 function ‪activate( type, ‪name, player, opt_param_1, opt_param_2, opt_param_3 )
51 {
52  if ( level.vsmgr[type].info[‪name].state.should_activate_per_player )
53  {
54  ‪activate_per_player( type, ‪name, player, opt_param_1, opt_param_2, opt_param_3 );
55  return;
56  }
57 
58  state = level.vsmgr[type].info[‪name].state;
59 
60  if ( state.ref_count_lerp_thread )
61  {
62  state.ref_count++;
63  if ( 1 < state.ref_count )
64  {
65  return;
66  }
67  }
68 
69  if ( isdefined( state.lerp_thread ) )
70  {
71  state thread ‪lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2, opt_param_3 );
72  }
73  else
74  {
75  players = GetPlayers();
76  for ( player_index = 0; player_index < players.size; player_index++ )
77  {
78  state ‪set_state_active( players[player_index], 1 );
79  }
80  }
81 }
82 
83 
84 function ‪deactivate( type, ‪name, player )
85 {
86  if ( level.vsmgr[type].info[‪name].state.should_activate_per_player )
87  {
88  ‪deactivate_per_player( type, ‪name, player );
89  return;
90  }
91 
92  state = level.vsmgr[type].info[‪name].state;
93 
94  if ( state.ref_count_lerp_thread )
95  {
96  state.ref_count--;
97  if ( 0 < state.ref_count )
98  {
99  return;
100  }
101  }
102 
103  players = GetPlayers();
104  for ( player_index = 0; player_index < players.size; player_index++ )
105  {
106  state ‪set_state_inactive( players[player_index] );
107  }
108 
109  state notify( "visionset_mgr_deactivate_all" );
110 }
111 
112 
113 function ‪set_state_active( player, ‪lerp )
114 {
115  player_entnum = player GetEntityNumber();
116 
117  if ( !IsDefined( self.players[player_entnum] ) )
118  {
119  return;
120  }
121 
122  self.players[player_entnum].active = true;
123  self.players[player_entnum].lerp = ‪lerp;
124 }
125 
126 
127 function ‪set_state_inactive( player )
128 {
129  player_entnum = player GetEntityNumber();
130 
131  if ( !IsDefined( self.players[player_entnum] ) )
132  {
133  return;
134  }
135 
136  self.players[player_entnum].active = false;
137  self.players[player_entnum].lerp = 0;
138 }
139 
140 
141 function ‪timeout_lerp_thread( ‪timeout, opt_param_2, opt_param_3 )
142 {
143  players = GetPlayers();
144  for ( player_index = 0; player_index < players.size; player_index++ )
145  {
146  self ‪set_state_active( players[player_index], 1 );
147  }
148 
149  wait( ‪timeout );
150 
151  ‪deactivate( self.type, self.‪name );
152 }
153 
154 
155 function ‪timeout_lerp_thread_per_player( player, ‪timeout, opt_param_2, opt_param_3 )
156 {
157  self ‪set_state_active( player, 1 );
158 
159  wait( ‪timeout );
160 
161  ‪deactivate_per_player( self.type, self.‪name, player );
162 }
163 
164 
165 function ‪duration_lerp_thread( duration, max_duration )
166 {
167  start_time = GetTime();
168  end_time = start_time + int( duration * 1000 );
169 
170  if ( isdefined( max_duration ) )
171  {
172  // if a max_duration is supplied, we adjust the start time so that our lerp begins at less than 1,
173  // since we won't be running for the full duration that the clientside expects
174  start_time = end_time - int( max_duration * 1000 );
175  }
176 
177  while ( true )
178  {
179  ‪lerp = ‪calc_remaining_duration_lerp( start_time, end_time );
180 
181  if ( 0 >= ‪lerp )
182  {
183  break;
184  }
185 
186  players = GetPlayers();
187  for ( player_index = 0; player_index < players.size; player_index++ )
188  {
189  self ‪set_state_active( players[player_index], ‪lerp );
190  }
191 
193  }
194 
195  ‪deactivate( self.type, self.‪name );
196 }
197 
198 
199 function ‪duration_lerp_thread_per_player( player, duration, max_duration )
200 {
201  start_time = GetTime();
202  end_time = start_time + int( duration * 1000 );
203 
204  if ( isdefined( max_duration ) )
205  {
206  // if a max_duration is supplied, we adjust the start time so that our lerp begins at less than 1,
207  // since we won't be running for the full duration that the clientside expects
208  start_time = end_time - int( max_duration * 1000 );
209  }
210 
211  while ( true )
212  {
213  ‪lerp = ‪calc_remaining_duration_lerp( start_time, end_time );
214 
215  if ( 0 >= ‪lerp )
216  {
217  break;
218  }
219 
220  self ‪set_state_active( player, ‪lerp );
221 
223  }
224 
225  ‪deactivate_per_player( self.type, self.‪name, player );
226 }
227 
228 
229 function ‪ramp_in_thread_per_player( player, duration )
230 {
231  start_time = GetTime();
232  end_time = start_time + int( duration * 1000 );
233 
234  while ( true )
235  {
236  ‪lerp = ‪calc_ramp_in_lerp( start_time, end_time );
237 
238  if ( 1 <= ‪lerp )
239  {
240  break;
241  }
242 
243  self ‪set_state_active( player, ‪lerp );
244 
246  }
247 }
248 
249 
251 {
252  level endon( "kill_ramp_in_out_thread_hold_func" );
253 
254  while ( true )
255  {
256  for ( player_index = 0; player_index < level.players.size; player_index++ )
257  {
258  self ‪visionset_mgr::set_state_active( level.players[player_index], 1 );
259  }
260 
262  }
263 }
264 
265 
266 function ‪ramp_in_out_thread( ramp_in, full_period, ramp_out )
267 {
268  start_time = GetTime();
269  end_time = start_time + int( ramp_in * 1000 );
270 
271  while ( true )
272  {
273  ‪lerp = ‪calc_ramp_in_lerp( start_time, end_time );
274 
275  if ( 1 <= ‪lerp )
276  {
277  break;
278  }
279 
280  players = GetPlayers();
281  for ( player_index = 0; player_index < players.size; player_index++ )
282  {
283  self ‪set_state_active( players[player_index], ‪lerp );
284  }
285 
287  }
288 
289  self thread ‪ramp_in_out_thread_hold_func();
290  if ( IsFunctionPtr( full_period ) )
291  {
292  self [[full_period]]();
293  }
294  else
295  {
296  wait( full_period );
297  }
298  level notify( "kill_ramp_in_out_thread_hold_func" );
299 
300  start_time = GetTime();
301  end_time = start_time + int( ramp_out * 1000 );
302 
303  while ( true )
304  {
305  ‪lerp = ‪calc_remaining_duration_lerp( start_time, end_time );
306 
307  if ( 0 >= ‪lerp )
308  {
309  break;
310  }
311 
312  players = GetPlayers();
313  for ( player_index = 0; player_index < players.size; player_index++ )
314  {
315  self ‪set_state_active( players[player_index], ‪lerp );
316  }
317 
319  }
320 
321  ‪deactivate( self.type, self.‪name );
322 }
323 
324 function ‪ramp_in_out_thread_per_player_internal( player, ramp_in, full_period, ramp_out )
325 {
326  start_time = GetTime();
327  end_time = start_time + int( ramp_in * 1000 );
328 
329  while ( true )
330  {
331  ‪lerp = ‪calc_ramp_in_lerp( start_time, end_time );
332 
333  if ( 1 <= ‪lerp )
334  {
335  break;
336  }
337 
338  self ‪set_state_active( player, ‪lerp );
339 
341  }
342 
343  self ‪set_state_active( player, ‪lerp );
344 
345  if ( IsFunctionPtr( full_period ) )
346  {
347  player [[full_period]]();
348  }
349  else
350  {
351  wait( full_period );
352  }
353 
354  start_time = GetTime();
355  end_time = start_time + int( ramp_out * 1000 );
356 
357  while ( true )
358  {
359  ‪lerp = ‪calc_remaining_duration_lerp( start_time, end_time );
360 
361  if ( 0 >= ‪lerp )
362  {
363  break;
364  }
365 
366  self ‪set_state_active( player, ‪lerp );
367 
369  }
370 
371  ‪deactivate_per_player( self.type, self.‪name, player );
372 }
373 
375 {
376  player notify( "ramp_in_out_thread_watch_player_shutdown" );
377  player endon( "ramp_in_out_thread_watch_player_shutdown" );
378  player endon( "disconnect" );
379  player waittill( "death" );
380 
381  if ( player IsRemoteControlling() == false )
382  ‪deactivate_per_player( self.type, self.‪name, player );
383 }
384 
385 function ‪ramp_in_out_thread_per_player_death_shutdown( player, ramp_in, full_period, ramp_out )
386 {
387  player endon ( "death" );
389  ‪ramp_in_out_thread_per_player_internal( player, ramp_in, full_period, ramp_out );
390 }
391 
392 function ‪ramp_in_out_thread_per_player( player, ramp_in, full_period, ramp_out )
393 {
394  ‪ramp_in_out_thread_per_player_internal( player, ramp_in, full_period, ramp_out );
395 }
396 
397 function ‪register_type( type )
398 {
399  level.vsmgr[type] = spawnstruct();
400 
401  level.vsmgr[type].type = type;
402  level.vsmgr[type].in_use = false; // true if items other than the default value has been registered
403  level.vsmgr[type].highest_version = 0;
404  level.vsmgr[type].cf_slot_name = type + "_slot";
405  level.vsmgr[type].cf_lerp_name = type + "_lerp";
406  level.vsmgr[type].info = [];
407  level.vsmgr[type].sorted_name_keys = [];
408  level.vsmgr[type].sorted_prio_keys = [];
409 
410  ‪register_info( type, level.vsmgr_default_info_name, ‪VERSION_SHIP, 0, 1, false, undefined );
411 }
412 
413 
415 {
416  typeKeys = GetArrayKeys( level.vsmgr );
417  for ( type_index = 0; type_index < typeKeys.size; type_index++ )
418  {
419  level.vsmgr[typeKeys[type_index]] thread ‪finalize_type_clientfields();
420  }
421 
422  level.vsmgr_initializing = false; // registering new infos is not allowed after this point
423 }
424 
425 
427 {
428  /#println( "visionset_mgr [" + self.type + "] server registrations:" );#/
429 
430  if ( 1 >= self.info.size ) // if only the default info has been registered, don't spend bits on this type
431  {
432  return;
433  }
434 
435  self.in_use = true;
436  self.cf_slot_bit_count = GetMinBitCountForNum( self.info.size - 1 );
437  self.cf_lerp_bit_count = self.info[self.sorted_name_keys[0]].lerp_bit_count;
438 
439  for ( i = 0; i < self.sorted_name_keys.size; i++ )
440  {
441  self.info[self.sorted_name_keys[i]].slot_index = i;
442 
443  if ( self.info[self.sorted_name_keys[i]].lerp_bit_count > self.cf_lerp_bit_count )
444  {
445  self.cf_lerp_bit_count = self.info[self.sorted_name_keys[i]].lerp_bit_count;
446  }
447 
448  /#println( " name: " + self.info[self.sorted_name_keys[i]].‪name + ", version: " + self.info[self.sorted_name_keys[i]].version + ", lerp_step_count: " + self.info[self.sorted_name_keys[i]].lerp_step_count + "" );#/
449  }
450 
451  ‪clientfield::register( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" );
452 
453  // don't spend a clientfield if all slots are just on/off
454  if ( 1 < self.cf_lerp_bit_count )
455  {
456  ‪clientfield::register( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" );
457  }
458 }
459 
460 
461 function ‪validate_info( type, ‪name, priority )
462 {
463  keys = GetArrayKeys( level.vsmgr );
464  for ( i = 0; i < keys.size; i++ )
465  {
466  if ( type == keys[i] )
467  {
468  break;
469  }
470  }
471 
472  assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" );
473 
474  keys = GetArrayKeys( level.vsmgr[type].info );
475  for ( i = 0; i < keys.size; i++ )
476  {
477  assert( level.vsmgr[type].info[keys[i]].name != ‪name, "In visionset_mgr of type '" + type + "': name '" + ‪name + "' has previously been registered" );
478  assert( level.vsmgr[type].info[keys[i]].priority != priority, "In visionset_mgr of type '" + type + "': priority '" + priority + "' requested for name '" + ‪name + "' has previously been registered under name '" + level.vsmgr[type].info[keys[i]].name + "'");
479  }
480 }
481 
482 
484 {
485  for ( i = 0; i < level.vsmgr[type].sorted_name_keys.size; i++ )
486  {
487  if ( ‪name < level.vsmgr[type].sorted_name_keys[i] )
488  {
489  break;
490  }
491  }
492 
493  ArrayInsert( level.vsmgr[type].sorted_name_keys, ‪name, i );
494 }
495 
496 
497 function ‪add_sorted_priority_key( type, ‪name, priority )
498 {
499  for ( i = 0; i < level.vsmgr[type].sorted_prio_keys.size; i++ )
500  {
501  if ( priority > level.vsmgr[type].info[level.vsmgr[type].sorted_prio_keys[i]].priority )
502  {
503  break;
504  }
505  }
506 
507  ArrayInsert( level.vsmgr[type].sorted_prio_keys, ‪name, i );
508 }
509 
510 
511 function ‪add_info( type, ‪name, version, priority, lerp_step_count, should_activate_per_player, lerp_thread, ref_count_lerp_thread )
512 {
513  self.type = type;
514  self.name = ‪name;
515  self.version = version;
516  self.priority = priority;
517  self.lerp_step_count = lerp_step_count;
518  self.lerp_bit_count = GetMinBitCountForNum( lerp_step_count );
519 
520  if ( !isdefined( ref_count_lerp_thread ) )
521  {
522  ref_count_lerp_thread = false;
523  }
524 
525  self.state = spawnstruct();
526  self.state.type = type;
527  self.state.name = ‪name;
528  self.state.should_activate_per_player = should_activate_per_player;
529  self.state.lerp_thread = lerp_thread;
530  self.state.ref_count_lerp_thread = ref_count_lerp_thread;
531  self.state.players = [];
532 
533  if ( ref_count_lerp_thread && !should_activate_per_player )
534  {
535  self.state.ref_count = 0;
536  }
537 }
538 
540 {
541  self ‪player_setup();
542 }
543 
544 
545 function ‪player_setup()
546 {
547  self.vsmgr_player_entnum = self GetEntityNumber();
548 
549  typeKeys = GetArrayKeys( level.vsmgr );
550  for ( type_index = 0; type_index < typeKeys.size; type_index++ )
551  {
552  type = typeKeys[type_index];
553 
554  if ( !level.vsmgr[type].in_use )
555  {
556  continue;
557  }
558 
559  for ( name_index = 0; name_index < level.vsmgr[type].sorted_name_keys.size; name_index++ )
560  {
561  name_key = level.vsmgr[type].sorted_name_keys[name_index];
562 
563  level.vsmgr[type].info[name_key].state.players[self.vsmgr_player_entnum] = SpawnStruct();
564 
565  level.vsmgr[type].info[name_key].state.players[self.vsmgr_player_entnum].active = false;
566  level.vsmgr[type].info[name_key].state.players[self.vsmgr_player_entnum].lerp = 0;
567 
568  if ( level.vsmgr[type].info[name_key].state.ref_count_lerp_thread && level.vsmgr[type].info[name_key].state.should_activate_per_player )
569  {
570  level.vsmgr[type].info[name_key].state.players[self.vsmgr_player_entnum].ref_count = 0;
571  }
572  }
573 
574  level.vsmgr[type].info[level.vsmgr_default_info_name].state ‪set_state_active( self, 1 );
575  }
576 }
577 
579 {
580  self.vsmgr_player_entnum = self GetEntityNumber();
581 
582  typeKeys = GetArrayKeys( level.vsmgr );
583  for ( type_index = 0; type_index < typeKeys.size; type_index++ )
584  {
585  type = typeKeys[type_index];
586 
587  if ( !level.vsmgr[type].in_use )
588  {
589  continue;
590  }
591 
592  for ( name_index = 0; name_index < level.vsmgr[type].sorted_name_keys.size; name_index++ )
593  {
594  name_key = level.vsmgr[type].sorted_name_keys[name_index];
595 
596  ‪deactivate_per_player( type, name_key, self );
597  }
598  }
599 }
600 
601 
602 function ‪monitor()
603 {
604  while ( level.vsmgr_initializing )
605  {
607  }
608 
609  typeKeys = GetArrayKeys( level.vsmgr );
610 
611  while ( true )
612  {
614  waittillframeend;
615 
616  players = GetPlayers();
617 
618  for ( type_index = 0; type_index < typeKeys.size; type_index++ )
619  {
620  type = typeKeys[type_index];
621 
622  if ( !level.vsmgr[type].in_use )
623  {
624  continue;
625  }
626 
627  for ( player_index = 0; player_index < players.size; player_index++ )
628  {
629  if ( !IsDefined( players[player_index].vsmgr_player_entnum ) )
630  {
631  continue;
632  }
633 
634  ‪update_clientfields( players[player_index], level.vsmgr[type] );
635  }
636  }
637  }
638 }
639 
640 
641 function ‪get_first_active_name( type_struct )
642 {
643  //player_entnum = player GetEntityNumber();
644 
645  size = type_struct.sorted_prio_keys.size;
646 
647  for ( prio_index = 0; prio_index < size; prio_index++ )
648  {
649  prio_key = type_struct.sorted_prio_keys[prio_index];
650 
651  if ( type_struct.info[prio_key].state.players[self.vsmgr_player_entnum].active )
652  {
653  return prio_key;
654  }
655  }
656 
657  return level.vsmgr_default_info_name;
658 }
659 
660 
661 function ‪update_clientfields( player, type_struct )
662 {
663  //player_entnum = player GetEntityNumber();
664 
665  ‪name = player ‪get_first_active_name( type_struct );
666 
667  player ‪clientfield::set_to_player( type_struct.cf_slot_name, type_struct.info[‪name].slot_index );
668 
669  if ( 1 < type_struct.cf_lerp_bit_count )
670  {
671  player ‪clientfield::set_to_player( type_struct.cf_lerp_name, type_struct.info[‪name].state.players[player.vsmgr_player_entnum].lerp );
672  }
673 }
674 
675 
676 function ‪lerp_thread_wrapper( func, opt_param_1, opt_param_2, opt_param_3 )
677 {
678  self notify( "visionset_mgr_deactivate_all" );
679  self endon( "visionset_mgr_deactivate_all" );
680 
681  self [[func]]( opt_param_1, opt_param_2, opt_param_3 );
682 }
683 
684 
685 function ‪lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2, opt_param_3 )
686 {
687  player_entnum = player GetEntityNumber();
688  self.players[player_entnum] notify( "visionset_mgr_deactivate" );
689  self.players[player_entnum] endon( "visionset_mgr_deactivate" );
690  player endon( "disconnect" );
691 
692  self [[func]]( player, opt_param_1, opt_param_2, opt_param_3 );
693 }
694 
695 
696 function ‪activate_per_player( type, ‪name, player, opt_param_1, opt_param_2, opt_param_3 )
697 {
698  player_entnum = player GetEntityNumber();
699  state = level.vsmgr[type].info[‪name].state;
700 
701  if ( state.ref_count_lerp_thread )
702  {
703  state.players[player_entnum].ref_count++;
704  if ( 1 < state.players[player_entnum].ref_count )
705  {
706  return;
707  }
708  }
709 
710  if ( isdefined( state.lerp_thread ) )
711  {
712  state thread ‪lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2, opt_param_3 );
713  }
714  else
715  {
716  state ‪set_state_active( player, 1 );
717  }
718 }
719 
720 
721 function ‪deactivate_per_player( type, ‪name, player )
722 {
723  player_entnum = player GetEntityNumber();
724 
725  state = level.vsmgr[type].info[‪name].state;
726 
727  if ( state.ref_count_lerp_thread )
728  {
729  state.players[player_entnum].ref_count--;
730  if ( 0 < state.players[player_entnum].ref_count )
731  {
732  return;
733  }
734  }
735 
736  state ‪set_state_inactive( player );
737 
738  state.players[player_entnum] notify( "visionset_mgr_deactivate" );
739 }
740 
741 
742 function ‪calc_ramp_in_lerp( start_time, end_time )
743 {
744  if( 0 >= ( end_time - start_time ) )
745  {
746  return 1;
747  }
748 
749  now = GetTime();
750 
751  frac = float(now - start_time) / float(end_time - start_time);
752 
753  return ‪math::clamp( frac, 0, 1 );
754 }
755 
756 
757 function ‪calc_remaining_duration_lerp( start_time, end_time )
758 {
759  if( 0 >= ( end_time - start_time ) )
760  {
761  return 0;
762  }
763 
764  now = GetTime();
765 
766  frac = float(end_time - now) / float(end_time - start_time);
767 
768  return ‪math::clamp( frac, 0, 1 );
769 }
770 
771 
‪get_first_active_name
‪function get_first_active_name(type_struct)
Definition: visionset_mgr_shared.gsc:641
‪timeout_lerp_thread
‪function timeout_lerp_thread(timeout, opt_param_2, opt_param_3)
Definition: visionset_mgr_shared.gsc:141
‪timeout
‪function timeout(n_time, func, arg1, arg2, arg3, arg4, arg5, arg6)
Definition: util_shared.csc:762
‪player_shutdown
‪function player_shutdown()
Definition: visionset_mgr_shared.gsc:578
‪on_finalize_initialization
‪function on_finalize_initialization(func, obj)
Definition: callbacks_shared.csc:203
‪lerp
‪function lerp(chunk)
Definition: _zm_utility.gsc:71
‪set_state_active
‪function set_state_active(player, lerp)
Definition: visionset_mgr_shared.gsc:113
‪set_to_player
‪function set_to_player(str_field_name, n_value)
Definition: clientfield_shared.gsc:58
‪ramp_in_out_thread_per_player_death_shutdown
‪function ramp_in_out_thread_per_player_death_shutdown(player, ramp_in, full_period, ramp_out)
Definition: visionset_mgr_shared.gsc:385
‪__init__
‪function __init__()
Definition: visionset_mgr_shared.gsc:14
‪finalize_type_clientfields
‪function finalize_type_clientfields()
Definition: visionset_mgr_shared.gsc:426
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪update_clientfields
‪function update_clientfields(player, type_struct)
Definition: visionset_mgr_shared.gsc:661
‪duration_lerp_thread_per_player
‪function duration_lerp_thread_per_player(player, duration, max_duration)
Definition: visionset_mgr_shared.gsc:199
‪deactivate_per_player
‪function deactivate_per_player(type, name, player)
Definition: visionset_mgr_shared.gsc:721
‪ramp_in_out_thread_hold_func
‪function ramp_in_out_thread_hold_func()
Definition: visionset_mgr_shared.gsc:250
‪validate_info
‪function validate_info(type, name, priority)
Definition: visionset_mgr_shared.gsc:461
‪timeout_lerp_thread_per_player
‪function timeout_lerp_thread_per_player(player, timeout, opt_param_2, opt_param_3)
Definition: visionset_mgr_shared.gsc:155
‪player_setup
‪function player_setup()
Definition: visionset_mgr_shared.gsc:545
‪lerp_thread_wrapper
‪function lerp_thread_wrapper(func, opt_param_1, opt_param_2, opt_param_3)
Definition: visionset_mgr_shared.gsc:676
‪calc_ramp_in_lerp
‪function calc_ramp_in_lerp(start_time, end_time)
Definition: visionset_mgr_shared.gsc:742
‪ramp_in_out_thread_watch_player_shutdown
‪function ramp_in_out_thread_watch_player_shutdown(player)
Definition: visionset_mgr_shared.gsc:374
‪register_type
‪function register_type(type)
Definition: visionset_mgr_shared.gsc:397
‪monitor
‪function monitor()
Definition: visionset_mgr_shared.gsc:602
‪register_info
‪function register_info(type, name, version, priority, lerp_step_count, should_activate_per_player, lerp_thread, ref_count_lerp_thread)
Definition: visionset_mgr_shared.gsc:30
‪finalize_clientfields
‪function finalize_clientfields()
Definition: visionset_mgr_shared.gsc:414
‪add_info
‪function add_info(type, name, version, priority, lerp_step_count, should_activate_per_player, lerp_thread, ref_count_lerp_thread)
Definition: visionset_mgr_shared.gsc:511
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪add_sorted_name_key
‪function add_sorted_name_key(type, name)
Definition: visionset_mgr_shared.gsc:483
‪ramp_in_out_thread_per_player_internal
‪function ramp_in_out_thread_per_player_internal(player, ramp_in, full_period, ramp_out)
Definition: visionset_mgr_shared.gsc:324
‪add_sorted_priority_key
‪function add_sorted_priority_key(type, name, priority)
Definition: visionset_mgr_shared.gsc:497
‪activate_per_player
‪function activate_per_player(type, name, player, opt_param_1, opt_param_2, opt_param_3)
Definition: visionset_mgr_shared.gsc:696
‪deactivate
‪function deactivate(type, name, player)
Definition: visionset_mgr_shared.gsc:84
‪ramp_in_out_thread
‪function ramp_in_out_thread(ramp_in, full_period, ramp_out)
Definition: visionset_mgr_shared.gsc:266
‪lerp_thread_per_player_wrapper
‪function lerp_thread_per_player_wrapper(func, player, opt_param_1, opt_param_2, opt_param_3)
Definition: visionset_mgr_shared.gsc:685
‪activate
‪function activate(type, name, player, opt_param_1, opt_param_2, opt_param_3)
Definition: visionset_mgr_shared.gsc:50
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪clamp
‪function clamp(val, val_min, val_max)
Definition: math_shared.csc:16
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪calc_remaining_duration_lerp
‪function calc_remaining_duration_lerp(start_time, end_time)
Definition: visionset_mgr_shared.gsc:757
‪name
‪class GroundFx name
‪ramp_in_out_thread_per_player
‪function ramp_in_out_thread_per_player(player, ramp_in, full_period, ramp_out)
Definition: visionset_mgr_shared.gsc:392
‪ramp_in_thread_per_player
‪function ramp_in_thread_per_player(player, duration)
Definition: visionset_mgr_shared.gsc:229
‪duration_lerp_thread
‪function duration_lerp_thread(duration, max_duration)
Definition: visionset_mgr_shared.gsc:165
‪on_player_connect
‪function on_player_connect()
Definition: visionset_mgr_shared.gsc:539
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265
‪set_state_inactive
‪function set_state_inactive(player)
Definition: visionset_mgr_shared.gsc:127