예제 #1
0
    private static void GenerateFloorPlan(BuildrData data)
    {
        BuildrGenerateConstraints constraints = data.generatorConstraints;
        RandomGen rgen = constraints.rgen;

        BuildrPlan      plan            = ScriptableObject.CreateInstance <BuildrPlan>();
        List <Vector2z> bounds          = new List <Vector2z>();
        Rect            floorplanBounds = new Rect(-15, -15, 30, 30);

        if (constraints.constrainPlanByArea)
        {
            floorplanBounds = constraints.area;
        }
        bounds.Add(new Vector2z(rgen.OutputRange(-5, floorplanBounds.xMin), rgen.OutputRange(-5, floorplanBounds.yMin)));
        bounds.Add(new Vector2z(rgen.OutputRange(5, floorplanBounds.xMax), rgen.OutputRange(-5, floorplanBounds.yMin)));
        bounds.Add(new Vector2z(rgen.OutputRange(5, floorplanBounds.xMax), rgen.OutputRange(5, floorplanBounds.yMax)));
        bounds.Add(new Vector2z(rgen.OutputRange(-5, floorplanBounds.xMin), rgen.OutputRange(5, floorplanBounds.yMax)));

        if (rgen.output < 0.25f)//should we split the volume?
        {
            float ratio = rgen.OutputRange(0.25f, 0.75f);
            bounds.Insert(1, Vector2z.Lerp(bounds[0], bounds[1], ratio));
            bounds.Insert(4, Vector2z.Lerp(bounds[3], bounds[4], ratio));

            plan.AddVolume(new [] { bounds[0], bounds[1], bounds[4], bounds[5] });
            plan.AddVolume(1, 2, new [] { bounds[2], bounds[3] });
        }
        else
        {
            plan.AddVolume(bounds.ToArray());
        }

        data.plan = plan;
    }
예제 #2
0
    public static void RefreshTextures(BuildrData data)
    {
        data.textures.Clear();
        BuildrGenerateConstraints constraints = data.generatorConstraints;
        uint seed = (uint)(constraints.useSeed ? constraints.seed : Random.Range(0, int.MaxValue));

        constraints.rgen = new RandomGen(seed);
        GetTextures(data);
    }
예제 #3
0
    public static void InspectorGUI(BuildrEditMode _editMode, BuildrData _data)
    {
        editMode    = _editMode;
        data        = _data;
        constraints = data.generatorConstraints;

        EditModes newmode = (EditModes)EditorGUILayout.EnumPopup(mode);

        if (newmode != mode)
        {
            mode = newmode;
            switch (mode)
            {
            case EditModes.general:
                editMode.stage = BuildrEditMode.stages.building;
                break;

            case EditModes.floorplan:
                editMode.stage = BuildrEditMode.stages.floorplan;
                editMode.SetMode(BuildrEditMode.modes.floorplan);
                break;
            }
        }

        switch (mode)
        {
        case EditModes.general:
            GeneralOptionsInspector();
            break;

        case EditModes.floorplan:
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Constrain Building Generation to Floorplan", GUILayout.Width(280));
            constraints.constrainPlanByPlan = EditorGUILayout.Toggle(constraints.constrainPlanByPlan);
            EditorGUILayout.EndHorizontal();
            EditorGUI.BeginDisabledGroup(!constraints.constrainPlanByPlan);
            BuildrEditModeFloorplan.InspectorGUI(editMode, _data.plan);
            EditorGUI.EndDisabledGroup();

            if (data.plan != null)
            {
                constraints.plan = data.plan.Duplicate();
            }
            break;
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(_editMode);
            EditorUtility.SetDirty(_data);
            _editMode.UpdateRender();
        }
    }
