Beispiel #1
0
 // Runtime constructor
 public LandClassLoader(PQSLandControl.LandClass landClass)
 {
     this.landClass      = landClass;
     altitudeRange       = new LerpRangeLoader(landClass.altitudeRange);
     latitudeDoubleRange = new LerpRangeLoader(landClass.latitudeDoubleRange);
     latitudeRange       = new LerpRangeLoader(landClass.latitudeRange);
     longitudeRange      = new LerpRangeLoader(landClass.longitudeRange);
     coverageSimplex     = new SimplexLoader(landClass.coverageSimplex);
     noiseSimplex        = new SimplexLoader(landClass.noiseSimplex);
 }
Beispiel #2
0
        /// <summary>
        /// Changes the parameters of the PQSMod
        /// </summary>
        public override Boolean Tweak(CelestialBody body, PQSLandControl mod)
        {
            // Get the game seed and apply it
            mod.altitudeSeed  = GetRandom(HighLogic.CurrentGame.Seed);
            mod.latitudeSeed  = GetRandom(HighLogic.CurrentGame.Seed);
            mod.longitudeSeed = GetRandom(HighLogic.CurrentGame.Seed);
            if (mod.altitudeSimplex != null)
            {
                mod.altitudeSimplex.seed = GetRandom(HighLogic.CurrentGame.Seed);
            }
            if (mod.latitudeSimplex != null)
            {
                mod.latitudeSimplex.seed = GetRandom(HighLogic.CurrentGame.Seed);
            }
            if (mod.longitudeSimplex != null)
            {
                mod.longitudeSimplex.seed = GetRandom(HighLogic.CurrentGame.Seed);
            }

            // Apply it to land classes
            if (mod.landClasses != null)
            {
                for (Int32 i = 0; i < mod.landClasses.Length; i++)
                {
                    PQSLandControl.LandClass landClass = mod.landClasses[i];
                    landClass.coverageSeed = GetRandom(HighLogic.CurrentGame.Seed);
                    landClass.noiseSeed    = GetRandom(HighLogic.CurrentGame.Seed);
                    if (landClass.coverageSimplex != null)
                    {
                        landClass.coverageSimplex.seed = GetRandom(HighLogic.CurrentGame.Seed);
                    }
                    if (landClass.noiseSimplex != null)
                    {
                        landClass.noiseSimplex.seed = GetRandom(HighLogic.CurrentGame.Seed);
                    }
                }
            }

            // Apply it to scatters
            if (mod.scatters != null)
            {
                for (Int32 i = 0; i < mod.scatters.Length; i++)
                {
                    mod.scatters[i].seed = GetRandom(HighLogic.CurrentGame.Seed);
                }
            }

            // We changed something
            return(true);
        }
Beispiel #3
0
                    // Default constructor
                    public LandClassLoader()
                    {
                        landClass = new PQSLandControl.LandClass();
                        LerpRangeLoader range;

                        // Initialize default parameters
                        landClass.altDelta            = 1;
                        landClass.color               = new Color(0, 0, 0, 0);
                        landClass.coverageFrequency   = 1;
                        landClass.coverageOctaves     = 1;
                        landClass.coveragePersistance = 1;
                        landClass.coverageSeed        = 1;
                        landClass.landClassName       = "Base";
                        landClass.latDelta            = 1;
                        landClass.lonDelta            = 1;
                        landClass.noiseColor          = new Color(0, 0, 0, 0);
                        landClass.noiseFrequency      = 1;
                        landClass.noiseOctaves        = 1;
                        landClass.noisePersistance    = 1;
                        landClass.noiseSeed           = 1;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd     = 1;
                        range.lerpRange.endStart   = 1;
                        range.lerpRange.startEnd   = 0;
                        range.lerpRange.startStart = 0;
                        altitudeRange = range;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd     = 1;
                        range.lerpRange.endStart   = 1;
                        range.lerpRange.startEnd   = 0;
                        range.lerpRange.startStart = 0;
                        latitudeRange = range;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd     = 1;
                        range.lerpRange.endStart   = 1;
                        range.lerpRange.startEnd   = 0;
                        range.lerpRange.startStart = 0;
                        latitudeDoubleRange        = range;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd     = 2;
                        range.lerpRange.endStart   = 2;
                        range.lerpRange.startEnd   = -1;
                        range.lerpRange.startStart = -1;
                        longitudeRange             = range;
                    }
