1class ItemActionsWidget
extends ScriptedWidgetEventHandler
10 protected IngameHud
m_Hud;
14 protected int m_InteractActionsNum;
15 protected int m_ContinuousInteractActionsNum;
16 protected int m_ItemActionsNum;
17 protected int m_ContinuousItemActionsNum;
18 protected bool m_HealthEnabled;
19 protected bool m_QuantityEnabled;
21 protected ref WidgetFadeTimer m_FadeTimer;
22 protected bool m_Faded;
23 protected bool m_Hidden;
24 protected bool m_ItemFrozen;
27 protected Widget m_ItemLeft;
30 protected float m_MaxWidthChild;
31 protected float m_RootWidth;
32 protected float m_RootHeight;
34 void ItemActionsWidget()
37 m_ContinuousInteract = null;
42 m_FadeTimer =
new WidgetFadeTimer;
45 m_HealthEnabled =
true;
46 m_QuantityEnabled =
true;
52 m_UseActionWrapper =
GetUApi().GetInputByID(UAAction).GetPersistentWrapper();
59 void ~ItemActionsWidget()
65 void SetInteractXboxIcon(
string imageset_name,
string image_name) {};
66 void SetContinuousInteractXboxIcon(
string imageset_name,
string image_name) {};
67 void SetSingleXboxIcon(
string imageset_name,
string image_name) {};
68 void SetContinuousXboxIcon(
string imageset_name,
string image_name) {};
69 protected void SetXboxIcon(
string name,
string imageset_name,
string image_name) {};
72 protected void SetControllerIcon(
string pWidgetName,
string pInputName)
78 protected void ShowXboxHidePCIcons(
string widget,
bool show_xbox_icon)
80 m_Root.FindAnyWidget(widget +
"_btn_icon_xbox").Show(show_xbox_icon);
81 m_Root.FindAnyWidget(widget +
"_btn_icon").Show(!show_xbox_icon);
90 m_ItemLeft = w.FindAnyWidget(
"ia_item_left");
93 UpdateControllerInputIcons();
94 UpdatePCIconsVisibility();
99 #ifdef PLATFORM_CONSOLE
100 UpdateControllerInputIcons();
106 UpdatePCIconsVisibility();
110 private void UpdateControllerInputIcons()
112 SetControllerIcon(
"ia_interact",
"UAAction");
113 SetControllerIcon(
"ia_continuous_interact",
"UAAction");
114 SetControllerIcon(
"ia_single",
"UADefaultAction");
115 SetControllerIcon(
"ia_continuous",
"UADefaultAction");
119 private void UpdatePCIconsVisibility()
121 bool showConsoleIcons =
false;
122 #ifdef PLATFORM_CONSOLE
123 showConsoleIcons =
GetGame().GetInput().GetCurrentInputDevice() ==
EInputDeviceType.CONTROLLER || !
GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer();
126 ShowXboxHidePCIcons(
"ia_interact", showConsoleIcons);
127 ShowXboxHidePCIcons(
"ia_continuous_interact", showConsoleIcons);
128 ShowXboxHidePCIcons(
"ia_single", showConsoleIcons);
129 ShowXboxHidePCIcons(
"ia_continuous", showConsoleIcons);
132 protected void BuildCursor()
134 m_ItemFrozen =
false;
136 int quantityType = 0;
139 float quantityCurrent = -1.0;
142 health = GetItemHealth();
143 m_ItemFrozen = GetItemFrozen();
144 SetItemHealth(health,
"ia_item",
"ia_item_health_mark", m_HealthEnabled);
148 if (m_EntityInHands && m_EntityInHands.IsWeapon())
150 SetWeaponQuantity(0, 0,
"ia_item",
"ia_item_quantity_pb",
"ia_item_quantity_text", m_QuantityEnabled);
151 SetWeaponModeAndZeroing(
"ia_item_subdesc",
"ia_item_subdesc_up",
"ia_item_subdesc_down",
true);
154 else if (m_EntityInHands && m_EntityInHands.IsTransmitter())
156 SetRadioFrequency(GetRadioFrequency(),
"ia_item_subdesc",
"ia_item_subdesc_up",
"ia_item_subdesc_down", m_QuantityEnabled);
158 SetItemQuantity(quantityType, quantityCurrent,
quantityMin,
quantityMax,
"ia_item",
"ia_item_quantity_pb",
"ia_item_quantity_text",
true);
163 SetItemQuantity(quantityType, quantityCurrent,
quantityMin,
quantityMax,
"ia_item",
"ia_item_quantity_pb",
"ia_item_quantity_text", m_QuantityEnabled);
164 SetWeaponModeAndZeroing(
"ia_item_subdesc",
"",
"",
false);
167 SetItemDesc(m_EntityInHands, GetItemDesc(m_EntityInHands),
"ia_item",
"ia_item_desc");
168 SetInteractActionIcon(
"ia_interact",
"ia_interact_icon_frame",
"ia_interact_btn_inner_icon",
"ia_interact_btn_text");
169 SetActionWidget(m_Interact, GetActionDesc(m_Interact),
"ia_interact",
"ia_interact_action_name");
171 SetInteractActionIcon(
"ia_continuous_interact",
"ia_continuous_interact_icon_frame",
"ia_continuous_interact_btn_inner_icon",
"ia_continuous_interact_btn_text");
172 SetActionWidget(m_ContinuousInteract, GetActionDesc(m_ContinuousInteract),
"ia_continuous_interact",
"ia_continuous_interact_action_name");
174 SetActionWidget(m_Single, GetActionDesc(m_Single),
"ia_single",
"ia_single_action_name");
175 SetActionWidget(m_Continuous, GetActionDesc(m_Continuous),
"ia_continuous",
"ia_continuous_action_name");
176 SetMultipleInteractAction(
"ia_interact_mlt_wrapper");
177 SetMultipleContinuousInteractAction(
"ia_continuous_interact_mlt_wrapper");
178 SetMultipleItemAction(
"ia_single_mlt_wrapper");
179 SetMultipleContinuousItemAction(
"ia_continuous_mlt_wrapper");
182 protected void Update()
206 if ((m_EntityInHands || !m_Hidden) &&
GetGame().GetUIManager().GetMenu() == null)
208 CheckForActionWidgetOverrides();
210 CheckRefresherFlagVisibility();
216 m_MaxWidthChild = 200;
236 m_ContinuousInteract = null;
249 m_Continuous =
m_AM.GetPossibleAction(ContinuousDefaultActionInput);
251 if (!m_Interact && !m_ContinuousInteract && !m_Continuous && !m_Single)
257 m_ContinuousItemActionsNum =
m_AM.GetPossibleActionCount(ContinuousDefaultActionInput);
260 protected void GetEntityInHands()
268 m_EntityInHands = eai;
272 m_EntityInHands = null;
276 protected string GetActionDesc(
ActionBase action)
278 if (action && action.
GetText())
284 protected string GetItemDesc(
EntityAI entity)
287 return m_EntityInHands.GetDisplayName();
292 protected bool GetItemFrozen()
294 return m_EntityInHands && m_EntityInHands.GetIsFrozen();
297 protected int GetItemHealth()
300 return m_EntityInHands.GetHealthLevel();
305 protected void GetItemQuantity(out
int q_type, out
float q_cur, out
int q_min, out
int q_max)
317 q_cur = (q_cur / q_max);
331 protected string GetRadioFrequency()
334 if (
Class.CastTo(trans, m_EntityInHands))
336 return trans.GetTunedFrequency().ToString();
343 protected void SetItemDesc(
EntityAI entity,
string descText,
string itemWidget,
string descWidget)
347 widget =
m_Root.FindAnyWidget(itemWidget);
349 if (entity &&
m_Player && !
m_Player.GetItemAccessor().IsItemInHandsHidden())
353 Class.CastTo(itemName, widget.FindAnyWidget(descWidget));
354 itemName.SetText(descText);
361 protected void SetItemHealth(
int health,
string itemWidget,
string healthWidget,
bool enabled)
365 widget =
m_Root.FindAnyWidget(itemWidget);
369 ImageWidget healthMark;
370 Class.CastTo(healthMark, widget.FindAnyWidget(healthWidget));
374 healthMark.SetColor(
Colors.COLOR_FROZEN);
375 healthMark.SetAlpha(0.5);
376 healthMark.GetParent().Show(
true);
383 healthMark.GetParent().Show(
false);
386 healthMark.SetColor(
Colors.COLOR_PRISTINE);
387 healthMark.SetAlpha(0.5);
388 healthMark.GetParent().Show(
true);
391 healthMark.SetColor(
Colors.COLOR_WORN);
392 healthMark.SetAlpha(0.5);
393 healthMark.GetParent().Show(
true);
396 healthMark.SetColor(
Colors.COLOR_DAMAGED);
397 healthMark.SetAlpha(0.5);
398 healthMark.GetParent().Show(
true);
401 healthMark.SetColor(
Colors.COLOR_BADLY_DAMAGED);
402 healthMark.SetAlpha(0.5);
403 healthMark.GetParent().Show(
true);
406 healthMark.SetColor(
Colors.COLOR_RUINED);
407 healthMark.SetAlpha(0.5);
408 healthMark.GetParent().Show(
true);
411 healthMark.SetColor(0x00FFFFFF);
412 healthMark.SetAlpha(0.5);
413 healthMark.GetParent().Show(
true);
424 protected void SetItemQuantity(
int type,
float current,
int min,
int max,
string itemWidget,
string quantityPBWidget,
string quantityTextWidget,
bool enabled)
428 widget =
m_Root.FindAnyWidget(itemWidget);
432 ProgressBarWidget progressBar;
433 TextWidget textWidget;
434 Class.CastTo(progressBar, widget.FindAnyWidget(quantityPBWidget));
435 Class.CastTo(textWidget, widget.FindAnyWidget(quantityTextWidget));
441 progressBar.Show(
false);
442 textWidget.Show(
false);
443 textWidget.GetParent().Show(
false);
446 if (max > 1 || current > 1)
448 string qty_text =
string.Format(
"%1/%2",
Math.Round(current).ToString(), max.ToString());
449 progressBar.Show(
false);
450 textWidget.SetText(qty_text);
451 textWidget.Show(
true);
452 textWidget.GetParent().Show(
true);
457 progressBar.Show(
false);
458 textWidget.Show(
false);
459 textWidget.GetParent().Show(
false);
463 textWidget.Show(
false);
464 progressBar.SetCurrent(current);
465 progressBar.Show(
true);
466 textWidget.GetParent().Show(
true);
475 protected void SetWeaponQuantity(
int chamber,
int mag,
string itemWidget,
string quantityPBWidget,
string quantityTextWidget,
bool enabled)
479 widget =
m_Root.FindAnyWidget(itemWidget);
485 ProgressBarWidget progressBar;
486 TextWidget textWidget;
487 Class.CastTo(progressBar, widget.FindAnyWidget(quantityPBWidget));
488 Class.CastTo(textWidget, widget.FindAnyWidget(quantityTextWidget));
492 int mag_quantity = -1;
494 if (
Class.CastTo(wpn, m_EntityInHands))
499 for (
int j = 0; j < wpn.GetMuzzleCount(); j++)
501 if (wpn.IsChamberFull(j)&& !wpn.IsChamberFiredOut(j))
504 wpn_qty = mag_quantity.ToString();
508 for (
int i = 0; i < wpn.GetMuzzleCount(); i++)
510 if (i > 0 && (wpn.GetMuzzleCount() < 3 || i%2 == 0))
512 wpn_qty = wpn_qty +
" ";
514 if (wpn.IsChamberEmpty(i))
516 wpn_qty = wpn_qty +
"0";
518 else if (wpn.IsChamberFiredOut(i))
520 wpn_qty = wpn_qty +
"F";
524 wpn_qty = wpn_qty +
"1";
527 maga = wpn.GetMagazine(i);
530 mag_quantity = maga.GetAmmoCount();
532 else if (wpn.GetInternalMagazineMaxCartridgeCount(i) > 0)
534 mag_quantity = wpn.GetInternalMagazineCartridgeCount(i);
541 if (mag_quantity != -1)
542 wpn_qty =
string.Format(
"X (+%1)", mag_quantity);
548 if (mag_quantity != -1)
550 wpn_qty = wpn_qty +
" (" + mag_quantity.ToString() +
")";
556 progressBar.Show(
false);
557 textWidget.SetText(wpn_qty);
558 textWidget.Show(
true);
559 textWidget.GetParent().Show(
true);
565 protected void SetWeaponModeAndZeroing(
string itemWidget,
string upWidget,
string downWidget,
bool enabled)
569 widget =
m_Root.FindAnyWidget(itemWidget);
573 TextWidget txtModeWidget;
574 TextWidget txtZeroingWidget;
576 Class.CastTo(txtModeWidget, widget.FindAnyWidget(upWidget));
577 Class.CastTo(txtZeroingWidget, widget.FindAnyWidget(downWidget));
580 string zeroing =
string.Empty;
582 zeroing =
string.Format(
"%1 m", w.GetCurrentZeroing(w.GetCurrentMuzzle()));
585 txtZeroingWidget.SetText(zeroing);
593 protected string WeaponModeTextTemp()
598 protected void SetRadioFrequency(
string freq,
string itemWidget,
string upWidget,
string downWidget,
bool enabled)
602 widget =
m_Root.FindAnyWidget(itemWidget);
606 TextWidget txtUpWidget;
607 TextWidget txtDownWidget;
608 Class.CastTo(txtUpWidget, widget.FindAnyWidget(upWidget));
609 Class.CastTo(txtDownWidget, widget.FindAnyWidget(downWidget));
611 txtUpWidget.SetText(freq);
612 txtDownWidget.SetText(
"MHz");
619 protected void SetActionWidget(
ActionBase action,
string descText,
string actionWidget,
string descWidget)
621 Widget widget =
m_Root.FindAnyWidget(actionWidget);
625 TextWidget actionName;
626 Class.CastTo(actionName, widget.FindAnyWidget(descWidget));
631 descText = descText +
" " +
"#action_target_cursor_hold";
632 actionName.SetText(descText);
636 actionName.SetText(descText);
648 protected void SetMultipleInteractAction(
string multiActionsWidget)
652 widget =
m_Root.FindAnyWidget(multiActionsWidget);
653 widget.Show(m_InteractActionsNum > 1);
657 protected void SetMultipleContinuousInteractAction(
string multiActionsWidget)
661 widget =
m_Root.FindAnyWidget(multiActionsWidget);
662 widget.Show(m_ContinuousInteractActionsNum > 1);
665 protected void SetMultipleItemAction(
string multiActionsWidget)
669 widget =
m_Root.FindAnyWidget(multiActionsWidget);
670 widget.Show(m_ItemActionsNum > 1);
674 protected void SetMultipleContinuousItemAction(
string multiActionsWidget)
678 widget =
m_Root.FindAnyWidget(multiActionsWidget);
679 widget.Show(m_ContinuousItemActionsNum > 1);
682 protected void SetInteractActionIcon(
string actionWidget,
string actionIconFrameWidget,
string actionIconWidget,
string actionIconTextWidget)
684 string keyName =
string.Empty;
685 Widget widget, frameWidget;
686 ImageWidget iconWidget;
687 TextWidget textWidget;
689 widget =
m_Root.FindAnyWidget(actionWidget);
690 Class.CastTo(frameWidget, widget.FindAnyWidget(actionIconFrameWidget));
691 Class.CastTo(iconWidget, widget.FindAnyWidget(actionIconWidget));
692 Class.CastTo(textWidget, widget.FindAnyWidget(actionIconTextWidget));
694 m_UseActionWrapper.InputP().SelectAlternative(0);
695 for (
int c = 0; c < m_UseActionWrapper.InputP().BindKeyCount(); c++)
697 int _hc = m_UseActionWrapper.InputP().GetBindKey(0);
698 keyName =
GetUApi().GetButtonName(_hc);
702 iconWidget.Show(
false);
703 textWidget.SetText(keyName);
704 textWidget.Show(
true);
707 protected void CheckRefresherFlagVisibility()
709 Widget w =
m_Root.FindAnyWidget(
"ia_item_flag_icon");
713 w.Show(entity.IsRefresherSignalingViable() &&
m_Player.IsTargetInActiveRefresherRange(entity));
715 else if (w.IsVisible())
721 protected void CheckForActionWidgetOverrides()
725 if (
Class.CastTo(item, m_EntityInHands) && item.GetActionWidgetOverride(actionName))
727 ActionBase action = ActionManagerBase.GetAction(actionName);
735 protected IngameHud GetHud()
740 IngameHud hud = IngameHud.Cast(
mission.GetHud());
void OnInputPresetChanged()
void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
override void GetActions(typename action_input_type, out array< ActionBase_Basic > actions)
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
Super root of all classes in Enforce script.
WeaponManager GetWeaponManager()
IngameHudVisibility GetHudVisibility()
script counterpart to engine's class Weapon
proto native CGame GetGame()
const int QUANTITY_PROGRESS
const int QUANTITY_HIDDEN
void OnWidgetScriptInit(Widget w)