예제 #4
0
파일: BuildrData.cs 프로젝트: marlonmyd/ZS1
    public void Init()
    {
        DestroyImmediate(plan);
        plan = ScriptableObject.CreateInstance <BuildrPlan>();
        facades.Add(new BuildrFacadeDesign("default"));

        //set up two basic textures to use
        textures.Add(new BuildrTexture("bricks"));
        textures.Add(new BuildrTexture("window"));
        textures.Add(new BuildrTexture("roof"));

        roofs.Add(new BuildrRoofDesign("default"));

        bays.Add(new BuildrBay("default"));

        DestroyImmediate(generatorConstraints);
        generatorConstraints = ScriptableObject.CreateInstance <BuildrGenerateConstraints>();
        generatorConstraints.Init();
    }
예제 #5
0
    public static void Generate(BuildrData data)
    {
        BuildrGenerateConstraints constraints = data.generatorConstraints;

        uint seed = (uint)(constraints.useSeed ? constraints.seed : Random.Range(0, int.MaxValue));

        constraints.seed = (int)seed;//reassign value incase it's changed
        constraints.rgen = new RandomGen(seed);
        RandomGen rgen = constraints.rgen;

        data.ResetData(constraints.constrainPlanByPlan);

        if (!constraints.constrainPlanByPlan)
        {
            GenerateFloorPlan(data);
        }
        else
        {
            data.plan = constraints.plan;
        }

        data.floorHeight = rgen.OutputRange(constraints.minimumFloorHeight, constraints.maximumFloorHeight);
        float minBuildingSize = (constraints.constrainHeight) ? constraints.minimumHeight : BuildrGenerateConstraints.MINIMUM_BUILDING_HEIGHT;
        float maxBuildingSize = (constraints.constrainHeight) ? constraints.maximumHeight : BuildrGenerateConstraints.MAXIMUM_BUILDING_HEIGHT;

        foreach (BuildrVolume volume in data.plan.volumes)
        {
            volume.height         = rgen.OutputRange(minBuildingSize, maxBuildingSize);
            volume.numberOfFloors = Mathf.FloorToInt(volume.height / data.floorHeight);
        }

        //texture generation
        GetTextures(data);

        //facade generation
        GenerateFacades(data);

        //roof generation
        GenerateRoof(data);
    }
예제 #6
0
    private static void GenerateRoof(BuildrData data)
    {
        BuildrGenerateConstraints constraints = data.generatorConstraints;
        RandomGen        rgen       = constraints.rgen;
        BuildrRoofDesign roofDesign = new BuildrRoofDesign("default");

        List <int> availableRoofStyles = new List <int>();

        if (constraints.roofStyleFlat)
        {
            availableRoofStyles.Add(0);
        }
        if (constraints.roofStyleMansard)
        {
            availableRoofStyles.Add(1);
        }
        if (constraints.roofStyleBarrel)
        {
            availableRoofStyles.Add(2);
        }
        if (constraints.roofStyleGabled)
        {
            availableRoofStyles.Add(3);
        }
        if (constraints.roofStyleHipped)
        {
            availableRoofStyles.Add(4);
        }
        if (constraints.roofStyleLeanto)
        {
            availableRoofStyles.Add(5);
        }
        if (constraints.roofStyleSteepled)
        {
            availableRoofStyles.Add(6);
        }
        if (constraints.roofStyleSawtooth)
        {
            availableRoofStyles.Add(7);
        }

        System.Array A = System.Enum.GetValues(typeof(BuildrRoofDesign.styles));
        roofDesign.style      = (BuildrRoofDesign.styles)A.GetValue(availableRoofStyles[rgen.OutputRange(0, availableRoofStyles.Count - 1)]);
        roofDesign.height     = rgen.OutputRange(constraints.minimumRoofHeight, constraints.maximumRoofHeight);
        roofDesign.floorDepth = rgen.OutputRange(constraints.minimumRoofFloorDepth, constraints.maximumRoofFloorDepth);
        roofDesign.depth      = rgen.OutputRange(Mathf.Min(constraints.minimumRoofDepth, roofDesign.floorDepth), constraints.maximumRoofDepth);

        roofDesign.hasDormers           = (constraints.allowDormers) && (rgen.output <= constraints.dormerChance);
        roofDesign.dormerWidth          = rgen.OutputRange(constraints.dormerMinimumWidth, constraints.dormerMaximumWidth);
        roofDesign.dormerHeight         = rgen.OutputRange(constraints.dormerMinimumHeight, Mathf.Min(roofDesign.height, constraints.dormerMaximumHeight));
        roofDesign.dormerRoofHeight     = rgen.OutputRange(constraints.dormerMinimumRoofHeight, constraints.dormerMaximumRoofHeight);
        roofDesign.minimumDormerSpacing = rgen.OutputRange(constraints.dormerMinimumSpacing, constraints.dormerMaximumSpacing);
        roofDesign.dormerHeightRatio    = rgen.OutputRange(0.0f, 1.0f);

        roofDesign.parapet            = (constraints.allowParapet) && (rgen.output <= constraints.parapetChance);
        roofDesign.parapetDesignWidth = rgen.OutputRange(constraints.parapetMinimumDesignWidth, constraints.parapetMaximumDesignWidth);
        roofDesign.parapetHeight      = rgen.OutputRange(constraints.parapetMinimumHeight, constraints.parapetMaximumHeight);
        roofDesign.parapetFrontDepth  = rgen.OutputRange(constraints.parapetMinimumFrontDepth, constraints.parapetMaximumFrontDepth);
        roofDesign.parapetBackDepth   = rgen.OutputRange(constraints.parapetMinimumBackDepth, constraints.parapetMaximumBackDepth);

        if (roofDesign.style == BuildrRoofDesign.styles.sawtooth)
        {
            //make a new window texture for the sawtooth
        }

        data.roofs.Add(roofDesign);
    }
