private void AddMoisture(float[,] moistureData, Tile t, int radius) { int startx = MathHelpers.Mod(t.X - radius, Width); int endx = MathHelpers.Mod(t.X + radius, Width); Vector2 center = new Vector2(t.X, t.Y); int curr = radius; while (curr > 0) { int x1 = MathHelpers.Mod(t.X - curr, Width); int x2 = MathHelpers.Mod(t.X + curr, Width); int y = t.Y; AddMoisture(moistureData, mapData.Tiles[x1, y], 0.025f / (center - new Vector2(x1, y)).Magnitude); for (int i = 0; i < curr; i++) { AddMoisture(moistureData, mapData.Tiles[x1, MathHelpers.Mod(y + i + 1, Height)], 0.025f / (center - new Vector2(x1, MathHelpers.Mod(y + i + 1, Height))).Magnitude); AddMoisture(moistureData, mapData.Tiles[x1, MathHelpers.Mod(y - (i + 1), Height)], 0.025f / (center - new Vector2(x1, MathHelpers.Mod(y - (i + 1), Height))).Magnitude); AddMoisture(moistureData, mapData.Tiles[x2, MathHelpers.Mod(y + i + 1, Height)], 0.025f / (center - new Vector2(x2, MathHelpers.Mod(y + i + 1, Height))).Magnitude); AddMoisture(moistureData, mapData.Tiles[x2, MathHelpers.Mod(y - (i + 1), Height)], 0.025f / (center - new Vector2(x2, MathHelpers.Mod(y - (i + 1), Height))).Magnitude); } curr--; } }
private Tile GetBottom(Tile t) { return(mapData.Tiles[t.X, MathHelpers.Mod(t.Y + 1, Height)]); }
private Tile GetRight(Tile t) { return(mapData.Tiles[MathHelpers.Mod(t.X + 1, Width), t.Y]); }
private Tile GetTop(Tile t) { return(mapData.Tiles[t.X, MathHelpers.Mod(t.Y - 1, Height)]); }