Beispiel #4
0
            /// <summary>
            /// Renders Collection Modifiers
            /// </summary>
            protected override void RenderModifiers(Int32 id)
            {
                // Index
                index++;

                // Add Biomes
                Button(Localization.LOC_KITTOPIATECH_LANDCLASSWINDOW_ADD, () =>
                {
                    Object landClass_ = null;
                    if (Collection is IEnumerable <PQSMod_VertexPlanet.LandClass> )
                    {
                        landClass_ = new PQSMod_VertexPlanet.LandClass("LandClass", 0, 0, new Color(), new Color(), 0);
                        (landClass_ as PQSMod_VertexPlanet.LandClass).colorNoiseMap = new PQSMod_VertexPlanet.SimplexWrapper(0, 0, 0, 0);
                    }
                    if (Collection is IEnumerable <PQSMod_HeightColorMap.LandClass> )
                    {
                        landClass_ = new PQSMod_HeightColorMap.LandClass("LandClass", 0, 0, new Color(), new Color(), 0);
                    }
                    if (Collection is IEnumerable <PQSMod_HeightColorMap2.LandClass> )
                    {
                        landClass_ = new PQSMod_HeightColorMap2.LandClass("LandClass", 0, 0, new Color(), new Color(), 0);
                    }
                    if (Collection is IEnumerable <PQSMod_HeightColorMapNoise.LandClass> )
                    {
                        landClass_ = new PQSMod_HeightColorMapNoise.LandClass("LandClass", 0, 0, new Color(), new Color(), 0);
                    }
                    if (Collection is IEnumerable <PQSLandControl.LandClass> )
                    {
                        PQSLandControl.LandClass landClass = new PQSLandControl.LandClass();
                        PQSLandControl.LerpRange range;

                        // Initialize default parameters
                        landClass.altDelta            = 1;
                        landClass.color               = new Color(0, 0, 0, 0);
                        landClass.coverageFrequency   = 1;
                        landClass.coverageOctaves     = 1;
                        landClass.coveragePersistance = 1;
                        landClass.coverageSeed        = 1;
                        landClass.landClassName       = "Base";
                        landClass.latDelta            = 1;
                        landClass.lonDelta            = 1;
                        landClass.noiseColor          = new Color(0, 0, 0, 0);
                        landClass.noiseFrequency      = 1;
                        landClass.noiseOctaves        = 1;
                        landClass.noisePersistance    = 1;
                        landClass.noiseSeed           = 1;

                        range                   = new PQSLandControl.LerpRange();
                        range.endEnd            = 1;
                        range.endStart          = 1;
                        range.startEnd          = 0;
                        range.startStart        = 0;
                        landClass.altitudeRange = range;

                        range                   = new PQSLandControl.LerpRange();
                        range.endEnd            = 1;
                        range.endStart          = 1;
                        range.startEnd          = 0;
                        range.startStart        = 0;
                        landClass.latitudeRange = range;

                        range            = new PQSLandControl.LerpRange();
                        range.endEnd     = 1;
                        range.endStart   = 1;
                        range.startEnd   = 0;
                        range.startStart = 0;
                        landClass.latitudeDoubleRange = range;

                        range                    = new PQSLandControl.LerpRange();
                        range.endEnd             = 2;
                        range.endStart           = 2;
                        range.startEnd           = -1;
                        range.startStart         = -1;
                        landClass.longitudeRange = range;

                        landClass_ = landClass;
                    }
                    List <Object> collection = Collection.ToList();
                    collection.Add(landClass_);
                    Collection = collection;
                    Callback(Collection);
                });
            }