예제 #7
0
    private static void GenerateFacades(BuildrData data)
    {
        BuildrGenerateConstraints constraints = data.generatorConstraints;
        RandomGen rgen = constraints.rgen;

        //generate bays
        //blank
        BuildrBay blankBay = new BuildrBay("Blank");

        blankBay.isOpening = false;
        data.bays.Add(blankBay);
        //door
        BuildrBay doorBay = new BuildrBay("Door");

        doorBay.openingHeight      = data.floorHeight * 0.9f;
        doorBay.openingHeightRatio = 0.0f;
        float doorWidth = (doorTexture.texture.width / (float)doorTexture.texture.height) * doorBay.openingHeight;

        doorBay.openingWidth = doorWidth;
        doorBay.openingDepth = rgen.OutputRange(0.0f, 0.3f);
        doorBay.SetTexture(BuildrBay.TextureNames.OpeningBackTexture, data.textures.IndexOf(doorTexture));
        data.bays.Add(doorBay);
        //ground window
        BuildrBay groundWindow = new BuildrBay("Ground Window");

        groundWindow.openingWidth       = rgen.OutputRange(constraints.openingMinimumWidth, constraints.openingMaximumWidth);
        groundWindow.openingHeight      = rgen.OutputRange(constraints.openingMinimumHeight, Mathf.Min(data.floorHeight, constraints.openingMinimumHeight));
        groundWindow.openingDepth       = rgen.OutputRange(constraints.openingMinimumDepth, constraints.openingMaximumDepth);
        groundWindow.openingHeightRatio = 0.8f;
        data.bays.Add(groundWindow);

//        BuildrTexture groundFloorWindowTexture = windowTexture.Duplicate("groundWindowTexture");
        groundFloorWindowTexture.tiled  = false;
        groundFloorWindowTexture.tiledX = Mathf.RoundToInt(groundWindow.openingWidth / groundWindow.openingHeight);
        int groundtextureIndex = data.textures.IndexOf(groundFloorWindowTexture);

//        data.textures.Add(groundFloorWindowTexture);
        groundWindow.SetTexture(BuildrBay.TextureNames.OpeningBackTexture, groundtextureIndex);
        //other windows
        BuildrBay windowBay = new BuildrBay("Window");

        data.bays.Add(windowBay);
        //util window
        BuildrBay utilBay = new BuildrBay("Utility Window");

        data.bays.Add(utilBay);

        //generate facades
        BuildrFacadeDesign basicFacadeDesign = new BuildrFacadeDesign("default");

        basicFacadeDesign.simpleBay.openingWidth  = rgen.OutputRange(constraints.openingMinimumWidth, constraints.openingMaximumWidth);
        basicFacadeDesign.simpleBay.openingHeight = rgen.OutputRange(constraints.openingMinimumHeight, Mathf.Min(data.floorHeight, constraints.openingMinimumHeight));
        basicFacadeDesign.simpleBay.openingDepth  = rgen.OutputRange(constraints.openingMinimumDepth, constraints.openingMaximumDepth);
//        float roughBaySize = basicFacadeDesign.simpleBay.openingHeight + basicFacadeDesign.simpleBay.openingWidth;
        basicFacadeDesign.simpleBay.minimumBayWidth = rgen.OutputRange(constraints.minimumBayMaximumWidth, constraints.minimumBayMaximumWidth);
        data.facades.Add(basicFacadeDesign);
        //ground floor with and without door
        BuildrFacadeDesign groundFloorDoor = new BuildrFacadeDesign("Ground Floor With Door");

        groundFloorDoor.type = BuildrFacadeDesign.types.patterned;
        int patternSize = rgen.OutputRange(1, 8);

        for (int i = 0; i < patternSize; i++)
        {
            groundFloorDoor.bayPattern.Add(rgen.output > 0.2f?2:0);
        }
        groundFloorDoor.bayPattern.Insert(rgen.OutputRange(0, patternSize), 1);//insert door into pattern
        data.facades.Add(groundFloorDoor);
        //couple of main facades
        //utility/back wall facade
        //maybe attic version

        BuildrPlan plan = data.plan;

        for (int v = 0; v < plan.numberOfVolumes; v++)
        {
            BuildrVolume volume         = plan.volumes[v];
            int          numberOfFloors = volume.numberOfFloors;
            volume.styles.Clear();
            for (int f = 0; f < volume.points.Count; f++)
            {
                int facadeIndex = volume.points[f];
                volume.styles.AddStyle(0, facadeIndex, numberOfFloors - 1);
                volume.styles.AddStyle(1, facadeIndex, 1);
            }
        }
    }
