35 private ref
Curve m_AdaptiveOpacityCurve;
37 [
Attribute(
"SCR_InterfaceSettings",
desc:
"Classname of the InterfaceSettings menu")]
46 private bool m_MenuOpen;
48 protected ref ScriptInvokerBase<OnScreenBrightnessChanged>
m_OnSceneBrightnessChanged =
new ScriptInvokerBase<OnScreenBrightnessChanged>();
63 #ifndef DISABLE_HUD_MANAGER
68 return m_aHUDElements.Count();
82 if (handler.Type() == handlerType)
104 if (!
GetGame().GetWorldEntity())
110 handler.OnInit(
this);
112 if (handler.CanUpdate())
118 handler.OnStart(
this);
124 game.SetHUDManager(
this);
142 handler.SetCanUpdate(
false);
150 handler.OnUpdate(
this);
153 float time =
m_World.GetWorldTime();
165 float sceneBrightness =
Math.Clamp(
m_World.GetCameraSceneMiddleBrightness(0), 0, 0.1);
172 float opacity =
LegacyCurve.Curve(
ECurveType.CurveProperty2D, sceneBrightness, m_AdaptiveOpacityCurve)[1];
173 opacity =
Math.Clamp(
Math.Round(opacity * 100) / 100, 0, 1);
216 m_wRoot.RemoveFromHierarchy();
226 m_wRootTop.SetZOrder(100);
228 if (m_wRoot && m_wRootTop)
233 array<int> bitValues =
new array<int>;
236 for (
int i = 0; i < bitCount; i++)
248 frame.SetName(
string.Format(
"SCR_HudManagerComponent: %1",
typename.EnumToString(
EHudLayers, bitValues[i])));
250 m_aLayerWidgets.Insert(bitValues[i], frame);
259 foreach (SCR_InfoDisplay display : m_aHUDElements)
261 if (display.Type() ==
type)
272 foreach (SCR_InfoDisplay display : m_aHUDElements)
274 if (display.m_LayoutPath ==
path)
285 foreach (SCR_InfoDisplay display : m_aHUDElements)
287 if (display.m_LayoutPath ==
path)
288 return display.GetRootWidget();
307 #ifndef DISABLE_HUD_MANAGER
309 if (
path ==
string.Empty)
313 if (m_aLayerWidgets.Find(
layer, parent) && parent)
347 Print(parentName +
" is a HUD Slot! Use InfoDisplay instead!",
LogLevel.ERROR);
351 Widget elementWidget =
GetGame().GetWorkspace().CreateWidgets(
path, parentWidget);
368 m_wRoot.SetVisible(isVisible);
369 m_wRootTop.SetVisible(isVisible);
377 return m_wRoot.IsVisible();
399 w.SetVisible(layers &
layer);
413 if (w.IsVisible()) layers = layers |
layer;
421 #ifndef DISABLE_HUD_MANAGER
426 return game.GetHUDManager();
442 const int CONTEXT_GENERATE_AVAILABLE_INPUT_ACTION = 0;
444 override array<ref WB_UIMenuItem> _WB_GetContextMenuItems(
IEntity owner)
447 array<ref WB_UIMenuItem> items =
new array<ref WB_UIMenuItem>();
450 array<BaseInfoDisplay> elements =
new array<BaseInfoDisplay>();
452 foreach (
auto element : elements)
455 if (SCR_AvailableActionsDisplay.Cast(element))
457 ref
WB_UIMenuItem actionsContextItem =
new WB_UIMenuItem(
"Add actions to AvailableActionsDisplay info", CONTEXT_GENERATE_AVAILABLE_INPUT_ACTION);
458 items.Insert(actionsContextItem);
467 override void _WB_OnContextMenu(
IEntity owner,
int id)
469 if (
id == CONTEXT_GENERATE_AVAILABLE_INPUT_ACTION)
471 SCR_AvailableActionsDisplay target;
474 array<BaseInfoDisplay> elements =
new array<BaseInfoDisplay>();
476 foreach (
auto element : elements)
478 if (SCR_AvailableActionsDisplay.Cast(element))
480 target = SCR_AvailableActionsDisplay.Cast(element);
488 GenericEntity genericOwner = GenericEntity.Cast(owner);
493 InputManager mgr =
GetGame().GetInputManager();
494 array<string> actions = {};
497 int cnt = mgr.GetActionCount();
498 for (
int i = 0; i < cnt; i++)
500 string act = mgr.GetActionName(i);
512 array<int> selection =
new array<int>();
513 api.ShowItemListDialog(
"Actions Selection",
"Select actions from the actions manager to create entry for.", 340, 480, actions, selection, 0);
516 IEntitySource entitySource = api.EntityToSource(owner);
521 BaseContainer componentContainer;
522 int cmpCount = entitySource.GetComponentCount();
523 for (
int i = 0; i < cmpCount; i++)
525 IEntityComponentSource componentSource = entitySource.GetComponent(i);
526 if (componentSource.GetClassName() ==
"SCR_HUDManagerComponent")
528 componentContainer = componentSource.ToBaseContainer();
533 if (!componentContainer)
537 BaseContainerList infoDisplays = componentContainer.GetObjectArray(
"InfoDisplays");
542 BaseContainer displaySource;
543 for (
int i = 0; i < infoDisplays.Count(); i++)
545 BaseContainer container = infoDisplays.Get(i);
546 if (container.GetClassName() ==
"SCR_AvailableActionsDisplay")
548 displaySource = container;
556 api.BeginEntityAction(
"Create action container");
558 const string list =
"m_aActions";
560 foreach (
auto sel : selection)
562 string selectedActionName = actions[sel];
563 if (selectedActionName ==
string.Empty)
566 const int objIndex = 0;
568 api.CreateObjectArrayVariableMember(displaySource, null, list,
"SCR_AvailableActionContext", objIndex);
570 BaseContainerList itemsList = displaySource.GetObjectArray(list);
571 BaseContainer thisContainer = itemsList.Get(objIndex);
572 thisContainer.Set(
"m_sAction", selectedActionName);
573 thisContainer.Set(
"m_sName", selectedActionName);
576 api.EndEntityAction();
ArmaReforgerScripted GetGame()
enum SCR_EAITalkRequestState MEDIUM
func OnScreenBrightnessChanged
enum EHudLayers ComponentEditorProps(icon:HYBRID_COMPONENT_ICON)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
enum EVehicleType IEntity
proto external WorldEditorAPI _WB_GetEditorAPI()
This returns world editor API, which is safe to use from editor events bellow.
void SetParentLayout(notnull SCR_HUDLayout parentLayout)
void SetWidget(notnull Widget widget)
void SetParentWidgetName(string parentWidgetName)
void AddHudElement(notnull SCR_HUDElement element, bool replaceParent=false)
void ~SCR_HUDManagerComponent()
SCR_InfoDisplay FindInfoDisplay(typename type)
Return hud component of given type.
ref ScriptInvokerBase< OnScreenBrightnessChanged > m_OnSceneBrightnessChanged
Widget GetHUDRootWidget()
const float ADAPTIVE_OPACITY_BRIGHTNESS_THROTTLE
string m_sInterfaceSettingsClassName
string m_sDefaultBackgroundLayer
float GetSceneBrightness()
void SetVisibleLayers(EHudLayers layers=-1)
ref array< SCR_HUDManagerHandler > m_aHandlersToRemoveFromUpdate
SCR_InfoDisplay FindInfoDisplayByResourceName(ResourceName path)
Find layout by resorce name.
string GetInterfaceSettingsClass()
ScriptInvokerBase< OnScreenBrightnessChanged > GetSceneBrightnessChangedInvoker()
string m_sDefaultForegroundLayer
SCR_HUDElement CreateFreeElement(ResourceName path, string parentName)
SCR_HUDManagerHandler FindHandler(typename handlerType)
const float ADAPTIVE_OPACITY_THROTTLE
ref array< ref SCR_HUDManagerHandler > m_aHandlers
static SCR_HUDManagerComponent GetHUDManager()
void RemoveHandlerFromUpdatableHandlers(notnull SCR_HUDManagerHandler handler)
int GetInfoDisplayCount()
override void OnUpdate(IEntity owner)
void InitRootWidget(Widget root, string name)
EHudLayers GetVisibleLayers()
float GetAdaptiveOpacity()
override void OnInit(IEntity owner)
ref array< SCR_HUDManagerHandler > m_aUpdatableHandlers
Widget FindLayoutByResourceName(ResourceName path)
Find layout by resorce name.
void SetVisible(bool isVisible)
Widget CreateLayout(ResourceName path, EHudLayers layer, int zOrder=0)
Widget FindWidgetByNameFromAnyLayout(string widgetName, out SCR_HUDLayout foundLayout=null)
HYBRID_COMPONENT_ICON
Default icon for all components written in script that don't inherit ScriptComponent.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
SCR_FieldOfViewSettings Attribute
BaseHUDComponentClass GameComponentClass GetInfoDisplays(out notnull array< BaseInfoDisplay > outInfoDisplays)
WidgetFlags
Widget flags. See enf::Widget::SetFlags().