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

◆ CalculateBreadCrumbs()

void CalculateBreadCrumbs ( )
protected

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

99 {
100 float closestDist = float.MAX;
101 array<float> distances = new array<float>();
102 array<float> distancesInverted = new array<float>();
103
104 int excludeMask = 0;
105 foreach (int indx, auto crumb:m_TransitionalTrigger.m_Data.Breadcrumbs)
106 {
107 if (indx > 32)//error handling for exceeding this limit is handled elsewhere
108 break;
109
110 float dist = vector.Distance(m_Player.GetPosition(), crumb.GetPosition());
111 float crumbRadius = m_TransitionalTrigger.m_Data.Breadcrumbs[indx].Radius;
112 float maxRadiusAllowed = DISTANCE_CUTOFF;
113
114 if (crumbRadius != -1)
115 maxRadiusAllowed = crumbRadius;
116 if (dist > maxRadiusAllowed)
117 excludeMask = (excludeMask | (1 << indx));
118 else if (m_TransitionalTrigger.m_Data.Breadcrumbs[indx].UseRaycast)
119 {
120 int idx = m_Player.GetBoneIndexByName("Head");
121 vector rayStart = m_Player.GetBonePositionWS(idx);
122 vector rayEnd = crumb.GetPosition();
123 vector hitPos, hitNormal;
124 float hitFraction;
125 Object hitObj;
126
127 if (DayZPhysics.RayCastBullet(rayStart, rayEnd,PhxInteractionLayers.TERRAIN | PhxInteractionLayers.ROADWAY| PhxInteractionLayers.BUILDING, null, hitObj, hitPos, hitNormal, hitFraction))
128 {
129 excludeMask = (excludeMask | (1 << indx));
130 }
131 }
132
133 distances.Insert(dist);
134
135 #ifdef DIAG_DEVELOPER
136 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
137 Debug.DrawSphere(crumb.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
138 #endif
139 }
140
141 float baseDst = distances[0];
142 float sum = 0;
143
144 foreach (float dst:distances)
145 {
146 if (dst == 0)
147 dst = 0.1;
148 float dstInv = (baseDst / dst) * baseDst;
149 sum += dstInv;
150 distancesInverted.Insert(dstInv);
151 }
152
153 float sumCheck = 0;
154 float eyeAcco = 0;
155 foreach (int i, float dstInvert:distancesInverted)
156 {
157 if ((1 << i) & excludeMask)
158 continue;
159
160 float ratio = dstInvert / sum;
161 if (ratio > MAX_RATIO)
162 ratio = MAX_RATIO;
163
164 if (ratio > RATIO_CUTOFF)
165 {
166 #ifdef DIAG_DEVELOPER
167 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
168 {
169 float intensity = (1-ratio) * 255;
170 Debug.DrawLine(GetGame().GetPlayer().GetPosition() + "0 1 0", m_TransitionalTrigger.m_Data.Breadcrumbs[i].GetPosition(),ARGB(0,255,intensity,intensity),ShapeFlags.ONCE);
171 }
172 #endif
173
174 eyeAcco += ratio * m_TransitionalTrigger.m_Data.Breadcrumbs[i].EyeAccommodation;
175 }
176 }
177
178 m_EyeAccoTarget = eyeAcco * ACCO_MODIFIER;
179 }
PhxInteractionLayers
Определения DayZPhysics.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
DayZPlayer m_Player
Определения Hand_Events.c:42
PlayerBase GetPlayer()
Определения ModifierBase.c:51
const float DISTANCE_CUTOFF
Определения UndergroundHandlerClient.c:15
UndergroundTrigger m_TransitionalTrigger
Определения UndergroundHandlerClient.c:35
const float ACCO_MODIFIER
Определения UndergroundHandlerClient.c:16
const float RATIO_CUTOFF
Определения UndergroundHandlerClient.c:14
float m_EyeAccoTarget
Определения UndergroundHandlerClient.c:26
const float MAX_RATIO
Определения UndergroundHandlerClient.c:13
static proto bool RayCastBullet(vector begPos, vector endPos, PhxInteractionLayers layerMask, Object ignoreObj, out Object hitObject, out vector hitPosition, out vector hitNormal, out float hitFraction)
Определения DayZPhysics.c:124
static Shape DrawSphere(vector pos, float size=1, int color=0x1fff7f7f, ShapeFlags flags=ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE)
Определения 3_Game/tools/Debug.c:319
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения 3_Game/tools/Debug.c:382
Определения 3_Game/tools/Debug.c:2
Определения EnDebug.c:241
Определения ObjectTyped.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:106
proto native CGame GetGame()
const int COLOR_RED
Определения 1_Core/constants.c:64
ShapeFlags
Определения EnDebug.c:126
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9
int ARGB(int a, int r, int g, int b)
Определения proto.c:322

Перекрестные ссылки ACCO_MODIFIER, ARGB(), COLOR_RED, vector::Distance(), DISTANCE_CUTOFF, Debug::DrawLine(), Debug::DrawSphere(), DiagMenu::GetBool(), GetGame(), GetPlayer(), GetPosition, m_EyeAccoTarget, m_Player, m_TransitionalTrigger, MAX_RATIO, RATIO_CUTOFF и DayZPhysics::RayCastBullet().

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