public void PaintFastAvoidWater(TerrainChunk chunk, int x, int y, int z) { Terrain terrain = chunk.Terrain; x -= chunk.Origin.X; z -= chunk.Origin.Y; Cell[] cells = Cells; for (int i = 0; i < cells.Length; i++) { Cell cell = cells[i]; int num = cell.X + x; int num2 = cell.Y + y; int num3 = cell.Z + z; if (num >= 0 && num < 16 && num2 >= 0 && num2 < 255 && num3 >= 0 && num3 < 16) { int num4 = num + chunk.Origin.X; int y2 = num2; int num5 = num3 + chunk.Origin.Y; if (chunk.GetCellContentsFast(num, num2, num3) != 18 && terrain.GetCellContents(num4 - 1, y2, num5) != 18 && terrain.GetCellContents(num4 + 1, y2, num5) != 18 && terrain.GetCellContents(num4, y2, num5 - 1) != 18 && terrain.GetCellContents(num4, y2, num5 + 1) != 18 && chunk.GetCellContentsFast(num, num2 + 1, num3) != 18) { chunk.SetCellValueFast(num, num2, num3, cell.Value); } } } }
public float ScoreShipPosition(Vector2 playerPosition, int x, int z) { float num = 0f; float num2 = m_subsystemTerrain.TerrainContentsGenerator.CalculateOceanShoreDistance(x, z); if (num2 > -8f) { num -= 100f; } num -= 0.25f * num2; float num3 = Vector2.Distance(playerPosition, new Vector2(x, z)); num -= MathUtils.Abs(num3 - 20f); int num4 = 0; TerrainChunk chunkAtCell = m_subsystemTerrain.Terrain.GetChunkAtCell(x, z); if (chunkAtCell != null && chunkAtCell.State >= TerrainChunkState.InvalidLight) { int oceanLevel = m_subsystemTerrain.TerrainContentsGenerator.OceanLevel; int num5 = oceanLevel; while (num5 >= oceanLevel - 5 && num5 >= 0) { int cellContentsFast = chunkAtCell.GetCellContentsFast(x & 0xF, num5, z & 0xF); if (cellContentsFast != 18 && cellContentsFast != 92) { break; } num5--; num4++; } } else { num4 = 2; } if (num4 < 2) { num -= 100f; } return(num + 2f * (float)num4); }