Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIGetSuppressionVolumePosition.c
Go to the documentation of this file.
1
3{
4 protected static const string CENTER_POS_PORT = "CenterPosition";
5 protected static const string DISTANCE_PORT = "Distance_m";
6
7 protected static const string SUPPRESSION_VOLUME = "SuppressionVolume";
8
11 override TStringArray GetVariablesIn() { return s_aVarsIn; }
13
14 static override bool VisibleInPalette() { return true; }
15
16 static override string GetOnHoverDescription() { return "Returns center position of given suppression volume"; };
17
18 //---------------------------------------------------------------------------------------
19 override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
20 {
23
24 if (!volume)
25 return NodeError(this, owner, "No suppression volume provided!");
26
27 vector centerPos = volume.GetCenterPosition();
29
30 float distance;
31 IEntity m_CharacterEntity = owner.GetControlledEntity();
32 if (m_CharacterEntity)
33 distance = vector.Distance(m_CharacterEntity.GetOrigin(), centerPos);
34
36
37 return ENodeResult.SUCCESS;
38 };
39}
40
41class SCR_AIGetSuppressionVolumeLine : AITaskScripted
42{
43 protected static const string SUPPRESSION_VOLUME_PORT = "SuppressionVolume";
44 protected static const string START_IN_POS_PORT = "StartPositionIn";
45 protected static const string END_IN_POS_PORT = "EndPositionIn";
46 protected static const string PROGRESS_IN_PORT = "ProgressIn";
47
48 protected static const string START_OUT_POS_PORT = "StartPositionOut";
49 protected static const string END_OUT_POS_PORT = "EndPositionOut";
50 protected static const string SUPPRESS_TIME_PORT = "SuppressionTimeSOut";
51 protected static const string AIM_TIME_PORT = "AimTimeSOut";
52
53 protected ref TStringArray s_aVarsOut = {START_OUT_POS_PORT,END_OUT_POS_PORT,SUPPRESS_TIME_PORT,AIM_TIME_PORT};
54 protected ref TStringArray s_aVarsIn = {SUPPRESSION_VOLUME_PORT,START_IN_POS_PORT,END_IN_POS_PORT,PROGRESS_IN_PORT};
55 override TStringArray GetVariablesIn() { return s_aVarsIn; }
56 override TStringArray GetVariablesOut() { return s_aVarsOut; }
57
58 static override bool VisibleInPalette() { return true; }
59
60 static override string GetOnHoverDescription() { return "Returns start and end positions of suppression line based on given volume. If previous line is provided, new line will try to start where previous line ended"; };
61
62#ifdef WORKBENCH
63 //Diagnostic visualization
64 ref array<ref Shape> m_aDbgShapes = {};
65#endif
66
67 //---------------------------------------------------------------------------------------
68 override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
69 {
72
73 if (!volume)
74 return NodeError(this, owner, "No suppression volume provided!");
75
76 // Get character entity
77 IEntity m_CharacterEntity = owner.GetControlledEntity();
78 if (!m_CharacterEntity)
79 return ENodeResult.FAIL;
80
81 vector startPos, prevStartPos, prevEndPos, prevDir;
82
83 // Use starting position if provided
84 if (GetVariableIn(START_IN_POS_PORT, prevStartPos) && prevStartPos != vector.Zero)
85 {
86 // Whole previous line provided, use interpolated pos based on progress
87 if (GetVariableIn(END_IN_POS_PORT, prevEndPos) && prevEndPos != vector.Zero)
88 {
89 prevDir = vector.Direction(prevStartPos, prevEndPos).Normalized();
90
91 float progress;
92 GetVariableIn(PROGRESS_IN_PORT, progress); // If not connected, we assume 0 anyway
93
94 startPos = prevStartPos + (prevEndPos - prevStartPos) * progress;
95 }
96 else
97 startPos = prevStartPos;
98 }
99
100 // No start pos or small chance (more aggressive suppression if we skip line from time to time)
101 if (startPos == vector.Zero || Math.RandomFloat01() > 0.85)
102 {
103 // Get start pos based on simulated first run
104 vector tmpStPos;
105 startPos = volume.GetRandomPosition(m_CharacterEntity, tmpStPos);
106 }
107
108 vector endPos = volume.GetRandomPosition(m_CharacterEntity, startPos, prevDir);
109
110 float distancePerDeg = Math.Tan(Math.DEG2RAD) * vector.Distance(m_CharacterEntity.GetOrigin(), volume.GetCenterPosition());
111 float degsToTurn = vector.Distance(startPos, endPos) / distancePerDeg;
112 float suppressionTime = degsToTurn * (0.3 + Math.RandomFloatInclusive(0, 1.1));
113 float aimTime = Math.Max(0.02, Math.RandomGaussFloat(0.236, 0.2));
114
115#ifdef WORKBENCH
116 m_aDbgShapes.Clear();
117 if (DiagMenu.GetBool(SCR_DebugMenuID.DEBUGUI_AI_SHOW_SUPPRESS_DEBUG))
118 {
119 m_aDbgShapes.Insert(Shape.CreateSphere(Color.RED, ShapeFlags.TRANSP | ShapeFlags.NOOUTLINE, startPos, 0.1));
120 m_aDbgShapes.Insert(Shape.CreateSphere(Color.YELLOW, ShapeFlags.TRANSP | ShapeFlags.NOOUTLINE, endPos, 0.1));
121 m_aDbgShapes.Insert(Shape.CreateArrow(startPos, endPos, 1, Color.BLUE, ShapeFlags.TRANSP | ShapeFlags.NOOUTLINE));
122 }
123#endif
124
125 SetVariableOut(START_OUT_POS_PORT, startPos);
126 SetVariableOut(END_OUT_POS_PORT, endPos);
127 SetVariableOut(SUPPRESS_TIME_PORT, suppressionTime);
128 SetVariableOut(AIM_TIME_PORT, aimTime);
129
130 return ENodeResult.SUCCESS;
131 }
132}
SCR_DebugMenuID
This enum contains all IDs for DiagMenu entries added in script.
Definition DebugMenuID.c:4
ENodeResult NodeError(Node node, AIAgent owner, string msg)
Error call to be used in scripted BT nodes.
Definition NodeError.c:3
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
SCR_AIGetSuppressionVolumeCenterPosition SUPPRESSION_VOLUME_PORT
float distance
Definition Color.c:13
Diagnostic and developer menu system.
Definition DiagMenu.c:18
proto external vector GetOrigin()
Definition Math.c:13
proto void SetVariableOut(string name, void val)
TStringArray GetVariablesIn()
Definition Node.c:27
proto bool GetVariableIn(string name, out void val)
bool VisibleInPalette()
string GetOnHoverDescription()
Definition Node.c:30
TStringArray GetVariablesOut()
Definition Node.c:28
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
vector GetRandomPosition(notnull IEntity shooter, inout vector startPos=vector.Zero, vector lastLineDir=vector.Zero)
Instance of created debug visualizer.
Definition Shape.c:14
ENodeResult
Definition ENodeResult.c:13
ShapeFlags
Definition ShapeFlags.c:13
array< string > TStringArray
Definition Types.c:385