107 Print(
"ActionsMenuDisplay is missing root layout!",
LogLevel.ERROR);
128 Debug.Error2(
"SCR_ActionMenuInteractionDisplay",
"m_wActionMenu is NULL");
142 m_Widgets.m_wOutlineOverlay.SetVisible(
false);
143 m_Widgets.m_wOutlineProgress.SetMaskProgress(0);
144 m_Widgets.m_wOutlineProgressGlow.SetMaskProgress(0);
147 Widget snackBarWidget =
m_wRoot.GetWorkspace().CreateWidgets(m_sSnackBarLayout);
181 m_bForceResetScroll =
true;
191 int actionsCount = actionsData.param1.Count();
192 if (!actionsData.param1 || actionsCount < 1)
195 UpdateAnimateActions(actionsData, selectedAction, currentContext, actionsCount < 2, fTimeSlice);
221 scrollingDown =
true;
223 if (currAction == selectedAction)
252 bool shouldShowInteractionHint =
true;
259 if (interfaceSettings)
283 int iActionsDelta = iActiveWidgetsCount - actionsCount;
284 int iAbsDelta =
Math.AbsInt(iActionsDelta);
287 bool isInProgress = selectedAction && selectedAction.
IsInProgress();
301 m_Widgets.m_wInputButtonDisplayRoot.SetVisible(
false);
302 m_Widgets.m_wInputButtonDisplayRoot.SetOpacity(0.0);
306 if (iActionsDelta < 0)
312 for (
int i = 0; i < iAbsDelta; i++)
314 elementWidget = rootWorkspace.CreateWidgets(m_sElementLayout,
m_Widgets.m_wActionMenu);
321 if (actionMenuElement)
325 else if (iActionsDelta > 0)
329 for (
int i = iActiveWidgetsCount-1; i >= iActiveWidgetsCount-iAbsDelta; i--)
340 if (actionsCount > 1)
355 bool succeeded = actionMenuElement.
Set(currAction, currAction == selectedAction, isActionDisabled, actionInfo);
380 if (m_bForceResetScroll)
382 m_bForceResetScroll =
false;
391 m_Widgets.m_wOutlineOverlay.SetVisible(
true);
395 m_Widgets.m_ButtonOverlayComponent.SetHoldAction(
true, duration);
399 m_Widgets.m_ButtonOverlayComponent.ForceSetHoldAction(
true);
404 m_Widgets.m_wOutlineOverlay.SetVisible(
false);
405 m_Widgets.m_ButtonOverlayComponent.SetHoldAction(
false);
412 m_Widgets.m_IconOverlayComponent.OnAssigned(actionInfo, selectedAction);
414 if (!
m_Widgets.m_IconOverlayComponent.HasColorData())
417 m_Widgets.m_IconOverlayComponent.UpdateColors(selectedAction,
true);
425 m_Widgets.m_wOutlineBackgroundGlow.SetVisible(
true);
440 m_Widgets.m_wOutlineBackgroundGlow.SetVisible(
false);
460 if (currentAction < 0)
467 for (
int i = currentAction,
index; i >= 0; i--)
474 float fVerticalPos = currentAction - i;
478 fVerticalPos = fVerticalPos -
Math.AbsFloat(timer);
480 fVerticalPos = fVerticalPos - (1.0 - timer);
487 for (
int i = currentAction + 1,
index; i < count; i++)
489 float fVerticalPos = (i - currentAction);
493 fVerticalPos = fVerticalPos -
Math.AbsFloat(timer);
495 fVerticalPos = fVerticalPos - (1.0 - timer);
498 element.SetOpacity(
Math.AbsFloat(fVerticalPos));
507 int screenw = workspace.DPIUnscale(workspace.GetWidth());
508 int screenh = workspace.DPIUnscale(workspace.GetHeight());
517 m_Widgets.m_wActionMenu.GetScreenSize(menuw, menuh);
518 menuw = workspace.DPIUnscale(menuw);
519 menuh = workspace.DPIUnscale(menuh);
528 bool clamped =
false;
529 clampedPosition = screenPosition;
533 CameraManager cameraManager =
GetGame().GetCameraManager();
536 CameraBase currentCamera = cameraManager.CurrentCamera();
540 currentCamera.GetWorldCameraTransform(camTM);
541 vector toActionDir = (worldPosition - camTM[3]).Normalized();
542 float d =
vector.Dot(toActionDir, camTM[2]);
543 const float threshold = 0.5;
544 const float invThreshold = 1.0 / 0.5;
548 float stickiness = 1.0;
551 stickiness =
Math.Clamp(1.0 - (d * invThreshold), 0.0, 1.0);
553 clampedPosition[1] =
Math.Lerp(clampedPosition[1], max[1], stickiness);
559 for (
int i = 0; i < 2; ++i)
561 if (clampedPosition[i] < min[i])
563 clampedPosition[i] = min[i];
566 else if (clampedPosition[i] > max[i])
568 clampedPosition[i] = max[i];
583 vector vScreenPosition =
GetGame().GetWorkspace().ProjWorldToScreen(worldPosition,
GetGame().GetWorld());
591 SCR_2DPIPSightsComponent pipSights = ArmaReforgerScripted.GetCurrentPIPSights();
592 bool isPointInPIP = pipSights && pipSights.IsScreenPositionInSights(vClampedPosition);