Beispiel #5
0
        internal void Apply(string body, TerrainMaterial terrainMaterial, OceanMaterial oceanMaterial)
        {
            celestialBody = Tools.GetCelestialBody(body);
            PQS pqs = null;

            if (celestialBody != null && celestialBody.pqsController != null)
            {
                pqs = celestialBody.pqsController;
                pqsSurfaceMaterial = GetPQSSurfaceMaterial(pqs);
            }
            else
            {
                pqs = PQSManagerClass.GetPQS(body);
            }

            Transform transform = Tools.GetScaledTransform(body);

            if (pqs != null)
            {
                this.sphere           = pqs;
                this.transform.parent = pqs.transform;
                this.requirements     = PQS.ModiferRequirements.Default;
                this.modEnabled       = true;
                this.order           += 10;

                this.transform.localPosition = Vector3.zero;
                this.transform.localRotation = Quaternion.identity;
                this.transform.localScale    = Vector3.one;

                //Scaled space
                Renderer r = (Renderer)transform.GetComponent(typeof(Renderer));
                if (r != null)
                {
                    terrainMaterial.SaveTextures(r.material);
                    originalPlanetShader = r.material.shader;

                    TerrainManager.Log("planet shader: " + r.material.shader);
                    r.sharedMaterial.shader = TerrainManager.PlanetShader;
                    terrainMaterial.ApplyMaterialProperties(r.sharedMaterial);
                    // terrainMaterial doesn't work anyway [1/3]
                    if (pqs.ChildSpheres.Length != 0)
                    {
                        r.sharedMaterial.EnableKeyword("OCEAN_ON");
                    }
                    else
                    {
                        r.sharedMaterial.DisableKeyword("OCEAN_ON");
                    }
                }

                // terrainMaterial doesn't work anyway [2/3]
                //terrainMaterial = null;
                //originalTerrainShader = null;

                terrainMaterial.SaveTextures(pqsSurfaceMaterial);
                originalTerrainShader = pqsSurfaceMaterial.shader;
                TerrainManager.Log("Terrain Shader Name: " + originalTerrainShader.name);
                String[] keywords = pqsSurfaceMaterial.shaderKeywords;
                pqsSurfaceMaterial.shader = TerrainManager.TerrainShader;
                //    foreach (String keyword in keywords)
                //    {
                //        pqs.surfaceMaterial.EnableKeyword(keyword);
                //    }
                terrainMaterial.ApplyMaterialProperties(pqsSurfaceMaterial);

                if (oceanMaterial != null && pqs.ChildSpheres.Length > 0)
                {
                    PQS ocean = pqs.ChildSpheres[0];
                    OceanSurfaceMaterial = GetPQSSurfaceMaterial(ocean);

                    pqsSurfaceMaterial.EnableKeyword("OCEAN_ON");
                    r.sharedMaterial.EnableKeyword("OCEAN_ON");

                    keywords            = OceanSurfaceMaterial.shaderKeywords;
                    originalOceanShader = OceanSurfaceMaterial.shader;
                    TerrainManager.Log("Ocean Shader Name: " + originalOceanShader.name);
                    OceanSurfaceMaterial.shader = TerrainManager.OceanShader;
                    //    foreach (String keyword in keywords)
                    //    {
                    //        OceanSurfaceMaterial.EnableKeyword(keyword);
                    //    }

                    terrainMaterial.ApplyMaterialProperties(OceanSurfaceMaterial);
                    oceanMaterial.ApplyMaterialProperties(OceanSurfaceMaterial);

                    PQSLandControl landControl = (PQSLandControl)pqs.transform.GetComponentInChildren(typeof(PQSLandControl));
                    if (landControl != null)
                    {
                        PQSLandControl.LandClass[] landClasses = landControl.landClasses;
                        if (landClasses != null)
                        {
                            PQSLandControl.LandClass lcBeach = landClasses.FirstOrDefault(lc => lc.landClassName == "BaseBeach");
                            PQSLandControl.LandClass lcOcean = landClasses.FirstOrDefault(lc => lc.landClassName == "Ocean Bottom");
                            if (lcBeach != null || lcOcean != null)
                            {
                                lcOcean.color = lcBeach.color;
                            }
                        }


                        //    PQS ocean =
                        //    sphere.ChildSpheres[0];
                        //    GameObject go = new GameObject();
                        //    FakeOceanPQS fakeOcean = go.AddComponent<FakeOceanPQS>();
                        //    fakeOcean.Apply(ocean);
                    }

                    SimpleCube hp = new SimpleCube(2000, ref OceanBackingMaterial, TerrainManager.OceanBackingShader);
                    OceanBacking = hp.GameObject;

                    OceanBacking.transform.parent        = FlightCamera.fetch.transform;
                    OceanBacking.transform.localPosition = Vector3.zero;
                    OceanBacking.transform.localScale    = Vector3.one;
                    OceanBacking.layer = (int)Tools.Layer.Local;
                    OceanBackingMaterial.SetFloat("_OceanRadius", (float)celestialBody.Radius);
                    terrainMaterial.ApplyMaterialProperties(OceanBackingMaterial);
                }
                else
                {
                    pqsSurfaceMaterial.DisableKeyword("OCEAN_ON");
                    //r.sharedMaterial.DisableKeyword("OCEAN_ON"); // terrainMaterial doesn't work anyway [3/3]
                }


                PQSMod_CelestialBodyTransform cbt = (PQSMod_CelestialBodyTransform)pqs.transform.GetComponentInChildren(typeof(PQSMod_CelestialBodyTransform));
                if (cbt != null)
                {
                    pqsSurfaceMaterial.SetFloat("_MainTexHandoverDist", (float)(1f / cbt.deactivateAltitude));
                    if (oceanMaterial != null && pqs.ChildSpheres.Length > 0)
                    {
                        PQS ocean = pqs.ChildSpheres[0];
                        OceanSurfaceMaterial.SetFloat("_MainTexHandoverDist", (float)(1f / cbt.deactivateAltitude));
                    }
                    pqsSurfaceMaterial.SetFloat("_OceanRadius", (float)celestialBody.Radius);
                }
            }


            this.OnSetup();
            pqs.EnableSphere();
        }
        void LandClassWindowFunc( int windowID )
        {
            int yoffset = 30;
            scrollposition3 = GUI.BeginScrollView( new Rect( 0, 30, 300, 250 ), scrollposition3,new Rect( 0,0,400,10000));
            if( landmodder_mode == 0 ) //PQSLandControl
            {
                if( landmodder_state == 0 )
                {
                    foreach( PQSLandControl.LandClass lc_Mod in LandclassestoMod)
                    {
                        if(GUI.Button( new Rect( 20, yoffset, 200, 20 ), ""+lc_Mod.landClassName ))
                        {
                            landclasstoMod = lc_Mod;
                            landmodder_state = 1;
                        }
                        yoffset += 30;
                    }
                }
                if( landmodder_state == 1 )
                {
                    foreach( FieldInfo key in landclasstoMod.GetType().GetFields() )
                    {
                    try{
                    System.Object obj = (System.Object)landclasstoMod;
                    if( key.GetValue(obj).GetType() == typeof( string ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) );
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( bool ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, GUI.Toggle( new Rect( 200 , yoffset, 200, 20 ), (bool)key.GetValue(obj), "Bool" ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( int ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, (int)StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( float ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( double ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, (double)StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( Color ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 100, 20), ""+key.Name );
                        if( GUI.Button( new Rect( 150 , yoffset, 50, 20), "Edit" ) )
                        {
                            Color getColour;
                            getColour = (Color)key.GetValue(obj);
                            rVal = getColour.r;
                            gVal = getColour.g;
                            bVal = getColour.b;
                            aVal = getColour.a;

                            objToEdit = obj;
                            KeyToEdit = key;

                            isshowingColourEditor = true;
                        }
                        //key.SetValue( obj, (double)StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    }catch{}
                }
                yoffset += 30;
                }
            }
            else
            {
                if( landmodder_state == 0 )
                {
                    foreach( PQSMod_VertexPlanet.LandClass lc_Mod in VertexLandclassestoMod)
                    {
                        if(GUI.Button( new Rect( 20, yoffset, 200, 20 ), ""+lc_Mod.name ))
                        {
                            VertexLandclasstoMod = lc_Mod;
                            landmodder_state = 1;
                        }
                        yoffset += 30;
                    }
                }
                if( landmodder_state == 1 )
                {
                    foreach( FieldInfo key in VertexLandclasstoMod.GetType().GetFields() )
                    {
                    try{
                    System.Object obj = (System.Object)VertexLandclasstoMod;
                    if( key.GetValue(obj).GetType() == typeof( string ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) );
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( bool ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, GUI.Toggle( new Rect( 200 , yoffset, 200, 20 ), (bool)key.GetValue(obj), "Bool" ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( int ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, (int)StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( float ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( double ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 200, 20), ""+key.Name );
                        key.SetValue( obj, (double)StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    else if( key.GetValue(obj).GetType() == typeof( Color ))
                    {
                        GUI.Label( new Rect( 20 , yoffset, 100, 20), ""+key.Name );
                        if( GUI.Button( new Rect( 150 , yoffset, 50, 20), "Edit" ) )
                        {
                            Color getColour;
                            getColour = (Color)key.GetValue(obj);
                            rVal = getColour.r;
                            gVal = getColour.g;
                            bVal = getColour.b;
                            aVal = getColour.a;

                            objToEdit = obj;
                            KeyToEdit = key;

                            isshowingColourEditor = true;
                        }
                        //key.SetValue( obj, (double)StrToFloat( GUI.TextField( new Rect( 200 , yoffset, 200, 20), ""+key.GetValue(obj) ) ));
                        yoffset += 30;
                    }
                    }catch{}
                }
                yoffset += 30;
                }
            }

            yoffset += 30;

            if( GUI.Button( new Rect( 20, yoffset, 200, 20 ), "Exit" ) )
            {
                showLandClassmenu = false;
                landmodder_state = 0;
            }
            GUI.EndScrollView();

            GUI.DragWindow();
        }
Beispiel #7
0
 public LandClassLoader(PQSLandControl.LandClass landClass)
 {
     this.landClass = landClass;
 }
Beispiel #8
0
                    public LandClassLoader()
                    {
                        landClass = new PQSLandControl.LandClass();
                        LerpRangeLoader range;

                        // Initialize default parameters
                        landClass.altDelta = 1;
                        landClass.color = new Color(0, 0, 0, 0);
                        landClass.coverageFrequency = 1;
                        landClass.coverageOctaves = 1;
                        landClass.coveragePersistance = 1;
                        landClass.coverageSeed = 1;
                        landClass.landClassName = "Base";
                        landClass.latDelta = 1;
                        landClass.lonDelta = 1;
                        landClass.noiseColor = new Color(0, 0, 0, 0);
                        landClass.noiseFrequency = 1;
                        landClass.noiseOctaves = 1;
                        landClass.noisePersistance = 1;
                        landClass.noiseSeed = 1;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd = 1;
                        range.lerpRange.endStart = 1;
                        range.lerpRange.startEnd = 0;
                        range.lerpRange.startStart = 0;
                        altitudeRange = range;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd = 1;
                        range.lerpRange.endStart = 1;
                        range.lerpRange.startEnd = 0;
                        range.lerpRange.startStart = 0;
                        latitudeRange = range;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd = 1;
                        range.lerpRange.endStart = 1;
                        range.lerpRange.startEnd = 0;
                        range.lerpRange.startStart = 0;
                        latitudeDoubleRange = range;

                        range = new LerpRangeLoader();
                        range.lerpRange.endEnd = 2;
                        range.lerpRange.endStart = 2;
                        range.lerpRange.startEnd = -1;
                        range.lerpRange.startStart = -1;
                        longitudeRange = range;
                    }