Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
mapnavigationbehaviour.c
Go to the documentation of this file.
2{
3 BASIC = 0,
4 COMPASS = 1,
5 GPS = 2,
6 ALL = 4
8
10{
11 const int RANDOM_DEVIATION_MIN = 4;
12 const int RANDOM_DEVIATION_MAX = 15;
13
14 static const int DISPLAY_GRID_POS_MAX_CHARS_COUNT = 3;
15 static const int DISPLAY_ALT_MAX_CHARS_COUNT = 4;
16
17 protected static const string GRID_SIZE_CFG_PATH = "CfgWorlds %1 Grid Zoom1 stepX";
18
23
26
28 {
29 m_Player = pPlayer;
30 m_NavigationType = pNavigationType;
31
34 }
35
37 {
39 }
40
42 {
44 }
45
50
52 {
53 if (item.IsInherited(ItemGPS))
54 {
55 if (m_GPSInPossessionArr.Find(item) == INDEX_NOT_FOUND)
56 {
57 m_GPSInPossessionArr.Insert(item);
59 }
60 }
61
62 if (item.IsInherited(ItemCompass))
63 {
65 {
66 m_CompassInPossessionArr.Insert(item);
68 }
69 }
70 }
71
73 {
74 if (item.IsInherited(ItemGPS))
75 {
76 m_GPSInPossessionArr.RemoveItem(item);
77 if (m_GPSInPossessionArr.Count() == 0)
78 {
80 }
81 }
82
83 if (item.IsInherited(ItemCompass))
84 {
85 m_CompassInPossessionArr.RemoveItem(item);
86 if (m_CompassInPossessionArr.Count() == 0)
87 {
89 }
90 }
91 }
92
98
99 protected float RandomizedDeviation()
100 {
101 Math.Randomize(GetWorldTime() + Math.RandomIntInclusive(2, 4096));
102 if ((Math.RandomIntInclusive(0, 10) % 2) == 0)
103 {
104 return Math.RandomIntInclusive(-RANDOM_DEVIATION_MAX, -RANDOM_DEVIATION_MIN);
105 }
106 else
107 {
108 return Math.RandomIntInclusive(RANDOM_DEVIATION_MIN, RANDOM_DEVIATION_MAX);
109 }
110 }
111
113 {
114 vector realPosition = m_Player.GetPosition();
115 vector randomizedPosition = Vector(realPosition[0] + m_RandomPositionDeviationX, realPosition[1], realPosition[2] + m_RandomPositionDeviationZ);
116
117 return randomizedPosition;
118 }
119
121 {
122 return m_Player.GetPosition();
123 }
124
125 static array<int> OrderedPositionNumbersFromGridCoords(EntityAI pEntity)
126 {
127 float gridSize = GetGame().ConfigGetFloat(string.Format(GRID_SIZE_CFG_PATH, GetGame().GetWorldName()));
128 int gridX, gridZ;
129 GetGame().GetWorld().GetGridCoords(pEntity.GetPosition(), gridSize, gridX, gridZ);
130
131 gridX = Math.AbsInt(gridX);
132 gridZ = Math.AbsInt(gridZ);
133
134 array<int> positions = new array<int>();
135 string gridXStr = gridX.ToStringLen(DISPLAY_GRID_POS_MAX_CHARS_COUNT);
136 string gridZStr = gridZ.ToStringLen(DISPLAY_GRID_POS_MAX_CHARS_COUNT);
137
138 int i = 0;
139 int gridCoordNumber;
140 for (i = 0; i < gridXStr.Length(); ++i)
141 {
142 gridCoordNumber = gridXStr.Get(i).ToInt();
143 if (IsOutOfMap(pEntity))
144 {
145 gridCoordNumber = -1;
146 }
147
148 positions.Insert(gridCoordNumber);
149 }
150
151 for (i = 0; i < gridZStr.Length(); ++i)
152 {
153 gridCoordNumber = gridZStr.Get(i).ToInt();
154 if (IsOutOfMap(pEntity))
155 {
156 gridCoordNumber = -1;
157 }
158
159 positions.Insert(gridCoordNumber);
160 }
161
162 return positions;
163 }
164
165 static array<int> OrderedAltitudeNumbersPosition(EntityAI pEntity)
166 {
167 array<int> altArray = new array<int>();
168 float altF = pEntity.GetPosition()[1];
169 int altI = Math.Round(altF);
170 string altString = altI.ToStringLen(DISPLAY_ALT_MAX_CHARS_COUNT);
171
172 for (int i = 0; i < altString.Length(); ++i)
173 {
174 altArray.Insert(altString.Get(i).ToInt());
175 }
176
177 return altArray;
178 }
179
180 static bool IsOutOfMap(EntityAI pEntity)
181 {
182 vector worldPos = pEntity.GetPosition();
183
184 if (worldPos[0] < 0 || worldPos[0] > GetGame().GetWorld().GetWorldSize() || worldPos[2] < 0 || worldPos[2] > GetGame().GetWorld().GetWorldSize())
185 {
186 return true;
187 }
188
189 return false;
190 }
191}
Definition enmath.c:7
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
const int INDEX_NOT_FOUND
Definition gameplay.c:13
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
proto native float GetWorldTime()
DayZPlayer m_Player
Definition hand_events.c:42
vector GetPositionRandomized()
EMapNavigationType m_NavigationType
int m_RandomPositionDeviationZ
void OnItemNotInPlayerPossession(EntityAI item)
void SetNavigationType(EMapNavigationType pType)
int m_RandomPositionDeviationX
float RandomizedDeviation()
void RandomizePosition()
void UnsetNavigationType(EMapNavigationType pType)
void OnItemInPlayerPossession(EntityAI item)
ref array< EntityAI > m_GPSInPossessionArr
vector GetPositionReal()
void MapNavigationBehaviour(PlayerBase pPlayer, EMapNavigationType pNavigationType=EMapNavigationType.BASIC)
enum EMapNavigationType RANDOM_DEVIATION_MIN
const int RANDOM_DEVIATION_MAX
EMapNavigationType GetNavigationType()
ref array< EntityAI > m_CompassInPossessionArr