98 float closestDist =
float.MAX;
108 float dist =
vector.Distance(
m_Player.GetPosition(), crumb.GetPosition());
112 switch (crumb.ExternalValueController.Type)
117 if (!ctrl || (ctrl && ctrl.SelectionName ==
""))
124 float animPhase = building.GetAnimationPhase(ctrl.SelectionName);
133 if (crumbRadius != -1)
134 maxRadiusAllowed = crumbRadius;
135 if (dist > maxRadiusAllowed)
136 excludeMask = (excludeMask | (1 << indx));
140 MiscGameplayFunctions.GetHeadBonePos(
m_Player, rayStart);
141 vector rayEnd = crumb.GetPosition();
148 excludeMask = (excludeMask | (1 << indx));
152 distances.Insert(dist);
154 #ifdef DIAG_DEVELOPER
160 float baseDst = distances[0];
163 foreach (
float dst:distances)
167 float dstInv = (baseDst / dst) * baseDst;
169 distancesInverted.Insert(dstInv);
174 foreach (
int i,
float dstInvert:distancesInverted)
176 if ((1 << i) & excludeMask)
179 float ratio = dstInvert / sum;
185 #ifdef DIAG_DEVELOPER
188 float intensity = (1-ratio) * 255;
203 JsonUndergroundAreaBreadcrumb startPoint = points[0];
204 JsonUndergroundAreaBreadcrumb endPoint = points[points.Count() - 1];
210 float accoMin = endPoint.EyeAccommodation;
211 JsonUndergroundAreaBreadcrumb closestPoint;
212 JsonUndergroundAreaBreadcrumb secondaryPoint;
213 float distanceToClosest;
214 float distanceToSecondary;
215 float distanceBetweenPoints;
217 foreach (JsonUndergroundAreaBreadcrumb point : points)
219 float dist =
vector.DistanceSq(playerPos, point.GetPosition());
220 if (!closestPoint || dist < distanceToClosest)
224 secondaryPoint = closestPoint;
225 distanceToSecondary = distanceToClosest;
227 closestPoint = point;
228 distanceToClosest = dist;
230 else if (!secondaryPoint || dist < secondaryPoint)
232 secondaryPoint = point;
233 distanceToSecondary = dist;
236 #ifdef DIAG_DEVELOPER
242 distanceBetweenPoints =
vector.DistanceSq(closestPoint.GetPosition(), secondaryPoint.GetPosition());
244 if (closestPoint == startPoint && secondaryPoint == points[1] && distanceToSecondary > distanceBetweenPoints)
246 else if (closestPoint == endPoint && secondaryPoint == points[points.Count() - 2] && distanceToSecondary > distanceBetweenPoints)
250 if (closestPoint == endPoint)
251 secondaryPoint = points[points.Count() - 2];
252 else if (closestPoint == startPoint)
253 secondaryPoint = points[1];
254 else if (distanceBetweenPoints < distanceToClosest || distanceBetweenPoints < distanceToSecondary)
256 JsonUndergroundAreaBreadcrumb nexPoint = points[points.Find(closestPoint) + 1];
257 if (
vector.DistanceSq(playerPos, nexPoint.GetPosition()) <
vector.DistanceSq(closestPoint.GetPosition(), nexPoint.GetPosition()))
258 secondaryPoint = nexPoint;
261 acco = closestPoint.EyeAccommodation;
268 distanceToSecondary =
vector.DistanceSq(playerPos, secondaryPoint.GetPosition());
270 acco = distanceToSecondary / (distanceToClosest + distanceToSecondary);
271 acco =
Math.Lerp(secondaryPoint.EyeAccommodation, closestPoint.EyeAccommodation, acco);
273 if (points.Find(closestPoint) > points.Find(secondaryPoint))
297 #ifdef DIAG_DEVELOPER
301 MiscGameplayFunctions.GetHeadBonePos(
m_Player, headPosition);
303 if (acco != accoMin && acco != accoMax)
307 DbgUI.Text(
String(
"Closest point id: " + points.Find(closestPoint)));
308 DbgUI.Text(
String(
"Second closest id: " + points.Find(secondaryPoint)));