示例#1
0
 public void SwapPlanet(int i)
 {
     if (selected == planets[i])
     {
         return;
     }
     swaping = true;
     StartCoroutine(MoveAway(selected.gameObject));
     selected = planets[i];
     StartCoroutine(MoveIn(selected.gameObject));
     InitUI();
     swaping = false;
 }
示例#2
0
    public override void OnInspectorGUI()
    {
        serializedObject.ApplyModifiedProperties();
        //debug = EditorGUILayout.Toggle(debug);
        if (debug)
        {
            DrawDefaultInspector();
        }

        HPlanet planet = (HPlanet)target;


        string[] toolBarOptions = new string[4] {
            "General", "Atmoshere", "Climate", "Population"
        };
        float iconSize = Mathf.Min(200, Screen.width * 0.5f - 30);

        if (GUILayout.Button(new GUIContent("Make Unique", "Use HPlanet.MakeUnique() if you want to generate planets at runtime")))
        {
            path = EditorUtility.SaveFilePanel("Choose folder to save material", path, "Planet Name", "mat");
            if (path.Length != 0)
            {
                if (path.Substring(path.Length - 4) == ".mat")
                {
                    path = path.Remove(path.Length - 4);
                }
                path = "Assets" + path.Substring(Application.dataPath.Length);
                AssetDatabase.CreateAsset(new Material(planet.PlanetMaterial), path + ".mat");
                planet.PlanetMaterial     = AssetDatabase.LoadAssetAtPath <Material>(path + ".mat");
                planet.AtmosphereMaterial = new Material(planet.AtmosphereMaterial);
            }
        }

        toolBar = GUILayout.Toolbar(toolBar, toolBarOptions);



        switch (toolBar)
        {
        case 0:
        {
            EditorGUI.BeginChangeCheck();


            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Height", GUILayout.Width(iconSize));
            //GUILayout.FlexibleSpace();
            EditorGUILayout.LabelField("Details", GUILayout.Width(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            heightMap = (Texture)EditorGUILayout.ObjectField(planet.HeightMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            //GUILayout.FlexibleSpace();
            detailsMap = (Texture)EditorGUILayout.ObjectField(planet.DetailsMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.PropertyField(serializedObject.FindProperty("HeightGradient"), new GUIContent(""), GUILayout.Width(iconSize), GUILayout.Height(40));

            EditorGUILayout.PropertyField(serializedObject.FindProperty("DetailsGradient"), new GUIContent(""), GUILayout.Width(iconSize), GUILayout.Height(40));

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize));
            EditorGUILayout.LabelField("Details Scale:");
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize));
            //GUILayout.FlexibleSpace();
            detailsScale = EditorGUILayout.Slider(planet.DetailsScale, 0, 3);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            //GUILayout.FlexibleSpace();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            EditorGUILayout.LabelField("Normal Map", GUILayout.Width(iconSize));
            //GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            normalsMap = (Texture)EditorGUILayout.ObjectField(planet.NormalsMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            EditorGUILayout.EndHorizontal();



            EditorGUILayout.LabelField("Main:", EditorStyles.boldLabel);
            simpleShader = EditorGUILayout.Toggle(new GUIContent(" Simplified Shader:", "Simplier clouds, faster projection"), planet.PlanetShader == Shader.Find("Human Unit/Planet Simple"));
            randomSeed   = EditorGUILayout.Slider(" Random Seed:", planet.RandomSeed, 0, 1000);
            size         = EditorGUILayout.Slider(" Size:", planet.Size, 0, 1);
            ambient      = EditorGUILayout.Slider(" Ambient:", planet.Ambient, 0, 1);
            relief       = EditorGUILayout.Slider(" Relief:", planet.Relief, 0, 1);


            EditorGUILayout.LabelField("Oceans:", EditorStyles.boldLabel);
            waterLevel     = EditorGUILayout.Slider(" Water Level:", planet.WaterLevel, 0, 1);
            shoresContrast = EditorGUILayout.Slider(" Shores Contrast:", planet.ShoresContrast, 0, 1);
            oceanOpacity   = EditorGUILayout.Slider(" Ocean Opacity:", planet.OceanOpacity, 0, 1);
            EditorGUILayout.LabelField("Liquid Properties:", EditorStyles.boldLabel);

            EditorGUILayout.BeginHorizontal();
            liquidColor = EditorGUILayout.ColorField(new GUIContent(" Color:"), planet.LiquidColor, true, false, false, new ColorPickerHDRConfig(0, 4, 0, 4));
            if ((GUILayout.Button(new GUIContent("Copy from atmosphere"))))
            {
                liquidColor = planet.AtmosphereColor;
            }
            EditorGUILayout.EndHorizontal();

            specularity = EditorGUILayout.Slider(" Specularity:", planet.Specularity, 0, 1);
            gloss       = EditorGUILayout.Slider(" Gloss:", planet.Gloss, 0, 1);


            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                Undo.RecordObject(planet, "Modified General of " + planet.name);
                planet.PlanetShader = simpleShader ? Shader.Find("Human Unit/Planet Simple") : Shader.Find("Human Unit/Planet");
                planet.UpdateHeightGradientMap();
                planet.UpdateDetailsGradientMap();
                planet.HeightMap      = heightMap;
                planet.DetailsMap     = detailsMap;
                planet.DetailsScale   = detailsScale;
                planet.NormalsMap     = normalsMap;
                planet.RandomSeed     = randomSeed;
                planet.Size           = size;
                planet.Ambient        = ambient;
                planet.Relief         = relief;
                planet.WaterLevel     = waterLevel;
                planet.OceanOpacity   = oceanOpacity;
                planet.ShoresContrast = shoresContrast;
                planet.LiquidColor    = liquidColor;
                planet.Specularity    = specularity;
                planet.Gloss          = gloss;

                EditorUtility.SetDirty(planet);
            }
            break;
        }

        case 1:
        {
            EditorGUI.BeginChangeCheck();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Clouds", GUILayout.Width(iconSize));
            //GUILayout.FlexibleSpace();
            EditorGUILayout.LabelField("Polar", GUILayout.Width(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            cloudsMap = (Texture)EditorGUILayout.ObjectField(planet.CloudsMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            //GUILayout.FlexibleSpace();
            cloudsPoleMap = (Texture)EditorGUILayout.ObjectField(planet.CloudsPoleMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.LabelField("Clouds:", EditorStyles.boldLabel);

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(" Blend Mode:");
            cloudsAvgBlend = GUILayout.Toolbar(System.Convert.ToInt32(planet.CloudsAvgBlend), new string[2] {
                    "MLT", "AVG"
                }) == 1;
            EditorGUILayout.EndHorizontal();
            cloudsColor   = EditorGUILayout.ColorField(new GUIContent(" Color:"), planet.CloudsColor, true, false, false, new ColorPickerHDRConfig(0, 1, 0, 1));
            complexClouds = EditorGUILayout.Toggle(" Complex:", planet.ComplexClouds);
            cloudsAmount  = EditorGUILayout.Slider(" Amount:", planet.CloudsAmount, 0, 1);
            cloudsSpeed   = EditorGUILayout.Slider(" Speed:", planet.CloudsSpeed, 0, 1);
            cloudsSpread  = EditorGUILayout.Slider(" Spread:", planet.CloudsSpread, 0, 1);
            cloudsHeight  = EditorGUILayout.Slider(" Height:", planet.CloudsHeight, 0, 1);

            EditorGUILayout.LabelField("Atmosphere:", EditorStyles.boldLabel);
            EditorGUILayout.BeginHorizontal();
            atmosphereColor = EditorGUILayout.ColorField(new GUIContent(" Color:"), planet.AtmosphereColor, true, false, false, new ColorPickerHDRConfig(0, 1, 0, 1));
            if ((GUILayout.Button(new GUIContent("Copy from liquid"))))
            {
                atmosphereColor = planet.LiquidColor;
            }
            EditorGUILayout.EndHorizontal();
            atmosphereBrightness = EditorGUILayout.Slider(" Brightness:", planet.AtmosphereBrightness, 0, 3);
            atmosphereSize       = EditorGUILayout.Slider(" Size:", planet.AtmosphereSize, 0, 1);
            atmosphereDensity    = EditorGUILayout.Slider(" Density:", planet.AtmosphereDensity, 0, 1);
            atmosphereRefraction = EditorGUILayout.Slider(" Refraction:", planet.AtmosphereRefraction, 0, 1);
            atmosphereRim        = EditorGUILayout.Slider(" Rim:", planet.AtmosphereRim, 0, 1);

            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                Undo.RecordObject(planet, "Modified Atmosphere of " + planet.name);
                planet.CloudsMap            = cloudsMap;
                planet.ComplexClouds        = complexClouds;
                planet.CloudsPoleMap        = cloudsPoleMap;
                planet.CloudsAvgBlend       = cloudsAvgBlend;
                planet.CloudsAmount         = cloudsAmount;
                planet.CloudsSpeed          = cloudsSpeed;
                planet.CloudsSpread         = cloudsSpread;
                planet.CloudsHeight         = cloudsHeight;
                planet.CloudsColor          = cloudsColor;
                planet.AtmosphereColor      = atmosphereColor;
                planet.AtmosphereBrightness = atmosphereBrightness;
                planet.AtmosphereSize       = atmosphereSize;
                planet.AtmosphereDensity    = atmosphereDensity;
                planet.AtmosphereRefraction = atmosphereRefraction;
                planet.AtmosphereRim        = atmosphereRim;

                EditorUtility.SetDirty(planet);
            }


            break;
        }

        case 2:
        {
            EditorGUI.BeginChangeCheck();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            EditorGUILayout.LabelField("Fertility Map:", GUILayout.Width(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            fertilityMap = (Texture)EditorGUILayout.ObjectField(planet.FertilityMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            EditorGUILayout.LabelField("Map Scale:");
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            vegetationScale = EditorGUILayout.Slider(planet.FertilityScale, 0, 3);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.LabelField("Vegetation:", EditorStyles.boldLabel);
            vegetationColor           = EditorGUILayout.ColorField(new GUIContent(" Vegetation Color:"), planet.VegetationColor, true, false, false, new ColorPickerHDRConfig(0, 4, 0, 4));
            fertility                 = EditorGUILayout.Slider(" Fertility:", planet.Fertility, 0, 1);
            vegetationContrast        = EditorGUILayout.Slider(" Contrast:", planet.VegetationContrast, 0, 1);
            vegetationFrostResistance = EditorGUILayout.Slider(" Frost Resistance:", planet.VegetationFrostResistance, 0, 1);

            EditorGUILayout.LabelField("Temperature:", EditorStyles.boldLabel);
            frost         = EditorGUILayout.Slider(" Frost:", planet.Frost, 0, 1);
            frostContrast = EditorGUILayout.Slider(" FrostContrast:", planet.FrostContrast, 0, 1);
            heat          = EditorGUILayout.Slider(" Heat", planet.Heat, 0, 1);

            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                Undo.RecordObject(planet, "Modified Climate of " + planet.name);

                planet.FertilityMap              = fertilityMap;
                planet.FertilityScale            = vegetationScale;
                planet.VegetationColor           = vegetationColor;
                planet.Fertility                 = fertility;
                planet.VegetationContrast        = vegetationContrast;
                planet.VegetationFrostResistance = vegetationFrostResistance;
                planet.Frost         = frost;
                planet.FrostContrast = frostContrast;
                planet.Heat          = heat;

                EditorUtility.SetDirty(planet);
            }

            break;
        }

        case 3:
        {
            EditorGUI.BeginChangeCheck();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            EditorGUILayout.LabelField("Cities Map:", GUILayout.Width(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            citiesMap = (Texture)EditorGUILayout.ObjectField(planet.CitiesMap, typeof(Texture), true, GUILayout.Width(iconSize), GUILayout.Height(iconSize));
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            EditorGUILayout.LabelField("Map Scale:");
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("", GUILayout.Width(iconSize * 0.5f));
            citiesMapScale = EditorGUILayout.Slider(planet.CitiesScale, 0, 3);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.LabelField("Main:", EditorStyles.boldLabel);
            population  = EditorGUILayout.Slider(" Population:", planet.Population, 0, 1);
            citiesColor = EditorGUILayout.ColorField(new GUIContent(" Sities Color:"), planet.CitiesColor, true, false, true, new ColorPickerHDRConfig(0, 4, 0, 4));

            EditorGUILayout.LabelField("Modifiers:", EditorStyles.boldLabel);

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("");
            populationOnLand = GUILayout.Toolbar(System.Convert.ToInt32(planet.PopulationOnLand), new string[2] {
                    "Ocean", "Land"
                }, GUILayout.Width(iconSize)) == 1;
            EditorGUILayout.EndHorizontal();

            if (populationOnLand)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("");
                populationShoresMountains = GUILayout.Toolbar((int)planet.PopulationShoresMountainsBalance, new string[2] {
                        "Shores", "Mountains"
                    }, GUILayout.Width(iconSize));
                EditorGUILayout.EndHorizontal();
            }

            popFrost = EditorGUILayout.Slider(" Frost:", planet.PopulationFrostModifier, 0, 2);
            popHeat  = EditorGUILayout.Slider(" Heat:", planet.PopulationHeatMultiplier, 0, 2);
            popVeg   = EditorGUILayout.Slider(" Vegetation:", planet.PopulationVegetationMultiplier, 0, 2);
            popNoVeg = EditorGUILayout.Slider(" No Vegetation:", planet.PopulationNoVegetationMultiplier, 0, 2);

            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                Undo.RecordObject(planet, "Modified population of " + planet.name);

                planet.CitiesMap        = citiesMap;
                planet.CitiesScale      = citiesMapScale;
                planet.CitiesColor      = citiesColor;
                planet.Population       = population;
                planet.PopulationOnLand = populationOnLand;
                planet.PopulationShoresMountainsBalance = populationShoresMountains;
                planet.PopulationFrostModifier          = popFrost;
                planet.PopulationHeatMultiplier         = popHeat;
                planet.PopulationVegetationMultiplier   = popVeg;
                planet.PopulationNoVegetationMultiplier = popNoVeg;

                EditorUtility.SetDirty(planet);
            }

            break;
        }
        }
    }
示例#3
0
 private void Start()
 {
     selected = planets[2];
     InitGrad();
     InitUI();
 }