public void Calculate(List <Wall> walls, List <Door> doors) { if (Vector.GetDistanceBetweenPoints(Target, Position) > 2) { NextPosition = Vector.Add(Position, Vector.Multiply(Moving, Speed)); Angle = Vector.GetAngle(Moving); if (Collision(walls, doors)) { NextPosition = Position; Target = Position; } if (Temperature > 100 && !Emergency) { PathFind(); } } else if (Emergency) { if (EmergencyTarget == null) { EmergencyTarget = EmergencyRoute .OrderBy(i => i.getDistance(Position)) .FirstOrDefault(); SetTarget(EmergencyTarget.Position); } else if (EmergencyTarget.NextPoint != null) { EmergencyTarget = EmergencyTarget.NextPoint; SetTarget(EmergencyTarget.Position); } if (Vector.GetDistanceBetweenPoints(Target, Position) < 2 && !Escaped && EmergencyTarget.NextPoint == null) { Escaped = true; Logs.Add(string.Format("Escaped")); } } else { NextPosition = Position; } }
public void PathFind() { Emergency = true; if (Room != null && Vector.GetDistanceBetweenPoints(Room.Doors.FirstOrDefault().Center, Position) > CollisionDistance) { SetTarget(Room.Doors.FirstOrDefault().Center); } else { Room = null; EmergencyTarget = EmergencyRoute .OrderBy(checkpoint => checkpoint.getDistance(Position)) .First(); SetTarget(EmergencyTarget.Position); } }
public EmergencyCheckpoint(PointF position, EmergencyCheckpoint nextPoint) { Position = position; NextPoint = nextPoint; }