1class ItemActionsWidget
extends ScriptedWidgetEventHandler
5 protected ActionBase m_Interact;
6 protected ActionBase m_ContinuousInteract;
7 protected ActionBase m_Single;
8 protected ActionBase m_Continuous;
9 protected ActionManagerClient
m_AM;
10 protected IngameHud
m_Hud;
12 protected UAIDWrapper m_UseActionWrapper;
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)
74 RichTextWidget w = RichTextWidget.Cast(
m_Root.FindAnyWidget(pWidgetName +
"_btn_icon_xbox"));
75 w.SetText(InputUtils.GetRichtextButtonIconFromInputAction(pInputName,
"", EUAINPUT_DEVICE_CONTROLLER));
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 =
g_Game.GetInput().GetCurrentInputDevice() ==
EInputDeviceType.CONTROLLER || !
g_Game.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");
206 if ((m_EntityInHands || !m_Hidden) &&
g_Game.GetUIManager().GetMenu() == null)
208 CheckForActionWidgetOverrides();
210 CheckRefresherFlagVisibility();
216 m_MaxWidthChild = 200;
228 ActionManagerClient.CastTo(
m_AM,
m_Player.GetActionManager());
236 m_ContinuousInteract = null;
246 m_Interact =
m_AM.GetPossibleAction(InteractActionInput);
247 m_ContinuousInteract =
m_AM.GetPossibleAction(ContinuousInteractActionInput);
248 m_Single =
m_AM.GetPossibleAction(DefaultActionInput);
251 if (!m_Interact && !m_ContinuousInteract && !m_Continuous && !m_Single)
254 m_InteractActionsNum =
m_AM.GetPossibleActionCount(InteractActionInput);
255 m_ContinuousInteractActionsNum =
m_AM.GetPossibleActionCount(ContinuousInteractActionInput);
256 m_ItemActionsNum =
m_AM.GetPossibleActionCount(DefaultActionInput);
260 protected void GetEntityInHands()
266 if (eai && !eai.IsInherited(DummyItem))
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)
309 InventoryItem item = InventoryItem.Cast(m_EntityInHands);
310 q_type = QuantityConversions.HasItemQuantity(m_EntityInHands);
315 QuantityConversions.GetItemQuantity(item, q_cur, q_min, q_max);
317 q_cur = (q_cur / q_max);
325 QuantityConversions.GetItemQuantity(item, q_cur, q_min, q_max);
331 protected string GetRadioFrequency()
333 TransmitterBase trans;
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));
372 if (m_ItemFrozen && health != GameConstants.STATE_RUINED)
374 healthMark.SetColor(
Colors.COLOR_FROZEN);
375 healthMark.SetAlpha(0.5);
376 healthMark.GetParent().Show(
true);
383 healthMark.GetParent().Show(
false);
385 case GameConstants.STATE_PRISTINE :
386 healthMark.SetColor(
Colors.COLOR_PRISTINE);
387 healthMark.SetAlpha(0.5);
388 healthMark.GetParent().Show(
true);
390 case GameConstants.STATE_WORN :
391 healthMark.SetColor(
Colors.COLOR_WORN);
392 healthMark.SetAlpha(0.5);
393 healthMark.GetParent().Show(
true);
395 case GameConstants.STATE_DAMAGED :
396 healthMark.SetColor(
Colors.COLOR_DAMAGED);
397 healthMark.SetAlpha(0.5);
398 healthMark.GetParent().Show(
true);
400 case GameConstants.STATE_BADLY_DAMAGED:
401 healthMark.SetColor(
Colors.COLOR_BADLY_DAMAGED);
402 healthMark.SetAlpha(0.5);
403 healthMark.GetParent().Show(
true);
405 case GameConstants.STATE_RUINED :
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));
579 Weapon w = Weapon.Cast(
m_Player.GetEntityInHands());
580 string zeroing =
string.Empty;
582 zeroing =
string.Format(
"%1 m", w.GetCurrentZeroing(w.GetCurrentMuzzle()));
584 txtModeWidget.SetText(
m_Player.GetWeaponManager().GetCurrentModeName());
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))
735 protected IngameHud GetHud()
740 IngameHud hud = IngameHud.Cast(
mission.GetHud());
void OnInputPresetChanged()
void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
void ActionManagerBase(PlayerBase player)
override void GetActions(typename action_input_type, out array< ActionBase_Basic > actions)
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
IngameHudVisibility GetHudVisibility()
class GP5GasMask extends MaskBase ItemBase
const int QUANTITY_PROGRESS
const int QUANTITY_HIDDEN
class Magnum extends Magnum_Base Magnum_Base
void OnWidgetScriptInit(Widget w)