‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_weapon_customization_icon.csc
Go to the documentation of this file.
1 #using scripts\core\_multi_extracam;
2 #using scripts\shared\util_shared;
3 #using scripts\codescripts\struct;
4 #using scripts\shared\animation_shared;
5 #using scripts\shared\filter_shared;
6 #using scripts\shared\scene_shared;
7 #using scripts\shared\system_shared;
8 
9 #insert scripts\shared\shared.gsh;
10 
11 #namespace weapon_customization_icon;
12 
13 ‪REGISTER_SYSTEM( "weapon_customization_icon", &‪__init__, undefined )
14 
15 // SETUP
18 function ‪__init__()
19 {
20  level.extra_cam_wc_paintjob_icon = [];
21  level.extra_cam_wc_variant_icon = [];
22 
23  level.extra_cam_render_wc_paintjobicon_func_callback = &‪process_wc_paintjobicon_extracam_request;
24  level.extra_cam_render_wc_varianticon_func_callback = &‪process_wc_varianticon_extracam_request;
25  level.weaponCustomizationIconSetup = &‪wc_icon_setup;
26 }
27 
28 function ‪wc_icon_setup( localClientNum )
29 {
30  level.extra_cam_wc_paintjob_icon[ localClientNum ] = SpawnStruct();
31  level.extra_cam_wc_variant_icon[ localClientNum ] = SpawnStruct();
32  level thread ‪update_wc_icon_extracam( localClientNum );
33 }
34 
35 function ‪update_wc_icon_extracam( localClientNum )
36 {
37  level endon( "disconnect" );
38 
39  while ( true )
40  {
41  level waittill( "process_wc_icon_extracam_" + localClientNum, extracam_data_struct );
42  ‪setup_wc_weapon_model( localClientNum, extracam_data_struct );
43  ‪setup_wc_extracam_settings( localClientNum, extracam_data_struct );
44  }
45 }
46 
47 function ‪wait_for_extracam_close( localClientNum, camera_ent, extracam_data_struct )
48 {
49  level waittill( "render_complete_" + localClientNum + "_" + extracam_data_struct.extraCamIndex );
50  ‪multi_extracam::extracam_reset_index( localClientNum, extracam_data_struct.extraCamIndex );
51  if( IsDefined( extracam_data_struct.weapon_script_model ) )
52  {
53  extracam_data_struct.weapon_script_model delete();
54  }
55 }
56 
57 function ‪GetXcam( weapon_name, camera )
58 {
59  xcam = GetWeaponXCam( weapon_name, camera );
60 
61  if( !IsDefined( xcam ) )
62  {
63  xcam = GetWeaponXCam( GetWeapon( "ar_damage" ), camera );
64  }
65 
66  return xcam;
67 }
68 
69 function ‪setup_wc_extracam_settings( localClientNum, extracam_data_struct )
70 {
71  assert( isdefined( extracam_data_struct.jobIndex ) );
72 
73  ‪DEFAULT( level.camera_ents, [] );
74 
75  initializedExtracam = false;
76  camera_ent = (isDefined(level.camera_ents[localClientNum]) ? level.camera_ents[localClientNum][extracam_data_struct.extraCamIndex] : undefined);
77  if( !isdefined( camera_ent ) )
78  {
79  initializedExtracam = true;
80  if ( isdefined( ‪struct::get( "weapon_icon_staging_camera" ) ) )
81  {
82  camera_ent = ‪multi_extracam::extracam_init_index( localClientNum, "weapon_icon_staging_camera", extracam_data_struct.extraCamIndex);
83  }
84  else
85  {
86  camera_ent = ‪multi_extracam::extracam_init_item( localClientNum, ‪get_safehouse_position_struct(), extracam_data_struct.extraCamIndex);
87  }
88  }
89 
90  assert( isdefined( camera_ent ) );
91 
92  if ( extracam_data_struct.loadoutSlot == "default_camo_render" )
93  {
94  extracam_data_struct.xcam = "ui_cam_icon_camo_export";
95  //extracam_data_struct.xcam = GetXcam( extracam_data_struct.current_weapon, "cam_icon_weapon" );
96  extracam_data_struct.subXCam = "cam_icon";
97  }
98  else
99  {
100  extracam_data_struct.xcam = ‪GetXcam( extracam_data_struct.current_weapon, "cam_icon_weapon" );
101  extracam_data_struct.subXCam = "cam_icon";
102  }
103 
104  position = extracam_data_struct.weapon_position;
105  camera_ent PlayExtraCamXCam( extracam_data_struct.xcam, 0, extracam_data_struct.subXCam, extracam_data_struct.notetrack, position.origin, position.angles, extracam_data_struct.weapon_script_model, position.origin, position.angles );
106 
107  while( !( extracam_data_struct.weapon_script_model isStreamed() ) )
108  {
110  }
111 
112  if ( extracam_data_struct.loadoutSlot == "default_camo_render" )
113  {
114  wait 0.5; // not paintshops on these renders so just wait an arbitrary amount of time to make sure we're all pretty
115  }
116  else
117  {
118  level ‪util::waittill_notify_or_timeout( "paintshop_ready_" + extracam_data_struct.jobIndex, 5 );
119  }
120 
121  setExtraCamRenderReady( extracam_data_struct.jobIndex );
122 
123  extracam_data_struct.jobIndex = undefined;
124 
125  if( initializedExtracam )
126  {
127  level thread ‪wait_for_extracam_close( localClientNum, camera_ent, extracam_data_struct );
128  }
129 }
130 
131 function ‪set_wc_icon_weapon_options( weapon_options_param, extracam_data_struct )
132 {
133  weapon_options = strtok( weapon_options_param, "," );
134 
135  if( IsDefined( weapon_options ) && IsDefined( extracam_data_struct.weapon_script_model ) )
136  {
137  extracam_data_struct.weapon_script_model SetWeaponRenderOptions( int( weapon_options[0] ), int( weapon_options[1] ), false, false, int( weapon_options[2] ), extracam_data_struct.paintjobSlot, extracam_data_struct.paintjobIndex, true, extracam_data_struct.isFilesharePreview );
138  }
139 }
140 
141 function ‪spawn_weapon_model( localClientNum, origin, angles )
142 {
143  weapon_model = ‪Spawn( localClientNum, origin, "script_model" );
144 
145  if( IsDefined( angles ) )
146  {
147  weapon_model.angles = angles;
148  }
149 
150  weapon_model SetHighDetail();
151 
152  return weapon_model;
153 }
154 
155 function ‪set_wc_icon_cosmetic_variants( acv_param, weapon_full_name, extracam_data_struct )
156 {
157  acv_indexes = strtok( acv_param, "," );
158 
159  for( i = 0; i + 1 < acv_indexes.size; i += 2 )
160  {
161  extracam_data_struct.weapon_script_model SetAttachmentCosmeticVariantIndex( weapon_full_name, acv_indexes[i], int( acv_indexes[i+1] ) );
162  }
163 }
164 
165 // A hack to work around the missing icon staging rooms in the safehouses
167 {
168  position = SpawnStruct();
169  position.angles = ( 0, 0, 0 );
170 
171  switch ( ToLower( GetDvarString( "mapname" ) ) )
172  {
173  case "cp_sh_cairo":
174  position.origin = ( -527, 1569, -25 );
175  break;
176 
177  case "cp_sh_singapore":
178  position.origin = ( -1215, 2464, 190 );
179  break;
180 
181  // case "cp_sh_mobile":
182  default:
183  position.origin = ( 191, 113, -2550 );
184  break;
185  }
186 
187  return position;
188 }
189 
190 function ‪setup_wc_weapon_model( localClientNum, extracam_data_struct )
191 {
192  base_weapon_slot = extracam_data_struct.loadoutSlot;
193  weapon_full_name = extracam_data_struct.weaponPlusAttachments;
194  weapon_options_param = extracam_data_struct.weaponOptions;
195  acv_param = extracam_data_struct.attachmentVariantString;
196 
197  if( IsDefined( weapon_full_name ) )
198  {
199  position = ‪struct::get( "weapon_icon_staging" );
200  if ( !IsDefined( position ) )
201  {
203  }
204 
205  if( !IsDefined( extracam_data_struct.weapon_script_model ) )
206  {
207  extracam_data_struct.weapon_script_model = ‪spawn_weapon_model( localClientNum, position.origin, position.angles );
208  }
209 
210  extracam_data_struct.current_weapon = GetWeaponWithAttachments( weapon_full_name );
211  if( isDefined( extracam_data_struct.current_weapon.frontendmodel ) )
212  {
213  extracam_data_struct.weapon_script_model UseWeaponModel( extracam_data_struct.current_weapon, extracam_data_struct.current_weapon.frontendmodel );
214  }
215  else
216  {
217  extracam_data_struct.weapon_script_model UseWeaponModel( extracam_data_struct.current_weapon );
218  }
219  extracam_data_struct.weapon_position = position;
220 
221  if( IsDefined( acv_param ) && acv_param != "none" )
222  {
223  ‪set_wc_icon_cosmetic_variants( acv_param, weapon_full_name, extracam_data_struct );
224  }
225 
226  if( IsDefined( weapon_options_param ) && weapon_options_param != "none" )
227  {
228  ‪set_wc_icon_weapon_options( weapon_options_param, extracam_data_struct );
229  }
230  }
231 }
232 
233 function ‪process_wc_paintjobicon_extracam_request( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview )
234 {
235  level.extra_cam_wc_paintjob_icon[ localClientNum ].jobIndex = jobIndex;
236  level.extra_cam_wc_paintjob_icon[ localClientNum ].extraCamIndex = extraCamIndex;
237  level.extra_cam_wc_paintjob_icon[ localClientNum ].attachmentVariantString = attachmentVariantString;
238  level.extra_cam_wc_paintjob_icon[ localClientNum ].weaponOptions = weaponOptions;
239  level.extra_cam_wc_paintjob_icon[ localClientNum ].weaponPlusAttachments = weaponPlusAttachments;
240  level.extra_cam_wc_paintjob_icon[ localClientNum ].loadoutSlot = loadoutSlot;
241  level.extra_cam_wc_paintjob_icon[ localClientNum ].paintjobIndex = paintjobIndex;
242  level.extra_cam_wc_paintjob_icon[ localClientNum ].paintjobSlot = paintjobSlot;
243  level.extra_cam_wc_paintjob_icon[ localClientNum ].notetrack = "paintjobpreview";
244  level.extra_cam_wc_paintjob_icon[ localClientNum ].isFilesharePreview = isFilesharePreview;
245 
246  level notify( "process_wc_icon_extracam_" + localClientNum, level.extra_cam_wc_paintjob_icon[ localClientNum ] );
247 }
248 
249 function ‪process_wc_varianticon_extracam_request( localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview )
250 {
251  level.extra_cam_wc_variant_icon[ localClientNum ].jobIndex = jobIndex;
252  level.extra_cam_wc_variant_icon[ localClientNum ].extraCamIndex = extraCamIndex;
253  level.extra_cam_wc_variant_icon[ localClientNum ].attachmentVariantString = attachmentVariantString;
254  level.extra_cam_wc_variant_icon[ localClientNum ].weaponOptions = weaponOptions;
255  level.extra_cam_wc_variant_icon[ localClientNum ].weaponPlusAttachments = weaponPlusAttachments;
256  level.extra_cam_wc_variant_icon[ localClientNum ].loadoutSlot = loadoutSlot;
257  level.extra_cam_wc_variant_icon[ localClientNum ].paintjobIndex = paintjobIndex;
258  level.extra_cam_wc_variant_icon[ localClientNum ].paintjobSlot = paintjobSlot;
259  level.extra_cam_wc_variant_icon[ localClientNum ].notetrack = "variantpreview";
260  level.extra_cam_wc_variant_icon[ localClientNum ].isFilesharePreview = isFilesharePreview;
261 
262  level notify( "process_wc_icon_extracam_" + localClientNum, level.extra_cam_wc_variant_icon[ localClientNum ] );
263 }
‪__init__
‪function __init__()
Definition: _weapon_customization_icon.csc:18
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪wc_icon_setup
‪function wc_icon_setup(localClientNum)
Definition: _weapon_customization_icon.csc:28
‪process_wc_varianticon_extracam_request
‪function process_wc_varianticon_extracam_request(localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview)
Definition: _weapon_customization_icon.csc:249
‪setup_wc_extracam_settings
‪function setup_wc_extracam_settings(localClientNum, extracam_data_struct)
Definition: _weapon_customization_icon.csc:69
‪DEFAULT
‪#define DEFAULT(__var, __default)
Definition: shared.gsh:270
‪extracam_init_item
‪function extracam_init_item(localClientNum, copy_ent, index)
Definition: _multi_extracam.csc:34
‪waittill_notify_or_timeout
‪function waittill_notify_or_timeout(msg, timer)
Definition: util_shared.csc:473
‪extracam_reset_index
‪function extracam_reset_index(localClientNum, index)
Definition: _multi_extracam.csc:13
‪setup_wc_weapon_model
‪function setup_wc_weapon_model(localClientNum, extracam_data_struct)
Definition: _weapon_customization_icon.csc:190
‪extracam_init_index
‪function extracam_init_index(localClientNum, target, index)
Definition: _multi_extracam.csc:28
‪process_wc_paintjobicon_extracam_request
‪function process_wc_paintjobicon_extracam_request(localClientNum, extraCamIndex, jobIndex, attachmentVariantString, weaponOptions, weaponPlusAttachments, loadoutSlot, paintjobIndex, paintjobSlot, isFilesharePreview)
Definition: _weapon_customization_icon.csc:233
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪set_wc_icon_cosmetic_variants
‪function set_wc_icon_cosmetic_variants(acv_param, weapon_full_name, extracam_data_struct)
Definition: _weapon_customization_icon.csc:155
‪Spawn
‪function Spawn(parent, onDeathCallback)
Definition: _flak_drone.gsc:427
‪wait_for_extracam_close
‪function wait_for_extracam_close(localClientNum, camera_ent, extracam_data_struct)
Definition: _weapon_customization_icon.csc:47
‪GetXcam
‪function GetXcam(weapon_name, camera)
Definition: _weapon_customization_icon.csc:57
‪get_safehouse_position_struct
‪function get_safehouse_position_struct()
Definition: _weapon_customization_icon.csc:166
‪set_wc_icon_weapon_options
‪function set_wc_icon_weapon_options(weapon_options_param, extracam_data_struct)
Definition: _weapon_customization_icon.csc:131
‪update_wc_icon_extracam
‪function update_wc_icon_extracam(localClientNum)
Definition: _weapon_customization_icon.csc:35
‪WAIT_CLIENT_FRAME
‪#define WAIT_CLIENT_FRAME
Definition: shared.gsh:266
‪spawn_weapon_model
‪function spawn_weapon_model(localClientNum, origin, angles)
Definition: _weapon_customization_icon.csc:141