Exemplo n.º 1
0
    void GenerateWorld(float[][] solid_layers, float[][] liquid_layers)
    {
        if (m_use_world_gen)
        {
            GenerateWorld();
        }
        else if (m_use_height_map)
        {
            var height_map_tex   = Resources.Load <Texture2D>("heightmap");
            var pixels           = height_map_tex.GetPixels();
            var height_map_width = height_map_tex.width;

            Resources.UnloadAsset(height_map_tex);

            var densities = new float[m_grid_width_in_voxels * m_grid_depth_in_voxels];

            for (int y = 0; y < m_grid_depth_in_voxels; ++y)
            {
                for (int x = 0; x < m_grid_width_in_voxels; ++x)
                {
                    var density_idx = y * m_grid_width_in_voxels + x;
                    var pixel_idx   = y * height_map_width + x;
                    var density     = pixels[pixel_idx].r;

                    densities[density_idx] = density;
                }
            }

            m_solid_simulation.ApplyHeightMap(densities);

            m_solid_mesher.TriangulateAll();
            m_liquid_mesher.TriangulateAll();
        }
        else
        {
            // Make just a solid floor.
            for (int layer_idx = 20; layer_idx < 22; ++layer_idx)
            {
                var layer = solid_layers[layer_idx];
                for (int i = 0; i < layer.Length; ++i)
                {
                    layer[i] = 1;
                }
            }

            var sdf = new DensityField(solid_layers, m_grid_width_in_voxels, m_grid_depth_in_voxels);
            var ldf = new DensityField(liquid_layers, m_grid_width_in_voxels, m_grid_depth_in_voxels);
            var l   = 22;


            var x = 130;
            var y = 250;
            {
                sdf.Line(x + 0, y + 0, x + 2, y + 0, l, 1f);
                sdf.Line(x + 0, y + 2, x + 2, y + 2, l, 1f);
                sdf.Line(x + 0, y + 0, x + 0, y + 2, l, 1f);
                sdf.Line(x + 2, y + 0, x + 2, y + 2, l, 1f);

                ldf.Line(x + 1, y + 1, x + 1, y + 1, l, 1f);
            }

            x += 4;
            {
                sdf.Line(x + 0, y + 0, x + 1, y + 0, l, 0.96f);
                sdf.Line(x + 0, y + 1, x + 1, y + 1, l, 0.96f);
            }

            m_solid_mesher.TriangulateAll();
            m_liquid_mesher.TriangulateAll();
        }
    }
        void ReleaseDesignerOutlets()
        {
            if (DeleteButton != null)
            {
                DeleteButton.Dispose();
                DeleteButton = null;
            }

            if (DensityField != null)
            {
                DensityField.Dispose();
                DensityField = null;
            }

            if (DoneSwich != null)
            {
                DoneSwich.Dispose();
                DoneSwich = null;
            }

            if (FlipNOField != null)
            {
                FlipNOField.Dispose();
                FlipNOField = null;
            }

            if (fuelViewCell != null)
            {
                fuelViewCell.Dispose();
                fuelViewCell = null;
            }

            if (KilosField != null)
            {
                KilosField.Dispose();
                KilosField = null;
            }

            if (LiterField != null)
            {
                LiterField.Dispose();
                LiterField = null;
            }

            if (OrderNamePicker != null)
            {
                OrderNamePicker.Dispose();
                OrderNamePicker = null;
            }

            if (OrderTableView != null)
            {
                OrderTableView.Dispose();
                OrderTableView = null;
            }

            if (SaveButton != null)
            {
                SaveButton.Dispose();
                SaveButton = null;
            }
        }