Beispiel #1
0
    void Awake()
    {
        Application.targetFrameRate = -1;
        m_solid_simulation          = new SolidSimulation(new Vector3Int(m_grid_width_in_voxels, m_grid_height_in_voxels, m_grid_depth_in_voxels), m_voxel_size_in_meters, m_solid_voxel_chunk_dimenions);
        var solid_layers = m_solid_simulation.GetLayers();

        var water_plane_layer = (int)(m_water_height / m_voxel_size_in_meters.y) + 1;

        m_liquid_simulation = new LiquidSimulation(new Vector3Int(m_grid_width_in_voxels, m_grid_height_in_voxels, m_grid_depth_in_voxels), m_voxel_size_in_meters, m_liquid_voxel_chunk_dimenions, solid_layers, m_solid_iso_level, m_min_density_to_allow_flow, water_plane_layer, m_liquid_tuning);
        var liquid_layers = m_liquid_simulation.GetLayers();

        m_liquid_simulation.SetSimulationEnabled(m_liquid_sim_enabled_on_startup);

        m_solid_brush  = SolidLayeredBrush.LoadBrush("SolidMaterials");
        m_liquid_brush = new LiquidLayeredBrush(Resources.Load <Material>("LiquidMaterials/Liquid"));

        m_solid_mesher  = CreateSolidMesher(solid_layers, m_solid_brush);
        m_liquid_mesher = CreateLiquidMesher(m_liquid_simulation.GetLayers(), m_liquid_brush);

        CreateGroundPlane(m_solid_brush);

        m_water = GameObject.Instantiate(m_water);

        m_water.transform.position = new Vector3(0, m_water_height, 0);

        SetRoomId("quicksave_12345");

        ProcessCommandLineFile();

        GenerateWorld(solid_layers, liquid_layers);

        Instance = this;
    }
Beispiel #2
0
    public WorldGenerator(SolidSimulation solid_simulation, Mesher solid_mesher, Mesher liquid_mesher)
    {
        m_solid_mesher        = solid_mesher;
        m_liquid_mesher       = liquid_mesher;
        m_dimensions_in_cells = solid_simulation.GetDimensionsInCells();

        m_solid_mesher.SetCollisionGenerationEnabled(false);
        m_solid_mesher.UpdateDensitySamples();
        m_liquid_mesher.UpdateDensitySamples();

        m_layer_idx = 0;
    }
Beispiel #3
0
    void ShowCellFoldout(string cell_name, DensityCell cell, ref bool is_expanded, SolidSimulation solid_simulation, LiquidSimulation liquid_simulation)
    {
        if (is_expanded = EditorGUILayout.Foldout(is_expanded, cell_name))
        {
            EditorGUI.indentLevel += 2;

            EditorGUILayout.LabelField($"x={cell.m_x}, z={cell.m_z}, l={cell.m_layer_idx}");

            ShowCellLine("C", cell, solid_simulation, liquid_simulation);
            ShowCellLine("L", cell.Dx(-1), solid_simulation, liquid_simulation);
            ShowCellLine("R", cell.Dx(+1), solid_simulation, liquid_simulation);
            ShowCellLine("N", cell.Dz(-1), solid_simulation, liquid_simulation);
            ShowCellLine("F", cell.Dz(+1), solid_simulation, liquid_simulation);
            ShowCellLine("B", cell.Dl(-1), solid_simulation, liquid_simulation);
            ShowCellLine("A", cell.Dl(+1), solid_simulation, liquid_simulation);

            EditorGUI.indentLevel -= 2;
        }
    }
Beispiel #4
0
    void ShowCellLine(string cell_name, DensityCell cell, SolidSimulation solid_simulation, LiquidSimulation liquid_simulation)
    {
        bool is_valid = solid_simulation.TryGetDensity(cell, out var solid_density);

        liquid_simulation.TryGetDensity(cell, out var liquid_density);
        string text = $"{cell_name}: sd={solid_density}, ld={liquid_density}";

        EditorGUILayout.BeginHorizontal();
        if (is_valid)
        {
            EditorGUILayout.LabelField(text);
            if (GUILayout.Button("->"))
            {
                CellDebugger.s_debug_cell = cell;
            }
        }
        else
        {
            EditorGUILayout.LabelField($"{cell_name}: INVALID");
        }
        EditorGUILayout.EndHorizontal();
    }