27 GetMainWidget().SetFlags(
WidgetFlags.IGNOREPOINTER );
28 m_MainWidget = m_MainWidget.FindWidget(
"body" );
29 GetMainWidget().SetFlags(
WidgetFlags.IGNOREPOINTER );
40 RecomputeOpenedContainers();
69 return m_ActiveIndex == m_OpenedContainers.Count() - 1;
74 int index = m_ActiveIndex - 1;
75 int attachment_start_index = -1;
76 int cargo_start_index = -1;
77 int attachment_end_index = -1;
78 int cargo_end_index = -1;
82 attachment_start_index = 0;
84 attachment_end_index++;
90 cargo_start_index = attachment_end_index + 1;
96 if ( m_ActiveIndex > m_OpenedContainers.Count() )
98 m_ActiveIndex = m_OpenedContainers.Count();
103 #ifdef PLATFORM_CONSOLE
104 if ( m_MainWidget.FindAnyWidget(
"Cursor") )
105 m_MainWidget.FindAnyWidget(
"Cursor").Show(
true );
111 if( index.InRange( 0, attachment_end_index ) )
118 SetFocusedContainer(
m_Atts.GetWrapper() );
132 else if( index.InRange( cargo_start_index, cargo_end_index ) )
136 if( index == cargo_start_index )
144 SetFocusedContainer(
m_AttachmentCargos.GetElement( index - 1 - cargo_start_index ) );
154 if( m_MainWidget.FindAnyWidget(
"Cursor") )
155 m_MainWidget.FindAnyWidget(
"Cursor").Show(
false );
162 if( !active_container )
170 if( next_pos > (
y + y_s ) )
184 super.Insert( container, pos, immedUpdate );
189 if (m_ActiveIndex == 0)
191 if (CanTakeToInventory())
194 if (item_in_hands &&
GetGame().
GetPlayer().GetHumanInventory().CanRemoveEntityInHands() && !
GetGame().
GetPlayer().GetInventory().HasInventoryReservation(item_in_hands, null))
198 m_MainWidget.FindAnyWidget(
"Cursor").Show(
false );
199 m_MainWidget.FindAnyWidget(
"hands_preview_root").SetAlpha( 0.7 );
205 else if (GetFocusedContainer())
207 return GetFocusedContainer().TransferItem();
216 if (m_ActiveIndex == 0)
223 item_in_hands.OnRightClick();
227 else if( GetFocusedContainer() )
229 return GetFocusedContainer().SplitItem();
239 if (m_ActiveIndex == 0)
245 if (player && player.GetHumanInventory().CanRemoveEntityInHands() && !player.GetInventory().HasInventoryReservation(item_in_hands, null))
247 bool res = player.PredictiveTakeOrSwapAttachment(item_in_hands);
254 m_MainWidget.FindAnyWidget(
"Cursor").Show(
false);
255 m_MainWidget.FindAnyWidget(
"hands_preview_root").SetAlpha(0.7);
261 else if (GetFocusedContainer())
263 return GetFocusedContainer().EquipItem();
271 super.SetActive(active);
273 EntityAI item_in_hands = player.GetHumanInventory().GetEntityInHands();
277 if( m_MainWidget.FindAnyWidget(
"Cursor" ) )
279 m_MainWidget.FindAnyWidget(
"Cursor" ).Show( active );
285 GetMainWidget().GetScreenPos(
x,
y );
286 PrepareOwnedTooltip( item_in_hands, -1,
y );
292 m_MainWidget.FindAnyWidget(
"hands_preview_root" ).SetAlpha( 0.85 );
294 m_MainWidget.FindAnyWidget(
"hands_preview_root" ).SetAlpha( 0.7 );
300 super.SetLastActive();
302 EntityAI item_in_hands = player.GetHumanInventory().GetEntityInHands();
306 if ( m_ActiveIndex == 0)
308 if( m_MainWidget.FindAnyWidget(
"Cursor" ) )
310 m_MainWidget.FindAnyWidget(
"Cursor" ).Show(
true );
314 GetMainWidget().GetScreenPos(
x,
y );
315 PrepareOwnedTooltip( item_in_hands,
x,
y );
320 m_MainWidget.FindAnyWidget(
"hands_preview_root" ).SetAlpha( 0.85 );
333 ItemBase item =
ItemBase.Cast( player.GetHumanInventory().GetEntityInHands() );
344 ItemBase item =
ItemBase.Cast( player.GetHumanInventory().GetEntityInHands() );
355 return player.GetHumanInventory().GetEntityInHands() == null;
362 if (m_ActiveIndex == 0)
365 ItemBase item_in_hands =
ItemBase.Cast(player.GetHumanInventory().GetEntityInHands());
366 if ( item_in_hands && player.CanDropEntity( item_in_hands ) &&
GetGame().
GetPlayer().GetHumanInventory().CanRemoveEntityInHands() && !player.GetInventory().HasInventoryReservation(item_in_hands, null) )
368 if ( item_in_hands.GetTargetQuantityMax() < item_in_hands.GetQuantity() )
369 item_in_hands.SplitIntoStackMaxClient( null, -1 );
371 player.PhysicalPredictiveDropItem( item_in_hands );
372 m_MainWidget.FindAnyWidget(
"Cursor").Show(
false );
373 m_MainWidget.FindAnyWidget(
"hands_preview_root").SetAlpha( 0.7 );
377 else if ( GetFocusedContainer() )
379 return GetFocusedContainer().TransferItemToVicinity();
387 if(m_ActiveIndex == 0)
390 EntityAI item_in_hands = player.GetHumanInventory().GetEntityInHands();
397 else if( GetFocusedContainer() )
399 return GetFocusedContainer().InspectItem();
406 if(m_ActiveIndex == 0)
413 Inventory.GetInstance().DisableMicromanagement();
423 Inventory.GetInstance().EnableMicromanagement();
429 if( GetFocusedContainer() )
431 return GetFocusedContainer().OnSelectButton();
442 string name = w.GetName();
443 name.Replace(
"PanelWidget",
"Render" );
470 string name = w.GetName();
471 name.Replace(
"PanelWidget",
"Render" );
484 receiver.GetUserData(slots_icon);
502 if( receiver_entity )
508 if( receiver_itemIB && itemIB && receiver_itemIB.
CanBeCombined( itemIB ) )
524 Magazine mag = Magazine.Cast(receiver_item);
529 if( player.GetWeaponManager().CanSwapMagazine( wpn, Magazine.Cast(w_entity) ) )
532 if( w_entity.GetHierarchyRootPlayer() == player )
562 else if( receiver_itemIB.GetInventory().CanAddAttachment( w_entity ) )
578 else if( slot_owner && slot_owner.GetInventory().CanAddAttachment( w_entity ) )
584 else if( receiver_entity.GetInventory().CanAddAttachment( w_entity ) )
628 if ( m_am_entity1 == null || m_am_entity2 == null )
return;
637 m_player.GetWeaponManager().LoadBullet( mag );
646 m_Body.RemoveItem(
m_Atts.GetWrapper() );
649 if( m_am_entity2.GetSlotsCountCorrect() > 0 )
652 m_Atts.InitAttachmentGrid( 1 );
663 if(
m_player.GetWeaponManager().CanAttachMagazine(wpn1, mag1) )
665 m_player.GetWeaponManager().AttachMagazine(mag1);
676 m_player.PredictiveTakeEntityToTargetCargo( m_am_entity1, m_am_entity2 );
685 if(
m_player.GetWeaponManager().CanSwapMagazine(
Weapon_Base.Cast( swapmag1.GetParent() ), Magazine.Cast( swapmag2 ) ) )
687 m_player.GetWeaponManager().SwapMagazine(swapmag2);
691 if(
m_player.GetWeaponManager().CanSwapMagazine(
Weapon_Base.Cast( swapmag2.GetParent() ), Magazine.Cast( swapmag1 )) )
693 m_player.GetWeaponManager().SwapMagazine(swapmag1);
697 if ( !
m_player.PredictiveSwapEntities( m_am_entity1, m_am_entity2 ) &&
m_player.GetHumanInventory().CanAddEntityInHands( m_am_entity1 ) )
699 m_player.PredictiveTakeEntityToHands( m_am_entity1 );
707 m_Body.RemoveItem(
m_Atts.GetWrapper() );
711 if ( m_am_entity2.GetSlotsCountCorrect() > 0 )
714 m_Atts.InitAttachmentGrid( 1 );
720 if (
m_player.GetHumanInventory().CanAddEntityInHands( m_am_entity2 ) )
722 m_player.PredictiveTakeEntityToHands( m_am_entity2 );
729 if ( entity1 && entity2 )
PrintString(
"Showing action menu for " + entity1.GetDisplayName() +
" and " + entity2.GetDisplayName() );
732 m_am_entity1 = entity1;
733 m_am_entity2 = entity2;
740 entity.CombineItemsClient(
ItemBase.Cast( entity2 ) );
744 if ( entity1 == null || entity2 == null )
return;
777 int m_am_pos_x, m_am_pos_y;
782 cmenu.Show( m_am_pos_x, m_am_pos_y );
797 if (!entity1 || !entity2)
return flags;
801 bool skipSwap =
false;
807 if (
Class.
CastTo(parentWpn, swapmag1.GetHierarchyParent()))
810 if (
m_player.GetWeaponManager().CanSwapMagazine(parentWpn,swapmag2))
814 if (
Class.
CastTo(parentWpn, swapmag2.GetHierarchyParent()))
817 if (
m_player.GetWeaponManager().CanSwapMagazine(parentWpn,swapmag1))
828 if (!entity1.IsInherited(
ZombieBase ) && !entity1.IsInherited(
Car ))
841 else if (entity1.GetInventory().CanAddAttachment( entity2 ))
843 if (!entity1.IsInherited(
ZombieBase ) && !entity1.IsInherited(
Car ) && !entity2.IsInherited(
ZombieBase ) && !entity2.IsInherited(
Car ))
848 if (!entity1.GetInventory().HasEntityInInventory(entity2) && entity1.GetInventory().CanAddEntityInCargo( entity2, entity2.GetInventory().GetFlipCargo() )) flags = flags |
InventoryCombinationFlags.
ADD_AS_CARGO;
850 if (entity1 ==
m_player.GetHumanInventory().GetEntityInHands() || entity2 ==
m_player.GetHumanInventory().GetEntityInHands())
854 if (entity1 ==
m_player.GetHumanInventory().GetEntityInHands())
879 PluginRecipesManager plugin_recipes_manager = PluginRecipesManager.Cast(
GetPlugin( PluginRecipesManager ) );
893 m_Body.RemoveItem(
m_Atts.GetWrapper() );
907 m_Body.RemoveItem( att );
916 RecomputeOpenedContainers();
966 m_Body.RemoveItem( cargo );
974 RecomputeOpenedContainers();
980 EntityAI item_in_hands = player.GetHumanInventory().GetEntityInHands();
997 target_cargo =
m_Entity.GetInventory().GetCargo();
998 #ifdef PLATFORM_CONSOLE
1010 target_cargo = target_entity.GetInventory().GetCargo();
1011 #ifdef PLATFORM_CONSOLE
1012 if( cargo.HasItem( item ) )
1022 if( target_cargo && target_entity )
1031 #ifdef PLATFORM_CONSOLE
1036 dst.
SetCargoAuto(target_cargo, item,
x,
y, item.GetInventory().GetFlipCargo());
1040 item.GetInventory().GetCurrentInventoryLocation(src);
1044 #ifdef PLATFORM_CONSOLE
1045 if(dst.
IsValid() && target_entity.GetInventory().LocationCanAddEntity(dst))
1047 if( c_x >
x && c_y >
y && target_entity.GetInventory().LocationCanAddEntity(dst))
1052 Icon icon = cargo.GetIcon( item );
1056 if( w && w.FindAnyWidget(
"Cursor") )
1074 if( !item || !item_in_hands )
1083 if( item_in_hands.GetInventory().GetCargo() )
1085 c_x = item_in_hands.GetInventory().GetCargo().GetHeight();
1086 c_y = item_in_hands.GetInventory().GetCargo().GetWidth();
1089 if( c_x >
x && c_y >
y && item_in_hands.GetInventory().CanAddEntityInCargoEx( item, 0,
x,
y, item.GetInventory().GetFlipCargo() ) )
1101 if( w.FindAnyWidget(
"Cursor") )
1103 w.FindAnyWidget(
"Cursor").SetColor( color );
1107 string name = w.GetName();
1108 name.Replace(
"PanelWidget",
"Cursor" );
1109 w.FindAnyWidget(
name ).SetColor( color );
1122 receiver.GetUserData(slots_icon);
1137 float stack_max = item_base.GetTargetQuantityMax(slot_id);
1140 if( !item.GetInventory().CanRemoveEntity() || !player.CanManipulateInventory() )
1148 if( player.GetWeaponManager().CanAttachMagazine( wpn, mag ) )
1150 player.GetWeaponManager().AttachMagazine( mag );
1152 else if(player.GetWeaponManager().CanSwapMagazine( wpn, mag ))
1154 player.GetWeaponManager().SwapMagazine( mag );
1157 else if( receiver_item )
1159 if( receiver_item != item )
1161 if( (
ItemBase.Cast( receiver_item ) ).CanBeCombined(
ItemBase.Cast( item ) ) )
1163 (
ItemBase.Cast( receiver_item ) ).CombineItemsClient(
ItemBase.Cast( item ) );
1167 if( !receiver_item.GetInventory().CanRemoveEntity() )
1173 else if( slot_owner && slot_owner.GetInventory().CanAddAttachmentEx( item, slot_id ) )
1175 if( stack_max == 0 || stack_max >= item_base.GetQuantity() )
1177 player.PredictiveTakeEntityToTargetAttachmentEx(slot_owner, item, slot_id);
1179 else if( stack_max != 0 && stack_max < item_base.GetQuantity() )
1181 item_base.SplitIntoStackMaxClient( slot_owner, slot_id );
1184 else if( slot_owner && slot_owner.GetInventory().CanAddAttachment( item ) )
1186 if( stack_max == 0 || stack_max >= item_base.GetQuantity() )
1188 player.PredictiveTakeEntityToTargetAttachment(slot_owner, item);
1190 else if( stack_max != 0 && stack_max < item_base.GetQuantity() )
1192 item_base.SplitIntoStackMaxClient( slot_owner, -1 );
1195 else if( target_att_entity.GetInventory().CanAddAttachment( item ) )
1197 if( stack_max == 0 || stack_max >= item_base.GetQuantity() )
1199 player.PredictiveTakeEntityToTargetAttachment(target_att_entity, item);
1201 else if( stack_max != 0 && stack_max < item_base.GetQuantity() )
1203 item_base.SplitIntoStackMaxClient( target_att_entity, -1 );
1206 else if( ( target_att_entity.GetInventory().CanAddEntityInCargo( item, item.GetInventory().GetFlipCargo() ) && ( !player.GetInventory().HasEntityInInventory( item ) || !
m_Entity.GetInventory().HasEntityInCargo( item )) ) || player.GetHumanInventory().HasEntityInHands( item ) )
1225 if( entity.GetSlotsCountCorrect() > 0 )
1228 m_Atts.InitAttachmentGrid( 1 );
1239 if( entity.GetInventory().GetCargo() )
1260 bool hideCargo =
m_Entity.GetInventory().IsInventoryLockedForLockType( HIDE_INV_FROM_SCRIPT ) || !
m_Entity.CanDisplayCargo() || m_ForcedHide;
1273 RecomputeOpenedContainers();
1280 for (
int i = 0; i < m_Body.Count(); i++)
1282 m_Body.Get( i ).OnShow();
1295 if( item.GetInventory().GetAttachmentSlotsCount() > 0 )
1307 Inventory.GetInstance().UpdateConsoleToolbar();
1310 if( item.GetInventory().GetCargo() )
1314 cont.GetRootWidget().SetSort( sort );
1315 cont.SetEntity( item );
1322 Inventory.GetInstance().UpdateConsoleToolbar();
1330 cont.ShowFalseCargoHeader(
false);
1337 cont.SetAlternateFalseTextHeaderWidget(null);
1340 RecomputeOpenedContainers();
1350 m_Body.RemoveItem( old_cont );
1355 Inventory.GetInstance().UpdateConsoleToolbar();
1363 m_Body.RemoveItem( old_att_cont );
1364 delete old_att_cont;
1367 Inventory.GetInstance().UpdateConsoleToolbar();
1369 RecomputeOpenedContainers();
1374 super.UpdateInterval();
1380 bool hideCargo =
m_Entity.GetInventory().IsInventoryLockedForLockType( HIDE_INV_FROM_SCRIPT ) || !
m_Entity.CanDisplayCargo() || m_ForcedHide;
1417 for (
int i = 0; i < m_Body.Count(); i++ )
1419 m_Body.Get( i ).OnShow();
1425 string name = w.GetName();
1426 name.Replace(
"PanelWidget",
"Render");
1438 #ifdef DIAG_DEVELOPER
1439 if (
g_Game.IsLeftCtrlDown())
1440 ShowActionMenu(selectedItem);
1442 if (CanSplitEx(selectedItem))
1444 selectedItem.OnRightClick();
1455 if (
g_Game.IsLeftCtrlDown())
1457 if (controlledPlayer.CanDropEntity(selectedItem))
1459 if (selectedItem.GetTargetQuantityMax() < selectedItem.GetQuantity())
1460 selectedItem.SplitIntoStackMaxClient(null, -1);
1462 controlledPlayer.PhysicalPredictiveDropItem(selectedItem);
1466 bool draggable = !controlledPlayer.GetInventory().HasInventoryReservation(selectedItem, null ) && !controlledPlayer.GetInventory().IsInventoryLocked() && selectedItem.GetInventory().CanRemoveEntity() && !controlledPlayer.IsItemsToDelete();
1484 string name = w.GetName();
1485 name.Replace(
"PanelWidget",
"Render");
1496 EntityAI itemInHands = controlledPlayer.GetHumanInventory().GetEntityInHands();
1498 if (!item.GetInventory().CanRemoveEntity())
1501 if (controlledPlayer.GetInventory().HasEntityInInventory(item) && controlledPlayer.GetHumanInventory().CanAddEntityInHands(item))
1503 controlledPlayer.PredictiveTakeEntityToHands(item);
1507 if (controlledPlayer.GetInventory().CanAddEntityToInventory(item) && controlledPlayer.GetHumanInventory().CanRemoveEntityInHands())
1513 if (controlledPlayer.GetHumanInventory().CanAddEntityInHands(item))
1514 controlledPlayer.PredictiveTakeEntityToHands(item);
1521 name.Replace(
"PanelWidget",
"Temperature");
1522 w.FindAnyWidget(
name).Show(
false);
1535 if( item_in_hands && item_in_hands.GetCompEM() )
1539 bool show_electricity_icon = item_in_hands.GetCompEM().HasElectricityIcon();
1540 GetRootWidget().FindAnyWidget(
"electricity" ).Show( show_electricity_icon );
1543 if( GetRootWidget().
FindAnyWidget(
"electricity_can_work" ) )
1545 bool show_electricity_can_work_icon = item_in_hands.GetCompEM().CanWork() && !item_in_hands.IsRuined();
1546 GetRootWidget().FindAnyWidget(
"electricity_can_work" ).Show( show_electricity_can_work_icon );
1551 GetRootWidget().FindAnyWidget(
"electricity" ).Show(
false );
1560 for (i = 0; i < m_Body.Count(); i++)
1562 m_Body.Get( i ).OnHide();
1568 for (i = 0; i < m_Body.Count(); i++)
1570 m_Body.Get( i ).OnShow();
1575 w.FindAnyWidget(
"opened").Show(
m_Hidden);
1576 w.FindAnyWidget(
"closed").Show(!
m_Hidden);
1586 RecomputeOpenedContainers();
1595 RecomputeOpenedContainers();
void Inventory(LayoutHolder parent)
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
FindInventoryLocationType
flags for searching locations in inventory
PluginBase GetPlugin(typename plugin_type)
ref Widget m_RootWidget[MAX_SIMULTANIOUS_PLAYERS]
bool CanSetActionFromInventory(ItemBase mainItem, ItemBase targetItem)
AttachmentsWrapper GetWrapper()
TextWidget GetFalseHeaderTextWidget()
void InitAttachmentGrid(int att_row_index)
void ShowFalseAttachmentsHeader(bool show)
proto native DayZPlayer GetPlayer()
proto native int GetItemCount()
proto native int GetWidth()
proto native int GetHeight()
represents base for cargo storage for entities
Super root of all classes in Enforce script.
void SetColor(Widget w, int color)
static ColorManager GetInstance()
override EntityAI GetFocusedItem()
override float GetFocusedContainerHeight(bool contents=false)
override float GetFocusedContainerYScreenPos(bool contents=false)
void CargoContainer(LayoutHolder parent, bool is_attachment=false)
static bool CanSwapEntitiesEx(notnull EntityAI item1, notnull EntityAI item2)
script counterpart to engine's class Inventory
override void OnDropReceivedFromHeader(Widget w, int x, int y, Widget receiver)
ref map< EntityAI, ref CargoContainer > m_AttachmentCargos
void DropReceived(Widget w, int x, int y, CargoContainer cargo)
override bool InspectItem()
ref map< EntityAI, AttachmentsWrapper > m_AttachmentAttachmentsContainers
void ShowAtt(EntityAI entity)
void ScrollToActiveContainer(Container active_container)
ref map< EntityAI, ref Attachments > m_AttachmentAttachments
override bool TransferItem()
void AttachmentRemoved(EntityAI item, string slot, EntityAI parent)
void DoubleClick(Widget w, int x, int y, int button)
void OnPerformCombination(int combinationFlags)
int GetRecipeCount(bool recipe_anywhere, EntityAI entity1, EntityAI entity2)
void DraggingOverHeader2(Widget w, int x, int y, Widget receiver)
ref HandsHeader m_CollapsibleHeader
override bool OnSelectButton()
override bool TransferItemToVicinity()
EntityAI GetItemPreviewItem(Widget w)
void ShowActionMenuCombine(EntityAI entity1, EntityAI entity2, int combinationFlags)
ScrollWidget m_ScrollWidget
override bool IsLastIndex()
override void SetLayoutName()
override void SetLastActive()
ref HandsPreview m_HandsPreview
override void UpdateInterval()
void AttachmentAdded(EntityAI item, string slot, EntityAI parent)
bool DraggingOverGrid(Widget w, int x, int y, Widget reciever, CargoContainer cargo)
override bool EquipItem()
override void DraggingOverHeader(Widget w, int x, int y, Widget receiver)
override bool IsItemWithQuantityActive()
void TakeAsAttachment(Widget w, Widget receiver)
void OnDropReceivedFromHeader2(Widget w, int x, int y, Widget receiver)
void HandsContainer(LayoutHolder parent)
override Header GetHeader()
override void UnfocusGrid()
void CollapseButtonOnMouseButtonDown(Widget w)
ref CargoContainer m_CargoGrid
int GetCombinationFlags(EntityAI entity1, EntityAI entity2)
override void UnfocusAll()
override void Insert(LayoutHolder container, int pos=-1, bool immedUpdate=true)
void MouseClick2(Widget w, int x, int y, int button)
override void SetActive(bool active)
override bool SplitItem()
override bool IsItemActive()
ref array< int > m_AttachmentSlotsSorted
static const int LOAD_CHAMBER
static const int ADD_AS_CARGO
static const int TAKE_TO_HANDS
static const int SET_ACTION
static const int ADD_AS_ATTACHMENT
static const int RECIPE_ANYWHERE
static const int COMBINE_QUANTITY2
proto native bool IsValid()
verify current set inventory location
proto native void SetCargoAuto(notnull CargoBase cargo, EntityAI e, int row, int col, bool flip)
based on Cargo.IsProxyCargo uses SetProxyCargo or SetCargo respectively
proto native bool CompareLocationOnly(notnull InventoryLocation other)
proto native bool GetFlip()
returns flip status of cargo
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
static proto native owned string GetSlotName(int id)
converts slot_id to string
provides access to slot configuration
override bool CanBeCombined(EntityAI other_item, bool reservation_check=true, bool stack_max_limit=false)
override bool CanBeSplit()
Widget GetCenterDropzone()
void ShowSourceDropzone(EntityAI item)
void SetHandsPreview(HandsPreview hansd_preview)
EntityAI GetSelectedItem()
Widget GetRightDropzone()
bool IsMicromanagmentMode()
void SetWidgetDraggable(Widget w, bool draggable)
void SetIsDragging(bool is_dragging)
static ItemManager GetInstance()
static int HasItemQuantity(notnull EntityAI item)
static void TakeOrSplitToInventoryLocation(notnull PlayerBase player, notnull InventoryLocation dst)
static void TakeOrSplitToInventory(notnull PlayerBase player, notnull EntityAI target, notnull EntityAI item)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
class array< Class T > PrintString
proto void GetMousePos(out int x, out int y)