Example #1
0
        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);
                    }
                }
            }
        }
Example #2
0
        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);
        }