示例#1
0
        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;
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
 public EmergencyCheckpoint(PointF position, EmergencyCheckpoint nextPoint)
 {
     Position  = position;
     NextPoint = nextPoint;
 }