예제 #8
0
    public static void GeneralOptionsInspector()
    {
        if (constraints == null)
        {
            data.generatorConstraints = ScriptableObject.CreateInstance <BuildrGenerateConstraints>();
            data.generatorConstraints.Init();
            constraints = data.generatorConstraints;
        }

        EditorGUILayout.BeginHorizontal("box");
        EditorGUILayout.LabelField("Saved constraints", GUILayout.Width(110));
        int numberOfFiles = xmlfilelist.Count;

        string[] fileNames = new string[numberOfFiles];
        for (int t = 0; t < numberOfFiles; t++)
        {
            string   filepath      = xmlfilelist[t];
            string[] filepathsplit = filepath.Split(filenameDelimiters);
            string   displayPath   = filepathsplit[filepathsplit.Length - 1];
            fileNames[t] = displayPath;
        }
        int newSelectedFile = EditorGUILayout.Popup(selectedFile, fileNames);

        if (newSelectedFile != selectedFile)
        {
            if (EditorUtility.DisplayDialog("Load Constraints", "Are you sure you want to load a set of constraints from file?", "Yes", "Mmm, no."))
            {
                selectedFile = newSelectedFile;
                dataFilePath = xmlfilelist[selectedFile];
                LoadConstraints();
            }
        }

        if (GUILayout.Button("Load"))
        {
            LoadConstraints();
        }
        if (GUILayout.Button("Save"))
        {
            SaveConstraints();
        }
        if (GUILayout.Button("Save As"))
        {
            SaveConstraintsAs();
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Seed", GUILayout.Width(100));
        constraints.useSeed = EditorGUILayout.Toggle(constraints.useSeed);
        EditorGUI.BeginDisabledGroup(!constraints.useSeed);
        constraints.seed = EditorGUILayout.IntField(constraints.seed);
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Floor Height", GUILayout.Width(140));
        EditorGUILayout.LabelField(constraints.minimumFloorHeight.ToString(), GUILayout.Width(35));
        EditorGUILayout.MinMaxSlider(ref constraints.minimumFloorHeight, ref constraints.maximumFloorHeight, 2.0f, 3.8f);
        EditorGUILayout.LabelField(constraints.maximumFloorHeight.ToString(), GUILayout.Width(35));
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Constrain Maximum Height", GUILayout.Width(170));
        constraints.constrainHeight = EditorGUILayout.Toggle(constraints.constrainHeight);
        EditorGUI.BeginDisabledGroup(!constraints.constrainHeight);
        EditorGUILayout.BeginVertical();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Minimum:", GUILayout.Width(70));
        constraints.minimumHeight = EditorGUILayout.FloatField(constraints.minimumHeight, GUILayout.Width(30));
        EditorGUILayout.LabelField("metres", GUILayout.Width(53));
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Maximum:", GUILayout.Width(70));
        constraints.maximumHeight = EditorGUILayout.FloatField(constraints.maximumHeight, GUILayout.Width(30));
        EditorGUILayout.LabelField("metres", GUILayout.Width(53));
        EditorGUILayout.EndHorizontal();
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Constrain Generated Floorplan", GUILayout.Width(200));
        constraints.constrainPlanByArea = EditorGUILayout.Toggle(constraints.constrainPlanByArea);
        EditorGUILayout.EndHorizontal();
        EditorGUI.BeginDisabledGroup(!constraints.constrainPlanByArea);
        EditorGUILayout.LabelField("Contraint Area");
        constraints.area = EditorGUILayout.RectField(constraints.area);
        EditorGUI.EndDisabledGroup();

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Texture Pack", GUILayout.Width(100));
        //Debug.Log("InspectorGUI " + constraints.texturePackXML + " " + xmltexturefilelist.IndexOf(constraints.texturePackXML));
        selectedTextureFile = xmltexturefilelist.IndexOf(constraints.texturePackXML);
        int numberTextureOfFiles = xmltexturefilelist.Count;

        string[] textureFileNames = new string[numberTextureOfFiles];
        for (int t = 0; t < numberTextureOfFiles; t++)
        {
            string   filepath      = xmltexturefilelist[t];
            string[] filepathsplit = filepath.Split(filenameDelimiters);
            string   displayPath   = filepathsplit[filepathsplit.Length - 1];
            textureFileNames[t] = displayPath;
        }
        int newSelectedTextureFile = EditorGUILayout.Popup(selectedTextureFile, textureFileNames);

        if (newSelectedTextureFile != selectedTextureFile)
        {
            selectedTextureFile        = newSelectedTextureFile;
            constraints.texturePackXML = xmltexturefilelist[selectedTextureFile];
            BuildrBuildingGenerator.RefreshTextures(data);
        }

        if (GUILayout.Button("Edit Texture Packs"))
        {
            EditorWindow textureEditor = EditorWindow.GetWindow <BuildrBuiltInTextureEditor>(true);
            textureEditor.minSize = new Vector2(280f, 490f);
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal("box");
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField("Design Choices", GUILayout.Width(100));
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.BeginVertical();
        constraints.rowStyled    = EditorGUILayout.Toggle("Row Styles", constraints.rowStyled);
        constraints.columnStyled = EditorGUILayout.Toggle("Column Styles", constraints.columnStyled);
//        constraints.externalAirConUnits = EditorGUILayout.Toggle("External Air Conditioner Units", constraints.rowStyled);
        constraints.splitLevel    = EditorGUILayout.Toggle("Split Level Volume", constraints.splitLevel);
        constraints.taperedLevels = EditorGUILayout.Toggle("Tapered Volume", constraints.taperedLevels);
        EditorGUILayout.EndVertical();
        EditorGUILayout.BeginVertical();
        constraints.singleLevel     = EditorGUILayout.Toggle("Single Volume Level", constraints.singleLevel);
        constraints.atticDesign     = EditorGUILayout.Toggle("Attic Design", constraints.atticDesign);
        constraints.shopGroundFloor = EditorGUILayout.Toggle("Shop Design", constraints.shopGroundFloor);
        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        //FACADE CONSTRAINTS
        int styleLabelSize = 130;

        EditorGUILayout.BeginVertical("box");
        showFacadeConstraints = EditorGUILayout.Foldout(showFacadeConstraints, "Facade Constraints");
        if (showFacadeConstraints)
        {
            EditorGUILayout.Space();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Bay Width", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.openingMinimumWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.openingMinimumWidth, ref constraints.openingMaximumWidth, 0.5f, 2.0f);
            EditorGUILayout.LabelField(constraints.openingMaximumWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Bay Height", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.openingMinimumHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.openingMinimumHeight, ref constraints.openingMaximumHeight, 0.5f, constraints.maximumFloorHeight);
            EditorGUILayout.LabelField(constraints.openingMaximumHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Bay Spacing", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.minimumBayMinimumWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.minimumBayMinimumWidth, ref constraints.minimumBayMaximumWidth, 0.125f, 2.0f);
            EditorGUILayout.LabelField(constraints.minimumBayMaximumWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Bay Opening Depth", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.openingMinimumDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.openingMinimumDepth, ref constraints.openingMaximumDepth, -0.70f, 0.70f);
            EditorGUILayout.LabelField(constraints.openingMaximumDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Facade Depth", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.facadeMinimumDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.facadeMinimumDepth, ref constraints.facadeMaximumDepth, -0.5f, 0.5f);
            EditorGUILayout.LabelField(constraints.facadeMaximumDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        //ROOF CONSTRAINTS

        EditorGUILayout.BeginVertical("box");
        showRoofConstraints = EditorGUILayout.Foldout(showRoofConstraints, "Roof Constraints");
        if (showRoofConstraints)
        {
            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Height", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.minimumRoofHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.minimumRoofHeight, ref constraints.maximumRoofHeight, 1.0f, constraints.maximumFloorHeight);
            EditorGUILayout.LabelField(constraints.maximumRoofHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Mansard Face Depth", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.minimumRoofDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.minimumRoofDepth, ref constraints.maximumRoofDepth, 0.0f, 1.0f);
            EditorGUILayout.LabelField(constraints.maximumRoofDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Mansard Floor Depth", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.minimumRoofFloorDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.minimumRoofFloorDepth, ref constraints.maximumRoofFloorDepth, 0.0f, 1.0f);
            EditorGUILayout.LabelField(constraints.maximumRoofFloorDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Flat Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleFlat = EditorGUILayout.Toggle(constraints.roofStyleFlat);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Mansard Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleMansard = EditorGUILayout.Toggle(constraints.roofStyleMansard);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Barrel Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleBarrel = EditorGUILayout.Toggle(constraints.roofStyleBarrel);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Gabled Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleGabled = EditorGUILayout.Toggle(constraints.roofStyleGabled);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.EndVertical();
            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Hipped Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleHipped = EditorGUILayout.Toggle(constraints.roofStyleHipped);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Lean To Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleLeanto = EditorGUILayout.Toggle(constraints.roofStyleLeanto);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Steepled Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleSteepled = EditorGUILayout.Toggle(constraints.roofStyleSteepled);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Sawtooth Roof Styles", GUILayout.Width(styleLabelSize));
            constraints.roofStyleSawtooth = EditorGUILayout.Toggle(constraints.roofStyleSawtooth);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Allow Dormers", GUILayout.Width(styleLabelSize));
            constraints.allowDormers = EditorGUILayout.Toggle(constraints.allowDormers, GUILayout.Width(30));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();

            EditorGUI.BeginDisabledGroup(!constraints.allowDormers);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Dormer Chance", GUILayout.Width(150));
            constraints.dormerChance = EditorGUILayout.FloatField(constraints.dormerChance, GUILayout.Width(30));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Dormer Width", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.dormerMinimumWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumWidth, ref constraints.dormerMaximumWidth, 0.5f, 2.0f);
            EditorGUILayout.LabelField(constraints.dormerMaximumWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Dormer Height", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.dormerMinimumHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumHeight, ref constraints.dormerMaximumHeight, 0.5f, 2.0f);
            EditorGUILayout.LabelField(constraints.dormerMaximumHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Dormer Roof Height", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.dormerMinimumRoofHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumRoofHeight, ref constraints.dormerMaximumRoofHeight, 0.5f, 2.0f);
            EditorGUILayout.LabelField(constraints.dormerMaximumRoofHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Dormer Spacing", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.dormerMinimumSpacing.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.dormerMinimumSpacing, ref constraints.dormerMaximumSpacing, 0.5f, 3.0f);
            EditorGUILayout.LabelField(constraints.dormerMaximumSpacing.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();
            EditorGUI.EndDisabledGroup();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Allow Parapets", GUILayout.Width(styleLabelSize));
            constraints.allowParapet = EditorGUILayout.Toggle(constraints.allowParapet, GUILayout.Width(30));
            EditorGUILayout.EndHorizontal();

            EditorGUI.BeginDisabledGroup(!constraints.allowParapet);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Parapet Render Chance", GUILayout.Width(150));
            constraints.parapetChance = EditorGUILayout.FloatField(constraints.parapetChance, GUILayout.Width(30));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Parapet Width", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.parapetMinimumDesignWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumDesignWidth, ref constraints.parapetMaximumDesignWidth, 0.0f, 1.0f);
            EditorGUILayout.LabelField(constraints.parapetMaximumDesignWidth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Parapet Height", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.parapetMinimumHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumHeight, ref constraints.parapetMaximumHeight, 0.0f, 1.0f);
            EditorGUILayout.LabelField(constraints.parapetMaximumHeight.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Parapet Front Depth", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.parapetMinimumFrontDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumFrontDepth, ref constraints.parapetMaximumFrontDepth, -1.0f, 1.0f);
            EditorGUILayout.LabelField(constraints.parapetMaximumFrontDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Parapet Back Depth", GUILayout.Width(styleLabelSize));
            EditorGUILayout.LabelField(constraints.parapetMinimumBackDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.MinMaxSlider(ref constraints.parapetMinimumBackDepth, ref constraints.parapetMaximumBackDepth, -1.0f, 1.0f);
            EditorGUILayout.LabelField(constraints.parapetMaximumBackDepth.ToString(), GUILayout.Width(35));
            EditorGUILayout.EndHorizontal();
            EditorGUI.EndDisabledGroup();
        }


        EditorGUILayout.EndVertical();

        if (GUILayout.Button("Generate", GUILayout.Height(40)))
        {
            BuildrBuildingGenerator.Generate(data);
            editMode.UpdateRender(BuildrEditMode.renderModes.full);
        }
    }
예제 #9
0
    public void Init()
    {
        DestroyImmediate(plan);
        plan = ScriptableObject.CreateInstance<BuildrPlan>();
        facades.Add(new BuildrFacadeDesign("default"));

        //set up two basic textures to use
        textures.Add(new BuildrTexture("bricks"));
        textures.Add(new BuildrTexture("window"));
        textures.Add(new BuildrTexture("roof"));

        roofs.Add(new BuildrRoofDesign("default"));

        bays.Add(new BuildrBay("default"));

        DestroyImmediate(generatorConstraints);
        generatorConstraints = ScriptableObject.CreateInstance<BuildrGenerateConstraints>();
        generatorConstraints.Init();
    }