public Roadmap(Map map, Agent agent, int numberOfSample, int depth)
 {
     this.map = map;
     this.agent = agent;
     this.depth = depth;
     setSamplePositionList(numberOfSample);
     connectPositions();
     //int roadMapStartIndex = agent.position.findNearestAndConnectablePositionInRoadmap(this, map);
     //int roadMapGoalIndex = agent.goalPosition.findNearestAndConnectablePositionInRoadmap(this, map);
     //if (roadMapStartIndex != -1 && roadMapGoalIndex != -1)
     //{
     //    connectPositions();
     //    findMinimumPathOnGraphWithDijikstra(roadMapStartIndex, roadMapGoalIndex);
     //}
 }
 public int findNearestAndConnectablePositionInRoadmap(Roadmap roadmap,Map map)
 {
     float minLen = float.MaxValue;
     float len;
     int index = -1;
     for (int i = 0; i < roadmap.samplePositionList.Count; i++)
     {
         len = Vector2.Distance(this.leftUpCorner, roadmap.samplePositionList[i].leftUpCorner);
         if (len < minLen)
         {
             if (this.isConnectable(roadmap.samplePositionList[i],map))
             {
                 minLen = len;
                 index = i;
             }
         }
     }
     return index;
 }
 protected override void Initialize()
 {
     // TODO: Add your initialization logic here
     gameMap = new Map(this, gameMapString);
     base.Initialize();
 }
 /// <summary>
 /// Seçilmiş harita içerisinde herhangi bu pozisyona bir serbest bir yolun olup olmadığını hesaplar.
 /// </summary>
 /// <param name="position"></param>
 /// <param name="map"></param>
 /// <returns></returns>
 public bool isConnectable(Position position, Map map)
 {
     Position virtualPosition = new Position(this.leftUpCorner, this.size);
     Vector2 direction;
     bool XisSame = false;
     bool YisSame = false;
     while (true)
     {
         direction = position.leftUpCorner - virtualPosition.leftUpCorner;  // Yön belirlenir.
         direction.Normalize();
         virtualPosition.leftUpCorner += direction;
         if (float.IsNaN(virtualPosition.leftUpCorner.X) || float.IsNaN(virtualPosition.leftUpCorner.Y))
             return false;
         foreach (Obstacle obs in map.obstacleList)
         {
             if (virtualPosition.Intersect(obs.position))
                 return false;
         }
         if ((Math.Abs(virtualPosition.leftUpCorner.X - position.leftUpCorner.X) <= (Math.Abs(direction.X * 2))) && !XisSame )
         {
             XisSame = true;
             virtualPosition.leftUpCorner.X = position.leftUpCorner.X;
         }
         if ((Math.Abs(virtualPosition.leftUpCorner.Y - position.leftUpCorner.Y) <= (Math.Abs(direction.Y * 2))) && !YisSame )
         {
             YisSame = true;
             virtualPosition.leftUpCorner.Y = position.leftUpCorner.Y;
         }
         if (XisSame && YisSame)
             return true;
     }
 }
 public bool isOnObstacles(Map gameMap)
 {
     foreach (Obstacle obs in gameMap.obstacleList)
     {
         if (this.Intersect(obs.position))
             return true;
     }
     return false;
 }