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]); }
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); }
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]; }
/// <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; }
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; }
/// <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); }