/// <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); } } } } }
/// <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); } } } } }