internal static void RegisterMHLaunchSites(EditorFacility facility) { foreach (KKLaunchSite site in allLaunchSites) { if (facility == EditorFacility.SPH && site.LaunchSiteType == SiteType.VAB) { continue; } if (facility == EditorFacility.VAB && site.LaunchSiteType == SiteType.SPH) { continue; } if (site.LaunchSiteName == "LaunchPad" || site.LaunchSiteName == "Runway") { continue; } if (site.isOpen) { site.spaceCenterFacility.editorFacility = facility; //CreateMHLaunchSite(site, facility); } else { site.spaceCenterFacility.editorFacility = EditorFacility.None; } } typeof(EditorDriver).GetMethod("setupValidLaunchSites", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, null); }
protected override void OnLoad(ConfigNode configNode) { base.OnLoad(configNode); url = ConfigNodeUtil.ParseValue<string>(configNode, "url"); craftType = ConfigNodeUtil.ParseValue<EditorFacility>(configNode, "craftType"); }
// IEnumerator loadScene(GameScenes scenes, EditorFacility facility = EditorFacility.None) void loadScene(GameScenes scenes, EditorFacility facility = EditorFacility.None) { //yield return new WaitForEndOfFrame (); if (scenes != GameScenes.EDITOR) { HighLogic.LoadScene(scenes); } else if (facility != EditorFacility.None) { EditorFacility editorFacility = EditorFacility.None; if (ShipConstruction.ShipConfig != null) { editorFacility = ShipConstruction.ShipType; } if (HighLogic.LoadedSceneIsFlight && FlightGlobals.fetch) { FlightGlobals.PersistentVesselIds.Clear(); FlightGlobals.PersistentLoadedPartIds.Clear(); FlightGlobals.PersistentUnloadedPartIds.Clear(); } EditorDriver.StartupBehaviour = (editorFacility == facility ? EditorDriver.StartupBehaviours.LOAD_FROM_CACHE : EditorDriver.StartupBehaviours.START_CLEAN); EditorDriver.StartEditor(facility); } InputLockManager.ClearControlLocks(); }
public BuildListVessel(string name, string ls, double effCost, double bP, double integrP, string flagURL, float spentFunds, float integrCost, int editorFacility) { LaunchSite = ls; ShipName = name; EffectiveCost = effCost; BuildPoints = bP; IntegrationPoints = integrP; Progress = 0; Flag = flagURL; if (editorFacility == (int)EditorFacilities.VAB) { Type = ListType.VAB; FacilityBuiltIn = EditorFacility.VAB; } else if (editorFacility == (int)EditorFacilities.SPH) { Type = ListType.SPH; FacilityBuiltIn = EditorFacility.SPH; } else { Type = ListType.None; } CannotEarnScience = false; Cost = spentFunds; IntegrationCost = integrCost; }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorShadows.Apply", "editor = " + editor); GameObject ksc = GameObject.Find("SpaceCenter"); Debug.Log("EditorShadows.Apply", "ksc = " + ksc); if (ksc != null) { ksc.SetLayerRecursive(0); } GameObject shadowsObject = GameObject.Find("Shadow Light") ?? GameObject.Find("Realtime_Shadow Light"); Debug.Log("EditorShadows.Apply", "shadowsObject = " + shadowsObject); if (shadowsObject != null) { shadowsObject.transform.rotation = EditorView.Rotation * lightDirection; shadowsObject.AddOrGetComponent <LightTracker>(); } GameObject shadowPlane = GameObject.Find("ShadowPlane"); Debug.Log("EditorShadows.Apply", "shadowPlane = " + shadowPlane); if (shadowPlane != null) { shadowPlane.transform.localScale += new Vector3(4000, 0, 4000); } }
public BuildListStorageItem FromBuildListVessel(BuildListVessel blv) { progress = blv.Progress; effectiveCost = blv.EffectiveCost; buildTime = blv.BuildPoints; integrationTime = blv.IntegrationPoints; launchSite = blv.LaunchSite; flag = blv.Flag; shipName = blv.ShipName; shipID = blv.Id.ToString(); cannotEarnScience = blv.CannotEarnScience; cost = blv.Cost; integrationCost = blv.IntegrationCost; rushBuildClicks = blv.RushBuildClicks; mass = blv.TotalMass; numStageParts = blv.NumStageParts; numStages = blv.NumStages; stagePartCost = blv.StagePartCost; kscDistance = blv.DistanceFromKSC; EditorFacility = (int)blv.GetEditorFacility(); BuildListIndex = blv.BuildListIndex; LaunchPadID = blv.LaunchSiteID; desiredManifest = blv.DesiredManifest; KCTPersistentID = blv.KCTPersistentID; FacilityBuiltIn = blv.FacilityBuiltIn; return(this); }
public bool CanEditor(EditorFacility editorFacility) { if (HighLogic.LoadedSceneIsGame) { if (HighLogic.LoadedSceneIsEditor) { if (EditorDriver.fetch != null && EditorLogic.fetch != null) { if (EditorDriver.editorFacility != editorFacility) { return(true); } } return(false); } if (!HighLogic.LoadedSceneIsFlight) { return(true); } if (FlightGlobals.ready && FlightGlobals.ActiveVessel != null && HighLogic.CurrentGame.Parameters.Flight.CanLeaveToEditor) { return(FlightGlobals.ActiveVessel.IsClearToSave() == ClearToSaveStatus.CLEAR); } } return(false); }
public void PopupNameTagChanger() { if (typingWindow != null) { typingWindow.Close(); } if (HighLogic.LoadedSceneIsEditor) { EditorFacility whichEditor = EditorLogic.fetch.ship.shipFacility; if (!(Career.CanTagInEditor(whichEditor))) { var formattedString = string.Format("The {0} requires an upgrade to assign name tags", whichEditor); ScreenMessages.PostScreenMessage(formattedString, 6, ScreenMessageStyle.UPPER_CENTER); return; } } // Make a new instance of typingWindow, replacing the existing one if there was one: KOSNameTagWindow oldTypingWindow = gameObject.GetComponent <KOSNameTagWindow>(); if (oldTypingWindow != null) { Destroy(oldTypingWindow); } typingWindow = gameObject.AddComponent <KOSNameTagWindow>(); typingWindow.Invoke(this, nameTag); }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorDoors.Apply", "editor = " + editor); // Renderer Debug.Log("EditorDoors.Apply", "doorL = " + doorL + ", shadeL = " + shadeL); Debug.Log("EditorDoors.Apply", "doorR = " + doorR + ", shadeR = " + shadeR); if (doorState == null) { doorState = new Dictionary <EditorFacility, bool>() { { EditorFacility.SPH, !Settings.closeDoors }, { EditorFacility.VAB, !Settings.closeDoors } }; } if (Settings.toggleDoors) { EditorButtons.doorsOnBtn.gameObject.SetActive(doorState[editor]); EditorButtons.doorsOffBtn.gameObject.SetActive(!doorState[editor]); } else { doorL.SetActive(Settings.closeDoors); shadeL.SetActive(Settings.closeDoors); doorR.SetActive(Settings.closeDoors); shadeR.SetActive(Settings.closeDoors); } }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorBuildings.Apply", "editor = " + editor); int?n = buildings?.Length; Debug.Log("EditorBuildings.Apply", "buildings found = " + n); Debug.Log("EditorBuildings.Apply", "positions found = " + positions?.Length); Debug.Log("EditorBuildings.Apply", "rotations found = " + rotations?.Length); Quaternion editorRotation = EditorView.Rotation; for (int i = 0; i < n; i++) { GameObject building = buildings[i]; Debug.Log("EditorBuildings.Apply", "buildings[" + i + "] = " + building); if (building != null) { Vector3 position = positions[i]; if (editor == EditorFacility.SPH) { position -= SPHposition; } Debug.Log("EditorBuildings.Apply", "positions[" + i + "] = " + position); Quaternion rotation = rotations[i]; Debug.Log("EditorBuildings.Apply", "rotations[" + i + "] = " + rotation); building.transform.position = editorRotation * position; building.transform.rotation = editorRotation * rotation; building.SetActive(true); } } }
public LaunchEventDto(LaunchEvent le) { date = CareerLog.UTToDate(le.UT).ToString("o"); vesselName = le.VesselName; vesselUID = le.VesselUID; launchID = le.LaunchID; builtAt = le.BuiltAt; }
void Update() { if (editor != EditorDriver.editorFacility) { editor = EditorDriver.editorFacility; FixMaterials(); } }
public StringValue OriginatingEditor() { if (ShipConstruction.ShipConfig != null) { EditorFacility fac = ShipConstruction.ShipType; return(fac.ToString().ToUpper()); } return(""); }
protected virtual void store_construct(ShipConstruct construct) { Facility = construct.shipFacility; StoreKit(new VesselKit(this, construct)); construct.Unload(); if (kit.AdditionalResources.Count > 0) { resource_manifest_view.Show(true); } }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorSky.Apply", "editor = " + editor); RenderSettings.skybox.shader = ShaderLoader.shader; RenderSettings.skybox.SetTexture("_CubeMap", cubemap); RenderSettings.skybox.SetMatrix("_Rotation", EditorView.GetMatrix(editor)); }
private void Update() { if (_editor == EditorDriver.editorFacility) { return; } _editor = EditorDriver.editorFacility; FixMaterials(); }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorColliders.Apply", "editor = " + editor); if (Debug.debug) { DebugColliders(); DebugShadows(); } GameObject building; if (editor == EditorFacility.SPH) { building = GameObject.Find("SPHlvl1") ?? GameObject.Find("SPHlvl2") ?? GameObject.Find("SPHmodern"); } else { building = GameObject.Find("VABlvl2") ?? GameObject.Find("VABlvl3") ?? GameObject.Find("VABmodern"); } Debug.Log("EditorColliders.Apply", "building = " + building); string name = building?.name; if (innerWalls.ContainsKey(name) && doors.ContainsKey(name)) { // Create Walls GameObject[] box = Box(name, innerWalls[name][0], innerWalls[name][1]); GameObject[] shadows = Box(name, outerWalls[name][0], outerWalls[name][1], true); // Cut out Door switch (name) { case "SPHlvl1": case "SPHlvl2": case "SPHmodern": Door(box[5], doors[name][0], doors[name][1]); Door(shadows[5], doors[name][0], doors[name][1], true); break; case "VABlvl2": case "VABlvl3": case "VABmodern": Door(box[1], doors[name][0], doors[name][1]); Door(shadows[1], doors[name][0], doors[name][1], true); break; } if (corners.ContainsKey(name)) { Corners(name, corners[name][0], corners[name][1], corners[name][2]); Corners(name, corners[name][0], corners[name][1], corners[name][2], true); } } }
internal static Matrix4x4 GetMatrix(EditorFacility editor) { if (editor == EditorFacility.SPH) { return(Matrix4x4.TRS(Vector3.zero, SPHrot, Vector3.one)); } else { return(Matrix4x4.TRS(Vector3.zero, VABrot, Vector3.one)); } }
public void RevertingToEditorDetected(EditorFacility data) { System.Reverting = true; if (System.CurrentShipCost != null) { Funding.Instance.AddFunds(System.CurrentShipCost.Item2, TransactionReasons.VesselRecovery); System.CurrentShipCost = null; } System.StartIgnoringEvents(); }
/// <summary> /// Triggered when reverting back to the editor. The vessel id DOES change /// </summary> public void OnRevertToEditor(EditorFacility data) { if (FlightGlobals.ActiveVessel != null && !VesselCommon.IsSpectating) { LunaLog.Log($"[LMP]: Detected a revert to editor! {data}"); RemoveOldVesselAndItsDebris(FlightGlobals.ActiveVessel); System.MessageSender.SendVesselRemove(FlightGlobals.ActiveVessel.id, true); System.KillVessel(FlightGlobals.ActiveVessel.id, false); } }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorLight.Apply", "editor = " + editor); if (Settings.toggleLights) { // Fix Light GameObject lightObject = GameObject.Find("SpotlightSun") ?? GameObject.Find("ExteriorSun") ?? GameObject.Find("Realtime_ExteriorSun"); Debug.Log("EditorLight.Apply", "lightObject = " + lightObject); if (lightObject != null) { Light light = lightObject.GetComponent <Light>(); Debug.Log("EditorLight.Apply", "light = " + light); if (light != null) { light.range = 3500; light.intensity = 5; light.spotAngle = 89; light.cullingMask = 1 << 0 | 1 << 15; if (editor == EditorFacility.SPH) { light.transform.position = new Vector3(0, 1800, 400); light.transform.eulerAngles = new Vector3(61, 0, 0); } else { light.transform.position = new Vector3(400, 1800, 0); light.transform.eulerAngles = new Vector3(61, 90, 0); } } } // LightSwitch GameObject building; if (EditorDriver.editorFacility == EditorFacility.SPH) { building = GameObject.Find("SPHlvl1") ?? GameObject.Find("SPHlvl2") ?? GameObject.Find("SPHmodern"); } else { building = GameObject.Find("VABlvl2") ?? GameObject.Find("VABlvl3") ?? GameObject.Find("VABmodern"); } Switch lightSwitch = building.AddOrGetComponent <Switch>(); EditorButtons.lightsOnBtn.onClick.AddListener(lightSwitch.Flip); EditorButtons.lightsOffBtn.onClick.AddListener(lightSwitch.Flip); } }
public static void UpdateDefaultConfig(EditorFacility facility, VesselConfig config) { if (facility == EditorFacility.SPH) { SPH_DefaultConfig.CopyFrom(config); } else { VAB_DefaultConfig.CopyFrom(config); } }
internal FacilitySettings For(EditorFacility shipType) { switch (shipType) { case EditorFacility.SPH: return(this.SphSettings); case EditorFacility.VAB: return(this.VabSettings); default: return(new FacilitySettings()); } }
public void RevertToEditor() { if (CanRevvertToEditor()) { EditorFacility fac = ShipConstruction.ShipType; FlightDriver.RevertToPrelaunch(fac); } else { throw new KOSCommandInvalidHereException("REVERTTOEDITOR", "When revert is disabled", "When revert is enabled"); } }
/// <summary> /// Triggered when reverting back to the editor. The vessel id DOES change /// </summary> public void OnRevertToEditor(EditorFacility data) { if (FlightGlobals.ActiveVessel != null && !VesselCommon.IsSpectating) { LunaLog.Log($"[LMP]: Detected a revert to editor! {data}"); RemoveOldVesselAndItsDebris(FlightGlobals.ActiveVessel, ProtoCrewMember.RosterStatus.Available); System.MessageSender.SendVesselRemove(FlightGlobals.ActiveVessel); //We consider this vessel removed but we let KSP do the remove of the vessel System.RemovedVessels.TryAdd(FlightGlobals.ActiveVessel.id, DateTime.Now); } }
internal static void Apply(EditorFacility editor) { Debug.Log("EditorSky.Apply", "editor = " + editor); RenderSettings.skybox.shader = ShaderLoader.shader; RenderSettings.skybox.SetTexture("_SkyBox", skybox); RenderSettings.skybox.SetTexture("_Scaled", scaled); RenderSettings.skybox.SetTexture("_Ground", ground); RenderSettings.skybox.SetMatrix("_Rotation", EditorView.GetMatrix(editor)); }
//Transfer craft to VAB/SPH/Subassemblies public string transfer_to(EditorFacility facility) { string new_path = ""; if (facility == EditorFacility.SPH) { new_path = Paths.joined(CraftManager.ksp_root, "saves", save_dir, "Ships", "SPH", file_name + ".craft"); } else if (facility == EditorFacility.VAB) { new_path = Paths.joined(CraftManager.ksp_root, "saves", save_dir, "Ships", "VAB", file_name + ".craft"); } else if (facility == EditorFacility.None) { new_path = Paths.joined(CraftManager.ksp_root, "saves", save_dir, "Subassemblies", file_name + ".craft"); } if (String.IsNullOrEmpty(new_path)) { return("Unexpected error"); } if (File.Exists(new_path)) { string msg = "A craft with this name already exists in " + (facility == EditorFacility.None ? "Subassemblies" : "the " + facility.ToString()); return(msg); } else { try{ ConfigNode nodes = ConfigNode.Load(path); nodes.SetValue("type", facility.ToString()); nodes.Save(new_path); } catch (Exception e) { return("Unable to move craft; " + e.Message); } List <string> tags = Tags.untag_craft(this); FileInfo thumbnail_file = new FileInfo(thumbnail_path()); File.Delete(path); initialize(new_path, stock_craft); Tags.tag_craft(this, tags); if (thumbnail_file.Exists) { thumbnail_file.MoveTo(thumbnail_path()); thumbnail = null; } if (CraftManager.main_ui) { CraftManager.main_ui.refresh(); } return("200"); } }
public void RevertToEditor() { if (CanRevvertToEditor()) { EditorFacility fac = ShipConstruction.ShipType; shared.Cpu.GetCurrentOpcode().AbortProgram = true; FlightDriver.RevertToPrelaunch(fac); } else { throw new KOSCommandInvalidHereException(LineCol.Unknown(), "REVERTTOEDITOR", "When revert is disabled", "When revert is enabled"); } }
/// <summary> /// Returns the LaunchSiteName for the given EditorFacility /// </summary> public static string getSiteName(this EditorFacility facility) { switch (facility) { case EditorFacility.SPH: return("Runway"); case EditorFacility.VAB: return("LaunchPad"); default: return("Kerbal Space Center"); } }
void InitializeFacility() { _currentFacility = EditorDriver.editorFacility; if (_currentFacility == EditorFacility.VAB) { _facilityDefaultsTitle = "#ModAutoAction_VabDefaults"; _facilitySettings = _settings.VabSettings; } else { _facilityDefaultsTitle = "#ModAutoAction_SphDefaults"; _facilitySettings = _settings.SphSettings; } }
private void initMod() { EditorDriver.fetch.sphCamera.enabled = true; EditorCamera = EditorDriver.fetch.sphCamera; if (Utilities.getEditorScene() == "VAB") { editorMode = EditorFacility.VAB; EditorDriver.fetch.vabCamera.enabled = true; vabControls = true; heightLimits = new Vector2(EditorDriver.fetch.vabCamera.minHeight, EditorDriver.fetch.vabCamera.maxHeight); } else { editorMode = EditorFacility.SPH; vabControls = false; heightLimits = new Vector2(EditorDriver.fetch.sphCamera.minHeight, EditorDriver.fetch.sphCamera.maxHeight); } ThreadPool.QueueUserWorkItem(new WaitCallback(updateBounds)); //save and overwrite all the camera controls so they dont interfere GameSettings.AXIS_MOUSEWHEEL.saveDefault("AXIS_MOUSEWHEEL"); GameSettings.AXIS_MOUSEWHEEL.setZero(); GameSettings.SCROLL_VIEW_UP.saveDefault("SCROLL_VIEW_UP"); GameSettings.SCROLL_VIEW_UP.setNone(); GameSettings.SCROLL_VIEW_DOWN.saveDefault("SCROLL_VIEW_DOWN"); GameSettings.SCROLL_VIEW_DOWN.setNone(); GameSettings.ZOOM_IN.saveDefault("ZOOM_IN"); GameSettings.ZOOM_IN.setNone(); GameSettings.ZOOM_OUT.saveDefault("ZOOM_OUT"); GameSettings.ZOOM_OUT.setNone(); GameSettings.CAMERA_ORBIT_UP.saveDefault("CAMERA_ORBIT_UP"); GameSettings.CAMERA_ORBIT_UP.setNone(); GameSettings.CAMERA_ORBIT_DOWN.saveDefault("CAMERA_ORBIT_DOWN"); GameSettings.CAMERA_ORBIT_DOWN.setNone(); GameSettings.CAMERA_ORBIT_LEFT.saveDefault("CAMERA_ORBIT_LEFT"); GameSettings.CAMERA_ORBIT_LEFT.setNone(); GameSettings.CAMERA_ORBIT_RIGHT.saveDefault("CAMERA_ORBIT_RIGHT"); GameSettings.CAMERA_ORBIT_RIGHT.setNone(); EditorCamUtilitiesExtensions.setSaveFileStatusToStarted(); }
public override bool Load(ConfigNode configNode) { // Load base class bool valid = base.Load(configNode); valid &= ConfigNodeUtil.ParseValue<string>(configNode, "url", x => url = x, this, ValidateURL); valid &= ConfigNodeUtil.ParseValue<EditorFacility>(configNode, "craftType", x => craftType = x, this); valid &= ConfigNodeUtil.ParseValue<TriggeredBehaviour.State>(configNode, "onState", x => onState = x, this, TriggeredBehaviour.State.CONTRACT_SUCCESS); if (onState == TriggeredBehaviour.State.PARAMETER_COMPLETED || onState == TriggeredBehaviour.State.PARAMETER_FAILED) { valid &= ConfigNodeUtil.ParseValue<List<string>>(configNode, "parameter", x => parameter = x, this); } return valid; }
void SelectCraft() { GUILayout.BeginHorizontal ("box"); GUILayout.FlexibleSpace (); // VAB / SPH / Subassembly selection ExBuildControl.CraftType maxType = ExBuildControl.CraftType.SubAss; if (buildCraftList == null) { maxType = ExBuildControl.CraftType.SPH; if (control.craftType == ExBuildControl.CraftType.SubAss) { control.craftType = ExBuildControl.CraftType.VAB; } } for (var t = ExBuildControl.CraftType.VAB; t <= maxType; t++) { if (GUILayout.Toggle (control.craftType == t, t.ToString (), GUILayout.Width (80))) { control.craftType = t; } } GUILayout.FlexibleSpace (); GUILayout.EndHorizontal (); string strpath = HighLogic.SaveFolder; GUILayout.BeginHorizontal (); if (GUILayout.Button ("Select Craft", Styles.normal, GUILayout.ExpandWidth (true))) { EditorFacility []facility = new EditorFacility[] { EditorFacility.VAB, EditorFacility.SPH, EditorFacility.None, }; var diff = HighLogic.CurrentGame.Parameters.Difficulty; bool stock = diff.AllowStockVessels; if (control.craftType == ExBuildControl.CraftType.SubAss) { diff.AllowStockVessels = false; } //GUILayout.Button is "true" when clicked var clrect = new Rect (Screen.width / 2, 100, 350, 500); Texture2D fileicon = Instantiate(AssetBase.GetTexture("craftThumbGeneric")) as Texture2D; craftlist = new CraftBrowser (clrect, facility[(int)control.craftType], strpath, "Select a ship to load", craftSelectComplete, craftSelectCancel, HighLogic.Skin, fileicon, true, false); if (buildCraftList != null && control.craftType == ExBuildControl.CraftType.SubAss) { craftlist.craftSubfolder = "../Subassemblies"; buildCraftList.Invoke (craftlist, null); } diff.AllowStockVessels = stock; } GUI.enabled = control.craftConfig != null; if (GUILayout.Button ("Reload", Styles.normal, GUILayout.ExpandWidth (false))) { control.LoadCraft (control.filename, control.flagname); } if (GUILayout.Button ("Clear", Styles.normal, GUILayout.ExpandWidth (false))) { control.UnloadCraft (); } GUI.enabled = true; GUILayout.EndHorizontal (); }
/// <summary> /// Detect whether we'll allow you to add a NameTag to a part during the editor. /// You can always add one post-editor during flight, but during editing it will /// depend on building level.<br/> /// NOTE: This method does NOT have an associated suffix because it is meant to be called /// from inside the editor, when a script won't be running. /// </summary> /// <param name="whichEditor">Pass in whether you are checking from the VAB or SPH.</param> /// <param name="reason">returns a string describing what would need upgrading to change the answer.</param> /// <returns>true if it can. false if it cannot.</returns> public static bool CanTagInEditor(EditorFacility whichEditor, out string reason) { float buildingLevel; switch (whichEditor) { case EditorFacility.VAB: reason = "vehicle assembly building"; buildingLevel = ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.VehicleAssemblyBuilding); break; case EditorFacility.SPH: reason = "space plane hangar"; buildingLevel = ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.SpaceplaneHangar); break; default: reason = "unknown editor building"; return false; // not even sure how you could get here. } // We'll attach it to the same point where the game starts unlocking basic action groups: return GameVariables.Instance.UnlockedActionGroupsStock(buildingLevel, false); }
public LOAmbient(EditorFacility facility, EditorLevel level, GameObject[] gameObjects, Camera camera, int layer) { mainCamera = camera; newLayer = layer; currentFacility = facility; originalCullingMask = camera.cullingMask; originalClearFlags = camera.clearFlags; originalAmbientLight = RenderSettings.ambientLight; originalSkybox = RenderSettings.skybox; originalLightmapData = LightmapSettings.lightmaps; originalAmbientMode = RenderSettings.ambientMode; // Create fake skybox skyCamera = new GameObject("NightSkyboxCamera", typeof(Camera)); // skyCamera.AddComponent<Camera>(); skyCamera.GetComponent<Camera>().depth = mainCamera.depth - 1; skyCamera.GetComponent<Camera>().clearFlags = CameraClearFlags.Skybox; skyCamera.GetComponent<Camera>().cullingMask = 0; nightSkyboxMaterial = new Material(originalSkybox); // GalaxyTex_PositiveX should be viewed outside window // Debug.Log("LightsOut: Loading Night Sky Textures"); foreach (Material material in Resources.FindObjectsOfTypeAll<Material>()) { Texture texture = material.mainTexture; if (texture) { switch (material.name) { case "ZP": nightSkyboxMaterial.SetTexture("_FrontTex", material.mainTexture); break; case "ZN": nightSkyboxMaterial.SetTexture("_BackTex", material.mainTexture); break; case "XP": nightSkyboxMaterial.SetTexture("_LeftTex", material.mainTexture); break; case "XN": nightSkyboxMaterial.SetTexture("_RightTex", material.mainTexture); break; case "YP": nightSkyboxMaterial.SetTexture("_UpTex", material.mainTexture); break; case "YN": nightSkyboxMaterial.SetTexture("_DownTex", material.mainTexture); break; default: break; } } } skyCamera.AddComponent<Skybox>(); skyCamera.GetComponent<Skybox>().material = nightSkyboxMaterial; if (facility == EditorFacility.VAB) { switch (level) { case EditorLevel.Level1: break; case EditorLevel.Level2: break; case EditorLevel.Level3: foreach (GameObject gameObject in gameObjects) { ChangeLayersRecursively(gameObject, newLayer, "model_vab_interior_floor_cover_v20"); } break; } } else if (facility == EditorFacility.SPH) { switch (level) { case EditorLevel.Level1: break; case EditorLevel.Level2: break; case EditorLevel.Level3: foreach (GameObject gameObject in gameObjects) { // These are all subsets of model_sph_interior_lights_v16 // Component_611_1 to 6 is window reflection // ChangeLayersRecursively(gameObject, newLayer, "Component_611_1"); // ChangeLayersRecursively(gameObject, newLayer, "Component_611_2"); // ChangeLayersRecursively(gameObject, newLayer, "Component_611_3"); ChangeLayersRecursively(gameObject, newLayer, "Component_611_4"); ChangeLayersRecursively(gameObject, newLayer, "Component_611_5"); ChangeLayersRecursively(gameObject, newLayer, "Component_611_6"); ChangeLayersRecursively(gameObject, newLayer, "Component_749_1"); // Glow from Side Lights! ChangeLayersRecursively(gameObject, newLayer, "Component_750_1"); // Lights! } break; } } }
// This method should be called before activating the simulation directly from an editor, and allows // QOL improvements (like returning to that editor correctly, and automatically clearing the launch site) // Either of these values can be null, if you want to do that for some reason public static void OnLeavingEditor(EditorFacility facility, string launchSiteName) { // clear the launchpad. if (launchSiteName != null) { List<ProtoVessel> junkAtLaunchSite = ShipConstruction.FindVesselsLandedAt(HighLogic.CurrentGame.flightState, launchSiteName); foreach (ProtoVessel pv in junkAtLaunchSite) { HighLogic.CurrentGame.flightState.protoVessels.Remove(pv); } } if (facility != EditorFacility.None) { HoloDeckShelter.lastEditor = facility; } HoloDeckShelter.lastShip = ShipConstruction.ShipConfig; }
/// <summary> /// Same as CanTagInEditor, but without the 'reason' parameter. (This is a separate method /// only because you can't default out parameters like 'out string reason' to make them optional.) /// </summary> /// <returns>true if you can. false if you cannot.</returns> public static bool CanTagInEditor(EditorFacility whichEditor) { string dummy; return CanTagInEditor(whichEditor, out dummy); }
public LOExternalLights(EditorFacility facility, EditorLevel level) { currentFacility = facility; currentLevel = level; if (currentFacility == EditorFacility.VAB) { switch (currentLevel) { case EditorLevel.Level1: //[LOG 17:53:55.152] Light 0: Scaledspace SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:53:55.153] Parent: SunLight //[LOG 17:53:55.154] Light 1: SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:53:55.154] Parent: Scenery //[LOG 17:53:55.155] Light 2: Directional light, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:53:55.155] Parent: _UI //[LOG 17:53:55.156] Light 3: Shadow Light, RGBA(1.000, 0.955, 0.896, 1.000), Default ON //[LOG 17:53:55.156] Parent: Day Lights //[LOG 17:53:55.157] Light 4: SpotlightSun, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:53:55.158] Parent: Day Lights //[LOG 17:53:55.158] Light 5: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:53:55.159] Parent: Day Lights lightsToChange = new List<LightToChange>() { new LightToChange(){ name = "SpotlightCraft", parentName = "Day Lights" }, new LightToChange(){ name = "SpotlightSun", parentName = "VAB_interior_modern" }, new LightToChange(){ name = "Realtime_SpotlightScenery", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Shadow Light", parentName = "Day Lights" } }; break; case EditorLevel.Level2: //[LOG 17:56:18.866] Light 0: Scaledspace SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:56:18.867] Parent: SunLight //[LOG 17:56:18.867] Light 1: SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:56:18.868] Parent: Scenery //[LOG 17:56:18.868] Light 2: Directional light, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:56:18.869] Parent: _UI //[LOG 17:56:18.869] Light 3: Shadow Light, RGBA(1.000, 0.955, 0.896, 1.000), Default ON //[LOG 17:56:18.870] Parent: Day Lights //[LOG 17:56:18.871] Light 4: SpotlightSun, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:56:18.871] Parent: Day Lights //[LOG 17:56:18.872] Light 5: roofFill, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:56:18.872] Parent: Day Lights //[LOG 17:56:18.873] Light 6: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:56:18.873] Parent: Day Lights //[LOG 17:56:18.874] Light 7: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:56:18.875] Parent: Day Lights lightsToChange = new List<LightToChange>() { new LightToChange(){ name = "SpotlightCraft", parentName = "Day Lights" }, new LightToChange(){ name = "SpotlightSun", parentName = "VAB_interior_modern" }, new LightToChange(){ name = "Realtime_SpotlightScenery", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Shadow Light", parentName = "Day Lights" } }; break; case EditorLevel.Level3: //[LOG 17:58:21.702] Light 0: Scaledspace SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:58:21.703] Parent: SunLight //[LOG 17:58:21.703] Light 1: SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:58:21.704] Parent: Scenery //[LOG 17:58:21.704] Light 2: Directional light, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:58:21.705] Parent: _UI //[LOG 17:58:21.705] Light 3: Shadow Light, RGBA(1.000, 0.955, 0.896, 1.000), Default ON //[LOG 17:58:21.706] Parent: Day Lights //[LOG 17:58:21.707] Light 4: SpotlightSun, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:58:21.707] Parent: Day Lights //[LOG 17:58:21.708] Light 5: Spotlight, RGBA(1.000, 0.236, 0.104, 1.000), Default ON //[LOG 17:58:21.708] Parent: model_prop_truck_h03 //[LOG 17:58:21.709] Light 6: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:58:21.710] Parent: Day Lights //[LOG 17:58:21.710] Light 7: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:58:21.711] Parent: model_vab_prop_truck_01 //[LOG 17:58:21.711] Light 8: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:58:21.712] Parent: model_prop_truck_h02 //[LOG 17:58:21.712] Light 9: Spotlight, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:58:21.713] Parent: Day Lights lightsToChange = new List<LightToChange>() { new LightToChange(){ name = "SpotlightCraft", parentName = "Day Lights" }, new LightToChange(){ name = "SpotlightSun", parentName = "VAB_interior_modern" }, new LightToChange(){ name = "Realtime_SpotlightScenery", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Shadow Light", parentName = "Day Lights" } }; break; } } else if (currentFacility == EditorFacility.SPH) { switch (currentLevel) { case EditorLevel.Level1: //[LOG 17:54:50.069] Light 0: Scaledspace SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:54:50.070] Parent: SunLight //[LOG 17:54:50.070] Light 1: SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:54:50.071] Parent: Scenery //[LOG 17:54:50.072] Light 2: Directional light, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:54:50.072] Parent: _UI //[LOG 17:54:50.073] Light 3: SpotlightWindow, RGBA(0.866, 0.863, 0.903, 1.000), Default OFF //[LOG 17:54:50.073] Parent: Editors_DayLights //[LOG 17:54:50.074] Light 4: Shadow Light, RGBA(1.000, 0.955, 0.896, 1.000), Default ON //[LOG 17:54:50.075] Parent: Editors_DayLights //[LOG 17:54:50.075] Light 5: SpotlightCraft, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:54:50.076] Parent: Editors_DayLights //[LOG 17:54:50.076] Light 6: SpotlightExteriorSun, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:54:50.077] Parent: Editors_DayLights //[LOG 17:54:50.077] Light 7: SpotlightWindow, RGBA(0.866, 0.863, 0.903, 1.000), Default OFF //[LOG 17:54:50.078] Parent: Editors_DayLights lightsToChange = new List<LightToChange>() { new LightToChange(){ name = "Realtime_SpotlightCraft", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_ExteriorSun", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_SpotlightScenery", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_Shadow Light", parentName = "Lighting_Realtime" } }; break; case EditorLevel.Level2: //[LOG 17:57:04.716] Light 0: Scaledspace SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:57:04.717] Parent: SunLight //[LOG 17:57:04.717] Light 1: SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:57:04.718] Parent: Scenery //[LOG 17:57:04.718] Light 2: Directional light, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:57:04.719] Parent: _UI //[LOG 17:57:04.720] Light 3: SpotlightWindow, RGBA(0.866, 0.863, 0.903, 1.000), Default OFF //[LOG 17:57:04.720] Parent: Editors_DayLights //[LOG 17:57:04.721] Light 4: Shadow Light, RGBA(1.000, 0.955, 0.896, 1.000), Default ON //[LOG 17:57:04.721] Parent: Editors_DayLights //[LOG 17:57:04.722] Light 5: SpotlightCraft, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:57:04.723] Parent: Editors_DayLights //[LOG 17:57:04.723] Light 6: SpotlightExteriorSun, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:57:04.724] Parent: Editors_DayLights //[LOG 17:57:04.724] Light 7: SpotlightWindow, RGBA(0.866, 0.863, 0.903, 1.000), Default OFF //[LOG 17:57:04.725] Parent: Editors_DayLights lightsToChange = new List<LightToChange>() { new LightToChange(){ name = "Realtime_SpotlightCraft", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_ExteriorSun", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_SpotlightScenery", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_Shadow Light", parentName = "Lighting_Realtime" } }; break; case EditorLevel.Level3: //[LOG 17:59:41.825] Light 0: Scaledspace SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:59:41.826] Parent: SunLight //[LOG 17:59:41.826] Light 1: SunLight, RGBA(1.000, 1.000, 1.000, 1.000), Default OFF //[LOG 17:59:41.827] Parent: Scenery //[LOG 17:59:41.828] Light 2: Directional light, RGBA(1.000, 1.000, 1.000, 1.000), Default ON //[LOG 17:59:41.828] Parent: _UI //[LOG 17:59:41.829] Light 3: Shadow Light, RGBA(1.000, 0.955, 0.896, 1.000), Default ON //[LOG 17:59:41.829] Parent: Editors_DayLights //[LOG 17:59:41.830] Light 4: SpotlightCraft, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:59:41.831] Parent: Editors_DayLights //[LOG 17:59:41.831] Light 5: Spotlight, RGBA(1.000, 0.236, 0.104, 1.000), Default ON //[LOG 17:59:41.832] Parent: model_prop_truck_h03 //[LOG 17:59:41.832] Light 6: SpotlightExteriorSun, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:59:41.833] Parent: Editors_DayLights //[LOG 17:59:41.833] Light 7: SpotlightWindow, RGBA(0.866, 0.863, 0.903, 1.000), Default ON //[LOG 17:59:41.834] Parent: Editors_DayLights lightsToChange = new List<LightToChange>() { new LightToChange(){ name = "Realtime_SpotlightCraft", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_ExteriorSun", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_SpotlightScenery", parentName = "Lighting_Realtime" }, new LightToChange(){ name = "Realtime_Shadow Light", parentName = "Lighting_Realtime" } }; break; } } }
public LOShaders(EditorFacility facility, EditorLevel level, GameObject[] gameObjects) { List<ShaderToChange> shadersToFind = new List<ShaderToChange>(); List<string> defaultShaders = new List<string>() { "KSP/Emissive/Specular", "KSP/Emissive/Bumped", "KSP/Emissive/Diffuse" }; if (facility == EditorFacility.VAB) { switch (level) { case EditorLevel.Level1: { //INTERIOR_VAB_lev2 1_MeshPart1 ShaderToChange shader = new ShaderToChange(); shader.path.Add("VAB_lev1_interior"); shader.path.Add("INTERIOR_VAB_lev2 1"); shader.name = "INTERIOR_VAB_lev2 1_MeshPart1"; shader.shaders = new List<string>(defaultShaders); shadersToFind.Add(shader); break; } case EditorLevel.Level2: // shader.path.Add("VAB_lev3_mainStructure"); break; case EditorLevel.Level3: for (int i = 0; i < 3; i++) { ShaderToChange shader = new ShaderToChange(); shader.path.Add("VAB_Interior_Geometry"); shader.shaders = new List<string>(defaultShaders); switch (i) { case 0: shader.name = "model_vab_interior_props_v16"; break; case 1: shader.name = "model_vab_walls"; break; case 2: shader.name = "model_vab_windows"; break; } shadersToFind.Add(shader); } break; } } else if (facility == EditorFacility.SPH) { switch (level) { case EditorLevel.Level1: { ShaderToChange shader = new ShaderToChange(); shader.path.Add("SPH-1_Interior"); shader.name = "group37_polySurface813"; shader.shaders = new List<string>(defaultShaders); shadersToFind.Add(shader); break; } case EditorLevel.Level2: for (int i = 0; i < 3; i++) { ShaderToChange shader = new ShaderToChange(); shader.shaders = new List<string>(defaultShaders); switch (i) { case 0: shader.path.Add("SPH_2_interior"); shader.name = "SPH_2_windows"; break; case 1: shader.path.Add("SPH_2_interior"); shader.name = "SPH_2_door3"; break; case 2: shader.path.Add("SPH_2_interior"); shader.name = "SPH_2_door4"; break; } shadersToFind.Add(shader); } break; case EditorLevel.Level3: for (int i = 0; i < 2; i++) { ShaderToChange shader = new ShaderToChange(); shader.path.Add("SPH_Interior_Geometry"); shader.shaders = new List<string>(defaultShaders); switch (i) { case 0: shader.name = "model_sph_interior_main_v16"; break; case 1: shader.path.Add("model_sph_interior_gates_v16"); shader.name = "Component_755_1"; break; } shadersToFind.Add(shader); } break; } } foreach (ShaderToChange shader in shadersToFind) { foreach (GameObject gameObject in gameObjects) { FindShader(gameObject, shader, 0); } } }
public CopyCraftFile(string url, EditorFacility craftType, State onState, List<string> parameter) : base(onState, parameter) { this.url = url; this.craftType = craftType; }