internal static void ExtractDesertLights() { StaticModel model = StaticDatabase.GetModelByName("SQUAD_Desert_Runway"); Transform lights1 = model.prefab.transform.FindRecursive("Section1_lights"); string modelName = "SQUAD_Runway_Lights"; StaticModel lightsModel = new StaticModel(); lightsModel.prefab = lights1.gameObject; // dishModel.prefab.transform.parent = null; lightsModel.name = modelName; lightsModel.path = "KerbalKonstructs/" + modelName; lightsModel.configPath = model.path + ".cfg"; lightsModel.keepConvex = true; lightsModel.title = "Desert Runway Lights"; lightsModel.mesh = modelName; lightsModel.category = "Runway"; lightsModel.author = "Squad"; lightsModel.manufacturer = "Squad"; lightsModel.description = "Squad original Desert Runway Lights"; lightsModel.isSquad = true; StaticDatabase.RegisterModel(lightsModel, lightsModel.name); }
/// <summary> /// Prints out the usage of each model /// </summary> public static void GetModelStats() { int modelcount = 0; int vertexcount = 0; int triangles = 0; Log.Normal("111: Modelname , Number of instances , Vertex count , triangles"); foreach (StaticModel model in StaticDatabase.allStaticModels) { if (model.isSquad) { continue; } modelcount = StaticDatabase.GetInstancesFromModel(model).Count(); // Log.Normal("Model " + model.configPath + " has: " + modelcount); var meshfilter = model.prefab.GetComponentsInChildren <MeshFilter>(true); if (meshfilter == null) { continue; } foreach (var mf in meshfilter) { Mesh mesh = mf.mesh; triangles += mesh.triangles.Length; vertexcount += mesh.vertexCount; } Log.Normal("111:" + model.configPath + " , " + model.title + " , " + modelcount + " , " + vertexcount + " , " + triangles / 3); vertexcount = 0; triangles = 0; } }
internal static void PimpLv2Runway(GameObject modelPrefab) { //StaticModel model = StaticDatabase.GetModelByName("KSC_Runway_level_2"); StaticModel modelLights = StaticDatabase.GetModelByName("SQUAD_Runway_Lights"); int count = 0; foreach (Transform target in modelPrefab.transform.FindAllRecursive("fxTarget")) { GameObject light = GameObject.Instantiate(modelLights.prefab); //light.transform.localPosition = target.localPosition; //light.transform.localRotation = target.localRotation; light.transform.localScale *= 0.6f; light.transform.parent = target.parent.FindRecursiveContains("runway"); //light.transform.parent = modelPrefab.transform; //light.transform.localRotation = model.prefab.transform.localRotation; //light.transform.localPosition = target.localPosition; light.transform.position = target.position; light.transform.rotation = modelPrefab.transform.rotation; light.transform.Translate(light.transform.up * 0.85f); light.transform.Translate(light.transform.right * 50); if (count > 1 && count < 7) { light.transform.Translate(light.transform.right * 55); } light.name = light.transform.parent.name + "_lights"; count++; } }
public static float TotalBarracksPool(StaticInstance staticInstance) { float fKerbals = 0f; foreach (StaticInstance instance in StaticDatabase.GetAllStatics()) { //if ((string)obj.model.getSetting("DefaultFacilityType") == "None") continue; if (instance.FacilityType != "Barracks") { if (instance.model.DefaultFacilityType != "Barracks") { continue; } } var dist = Vector3.Distance(staticInstance.position, instance.position); if (dist > 5000f) { continue; } Barracks foundBarracks = instance.gameObject.GetComponent <Barracks>(); fKerbals = fKerbals + foundBarracks.StaffAvailable; } return(fKerbals); }
public static void RemoveBuilding(StaticInstance instance) { if (instance.isInSavegame) { StaticDatabase.DeleteStatic(instance); } }
private static void Initialize() { foreach (DestructibleBuilding building in StaticDatabase.GetModelByName("KSC_VehicleAssemblyBuilding_level_3").prefab.GetComponentsInChildren <DestructibleBuilding>(true)) { if (building.name == "mainBuilding") { demolitionPrefab = building.DemolitionFXPrefab; } } foreach (DestructibleBuilding building in Resources.FindObjectsOfTypeAll <DestructibleBuilding>()) { if (building.name == "CornerLab") { foreach (var bla in building.CollapsibleObjects) { if (bla.SecondaryFXPrefab != null) { secondaryPrefab = bla.SecondaryFXPrefab; } } } } isInitialized = true; }
public static void RemoveAllBuildings() { foreach (StaticInstance instance in StaticDatabase.allStaticInstances) { if (instance.isInSavegame) { StaticDatabase.DeleteStatic(instance); } } }
/// <summary> /// Prints out the usage of each model /// </summary> public static void GetModelStats() { int modelcount = 0; foreach (StaticModel model in StaticDatabase.allStaticModels) { modelcount = StaticDatabase.GetInstancesFromModel(model).Count(); Log.Normal("Model " + model.configPath + " has: " + modelcount); } }
public static void RemoveStatic(string uuid) { if (StaticDatabase.instancedByUUID.ContainsKey(uuid)) { StaticDatabase.DeleteStatic(StaticDatabase.instancedByUUID[uuid]); } else { Log.UserWarning("API:RemoveObject: Can´t find a static with the UUID: " + uuid); } }
public static string SpawnObject(string modelName) { StaticModel model = StaticDatabase.GetModelByName(modelName); if (model != null) { return(CareerEditor.instance.SpawnInstance(model, 3f, KerbalKonstructs.instance.getCurrentBody().transform.InverseTransformPoint(FlightGlobals.ActiveVessel.transform.position))); } else { Log.UserError("API:SpawnObject: Could not find selected KK-Model named: " + modelName); return(null); } }
public static void LoadBuilding(ConfigNode cfgNode) { StaticInstance instance = new StaticInstance(); instance.isInSavegame = true; instance.Orientation = Vector3.up; instance.heighReference = HeightReference.Terrain; instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000); instance.Group = "SaveGame"; instance.RadialPosition = ConfigNode.ParseVector3(cfgNode.GetValue("Position")); instance.model = StaticDatabase.GetModelByName(cfgNode.GetValue("ModelName")); if (instance.model == null) { Log.UserError("LoadFromSave: Canot find model named: " + cfgNode.GetValue("ModelName")); instance = null; return; } //instance.mesh = UnityEngine.Object.Instantiate(instance.model.prefab); instance.UUID = cfgNode.GetValue("UUID"); instance.CelestialBody = ConfigUtil.GetCelestialBody(cfgNode.GetValue("Body")); instance.RadiusOffset = float.Parse(cfgNode.GetValue("Altitude")); instance.RotationAngle = float.Parse(cfgNode.GetValue("Rotation")); instance.RefLatitude = KKMath.GetLatitudeInDeg(instance.RadialPosition); instance.RefLongitude = KKMath.GetLongitudeInDeg(instance.RadialPosition); InstanceUtil.CreateGroupCenterIfMissing(instance); if (cfgNode.HasValue("IsScanable")) { bool.TryParse(cfgNode.GetValue("IsScanable"), out instance.isScanable); } bool oldLegacySpawn = KerbalKonstructs.convertLegacyConfigs; instance.Orientate(); KerbalKonstructs.convertLegacyConfigs = oldLegacySpawn; }
private void SetGroup() { slaveList = new List <AnimateOnSunRise> (); if (staticInstance.Group == "Ungrouped") { master = this; isMaster = true; return; } bool findMaster = false; foreach (StaticInstance sInstance in StaticDatabase.GetAllStatics()) { if (sInstance != staticInstance) { if (sInstance.Group == staticInstance.Group) { AnimateOnSunRise module = sInstance.gameObject.GetComponentInChildren <AnimateOnSunRise> (); if (module != null) { if (module.isMaster) { master = module; findMaster = true; isMaster = false; break; } else { slaveList.Add(module); } } } } } if (!findMaster) { master = this; isMaster = true; } }
private static void CreateModelFromGameObject(GameObject prefab, string modelName, string category) { StaticModel model = new StaticModel(); model.isSquad = true; model.name = modelName; model.prefab = GameObject.Instantiate(prefab); GameObject.DontDestroyOnLoad(model.prefab); model.prefab.SetActive(false); // Fill in FakeNews errr values model.path = "KerbalKonstructs/" + modelName; model.configPath = model.path + ".cfg"; model.keepConvex = true; model.title = modelName; model.mesh = modelName; model.category = category; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelName; if (modelName == "KSC_FuelTank") { foreach (var bla in model.prefab.GetComponentsInChildren <MeshRenderer>(true)) { bla.enabled = true; bla.gameObject.SetActive(true); } model.prefab.SetActive(true); Log.Normal("Fixing KSC Fuel Tank"); GameObject oldGameObject = model.prefab; GameObject newBaseObject = new GameObject(modelName); GameObject.DontDestroyOnLoad(newBaseObject); newBaseObject.SetActive(false); oldGameObject.transform.position = newBaseObject.transform.position; oldGameObject.transform.parent = newBaseObject.transform; oldGameObject.transform.localEulerAngles = new Vector3(270, 0, 0); model.prefab = newBaseObject; } StaticDatabase.RegisterModel(model, modelName); }
void SetLocalsGroup(string sGroup, float fRange) { if (sGroup == "") { return; } foreach (StaticInstance obj in StaticDatabase.GetAllStatics()) { if (obj.pqsCity.sphere == FlightGlobals.currentMainBody.pqsController) { var dist = Vector3.Distance(FlightGlobals.ActiveVessel.GetTransform().position, obj.gameObject.transform.position); if (dist < fRange) { StaticDatabase.ChangeGroup(obj, sGroup); } } } }
void Awake() { // Version Check Debug.Log("[SigmaLog] Version Check: KKtoSD v0.1.5"); // Check if KK is installed if (AssemblyLoader.loadedAssemblies.FirstOrDefault(a => a.name == "KerbalKonstructs") == null) { return; } // Get the groups from KK StaticInstance[] KKStatics = StaticDatabase.GetAllStatics(); // Send the groups to SD foreach (StaticInstance KKStatic in KKStatics) { CelestialBody planet = KKStatic?.CelestialBody; string group = KKStatic?.Group; PQSCity mod = KKStatic?.pqsCity; if (planet == null || string.IsNullOrEmpty(group) || mod == null) { continue; } if (!PQSCityGroups.ExternalExceptions.ContainsKey(planet)) { PQSCityGroups.ExternalExceptions.Add(planet, new Dictionary <string, List <object> >()); } if (!PQSCityGroups.ExternalExceptions[planet].ContainsKey(group)) { PQSCityGroups.ExternalExceptions[planet].Add(group, new List <object>()); } if (!PQSCityGroups.ExternalExceptions[planet][group].Contains(mod)) { PQSCityGroups.ExternalExceptions[planet][group].Add(mod); } } }
/// <summary> /// saves the facility settings to the cfg file /// </summary> internal static void SaveFacilities(ConfigNode facilityNodes) { foreach (StaticInstance instance in StaticDatabase.GetAllStatics()) { if (!instance.hasFacilities) { continue; } ConfigNode instanceNode = facilityNodes.AddNode(CareerUtils.KeyFromString(instance.RadialPosition.ToString())); instanceNode.SetValue("FacilityName", instance.gameObject.name, true); instanceNode.SetValue("FacilityType", instance.facilityType.ToString(), true); for (int i = 0; i < instance.myFacilities.Count; i++) { ConfigNode facnode = instanceNode.AddNode(instance.myFacilities[i].FacilityType); facnode.SetValue("Index", i, true); instance.myFacilities[i].SaveCareerConfig(facnode); } } }
private static void CreateModelFromGameObject(GameObject prefab, string modelName, string category) { StaticModel model = new StaticModel(); model.isSquad = true; model.name = modelName; model.prefab = GameObject.Instantiate(prefab); GameObject.DontDestroyOnLoad(model.prefab); model.prefab.SetActive(false); // Fill in FakeNews errr values model.path = "KerbalKonstructs/" + modelName; model.configPath = model.path + ".cfg"; model.keepConvex = true; model.title = modelName; model.mesh = modelName; model.category = category; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelName; StaticDatabase.RegisterModel(model, modelName); }
internal static void PimpLv2Runway(GameObject modelPrefab, bool state = false) { StaticModel modelLights = StaticDatabase.GetModelByName("SQUAD_Runway_Lights"); //Log.Normal("Prefab name: " + modelPrefab.name); int count = 0; foreach (Transform target in modelPrefab.transform.FindAllRecursive("fxTarget")) { GameObject light = GameObject.Instantiate(modelLights.prefab); light.SetActive(state); //Log.Normal("found target: " + target.parent.name); light.transform.parent = target.parent.FindRecursiveContains("runway"); light.transform.localScale *= 0.6f; light.transform.rotation = modelPrefab.transform.rotation; light.transform.localPosition = new Vector3(6.5f, 0.85f, -1050f + count * 330); light.name = light.transform.parent.name + "_lights"; count++; } }
public static string PlaceStatic(string modelName, string bodyName, double lat, double lng, float alt, float rotation, bool isScanable = false) { StaticModel model = StaticDatabase.GetModelByName(modelName); if (model != null) { StaticInstance instance = new StaticInstance(); instance.isInSavegame = true; instance.heighReference = HeightReference.Terrain; instance.gameObject = UnityEngine.Object.Instantiate(model.prefab); instance.RadiusOffset = alt; instance.CelestialBody = ConfigUtil.GetCelestialBody(bodyName); instance.Group = "Ungrouped"; instance.RadialPosition = KKMath.GetRadiadFromLatLng(instance.CelestialBody, lat, lng); instance.RotationAngle = rotation; instance.Orientation = Vector3.up; instance.VisibilityRange = (PhysicsGlobals.Instance.VesselRangesDefault.flying.unload + 3000); instance.RefLatitude = lat; instance.RefLongitude = lng; instance.model = model; instance.configPath = null; instance.configUrl = null; instance.isScanable = isScanable; instance.SpawnObject(); return(instance.UUID); } Log.UserError("API:PlaceStatic: StaticModel not found in Database: " + modelName); return(null); }
/// <summary> /// Loads all non KSC models into the ModelDatabase /// </summary> public static void LoadSquadAnomalies() { foreach (PQSCity pqs in Resources.FindObjectsOfTypeAll <PQSCity>()) { if (pqs.gameObject.name == "KSC" || pqs.gameObject.name == "KSC2" || pqs.gameObject.name == "Pyramids" || pqs.gameObject.name == "Pyramid" || pqs.gameObject.name == "CommNetDish") { continue; } string modelName = "SQUAD_" + pqs.gameObject.name; string modelTitle = "Squad " + pqs.gameObject.name; // 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 Anomalies"; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelTitle; model.isSquad = true; // we reference only the original prefab, as we cannot instantiate an instance for some reason //model.prefab = pqs.gameObject; model.prefab = GameObject.Instantiate(pqs.gameObject); GameObject.DontDestroyOnLoad(model.prefab); //model.prefab.SetActive(false); // activate them foreach (Transform child in model.prefab.GetComponentsInChildren <Transform>(true)) { if (!child || !child.gameObject) { continue; } child.gameObject.SetActive(true); } model.prefab.SetActive(false); StaticDatabase.RegisterModel(model, modelName); } foreach (PQSCity2 pqs2 in Resources.FindObjectsOfTypeAll <PQSCity2>()) { if (pqs2.gameObject.name == "Desert_Airfield") { continue; } string modelName = "SQUAD_" + pqs2.gameObject.name; string modelTitle = "Squad " + pqs2.gameObject.name; if (modelName.Contains("Clone")) { continue; } // 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 Anomalies"; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelTitle; model.isSquad = true; if (modelName == "SQUAD_MobileLaunchPad" || modelName == "SQUAD_Desert_Airfield") { model.category = "Squad LaunchSite"; model.DefaultLaunchPadTransform = "SpawnPoint"; } // we reference only the original prefab, as we cannot instantiate an instance for some reason model.prefab = pqs2.gameObject; //model.prefab = GameObject.Instantiate(pqs2.gameObject); //GameObject.DontDestroyOnLoad(model.prefab); //model.prefab.SetActive(false); StaticDatabase.RegisterModel(model, modelName); } }
/// <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); } } } } }
public static StaticInstance NearestBarracks(StaticInstance staticInstance, bool bUnassigned = true) { StaticInstance soNearest = null; float fKerbals = 0f; foreach (StaticInstance instance in StaticDatabase.GetAllStatics()) { //if ((string)obj.model.getSetting("DefaultFacilityType") == "None") continue; if (instance.FacilityType != "Barracks") { if (instance.model.DefaultFacilityType != "Barracks") { continue; } } if (instance.CelestialBody.name == FlightGlobals.currentMainBody.name) { var dist = Vector3.Distance(staticInstance.position, instance.position); if (dist > 5000f) { continue; } } else { continue; } Barracks foundBarracks = instance.gameObject.GetComponent <Barracks>(); if (bUnassigned) { fKerbals = foundBarracks.StaffAvailable; if (fKerbals < 1) { continue; } else { soNearest = instance; break; } } else { if (foundBarracks.StaffCurrent == 1) { continue; } if ((foundBarracks.StaffCurrent - 1f) == foundBarracks.StaffAvailable) { continue; } else { soNearest = instance; break; } } } return(soNearest); }
/// <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); } } } } }
/// <summary> /// Loads the individual components of the desert Airfield into the static database /// </summary> public static void LoadDesertSiteAssets() { List <string> allStatics = new List <string> { "Model", "" }; foreach (PQSCity2 pqs2 in Resources.FindObjectsOfTypeAll <PQSCity2>()) { if (pqs2.gameObject == null) { continue; } if (pqs2.gameObject.name != "Desert_Airfield") { continue; } Log.Normal("found PQS2 " + pqs2.gameObject.name); GameObject baseGameObject = pqs2.gameObject; foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true)) { if (child.parent == null) { continue; } // we only want to be one level down. if (child.parent.gameObject != baseGameObject) { continue; } Log.Normal("found child " + child.gameObject.name); if (child.gameObject.name == "Model") { string modelName = "SQUAD_Desert_Runway"; string modelTitle = "Squad Desert Runway"; // 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 Desert"; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelTitle; model.isSquad = true; model.DefaultLaunchPadTransform = "End09/SpawnPoint"; // we reference only the original prefab, as we cannot instantiate an instance for some reason model.prefab = GameObject.Instantiate(child.gameObject); GameObject.DontDestroyOnLoad(model.prefab); model.prefab.SetActive(false); StaticDatabase.RegisterModel(model, modelName); } if (child.gameObject.name == "GroundObjects") { GameObject baseObject = child.gameObject; foreach (var child2 in baseGameObject.GetComponentsInChildren <Transform>(true)) { if (child2.parent == null) { continue; } // we only want to be one level down. if (child2.parent.gameObject != baseObject) { continue; } //Filter out multiple instances or boken stuff if (child2.gameObject.name.Contains("(") || child2.gameObject.name.Contains("windmill")) { continue; } //Log.Normal("found child2 " + child2.gameObject.name); string modelName = "SQUAD_" + pqs2.gameObject.name + "_" + child2.gameObject.name; string modelTitle = "Squad " + pqs2.gameObject.name + " " + child2.gameObject.name; // 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 Desert"; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelTitle; model.isSquad = true; // we reference only the original prefab, as we cannot instantiate an instance for some reason model.prefab = GameObject.Instantiate(child2.gameObject); GameObject.DontDestroyOnLoad(model.prefab); model.prefab.SetActive(false); StaticDatabase.RegisterModel(model, modelName); } } } } }
/// <summary> /// CallBack Functions for Group Selection /// </summary> /// <param name="newGroup"></param> internal void SetGroup(GroupCenter newGroup) { Log.Normal("setting Group from " + selectedInstance.groupCenter.Group + " to " + newGroup.Group); StaticDatabase.ChangeGroup(selectedInstance, newGroup); ApplySettings(); }
void UpdateUI() { landingGuide.SetIsOnWithoutNotify(LandingGuideUI.instance.IsOpen()); navGuidance.SetIsOnWithoutNotify(NavGuidanceSystem.instance.IsOpen()); var Range = float.PositiveInfinity; //FIXME atmo scaling? other worlds? ... if (FlightGlobals.ActiveVessel.altitude > 75000) { center = null; noBasesBeacon.SetActive(true); noNearestBase.SetActive(false); nearestBaseGroup.SetActive(false); } else { center = StaticDatabase.GetClosestLaunchCenter();; if (center == null) { noBasesBeacon.SetActive(false); noNearestBase.SetActive(true); nearestBaseGroup.SetActive(false); } else { noBasesBeacon.SetActive(false); noNearestBase.SetActive(false); nearestBaseGroup.SetActive(true); Vector3 vPosition = FlightGlobals.ActiveVessel.GetTransform().position; ngsSite = LaunchSiteManager.getNearestBase(center, vPosition); Range = Vector3.Distance(center.gameObject.transform.position, vPosition); string info; if (Range < 10000) { info = center.Group + " at " + Range.ToString("#0.0") + " m"; } else { info = center.Group + " at " + (Range / 1000).ToString("#0.0") + " km"; } nearestBase.Info(info); bool ngs = NavGuidanceSystem.instance.IsOpen(); ngsFiller.SetActive(!ngs); setNGSTarget.SetActive(ngs); } } if (!MiscUtils.isCareerGame()) { careerGroup.SetActive(false); } else { careerGroup.SetActive(true); if (!FlightGlobals.ActiveVessel.Landed || Range > 5000) { //FIXME a bouncy landing will be laggy if (launchsiteItems.Count > 0) { launchsiteItems.Clear(); UIKit.UpdateListContent(launchsiteItems); } basesCanBeOpened.SetActive(true); openSite.SetActive(false); siteIsOpen.SetActive(false); siteCannoteBeOpened.SetActive(false); } else { basesCanBeOpened.SetActive(false); if (launchsiteItems.Count != center.launchsites.Count) { BuildLaunchsites(); } UpdateLaunchsite(); } //if (Range > 100000) //{ // if (bLanded) // { // GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); // GUILayout.Space(2); // GUILayout.Label("This feature is WIP.", LabelInfo); // GUI.enabled = false; // if (GUILayout.Button("Found a New Base", GUILayout.Height(23))) // { // foundingBase = true; // } // GUI.enabled = true; // GUILayout.Box(tHorizontalSep, BoxNoBorder, GUILayout.Height(4)); // GUILayout.Space(2); // } //} //else //{ // GUILayout.Label("This feature is WIP.", LabelInfo); //} } UpdateFaclilitiesGroup(); }
public static void MangleTrackingDishes() { // StrackingStation LV1 // StaticModel model = StaticDatabase.GetModelByName("KSC_TrackingStation_level_1"); List <DishController.Dish> dishes = new List <DishController.Dish>(); DishController controller = model.prefab.AddComponent <DishController>(); controller.fakeTimeWarp = 1f; controller.maxSpeed = 10f; controller.maxElevation = 20f; controller.minElevation = -70f; foreach (Transform dishTransform in model.prefab.transform.FindAllRecursive("TS_dish")) { Log.Normal("Dish: Found Dish"); DishController.Dish dish = new DishController.Dish(); dish.elevationTransform = dishTransform.FindRecursive("dish_antenna"); //dish.elevationInit = new Quaternion(); dish.rotationTransform = dishTransform.FindRecursive("dish_support"); dish.elevationTransform.parent = dish.rotationTransform; dishes.Add(dish); } controller.dishes = dishes.ToArray(); controller.enabled = true; // StrackingStation LV2 // model = StaticDatabase.GetModelByName("KSC_TrackingStation_level_2"); dishes.Clear(); controller = model.prefab.AddComponent <DishController>(); controller.fakeTimeWarp = 1f; controller.maxSpeed = 10f; controller.maxElevation = 20f; controller.minElevation = -70f; foreach (Transform dishTransform in model.prefab.transform.FindAllRecursive("TS_dish")) { Log.Normal("Dish: Found Dish"); DishController.Dish dish = new DishController.Dish(); dish.elevationTransform = dishTransform.FindRecursive("dish_antenna"); //dish.elevationInit = new Quaternion(); dish.rotationTransform = dishTransform.FindRecursive("dish_support"); dish.elevationTransform.parent = dish.rotationTransform; dishes.Add(dish); } controller.dishes = dishes.ToArray(); controller.enabled = true; // Extract LV3 Dish as Extra Dish model = StaticDatabase.GetModelByName("KSC_TrackingStation_level_3"); Transform dishNorth = model.prefab.transform.FindRecursive("dish_north"); string modelName = "SQUAD_LV3_Tracking_Dish"; StaticModel dishModel = new StaticModel(); dishModel.prefab = dishNorth.gameObject; // dishModel.prefab.transform.parent = null; dishModel.name = modelName; dishModel.path = "KerbalKonstructs/" + modelName; dishModel.configPath = model.path + ".cfg"; dishModel.keepConvex = true; dishModel.title = "TrackingStation Lv3 Dish"; dishModel.mesh = modelName; dishModel.category = "Dish"; dishModel.author = "Squad"; dishModel.manufacturer = "Squad"; dishModel.description = "Squad original TrackingStation Lv3 Dish"; dishModel.isSquad = true; StaticDatabase.RegisterModel(dishModel, dishModel.name); }
/// <summary> /// Instance Editor window /// </summary> /// <param name="windowID"></param> void InstanceEditorWindow(int windowID) { UpdateVectors(); GUILayout.BeginHorizontal(); { GUI.enabled = false; GUILayout.Button("-KK-", UIMain.DeadButton, GUILayout.Height(21)); GUILayout.FlexibleSpace(); GUILayout.Button("Instance Editor", UIMain.DeadButton, GUILayout.Height(21)); GUILayout.FlexibleSpace(); GUI.enabled = true; if (GUILayout.Button("X", UIMain.DeadButtonRed, GUILayout.Height(21))) { //KerbalKonstructs.instance.saveObjects(); KerbalKonstructs.DeselectObject(true, true); //this.Close(); } } GUILayout.EndHorizontal(); GUILayout.Space(1); GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); GUILayout.BeginHorizontal(); GUILayout.Button(selectedInstance.model.title + " (" + selectedInstance.indexInGroup.ToString() + ")", GUILayout.Height(23)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUILayout.Label("Position"); GUILayout.FlexibleSpace(); if (GUILayout.Button(new GUIContent(tCopyPos, "Copy Position"), GUILayout.Width(23), GUILayout.Height(23))) { savedpos = true; savedPosition = selectedInstance.transform.localPosition; savedRotation = selectedInstance.transform.localEulerAngles; // Debug.Log("KK: Instance position copied"); } if (GUILayout.Button(new GUIContent(tPastePos, "Paste Position"), GUILayout.Width(23), GUILayout.Height(23))) { if (savedpos) { selectedInstance.transform.localPosition = savedPosition; selectedInstance.transform.localEulerAngles = savedRotation; ApplySettings(); // Debug.Log("KK: Instance position pasted"); } } if (GUILayout.Button(new GUIContent(tSnap, "Snap to Target"), GUILayout.Width(23), GUILayout.Height(23))) { if (StaticsEditorGUI.instance.snapTargetInstance == null) { Log.UserError("No Snaptarget selected"); } else { selectedInstance.transform.localPosition = StaticsEditorGUI.instance.snapTargetInstance.transform.localPosition; selectedInstance.transform.localEulerAngles = StaticsEditorGUI.instance.snapTargetInstance.transform.localEulerAngles; ApplySettings(); } } GUILayout.FlexibleSpace(); GUILayout.Label("Increment"); increment = float.Parse(GUILayout.TextField(increment.ToString(), 5, GUILayout.Width(48))); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("0.001", GUILayout.Height(18))) { increment = 0.001f; } if (GUILayout.Button("0.01", GUILayout.Height(18))) { increment = 0.01f; } if (GUILayout.Button("0.1", GUILayout.Height(18))) { increment = 0.1f; } if (GUILayout.Button("1", GUILayout.Height(18))) { increment = 1f; } if (GUILayout.Button("10", GUILayout.Height(18))) { increment = 10f; } if (GUILayout.Button("25", GUILayout.Height(16))) { increment = 25f; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); } GUILayout.EndHorizontal(); // // Set reference butons // GUILayout.BeginHorizontal(); { GUILayout.Label("Reference System: "); GUILayout.Label(referenceSystem.ToString(), UIMain.LabelWhite); GUILayout.FlexibleSpace(); GUI.enabled = (referenceSystem == Reference.Center); if (GUILayout.Button(new GUIContent(UIMain.iconCubes.texture, "Model"), GUILayout.Height(23), GUILayout.Width(23))) { referenceSystem = Reference.Model; UpdateGizmo(); UpdateVectors(); } GUI.enabled = (referenceSystem == Reference.Model); if (GUILayout.Button(new GUIContent(UIMain.iconWorld.texture, "Group Center"), GUILayout.Height(23), GUILayout.Width(23))) { referenceSystem = Reference.Center; UpdateGizmo(); UpdateVectors(); } GUI.enabled = true; } GUILayout.EndHorizontal(); // // Model Switching // GUILayout.BeginHorizontal(); { GUILayout.Label("Selected Variant: "); GUI.enabled = (selectedInstance.model.hasVariants); string vaiantstring = (String.IsNullOrEmpty(selectedInstance.VariantName)) ? "N.A." : selectedInstance.VariantName; if (GUILayout.Button(vaiantstring, GUILayout.Width(150), GUILayout.Height(21))) { VariantSelector.staticInstance = selectedInstance; VariantSelector.Open(); } GUI.enabled = true; GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); // // Position editing // GUILayout.BeginHorizontal(); GUILayout.Label("Back / Fwd:"); GUILayout.FlexibleSpace(); posZStr = (GUILayout.TextField(posZStr, 11, GUILayout.Width(fTempWidth))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21))) { SetTransform(Vector3.back * increment); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21))) { SetTransform(Vector3.forward * increment); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Left / Right:"); GUILayout.FlexibleSpace(); posXStr = (GUILayout.TextField(posXStr, 11, GUILayout.Width(fTempWidth))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21))) { SetTransform(Vector3.left * increment); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21))) { SetTransform(Vector3.right * increment); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Down / Up:"); GUILayout.FlexibleSpace(); posYStr = (GUILayout.TextField(posYStr, 11, GUILayout.Width(fTempWidth))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21))) { SetTransform(Vector3.down * increment); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21))) { SetTransform(Vector3.up * increment); } GUILayout.EndHorizontal(); GUI.enabled = true; if (GUILayout.Button("Snap to Terrain", GUILayout.Height(21))) { Vector3 pos = selectedInstance.CelestialBody.GetWorldSurfacePosition(selectedInstance.RefLatitude, selectedInstance.RefLongitude, selectedInstance.surfaceHeight); selectedInstance.transform.position = pos; ApplySettings(); } GUI.enabled = true; GUILayout.Space(5); // // Orientation quick preset // GUILayout.Space(1); GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); //GUILayout.BeginHorizontal(); //{ // GUILayout.Label("Euler Rot."); // GUILayout.FlexibleSpace(); // GUILayout.Label("X", GUILayout.Height(18)); // oriXStr = (GUILayout.TextField(oriXStr, 6, GUILayout.Width(48), GUILayout.Height(18))); // GUILayout.Label("Y", GUILayout.Height(18)); // oriYStr = (GUILayout.TextField(oriYStr, 6, GUILayout.Width(48), GUILayout.Height(18))); // GUILayout.Label("Z", GUILayout.Height(18)); // oriZStr = (GUILayout.TextField(oriZStr, 6, GUILayout.Width(48), GUILayout.Height(18))); //} //GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUILayout.Label("Orientation:"); GUILayout.FlexibleSpace(); if (GUILayout.Button(new GUIContent("Zero", "Zero Rotation"), GUILayout.Height(21), GUILayout.Width(50))) { selectedInstance.transform.localEulerAngles = Vector3.zero; ApplySettings(); } if (GUILayout.Button(new GUIContent("C-U", "allign UP to GroupCenter Up-vector"), GUILayout.Height(21), GUILayout.Width(50))) { Vector3 newfwd = Vector3.ProjectOnPlane(selectedInstance.transform.forward, selectedInstance.transform.parent.up).normalized; Quaternion rotation = new Quaternion(); rotation.SetLookRotation(newfwd, selectedInstance.transform.parent.up); selectedInstance.transform.rotation = rotation; ApplySettings(); } } if (GUILayout.Button(new GUIContent("P-U", "alling UP to Position-Up"), GUILayout.Height(21), GUILayout.Width(50))) { Vector3 newfwd = Vector3.ProjectOnPlane(selectedInstance.transform.forward, upVector).normalized; Quaternion rotation = new Quaternion(); rotation.SetLookRotation(newfwd, upVector); selectedInstance.transform.rotation = rotation; ApplySettings(); } GUILayout.EndHorizontal(); // // Orientation adjustment // GUILayout.BeginHorizontal(); { GUILayout.Label("Pitch:"); GUILayout.FlexibleSpace(); fTempWidth = 80f; oriXStr = (GUILayout.TextField(oriXStr, 8, GUILayout.Width(fTempWidth))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21))) { SetRotation(Vector3.right, increment); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21))) { SetRotation(Vector3.left, increment); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUILayout.Label("Roll:"); GUILayout.FlexibleSpace(); oriZStr = (GUILayout.TextField(oriZStr, 8, GUILayout.Width(fTempWidth))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(21))) { SetRotation(Vector3.forward, increment); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(21)) || GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(21))) { SetRotation(Vector3.back, increment); } } GUILayout.EndHorizontal(); // // Rotation // GUILayout.BeginHorizontal(); { GUILayout.Label("Yaw:"); GUILayout.FlexibleSpace(); // rotStr = GUILayout.TextField(rotStr, 9, GUILayout.Width(fTempWidth)); // GUILayout.Box(Vector3.Angle(Vector3.ProjectOnPlane(selectedInstance.gameObject.transform.forward, selectedInstance.gameObject.transform.up), selectedInstance.gameObject.transform.parent.forward).ToString(), GUILayout.Width(fTempWidth)); //GUILayout.Box(GetHeading(), GUILayout.Width(fTempWidth)); oriYStr = (GUILayout.TextField(oriYStr, 8, GUILayout.Width(fTempWidth))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(23))) { SetRotation(Vector3.up, -increment); } if (GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(23))) { SetRotation(Vector3.up, -increment); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(23))) { SetRotation(Vector3.up, increment); } if (GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(23))) { SetRotation(Vector3.up, increment); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUILayout.Label("Heading: ", GUILayout.Height(23)); GUILayout.Space(5); GUILayout.Button(instanceHeading.ToString(), UIMain.DeadButton, GUILayout.Height(23)); GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); GUILayout.Space(1); GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); // // Scale // GUILayout.BeginHorizontal(); { GUILayout.Label("Model Scale: "); GUILayout.FlexibleSpace(); selectedInstance.ModelScale = Math.Max(0.01f, float.Parse(GUILayout.TextField(selectedInstance.ModelScale.ToString(), 4, GUILayout.Width(fTempWidth)))); if (GUILayout.RepeatButton("<<", GUILayout.Width(30), GUILayout.Height(23))) { selectedInstance.ModelScale = Math.Max(0.01f, selectedInstance.ModelScale - increment); ApplySettings(); } if (GUILayout.Button("<", GUILayout.Width(30), GUILayout.Height(23))) { selectedInstance.ModelScale = Math.Max(0.01f, selectedInstance.ModelScale - increment); ApplySettings(); } if (GUILayout.Button(">", GUILayout.Width(30), GUILayout.Height(23))) { selectedInstance.ModelScale += increment; ApplySettings(); } if (GUILayout.RepeatButton(">>", GUILayout.Width(30), GUILayout.Height(23))) { selectedInstance.ModelScale += increment; ApplySettings(); } } GUILayout.EndHorizontal(); GUILayout.Space(5); GUI.enabled = true; if (GUILayout.Button("Facility Type: " + selectedInstance.facilityType.ToString(), GUILayout.Height(23))) { if (!FacilityEditor.instance.IsOpen()) { FacilityEditor.instance.Open(); } } GUILayout.BeginHorizontal(); { GUILayout.Label("GrasColor: ", GUILayout.Height(23)); GUILayout.FlexibleSpace(); GUI.enabled = ((grasColorEnabled || grassColor2Enabled) && (!UI2.GrassEditor.isOpen || GrassColorUI.instance.IsOpen())); if (GUILayout.Button("Preset", GUILayout.Width(90), GUILayout.Height(23))) { if (grasColorEnabled) { GrassColorPresetUI.callBack = GrassColorUI.instance.UpdateCallBack; GrassColorUI.selectedInstance = selectedInstance; GrassColorUI.instance.SetupFields(); GrassColorPresetUI.instance.Open(); } if (grassColor2Enabled) { GrassColorPresetUI2.callBack = grassMod2.UpdateCallBack; GrassColorPresetUI2.instance.Open(); } } if (GUILayout.Button("Edit", GUILayout.Width(90), GUILayout.Height(23))) { if (grasColorEnabled) { GrassColorUI.instance.Open(); } if (grassColor2Enabled) { UI2.GrassEditor.Open(); } } GUI.enabled = true; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUILayout.Label("Set Group: ", GUILayout.Height(23)); GUILayout.FlexibleSpace(); if (GUILayout.Button(selectedInstance.Group, GUILayout.Width(185), GUILayout.Height(23))) { GroupSelectorUI.instance.Close(); GroupSelectorUI.showOnlyLocal = true; GroupSelectorUI.titleText = "Select a new Group"; GroupSelectorUI.callBack = SetGroup; GroupSelectorUI.instance.Open(); } } GUILayout.EndHorizontal(); GUILayout.Space(3); GUILayout.BeginHorizontal(); { enableColliders = GUILayout.Toggle(enableColliders, "Enable Colliders", GUILayout.Width(140), GUILayout.Height(23)); if (enableColliders != enableColliders2) { selectedInstance.ToggleAllColliders(enableColliders); enableColliders2 = enableColliders; } GUILayout.FlexibleSpace(); if (GUILayout.Button("Duplicate", GUILayout.Width(130), GUILayout.Height(23))) { selectedInstance.SaveConfig(); KerbalKonstructs.DeselectObject(true, true); SpawnInstance(selectedInstance.model, selectedInstance.groupCenter, selectedInstance.position, selectedInstance.Orientation); MiscUtils.HUDMessage("Spawned duplicate " + selectedInstance.model.title, 10, 2); } } GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.BeginHorizontal(); { bool isScanable2 = GUILayout.Toggle(selectedInstance.isScanable, "Static will show up on anomaly scanners", GUILayout.Width(250), GUILayout.Height(23)); if (isScanable2 != selectedInstance.isScanable) { selectedInstance.isScanable = isScanable2; ApplySettings(); } } GUILayout.EndHorizontal(); GUILayout.Space(6); GUI.enabled = true; GUI.enabled = !LaunchSiteEditor.instance.IsOpen(); // Make a new LaunchSite here: if (!selectedInstance.hasLauchSites && string.IsNullOrEmpty(selectedInstance.model.DefaultLaunchPadTransform)) { GUI.enabled = false; } if (GUILayout.Button((selectedInstance.hasLauchSites ? "Edit" : "Make") + " Launchsite", GUILayout.Height(23))) { LaunchSiteEditor.instance.Open(); } GUILayout.FlexibleSpace(); GUI.enabled = true; GUILayout.BeginHorizontal(); { if (GUILayout.Button("Save", GUILayout.Width(110), GUILayout.Height(23))) { selectedInstance.SaveConfig(); MiscUtils.HUDMessage("Saved changes to this object.", 10, 2); } GUILayout.FlexibleSpace(); if (GUILayout.Button("Save&Close", GUILayout.Width(110), GUILayout.Height(23))) { selectedInstance.SaveConfig(); MiscUtils.HUDMessage("Saved changes to this object.", 10, 2); KerbalKonstructs.DeselectObject(true, true); } } GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(); { if (GUILayout.Button("Revert changes", GUILayout.Height(21))) { if (selectedInstance.groupCenter != origCenter) { StaticDatabase.ChangeGroup(selectedInstance, origCenter); } selectedInstance.RelativePosition = origPosition; selectedInstance.transform.localPosition = origPosition; selectedInstance.transform.localEulerAngles = origRotation; selectedInstance.Orientation = origRotation; selectedInstance.ModelScale = origScale; ApplySettings(); } if (GUILayout.Button("Delete Instance", GUILayout.Height(21))) { DeleteInstance(); } } GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.Space(1); GUILayout.Box(tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4)); GUILayout.Space(2); if (GUI.tooltip != "") { var labelSize = GUI.skin.GetStyle("Label").CalcSize(new GUIContent(GUI.tooltip)); GUI.Box(new Rect(Event.current.mousePosition.x - (25 + (labelSize.x / 2)), Event.current.mousePosition.y - 40, labelSize.x + 10, labelSize.y + 5), GUI.tooltip); } GUI.DragWindow(new Rect(0, 0, 10000, 10000)); }
/// <summary> /// used for loading the pyramid parts /// </summary> public static void LoadSquadAnomaliesLevel3() { foreach (PQSCity pqs in Resources.FindObjectsOfTypeAll <PQSCity>()) { if (pqs.gameObject.name != "Pyramids") { continue; } // find the lv2 parent GameObject baseGameObject = pqs.gameObject; GameObject baseGameObject2 = null; foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true)) { // we only want to be one level down. if (child.parent.gameObject != baseGameObject) { continue; } else { baseGameObject2 = child.gameObject; } } foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true)) { // we only want to be one level down. if (child.parent.gameObject != baseGameObject2) { continue; } string modelName = "SQUAD_" + pqs.gameObject.name + "_" + child.gameObject.name; string modelTitle = "Squad " + pqs.gameObject.name + " " + child.gameObject.name; // 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 Anomalies"; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelTitle; model.isSquad = true; // we reference only the original prefab, as we cannot instantiate an instance for some reason model.prefab = child.gameObject; StaticDatabase.RegisterModel(model, modelName); } } }
/// <summary> /// Loads the statics of the KSC2 /// </summary> public static void LoadSquadAnomaliesLevel2() { foreach (PQSCity pqs in Resources.FindObjectsOfTypeAll <PQSCity>()) { if (pqs.gameObject.name != "KSC2" && pqs.gameObject.name != "Pyramids" && pqs.gameObject.name != "CommNetDish") { continue; } GameObject baseGameObject = pqs.gameObject; foreach (var child in baseGameObject.GetComponentsInChildren <Transform>(true)) { // we only want to be one level down. if (child.parent.gameObject != baseGameObject) { continue; } string modelName = "SQUAD_" + pqs.gameObject.name + "_" + child.gameObject.name; string modelTitle = "Squad " + pqs.gameObject.name + " " + child.gameObject.name; // 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; } // filter out some unneded stuff if (modelName.Contains("ollider") || modelName.Contains("onolit")) { 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 Anomalies"; model.author = "Squad"; model.manufacturer = "Squad"; model.description = "Squad original " + modelTitle; model.isSquad = true; if (model.name.Equals("SQUAD_KSC2_launchpad", StringComparison.CurrentCultureIgnoreCase)) { model.DefaultLaunchPadTransform = "PlatformPlane"; } // we reference only the original prefab, as we cannot instantiate an instance for some reason model.prefab = child.gameObject; //model.prefab = GameObject.Instantiate(child.gameObject); //GameObject.DontDestroyOnLoad(model.prefab); //model.prefab.SetActive(false); StaticDatabase.RegisterModel(model, modelName); } } }