100 float closestDist =
float.MAX;
110 float dist =
vector.Distance(
m_Player.GetPosition(), crumb.GetPosition());
114 if (crumbRadius != -1)
115 maxRadiusAllowed = crumbRadius;
116 if (dist > maxRadiusAllowed)
117 excludeMask = (excludeMask | (1 << indx));
120 int idx =
m_Player.GetBoneIndexByName(
"Head");
122 vector rayEnd = crumb.GetPosition();
129 excludeMask = (excludeMask | (1 << indx));
133 distances.Insert(dist);
135 #ifdef DIAG_DEVELOPER
141 float baseDst = distances[0];
144 foreach (
float dst:distances)
148 float dstInv = (baseDst / dst) * baseDst;
150 distancesInverted.Insert(dstInv);
155 foreach (
int i,
float dstInvert:distancesInverted)
157 if ((1 << i) & excludeMask)
160 float ratio = dstInvert / sum;
166 #ifdef DIAG_DEVELOPER
169 float intensity = (1-ratio) * 255;
184 JsonUndergroundAreaBreadcrumb startPoint = points[0];
185 JsonUndergroundAreaBreadcrumb endPoint = points[points.Count() - 1];
191 float accoMin = endPoint.EyeAccommodation;
192 JsonUndergroundAreaBreadcrumb closestPoint;
193 JsonUndergroundAreaBreadcrumb secondaryPoint;
194 float distanceToClosest;
195 float distanceToSecondary;
196 float distanceBetweenPoints;
198 foreach (JsonUndergroundAreaBreadcrumb point : points)
200 float dist =
vector.DistanceSq(playerPos, point.GetPosition());
201 if (!closestPoint || dist < distanceToClosest)
205 secondaryPoint = closestPoint;
206 distanceToSecondary = distanceToClosest;
208 closestPoint = point;
209 distanceToClosest = dist;
211 else if (!secondaryPoint || dist < secondaryPoint)
213 secondaryPoint = point;
214 distanceToSecondary = dist;
217 #ifdef DIAG_DEVELOPER
223 distanceBetweenPoints =
vector.DistanceSq(closestPoint.GetPosition(), secondaryPoint.GetPosition());
225 if (closestPoint == startPoint && secondaryPoint == points[1] && distanceToSecondary > distanceBetweenPoints)
227 else if (closestPoint == endPoint && secondaryPoint == points[points.Count() - 2] && distanceToSecondary > distanceBetweenPoints)
231 if (closestPoint == endPoint)
232 secondaryPoint = points[points.Count() - 2];
233 else if (closestPoint == startPoint)
234 secondaryPoint = points[1];
235 else if (distanceBetweenPoints < distanceToClosest || distanceBetweenPoints < distanceToSecondary)
237 JsonUndergroundAreaBreadcrumb nexPoint = points[points.Find(closestPoint) + 1];
238 if (
vector.DistanceSq(playerPos, nexPoint.GetPosition()) <
vector.DistanceSq(closestPoint.GetPosition(), nexPoint.GetPosition()))
239 secondaryPoint = nexPoint;
242 acco = closestPoint.EyeAccommodation;
249 distanceToSecondary =
vector.DistanceSq(playerPos, secondaryPoint.GetPosition());
251 acco = distanceToSecondary / (distanceToClosest + distanceToSecondary);
252 acco =
Math.Lerp(secondaryPoint.EyeAccommodation, closestPoint.EyeAccommodation, acco);
254 if (points.Find(closestPoint) > points.Find(secondaryPoint))
278 #ifdef DIAG_DEVELOPER
282 if (acco != accoMin && acco != accoMax)
286 DbgUI.Text(
String(
"Closest point id: " + points.Find(closestPoint)));
287 DbgUI.Text(
String(
"Second closest id: " + points.Find(secondaryPoint)));
450 if (trigger.m_Type == EUndergroundTriggerType.OUTER)
454 else if (trigger.m_Type == EUndergroundTriggerType.TRANSITIONING)
458 else if (trigger.m_Type == EUndergroundTriggerType.INNER)
464 if (newPresence != oldPresence)
467 m_Player.SetUnderground(newPresence);
void Run(float targetVal, Managed obj, string updateFunc, string finishedFunc, float startingVal=0, bool loop=false, float speed=1.0, Param params=null, int category=CALL_CATEGORY_SYSTEM)