Exemplo n.º 1
0
        public override void ComputeFieldOfVision(Map map, Levels.Position observer, int visionRange)
        {
            this.Observer = observer;
            clear();
            if (visionRange > 0)
            {
                for (int i = -1; i <= 1; ++i)
                {
                    for (int j = -1; j <= 1; ++j)
                    {
                        this[i, j] = true;
                    }
                }
            }
            if (visionRange > 1)
            {
                this[-2, -2] = Map.IsTransparent(map[observer.X - 1, observer.Y - 1]);
                this[-2, 2]  = Map.IsTransparent(map[observer.X - 1, observer.Y + 1]);
                this[2, -2]  = Map.IsTransparent(map[observer.X + 1, observer.Y - 1]);
                this[2, 2]   = Map.IsTransparent(map[observer.X + 1, observer.Y + 1]);

                this[-2, 0] = this[-2, -1] = this[-2, 1] = Map.IsTransparent(map[observer.X - 1, observer.Y]);
                this[2, 0]  = this[2, -1] = this[2, 1] = Map.IsTransparent(map[observer.X + 1, observer.Y]);
                this[0, -2] = this[1, -2] = this[-1, -2] = Map.IsTransparent(map[observer.X, observer.Y - 1]);
                this[0, 2]  = this[1, 2] = this[-1, 2] = Map.IsTransparent(map[observer.X, observer.Y + 1]);
            }
        }
Exemplo n.º 2
0
 public override void ComputeFieldOfVision(Map map, Levels.Position observer, int visionRange)
 {
     if (visionRange > MAX_VISION_RANGE || visionRange < 0)
     {
         throw new ArgumentOutOfRangeException("visionRange out of range");
     }
     clear();
     for (int i = -MAX_VISION_RANGE; i <= MAX_VISION_RANGE; ++i)
     {
         for (int j = -MAX_VISION_RANGE; j <= MAX_VISION_RANGE; ++j)
         {
             this[i, j] = true;
         }
     }
 }
Exemplo n.º 3
0
 public override void ComputeFieldOfVision(Map map, Levels.Position observer, int visionRange)
 {
     this.Observer = observer;
     clear();
     if (visionRange > 0)
     {
         this[0, 0] = true;
     }
     for (int i = -visionRange; i <= visionRange; ++i)
     {
         int x         = 0;
         int y         = 0;
         int it        = 0;
         int adjacency = 0;
         while (x * x + y * y < visionRange * visionRange)
         {
             it++;
             x--;
             y          = (i * it) / visionRange;
             this[x, y] = true;
             if (y > 0)
             {
                 adjacency = -1;
             }
             if (y < 0)
             {
                 adjacency = 1;
             }
             if (!Map.IsTransparent(map[observer.X + x, observer.Y + y]))
             {
                 int q = 0;
                 while (Map.IsTransparent(map[observer.X + x - q, observer.Y + y + adjacency]) &&
                        (x - 1 - q) * (x - 1 - q) + y * y < visionRange * visionRange)
                 {
                     this[x - 1 - q, y] = true;
                     q++;
                 }
                 break;
             }
         }
     }
     for (int i = -visionRange; i <= visionRange; ++i)
     {
         int x         = 0;
         int y         = 0;
         int it        = 0;
         int adjacency = 0;
         while (x * x + y * y < visionRange * visionRange)
         {
             it++;
             x++;
             y          = (i * it) / visionRange;
             this[x, y] = true;
             if (y > 0)
             {
                 adjacency = -1;
             }
             if (y < 0)
             {
                 adjacency = 1;
             }
             if (!Map.IsTransparent(map[observer.X + x, observer.Y + y]))
             {
                 int q = 0;
                 while (Map.IsTransparent(map[observer.X + x + q, observer.Y + y + adjacency]) &&
                        (x + 1 + q) * (x + 1 + q) + y * y < visionRange * visionRange)
                 {
                     this[x + 1 + q, y] = true;
                     q++;
                 }
                 break;
             }
         }
     }
     for (int i = -visionRange; i <= visionRange; ++i)
     {
         int x         = 0;
         int y         = 0;
         int it        = 0;
         int adjacency = 0;
         while (x * x + y * y < visionRange * visionRange)
         {
             it++;
             y--;
             x          = (i * it) / visionRange;
             this[x, y] = true;
             if (x > 0)
             {
                 adjacency = -1;
             }
             if (x < 0)
             {
                 adjacency = 1;
             }
             if (!Map.IsTransparent(map[observer.X + x, observer.Y + y]))
             {
                 int q = 0;
                 while (Map.IsTransparent(map[observer.X + x + adjacency, observer.Y + y - q]) &&
                        x * x + (y - q) * (y - q) < visionRange * visionRange)
                 {
                     this[x, y - 1 - q] = true;
                     q++;
                 }
                 break;
             }
         }
     }
     for (int i = -visionRange; i <= visionRange; ++i)
     {
         int x         = 0;
         int y         = 0;
         int it        = 0;
         int adjacency = 0;
         while (x * x + y * y < visionRange * visionRange)
         {
             it++;
             y++;
             x          = (i * it) / visionRange;
             this[x, y] = true;
             if (x > 0)
             {
                 adjacency = -1;
             }
             if (x < 0)
             {
                 adjacency = 1;
             }
             if (!Map.IsTransparent(map[observer.X + x, observer.Y + y]))
             {
                 int q = 0;
                 while (Map.IsTransparent(map[observer.X + x + adjacency, observer.Y + y + q]) &&
                        x * x + (y + q) * (y + q) < visionRange * visionRange)
                 {
                     this[x, y + 1 + q] = true;
                     q++;
                 }
                 break;
             }
         }
     }
 }