public AITraversalWaitPoint GetEntryPointNear(Vector3 pos) { Vector3 position1 = this.GetClosestEntry(pos).get_position(); Vector3 position2 = this.GetFarthestEntry(pos).get_position(); BaseEntity[] baseEntityArray = new BaseEntity[1]; AITraversalWaitPoint traversalWaitPoint = (AITraversalWaitPoint)null; float num1 = 0.0f; foreach (AITraversalWaitPoint waitPoint in this.waitPoints) { if (!waitPoint.Occupied()) { Vector3 position3 = ((Component)waitPoint).get_transform().get_position(); float num2 = Vector3.Distance(position1, position3); if ((double)Vector3.Distance(position2, position3) >= (double)num2) { float num3 = (float)((1.0 - (double)Mathf.InverseLerp(0.0f, 20f, Vector3.Distance(position3, pos))) * 100.0); if ((double)num3 > (double)num1) { num1 = num3; traversalWaitPoint = waitPoint; } } } } return(traversalWaitPoint); }
public AITraversalWaitPoint GetEntryPointNear(Vector3 pos) { Vector3 position = GetClosestEntry(pos).position; Vector3 position2 = GetFarthestEntry(pos).position; BaseEntity[] array2 = new BaseEntity[1]; AITraversalWaitPoint result = null; float num = 0f; AITraversalWaitPoint[] array = waitPoints; foreach (AITraversalWaitPoint aITraversalWaitPoint in array) { if (aITraversalWaitPoint.Occupied()) { continue; } Vector3 position3 = aITraversalWaitPoint.transform.position; float num2 = Vector3.Distance(position, position3); if (!(Vector3.Distance(position2, position3) < num2)) { float value = Vector3.Distance(position3, pos); float num3 = (1f - Mathf.InverseLerp(0f, 20f, value)) * 100f; if (num3 > num) { num = num3; result = aITraversalWaitPoint; } } } return(result); }
public AITraversalWaitPoint GetEntryPointNear(Vector3 pos) { Vector3 closestEntry = this.GetClosestEntry(pos).position; Vector3 farthestEntry = this.GetFarthestEntry(pos).position; BaseEntity[] baseEntityArray = new BaseEntity[1]; AITraversalWaitPoint aITraversalWaitPoint = null; float single = 0f; AITraversalWaitPoint[] aITraversalWaitPointArray = this.waitPoints; for (int i = 0; i < (int)aITraversalWaitPointArray.Length; i++) { AITraversalWaitPoint aITraversalWaitPoint1 = aITraversalWaitPointArray[i]; if (!aITraversalWaitPoint1.Occupied()) { Vector3 vector3 = aITraversalWaitPoint1.transform.position; float single1 = Vector3.Distance(closestEntry, vector3); if (Vector3.Distance(farthestEntry, vector3) >= single1) { float single2 = Vector3.Distance(vector3, pos); float single3 = (1f - Mathf.InverseLerp(0f, 20f, single2)) * 100f; if (single3 > single) { single = single3; aITraversalWaitPoint = aITraversalWaitPoint1; } } } } return(aITraversalWaitPoint); }
public override void StateThink(float delta) { Vector3 vector3; Vector3 vector31; base.StateThink(delta); if (this.area) { if (this.isTraversing) { this.area.SetBusyFor(delta * 2f); } else if (!this.area.CanTraverse(base.GetEntity())) { AITraversalWaitPoint entryPointNear = this.area.GetEntryPointNear(base.GetEntity().ServerPosition); if (entryPointNear) { entryPointNear.Occupy(1f); base.GetEntity().SetStationaryAimPoint(this.area.GetClosestEntry(base.GetEntity().ServerPosition).position); } vector3 = (entryPointNear == null ? base.GetEntity().ServerPosition : entryPointNear.transform.position); base.GetEntity().SetDestination(vector3); this.waiting = true; this.isTraversing = false; } else { this.waiting = false; this.isTraversing = true; AITraversalWaitPoint aITraversalWaitPoint = this.area.GetEntryPointNear(this.area.GetFarthestEntry(base.GetEntity().ServerPosition).position); if (aITraversalWaitPoint) { aITraversalWaitPoint.Occupy(delta * 2f); } vector31 = (aITraversalWaitPoint == null ? this.desiredDestination : aITraversalWaitPoint.transform.position); base.GetEntity().SetDestination(vector31); this.area.SetBusyFor(delta * 2f); } } if (this.isTraversing && Vector3.Distance(base.GetEntity().ServerPosition, base.GetEntity().finalDestination) < 0.25f) { this.finished = true; this.isTraversing = false; this.waiting = false; } }
public override void StateThink(float delta) { base.StateThink(delta); if (Object.op_Implicit((Object)this.area)) { if (this.isTraversing) { this.area.SetBusyFor(delta * 2f); } else if (this.area.CanTraverse((BaseEntity)this.GetEntity())) { this.waiting = false; this.isTraversing = true; AITraversalWaitPoint entryPointNear = this.area.GetEntryPointNear(this.area.GetFarthestEntry(this.GetEntity().ServerPosition).get_position()); if (Object.op_Implicit((Object)entryPointNear)) { entryPointNear.Occupy(delta * 2f); } this.GetEntity().SetDestination(Object.op_Equality((Object)entryPointNear, (Object)null) ? this.desiredDestination : ((Component)entryPointNear).get_transform().get_position()); this.area.SetBusyFor(delta * 2f); } else { AITraversalWaitPoint entryPointNear = this.area.GetEntryPointNear(this.GetEntity().ServerPosition); if (Object.op_Implicit((Object)entryPointNear)) { entryPointNear.Occupy(1f); this.GetEntity().SetStationaryAimPoint(this.area.GetClosestEntry(this.GetEntity().ServerPosition).get_position()); } this.GetEntity().SetDestination(Object.op_Equality((Object)entryPointNear, (Object)null) ? this.GetEntity().ServerPosition : ((Component)entryPointNear).get_transform().get_position()); this.waiting = true; this.isTraversing = false; } } if (!this.isTraversing || (double)Vector3.Distance(this.GetEntity().ServerPosition, this.GetEntity().finalDestination) >= 0.25) { return; } this.finished = true; this.isTraversing = false; this.waiting = false; }