DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
CachedInfosInstanced.c
См. документацию.
1
3{
4 protected EntityAI m_Parent;
5
7 {
8 m_Parent = parent;
9 }
10
11 void Init();
12}
13
14class InstancedAttachmentGroupDataBuilding : InstancedAttachmentGroupDataBase
15{
17
18 override void Init()
19 {
20 super.Init();
21
22 TAttachmentGroupMap groupMap = m_Parent.GetTypeAttachmentGroupInfoHolder().GetAttachmentGroupMap();
23 if (groupMap)
24 {
26 foreach (string groupName, ref TypeAttachmentGroupData groupData : groupMap)
27 {
28 bool createMetadata = false;
31
32 vector pos;
33 float radius;
34 if (CalculatePositionData(groupData.m_SelectionName,pos,radius))
35 {
36 createMetadata = true;
37 posData = new AttachmentGroupPositionData(pos,radius);
38 }
39
40 vector min,max;
41 if (CalculateBoxData(groupData.m_SelectionName,min,max))
42 {
43 createMetadata = true;
44 boxData = new AttachmentGroupBoxData(min,max);
45 }
46
47 if (createMetadata)
48 m_AttGroupPositionData.Set(groupName,new AttachmentGroupProximityMetadata(posData,boxData));
49 }
50 }
51 }
52
54 protected bool CalculatePositionData(string namedSelection, out vector position, out float radius)
55 {
56 radius = 2.0; //UAMaxDistances.DEFAULT;
57
58 if (m_Parent.MemoryPointExists(namedSelection)) //first look for mem point
59 {
60 position = m_Parent.ModelToWorld(m_Parent.GetMemoryPointPos(namedSelection));
61 string memRadiusSelection = "" + namedSelection + "_radius";
62 if (m_Parent.MemoryPointExists(memRadiusSelection)) //if using mem point, look for radius point too
63 {
64 vector radiusPoint = m_Parent.ModelToWorld(m_Parent.GetMemoryPointPos(memRadiusSelection));
65 radius = vector.Distance(position,radiusPoint);
66 }
67
68 return true;
69 }
70 else //if not found, look for the named component center (building-specific solution, position possibly averaged from multiple components!)
71 {
72 TIntArray ost = new TIntArray();
73 m_Parent.GetActionComponentsForSelectionName(m_Parent.GetViewGeometryLevel(),namedSelection,ost);
74
75 if (ost.Count() == 0)
76 return false;
77
78 bool validPosFilled = false;
79 vector tmpPos;
80 foreach (int comp : ost)
81 {
82 if (!validPosFilled)
83 {
84 tmpPos = m_Parent.ModelToWorld(m_Parent.GetActionComponentCenter(m_Parent.GetViewGeometryLevel(),comp));
85 validPosFilled = true;
86 }
87 else
88 {
89 tmpPos = tmpPos + m_Parent.ModelToWorld(m_Parent.GetActionComponentCenter(m_Parent.GetViewGeometryLevel(),comp));
90 }
91 }
92
93 position = tmpPos * (1 / ost.Count());
94 return true;
95 }
96 }
97
99 protected bool CalculateBoxData(string namedSelection, out vector min, out vector max)
100 {
101 string minSelection = "" + namedSelection + "_min";
102 string maxSelection = "" + namedSelection + "_max";
103 if (m_Parent.MemoryPointExists(minSelection) && m_Parent.MemoryPointExists(maxSelection))
104 {
105 min = m_Parent.ModelToWorld(m_Parent.GetMemoryPointPos(minSelection));
106 max = m_Parent.ModelToWorld(m_Parent.GetMemoryPointPos(maxSelection));
107 //sanitize minsmaxs
108 vector.SanitizeMinsMaxs(min,max);
109 return true;
110 }
111
112 return false;
113 }
114
119
120 bool GetValidAttGroupPosition(string groupName, out vector position, out float radius)
121 {
123 if (metaData)
124 return metaData.GetValidRadialCheckData(position,radius);
125
126 return false;
127 }
128
129 bool GetValidAttGroupBox(string groupName, out vector min, out vector max)
130 {
132 if (metaData)
133 return metaData.GetValidBoxCheckData(min,max);
134
135 return false;
136 }
137}
138
141{
144
150
151 bool GetValidRadialCheckData(out vector position, out float radius)
152 {
153 if (m_PositionData)
154 {
155 position = m_PositionData.m_Position;
156 radius = m_PositionData.m_Radius;
157 return true;
158 }
159
160 return false;
161 }
162
163 bool GetValidBoxCheckData(out vector min, out vector max)
164 {
165 if (m_BoxData)
166 {
167 min = m_BoxData.m_Min;
168 max = m_BoxData.m_Max;
169 return true;
170 }
171
172 return false;
173 }
174}
175
177{
179 float m_Radius;
180
181 void AttachmentGroupPositionData(vector pos, float radius)
182 {
183 m_Position = pos;
184 m_Radius = radius;
185 }
186}
187
189{
192
194 {
195 m_Min = min;
196 m_Max = max;
197 }
198}
float m_Radius
Определения AIGroupBehaviour.c:10
Entity m_Parent
Определения CachedEquipmentStorageBase.c:17
void AttachmentGroupPositionData(vector pos, float radius)
Определения CachedInfosInstanced.c:181
class InstancedAttachmentGroupDataBase m_AttGroupPositionData
map< string, ref AttachmentGroupProximityMetadata > GetAttGroupPositionMap()
Определения CachedInfosInstanced.c:115
bool CalculatePositionData(string namedSelection, out vector position, out float radius)
False if no valid position found.
Определения CachedInfosInstanced.c:54
bool GetValidAttGroupPosition(string groupName, out vector position, out float radius)
Определения CachedInfosInstanced.c:120
bool CalculateBoxData(string namedSelection, out vector min, out vector max)
False if no valid box points found.
Определения CachedInfosInstanced.c:99
bool GetValidAttGroupBox(string groupName, out vector min, out vector max)
Определения CachedInfosInstanced.c:129
map
Определения ControlsXboxNew.c:4
vector position
Определения DustKickupEffects.c:20
vector m_Position
Cached world position.
Определения Effect.c:43
map< string, ref TypeAttachmentGroupData > TAttachmentGroupMap
Определения TypeAttachmentGroupDataHolders.c:1
void AttachmentGroupBoxData(vector min, vector max)
Определения CachedInfosInstanced.c:193
ref AttachmentGroupBoxData m_BoxData
Определения CachedInfosInstanced.c:143
ref AttachmentGroupPositionData m_PositionData
Определения CachedInfosInstanced.c:142
bool GetValidRadialCheckData(out vector position, out float radius)
Определения CachedInfosInstanced.c:151
void AttachmentGroupProximityMetadata(AttachmentGroupPositionData posData, AttachmentGroupBoxData boxData)
Определения CachedInfosInstanced.c:145
bool GetValidBoxCheckData(out vector min, out vector max)
Определения CachedInfosInstanced.c:163
Extended metadata for group position.
Определения CachedInfosInstanced.c:141
void InstancedAttachmentGroupDataBase(EntityAI parent)
Определения CachedInfosInstanced.c:6
Contains derived info for multutude of uses.
Определения CachedInfosInstanced.c:3
Data for one attachment group.
Определения TypeAttachmentGroupData.c:4
Определения Transport.c:70
static void SanitizeMinsMaxs(inout vector min, inout vector max)
Makes sure all values in MIN are lower than the MAX.
Определения EnConvert.c:542
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:119
array< int > TIntArray
Определения EnScript.c:733