Пример #1
0
        public byte GetTerrain(int x, int y, NeighbourDir dir, byte defaultValue)
        {
            var offset = GetOffset(x, y, dir);

            if (offset == -1)
            {
                return(defaultValue);
            }
            return(Terrain[offset]);
        }
Пример #2
0
        public float GetElevation(int x, int y, NeighbourDir dir, float defaultValue, float scale)
        {
            var offset = GetOffset(x, y, dir);

            if (offset == -1)
            {
                return(defaultValue);
            }
            return(Elevation[offset] * scale);
        }
Пример #3
0
 public byte GetTerrain(int x, int y, NeighbourDir dir, byte defaultValue)
 {
     var offset = GetOffset(x, y, dir);
     if (offset == -1)
     {
         return defaultValue;
     }
     return Terrain[offset];
 }
Пример #4
0
        /// <summary>
        /// Gets the array offset for a given cell's neighbour.
        /// Returns -1 if not valid e.g. north for row 0 etc.
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="dir"></param>
        /// <returns></returns>
        public int GetOffset(int x, int y, NeighbourDir dir)
        {
            int yMod = 0;

            switch (dir)
            {
                case NeighbourDir.North:
                    if (y > 0)
                    {
                        return ((y - 1) * Width) + x;
                    }
                    return -1;

                case NeighbourDir.NorthEast:
                    if (y > 0 && x < Width - 1)
                    {
                        return ((y - 1) * Width) + x + 1;
                    }
                    return -1;

                case NeighbourDir.East:
                    if (x < Width - 1)
                    {
                        return (y * Width) + x + 1;
                    }
                    return -1;

                case NeighbourDir.SouthEast:
                    if (y < Height - 1 && x < Width - 1)
                    {
                        return ((y + 1) * Width) + x + 1;
                    }
                    return -1;

                case NeighbourDir.South:
                    if (y < Height - 1)
                    {
                        return ((y + 1) * Width) + x;
                    }
                    return -1;

                case NeighbourDir.SouthWest:
                    if (y < Height - 1 && x > 0)
                    {
                        return ((y + 1) * Width) + x - 1;
                    }
                    return -1;

                case NeighbourDir.West:
                    if (x > 0)
                    {
                        return (y * Width) + x - 1;
                    }
                    return -1;

                case NeighbourDir.NorthWest:
                    if (y > 0 && x > 0)
                    {
                        return ((y - 1) * Width) + x - 1;
                    }
                    return -1;
            }

            //{
            //    case NeighbourDir.North:
            //        yMod = (y % 2);
            //        if (y > 0 && x < Width - yMod)
            //        {
            //            return ((y - 1) * Width) + x + yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.NorthEast:
            //        if (x < Width - 1)
            //        {
            //            return y * Width + x + 1;
            //        }
            //        return -1;

            //    case NeighbourDir.East:
            //        yMod = (y % 2);
            //        if(y < Height - 1 && x < Width - yMod){
            //            return ((y + 1) * Width) + x + yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.South:
            //        yMod = (y % 2 == 0 ? 1 : 0);
            //        if (y < Height - 1 && x > yMod)
            //        {
            //            return ((y + 1) * Width) + x - yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.SouthWest:
            //        if (x > 0)
            //        {
            //            return y * Width + x - 1;
            //        }
            //        return -1;

            //    case NeighbourDir.West:
            //        yMod = (y % 2 == 0 ? 1 : 0);
            //        if (y > 0 && x > yMod)
            //        {
            //            return ((y - 1) * Width) + x - yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.SouthEast:
            //        if (y < Height - 2)
            //        {
            //            return ((y + 2) * Width) + x;
            //        }
            //        return -1;

            //    case NeighbourDir.NorthWest:
            //        if (y > 2)
            //        {
            //            return ((y - 2) * Width) + x;
            //        }
            //        return -1;
            //}
            return -1;
        }
Пример #5
0
 public float GetElevation(int x, int y, NeighbourDir dir, float defaultValue, float scale)
 {
     var offset = GetOffset(x, y, dir);
     if (offset == -1)
     {
         return defaultValue;
     }
     return Elevation[offset] * scale;
 }
Пример #6
0
        /// <summary>
        /// Gets the array offset for a given cell's neighbour.
        /// Returns -1 if not valid e.g. north for row 0 etc.
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="dir"></param>
        /// <returns></returns>
        public int GetOffset(int x, int y, NeighbourDir dir)
        {
            int yMod = 0;

            switch (dir)
            {
            case NeighbourDir.North:
                if (y > 0)
                {
                    return(((y - 1) * Width) + x);
                }
                return(-1);

            case NeighbourDir.NorthEast:
                if (y > 0 && x < Width - 1)
                {
                    return(((y - 1) * Width) + x + 1);
                }
                return(-1);

            case NeighbourDir.East:
                if (x < Width - 1)
                {
                    return((y * Width) + x + 1);
                }
                return(-1);

            case NeighbourDir.SouthEast:
                if (y < Height - 1 && x < Width - 1)
                {
                    return(((y + 1) * Width) + x + 1);
                }
                return(-1);

            case NeighbourDir.South:
                if (y < Height - 1)
                {
                    return(((y + 1) * Width) + x);
                }
                return(-1);

            case NeighbourDir.SouthWest:
                if (y < Height - 1 && x > 0)
                {
                    return(((y + 1) * Width) + x - 1);
                }
                return(-1);

            case NeighbourDir.West:
                if (x > 0)
                {
                    return((y * Width) + x - 1);
                }
                return(-1);

            case NeighbourDir.NorthWest:
                if (y > 0 && x > 0)
                {
                    return(((y - 1) * Width) + x - 1);
                }
                return(-1);
            }

            //{
            //    case NeighbourDir.North:
            //        yMod = (y % 2);
            //        if (y > 0 && x < Width - yMod)
            //        {
            //            return ((y - 1) * Width) + x + yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.NorthEast:
            //        if (x < Width - 1)
            //        {
            //            return y * Width + x + 1;
            //        }
            //        return -1;


            //    case NeighbourDir.East:
            //        yMod = (y % 2);
            //        if(y < Height - 1 && x < Width - yMod){
            //            return ((y + 1) * Width) + x + yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.South:
            //        yMod = (y % 2 == 0 ? 1 : 0);
            //        if (y < Height - 1 && x > yMod)
            //        {
            //            return ((y + 1) * Width) + x - yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.SouthWest:
            //        if (x > 0)
            //        {
            //            return y * Width + x - 1;
            //        }
            //        return -1;

            //    case NeighbourDir.West:
            //        yMod = (y % 2 == 0 ? 1 : 0);
            //        if (y > 0 && x > yMod)
            //        {
            //            return ((y - 1) * Width) + x - yMod;
            //        }
            //        return -1;

            //    case NeighbourDir.SouthEast:
            //        if (y < Height - 2)
            //        {
            //            return ((y + 2) * Width) + x;
            //        }
            //        return -1;

            //    case NeighbourDir.NorthWest:
            //        if (y > 2)
            //        {
            //            return ((y - 2) * Width) + x;
            //        }
            //        return -1;
            //}
            return(-1);
        }