36 protected float m_fDefaultDuration;
38 [
Attribute(
"1",
desc:
"Mark the hint as shown only if it was display for this duration (seconds).\nIf the hint duration is shorter, mark it as shown when it's hidden.")]
39 protected float m_fPersistentDelay;
41 [
Attribute(
"0",
desc:
"When enabled, hints will be shown in this scenario even when they're disabled in game settings.\nUseful for tutorial scenarios.")]
42 protected bool m_bIgnoreHintSettings;
44 protected bool m_bIsShown;
45 protected float m_fDurationOverride;
50 protected ref set<EHint> m_aSessionShownHints =
new set<EHint>();
51 protected ref ScriptInvokerBase<SCR_HintManagerComponent_OnHint> m_OnHintShow =
new ScriptInvokerBase<SCR_HintManagerComponent_OnHint>();
52 protected ref ScriptInvokerBase<SCR_HintManagerComponent_OnHint> m_OnHintHide =
new ScriptInvokerBase<SCR_HintManagerComponent_OnHint>();
74 if (m_bIsShown && m_LatestHint)
88 isSilent |= m_bIsShown && info == m_LatestHint;
98 m_OnHintShow.Invoke(info, isSilent);
102 if (m_fDurationOverride != 0)
103 duration = m_fDurationOverride;
112 duration = m_fDefaultDuration;
114 GetGame().GetCallqueue().CallLater(
Hide, duration * 1000,
false, info);
123 float delay = m_fPersistentDelay;
125 delay =
Math.Min(delay, duration);
127 GetGame().GetCallqueue().CallLater(
SetShown, delay * 1000,
false, info);
156 return Show(m_CustomHint, isSilent);
180 return Show(m_LatestHint, isSilent,
true);
191 return Show(m_LatestHint,
true,
true);
207 if (info && info != m_LatestHint)
213 m_OnHintHide.Invoke(m_LatestHint,
false);
221 if (m_Settings && !m_Settings.AreHintsEnabled())
234 if (!
IsShown() || !m_LatestHint || (m_Settings && !m_Settings.AreHintsEnabled()))
274 return m_bIgnoreHintSettings || !m_Settings || m_Settings.AreHintsEnabled();
286 (m_Settings && (m_Settings.GetCount(hint) < 0 || m_Settings.GetCount(hint) >= limit)
287 || m_aSessionShownHints.Contains(hint))
305 m_fDurationOverride = duration;
312 return m_fDurationOverride;
338 static SCR_HintManagerComponent GetInstance()
340 BaseGameMode gameMode =
GetGame().GetGameMode();
342 return SCR_HintManagerComponent.Cast(gameMode.FindComponent(SCR_HintManagerComponent));
353 static bool ShowHint(SCR_HintUIInfo info,
bool isSilent =
false,
bool ignoreShown =
false)
355 SCR_HintManagerComponent hintManager = GetInstance();
357 return hintManager.Show(info, isSilent, ignoreShown);
380 static bool ShowCustomHint(
string description,
string name =
string.Empty,
float duration = 0,
bool isSilent =
false,
EFieldManualEntryId fieldManualEntry =
EFieldManualEntryId.NONE,
bool isTimerVisible =
false)
382 SCR_HintManagerComponent hintManager = GetInstance();
384 return hintManager.ShowCustom(description, name, duration, isSilent,
EHint.UNDEFINED, fieldManualEntry, isTimerVisible);
391 static bool ClearLatestHint()
393 SCR_HintManagerComponent hintManager = GetInstance();
395 return hintManager.ClearHint();
404 static bool RepeatHint(
bool isSilent =
false)
406 SCR_HintManagerComponent hintManager = GetInstance();
408 return hintManager.Repeat(isSilent);
417 static bool HideHint(SCR_HintUIInfo info = null)
419 SCR_HintManagerComponent hintManager = GetInstance();
421 return hintManager.Hide(info);
429 static bool IsHintShown()
431 SCR_HintManagerComponent hintManager = GetInstance();
433 return hintManager.IsShown();
441 static bool CanShowHints()
443 SCR_HintManagerComponent hintManager = GetInstance();
445 return hintManager.CanShow();
462 if (!interfaceSettings)
466 interfaceSettings.Get(
"m_bShowHints", state);
468 m_SettingsContainer =
GetGame().GetGameUserSettings().GetModule(
"SCR_HintSettings");
469 m_Settings.SetHintsEnabled(state);
470 m_Settings.LoadShownHints(m_SettingsContainer);
472 if (m_bIsShown && !m_Settings.AreHintsEnabled())
483 m_aSessionShownHints.Insert(
type);
484 int count = m_Settings.AddCount(
type);
485 m_Settings.SaveShownHints(m_SettingsContainer);
487 Print(
string.Format(
"Hint %1 = %2 saved persistently, count = %3.",
typename.EnumToString(
EHint,
type),
type, count),
LogLevel.VERBOSE);
493 if (!m_Settings || !m_LatestHint)
500 m_Settings.DontShowAgain(hintType, m_SettingsContainer);
511 if (
System.IsConsoleApp())
540 if (
System.IsConsoleApp())
EFieldManualEntryId
used to grab the first id-matching Field Manual entry
ArmaReforgerScripted GetGame()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
void SCR_BaseGameModeComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_CharacterSoundComponentClass GetComponentData()
ScriptInvokerBase< SCR_HintManagerComponent_OnHint > GetOnHintHide()
void Toggle()
Toggle hint. Hide it if it's shown, and open it again if it's hidden.
SCR_HintUIInfo GetCurrentHint()
float GetDurationOverride()
void SetDurationOverride(float duration)
SCR_HintUIInfo GetLatestHint()
func SCR_HintManagerComponent_OnHint
bool Repeat(bool isSilent=false)
bool ShowCustom(string description, string name=string.Empty, float duration=0, bool isSilent=false, EHint type=EHint.UNDEFINED, EFieldManualEntryId fieldManualEntry=EFieldManualEntryId.NONE, bool isTimerVisible=false)
ScriptInvokerBase< SCR_HintManagerComponent_OnHint > GetOnHintShow()
bool WasShown(EHint hint, int limit=1)
bool Hide(SCR_HintUIInfo info=null)
void OpenContext()
Open context to currently shown hint.
void DontShowAgainCurrent()
void SetShown(SCR_HintUIInfo info)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
static SCR_FieldManualUI Open(EFieldManualEntryId entryId)
opens the first entry matching the EFieldManualEntryId enum value
string GetInterfaceSettingsClass()
static SCR_HUDManagerComponent GetHUDManager()
ref array< ref SCR_HintConditionList > m_aConditionLists
void ExitConditionLists(IEntity owner)
void InitConditionLists(IEntity owner)
bool ShouldFactionSeeHint()
void SetTimeStamp()
Set the time stamp of Hint start. Needed for hint timer timekeeping.
static SCR_HintUIInfo CreateInfo(string description, string name, float duration, EHint type, EFieldManualEntryId fieldManualEntry, bool isTimerVisible)
EFieldManualEntryId GetFieldManualLink()
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