DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ GetRaycastedHitZone()

string AreaDamageBase::GetRaycastedHitZone ( Object victim,
array< string > raycast_sources_str )
inlineprotected

См. определение в файле AreaDamage.c строка 162

163 {
164
165 // Vertical raycast start positions: Center, North East, North West, South East, South West
166 //vector raycast_sources[5] = {"0.0 0.1 0.0", "0.2 0.1 0.2", "-.2 0.1 0.2", "0.2 0.1 -.2", "-.2 0.1 -.2"};
167
168 string hitzone;
169 vector contact_pos;
170 vector contact_dir;
171 int contactComponent;
172 bool isSteppedOn = false;
173
174 array<vector> raycast_sources = new array<vector>;
175 ref set<Object> victims = new set<Object>;
176
177 // convert Array of string to array of Vectors
178 for ( int v = 0; v < raycast_sources_str.Count(); ++v)
179 {
180 raycast_sources.Insert(raycast_sources_str[v].ToVector());
181 }
182
183 for ( int i = 0; i < raycast_sources.Count(); ++i )
184 {
185 vector raycast_start_pos = m_AreaDamageTrigger.ModelToWorld( raycast_sources.Get(i) );
186 vector raycast_end_pos = "0 0.5 0" + raycast_start_pos;
187
188 //#ifdef DEVELOPER
189 //Debug.DrawArrow( raycast_start_pos, raycast_end_pos );
190 //#endif
191 DayZPhysics.RaycastRV( raycast_start_pos, raycast_end_pos, contact_pos, contact_dir, contactComponent, victims , null, m_AreaDamageTrigger, true, false, ObjIntersectIFire);
192
193 for ( int j = 0; j < victims.Count(); ++j )
194 {
195 Object contact_obj = victims.Get(j);
196
197 if ( contact_obj.IsAnyInherited(m_DamageableTypes) )
198 {
199 isSteppedOn = true;
200 break;
201 }
202 }
203
204 if ( isSteppedOn )
205 {
206 EntityAI eai = EntityAI.Cast(victim);
207 if ( eai )
208 {
209 hitzone = eai.GetDamageZoneNameByComponentIndex(contactComponent);
210 break;
211 }
212 }
213 }
214
215 if ( isSteppedOn )
216 {
217 return hitzone;
218 }
219 else
220 {
221 // Damage random leg since we don't know what part of player's body was caught in the trap.
222 string dmg_zone_rnd = "LeftFoot";
223 if ( Math.RandomIntInclusive(0, 1) == 1 )
224 dmg_zone_rnd = "RightFoot";
225 return dmg_zone_rnd;
226 }
227 }
class LogManager EntityAI
AreaDamageTriggerBase m_AreaDamageTrigger
Определения AreaDamageManager.c:11
class LOD Object

Перекрестные ссылки m_AreaDamageTrigger, Math::RandomIntInclusive() и DayZPhysics::RaycastRV().

Используется в EvaluateDamage().