Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ScenarioFrameworkLogicDistance.c
Go to the documentation of this file.
1class SCR_ScenarioFrameworkLogicDistanceClass : SCR_ScenarioFrameworkLogicClass
2{
3}
4
5class SCR_ScenarioFrameworkLogicDistance : SCR_ScenarioFrameworkLogic
6{
7 [Attribute(defvalue: "0", desc: "Checked distance between entities", params: "0 inf 0.1", precision: 1)]
8 float m_fDistance;
9
10 [Attribute(desc: "Entity A")]
11 ref SCR_ScenarioFrameworkGet m_GetterA;
12
13 [Attribute(desc: "Entity B")]
14 ref SCR_ScenarioFrameworkGet m_GetterB;
15
16 [Attribute("0", UIWidgets.ComboBox, "Operator", "", enumType: SCR_EScenarioFrameworkComparisonOperator)]
17 protected SCR_EScenarioFrameworkComparisonOperator m_eComparisonOperator;
18
19 [Attribute(defvalue: "1", desc: "Delay between checks. Lower values are more precise, but has bigger performance impact", params: "0 inf")]
20 protected int m_iDelay;
21
22 protected IEntity m_EntityA, m_EntityB;
23
24 //------------------------------------------------------------------------------------------------
25 override void Init()
26 {
27 if (m_bDebug)
28 Print("[SCR_ScenarioFrameworkDistanceLogic.Init] debug line (" + __FILE__ + " L" + __LINE__ + ")", LogLevel.WARNING);
29
30 if (!m_GetterA || !m_GetterB)
31 return;
32
33 SCR_ScenarioFrameworkParam<IEntity> entityWrapperA = SCR_ScenarioFrameworkParam<IEntity>.Cast(m_GetterA.Get());
34 if (!entityWrapperA)
35 {
36 Print(string.Format("SCR_ScenarioFrameworkDistanceLogic: Entity A not found for logic %1.", this), LogLevel.ERROR);
37 return;
38 }
39
40 SCR_ScenarioFrameworkParam<IEntity> entityWrapperB = SCR_ScenarioFrameworkParam<IEntity>.Cast(m_GetterB.Get());
41 if (!entityWrapperB)
42 {
43 Print(string.Format("SCR_ScenarioFrameworkDistanceLogic: Entity B not found for logic %1.", this), LogLevel.ERROR);
44 return;
45 }
46
47 m_EntityA = entityWrapperA.GetValue();
48 if (!m_EntityA)
49 {
50 Print(string.Format("SCR_ScenarioFrameworkDistanceLogic: Entity A not found for logic %1.", this), LogLevel.ERROR);
51 return;
52 }
53
54 m_EntityB = entityWrapperB.GetValue();
55 if (!m_EntityB)
56 {
57 Print(string.Format("SCR_ScenarioFrameworkDistanceLogic: Entity B not found for logic %1.", this), LogLevel.ERROR);
58 return;
59 }
60
61 super.Init();
62
63 SCR_ScenarioFrameworkSystem.GetCallQueuePausable().CallLater(EvaluateDistance, m_iDelay, true);
64 }
65
66 //------------------------------------------------------------------------------------------------
67 protected void EvaluateDistance()
68 {
69 float distance = vector.Distance(m_EntityA.GetOrigin(), m_EntityB.GetOrigin());
70
71 if (
72 ((m_eComparisonOperator == SCR_EScenarioFrameworkComparisonOperator.LESS_THAN) && (distance < m_fDistance)) ||
73 ((m_eComparisonOperator == SCR_EScenarioFrameworkComparisonOperator.LESS_OR_EQUAL) && (distance <= m_fDistance)) ||
74 ((m_eComparisonOperator == SCR_EScenarioFrameworkComparisonOperator.EQUAL) && (distance == m_fDistance)) ||
75 ((m_eComparisonOperator == SCR_EScenarioFrameworkComparisonOperator.GREATER_OR_EQUAL) && (distance >= m_fDistance)) ||
76 ((m_eComparisonOperator == SCR_EScenarioFrameworkComparisonOperator.GREATER_THEN) && (distance > m_fDistance))
77 )
78 OnActivate(null);
79 }
80
81 //------------------------------------------------------------------------------------------------
86}
override void Init()
params precision
float m_fDistance
override void OnActivate()
float distance
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
void RestoreToDefault()
proto external vector GetOrigin()
static ScriptCallQueue GetCallQueuePausable()
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
SCR_FieldOfViewSettings Attribute