예제 #1
0
        /// <summary>
        /// Loads the Models from the KSC into the model Database
        /// </summary>
        public static void LoadSquadKSCModels()
        {
            var dotAnim = Resources.FindObjectsOfTypeAll <TimeOfDayAnimation>().Where(x => x.gameObject.name == "SpaceCenter").First();

            if (dotAnim != null)
            {
                //Log.Normal("DN found: " + dotAnim.gameObject.name);
                //Log.Normal("DN emissiveColorProperty: " + dotAnim.emissiveColorProperty);
                //Log.Normal("DN tgtColor: " + dotAnim.emissiveTgtColor);

                InstanceUtil.dayNightEmissives = dotAnim.emissives;
                InstanceUtil.dotPoperty        = dotAnim.emissiveColorProperty;
                InstanceUtil.dotColor          = dotAnim.emissiveTgtColor;
                InstanceUtil.dotAnimationCurve = dotAnim.emissivesCurve;

                foreach (TimeOfDayAnimation.MaterialProperty mp in dotAnim.emissives)
                {
                    //Log.Normal("DN matname: " + mp.material.name);
                    InstanceUtil.materialPropertyNames.Add(mp.material.name);
                }
            }


            // first we find get all upgradeable facilities
            Upgradeables.UpgradeableObject[] upgradeablefacilities;
            upgradeablefacilities = Resources.FindObjectsOfTypeAll <Upgradeables.UpgradeableObject>();

            foreach (var facility in upgradeablefacilities)
            {
                for (int i = 0; i < facility.UpgradeLevels.Length; i++)
                {
                    string modelName  = "KSC_" + facility.name + "_level_" + (i + 1).ToString();
                    string modelTitle = "KSC " + facility.name + " lv " + (i + 1).ToString();


                    if (modelName == "KSC_Runway_level_2")
                    {
                        if (Expansions.ExpansionsLoader.IsExpansionInstalled("MakingHistory"))
                        {
                            PimpLv2Runway(facility.UpgradeLevels[i].facilityPrefab);
                            if (facility.UpgradeLevels[i].facilityInstance != null)
                            {
                                PimpLv2Runway(facility.UpgradeLevels[i].facilityInstance);
                            }
                        }
                    }

                    // don't double register the models a second time (they will do this)
                    // maybe with a "without green flag" and filter that our later at spawn in mangle
                    if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                    {
                        continue;
                    }

                    StaticModel model = new StaticModel();
                    model.name = modelName;

                    // Fill in FakeNews errr values
                    model.path         = "KerbalKonstructs/" + modelName;
                    model.configPath   = model.path + ".cfg";
                    model.keepConvex   = true;
                    model.title        = modelTitle;
                    model.mesh         = modelName;
                    model.category     = "Squad KSC";
                    model.author       = "Squad";
                    model.manufacturer = "Squad";
                    model.description  = "Squad original " + modelTitle;

                    model.isSquad = true;

                    // the runways have all the same spawnpoint.
                    if (facility.name.Equals("Runway", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "End09/SpawnPoint";
                    }

                    // Launchpads also
                    if (facility.name.Equals("LaunchPad", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "LaunchPad_spawn";
                    }

                    // we reference only the original prefab, as we cannot instantiate an instance for some reason
                    //model.prefab = GameObject.Instantiate(facility.UpgradeLevels[i].facilityPrefab);
                    //GameObject.DontDestroyOnLoad(model.prefab);
                    //model.prefab.SetActive(false);
                    model.prefab = facility.UpgradeLevels[i].facilityPrefab;



                    ////Debug code for Material dumping
                    //foreach (Renderer renderer in model.prefab.GetComponentsInChildren<Renderer>(true))
                    //{
                    //    foreach (Material material in renderer.materials)
                    //    {
                    //        try
                    //        {
                    //            string textures = "";

                    //            foreach (string textName in material.GetTexturePropertyNames())
                    //            {
                    //                textures = textures + textName + ": " + material.GetTexture(textName).name + " ;  " + material.GetTextureScale(textName).ToString() + " ";
                    //            }

                    //            {
                    //                if (!material.HasProperty("_Color"))
                    //                {
                    //                    Log.Normal("Material: " + material.name + " : " + material.shader.name + " : " + textures + " : " + "No Color");
                    //                }
                    //                else
                    //                {
                    //                    Log.Normal("Material: " + material.name + " : " + material.shader.name + " : " + textures + " : " + material.color.ToString());
                    //                }
                    //                continue;
                    //            }
                    //        }
                    //        catch { }
                    //    }
                    //}


                    // Register new GasColor Module
                    Material grassMaterial = null;
                    model.modules = new List <StaticModule>();

                    foreach (Renderer renderer in model.prefab.GetComponentsInChildren <Renderer>(true))
                    {
                        int materialcount = 0;
                        foreach (Material material in renderer.materials.Where(mat => mat.shader.name == "KSP/Scenery/Diffuse Ground KSC"))
                        {
                            Log.Normal("Found GrassColor on: " + model.name + " : " + renderer.transform.name + " count: " + materialcount);
                            grassMaterial = material;
                            StaticModule module = new StaticModule();
                            module.moduleNamespace = "KerbalKonstructs";
                            module.moduleClassname = "GrassColor2";
                            module.moduleFields.Add("DefaultBlendMaskTexture", "BUILTIN:/" + grassMaterial.GetTexture("_BlendMaskTexture").name);
                            module.moduleFields.Add("DefaultNearGrassTexture", "BUILTIN:/" + grassMaterial.GetTexture("_NearGrassTexture").name);
                            module.moduleFields.Add("DefaultFarGrassTexture", "BUILTIN:/" + grassMaterial.GetTexture("_FarGrassTexture").name);
                            module.moduleFields.Add("DefaultTarmacTexture", "BUILTIN:/" + grassMaterial.GetTexture("_TarmacTexture").name);

                            module.moduleFields.Add("DefaultTarmacTiling", ConfigNode.WriteVector(grassMaterial.GetTextureScale("_TarmacTexture")));

                            module.moduleFields.Add("DefaultNearGrassTiling", grassMaterial.GetFloat("_NearGrassTiling").ToString());
                            module.moduleFields.Add("DefaultFarGrassTiling", grassMaterial.GetFloat("_FarGrassTiling").ToString());

                            module.moduleFields.Add("GrassMeshName", renderer.transform.name);

                            module.moduleFields.Add("MaterialOffset", materialcount.ToString());

                            model.modules.Add(module);

                            materialcount++;

                            TexturePreset preset = new TexturePreset();
                            preset.usage       = TextureUsage.BlendMask;
                            preset.texturePath = "BUILTIN:/" + grassMaterial.GetTexture("_BlendMaskTexture").name;
                            if (TextureSelector.additionalTextures.Where(x => x.texturePath == preset.texturePath).Count() == 0)
                            {
                                TextureSelector.additionalTextures.Add(preset);
                            }
                        }
                    }

                    StaticDatabase.RegisterModel(model, modelName);

                    if (modelName == "KSC_SpaceplaneHangar_level_3")
                    {
                        CreateModelFromGameObject(model.prefab.transform.FindRecursive("Tank").gameObject, "KSC_FuelTank", "Tanks");
                        CreateModelFromGameObject(model.prefab.transform.FindRecursive("ksp_pad_cylTank").gameObject, "KSC_FuelTanks", "Tanks");
                        CreateModelFromGameObject(model.prefab.transform.FindRecursive("ksp_pad_waterTower").gameObject, "KSC_WaterTower", "Tanks");
                    }

                    // try to extract the wrecks from the facilities
                    var transforms = model.prefab.transform.GetComponentsInChildren <Transform>(true);
                    int wreckCount = 0;
                    foreach (var transform in transforms)
                    {
                        if (transform.name.Equals("wreck", StringComparison.InvariantCultureIgnoreCase))
                        {
                            wreckCount++;
                            StaticModel wreck     = new StaticModel();
                            string      wreckName = modelName + "_wreck_" + wreckCount.ToString();
                            wreck.name = wreckName;

                            // Fill in FakeNews errr values
                            wreck.path         = "KerbalKonstructs/" + wreckName;
                            wreck.configPath   = wreck.path + ".cfg";
                            wreck.keepConvex   = true;
                            wreck.title        = modelTitle + " wreck " + wreckCount.ToString();
                            wreck.mesh         = wreckName;
                            wreck.category     = "Squad KSC wreck";
                            wreck.author       = "Squad";
                            wreck.manufacturer = "Squad";
                            wreck.description  = "Squad original " + wreck.title;

                            wreck.isSquad = true;
                            wreck.prefab  = GameObject.Instantiate(transform.gameObject);
                            GameObject.DontDestroyOnLoad(wreck.prefab);
                            wreck.prefab.SetActive(false);

                            //wreck.prefab.GetComponent<Transform>().parent = null;
                            StaticDatabase.RegisterModel(wreck, wreck.name);
                        }
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Loads the Models from the KSC into the model Database
        /// </summary>
        public static void LoadSquadKSCModels()
        {
            var dotAnim = Resources.FindObjectsOfTypeAll <TimeOfDayAnimation>().Where(x => x.gameObject.name == "SpaceCenter").First();

            if (dotAnim != null)
            {
                //Log.Normal("DN found: " + dotAnim.gameObject.name);
                //Log.Normal("DN emissiveColorProperty: " + dotAnim.emissiveColorProperty);
                //Log.Normal("DN tgtColor: " + dotAnim.emissiveTgtColor);

                InstanceUtil.dayNightEmissives = dotAnim.emissives;
                InstanceUtil.dotPoperty        = dotAnim.emissiveColorProperty;
                InstanceUtil.dotColor          = dotAnim.emissiveTgtColor;
                InstanceUtil.dotAnimationCurve = dotAnim.emissivesCurve;

                foreach (TimeOfDayAnimation.MaterialProperty mp in dotAnim.emissives)
                {
                    //Log.Normal("DN matname: " + mp.material.name);
                    InstanceUtil.materialPropertyNames.Add(mp.material.name);
                }
            }


            // first we find get all upgradeable facilities
            Upgradeables.UpgradeableObject[] upgradeablefacilities;
            upgradeablefacilities = Resources.FindObjectsOfTypeAll <Upgradeables.UpgradeableObject>();

            foreach (var facility in upgradeablefacilities)
            {
                for (int i = 0; i < facility.UpgradeLevels.Length; i++)
                {
                    string modelName  = "KSC_" + facility.name + "_level_" + (i + 1).ToString();
                    string modelTitle = "KSC " + facility.name + " lv " + (i + 1).ToString();

                    // don't double register the models a second time (they will do this)
                    // maybe with a "without green flag" and filter that our later at spawn in mangle
                    if (StaticDatabase.allStaticModels.Select(x => x.name).Contains(modelName))
                    {
                        continue;
                    }

                    StaticModel model = new StaticModel();
                    model.name = modelName;

                    // Fill in FakeNews errr values
                    model.path         = "KerbalKonstructs/" + modelName;
                    model.configPath   = model.path + ".cfg";
                    model.keepConvex   = true;
                    model.title        = modelTitle;
                    model.mesh         = modelName;
                    model.category     = "Squad KSC";
                    model.author       = "Squad";
                    model.manufacturer = "Squad";
                    model.description  = "Squad original " + modelTitle;

                    model.isSquad = true;

                    // the runways have all the same spawnpoint.
                    if (facility.name.Equals("Runway", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "End09/SpawnPoint";
                    }

                    // Launchpads also
                    if (facility.name.Equals("LaunchPad", StringComparison.CurrentCultureIgnoreCase))
                    {
                        model.DefaultLaunchPadTransform = "LaunchPad_spawn";
                    }

                    // we reference only the original prefab, as we cannot instantiate an instance for some reason
                    model.prefab = facility.UpgradeLevels[i].facilityPrefab;

                    // Register new GasColor Module
                    bool hasGrasMaterial = false;
                    foreach (Renderer renderer in model.prefab.GetComponentsInChildren <Renderer>(true))
                    {
                        foreach (Material material in renderer.materials.Where(mat => mat.name == "ksc_exterior_terrain_grass_02 (Instance)"))
                        {
                            //Log.Normal("gras: " + material.name + " : " + material.color.ToString() + " : " + material.mainTexture.name);
                            hasGrasMaterial = true;
                            break;
                        }
                    }
                    if (hasGrasMaterial)
                    {
                        //Log.Normal("Adding GrasColor to: " + model.name);
                        StaticModule module = new StaticModule();
                        module.moduleNamespace = "KerbalKonstructs";
                        module.moduleClassname = "GrasColor";
                        module.moduleFields.Add("GrasTextureImage", "BUILTIN:/terrain_grass00_new");
                        model.modules = new List <StaticModule>();
                        model.modules.Add(module);
                    }

                    StaticDatabase.RegisterModel(model, modelName);

                    // try to extract the wrecks from the facilities
                    var transforms = model.prefab.transform.GetComponentsInChildren <Transform>(true);
                    int wreckCount = 0;
                    foreach (var transform in transforms)
                    {
                        if (transform.name.Equals("wreck", StringComparison.InvariantCultureIgnoreCase))
                        {
                            wreckCount++;
                            StaticModel wreck     = new StaticModel();
                            string      wreckName = modelName + "_wreck_" + wreckCount.ToString();
                            wreck.name = wreckName;

                            // Fill in FakeNews errr values
                            wreck.path         = "KerbalKonstructs/" + wreckName;
                            wreck.configPath   = wreck.path + ".cfg";
                            wreck.keepConvex   = true;
                            wreck.title        = modelTitle + " wreck " + wreckCount.ToString();
                            wreck.mesh         = wreckName;
                            wreck.category     = "Squad KSC wreck";
                            wreck.author       = "Squad";
                            wreck.manufacturer = "Squad";
                            wreck.description  = "Squad original " + wreck.title;

                            wreck.isSquad = true;
                            wreck.prefab  = transform.gameObject;
                            //wreck.prefab.GetComponent<Transform>().parent = null;
                            StaticDatabase.RegisterModel(wreck, wreck.name);
                        }
                    }
                }
            }
        }