using NewHorizons.Builder.General; using NewHorizons.Components; using NewHorizons.Components.Orbital; using NewHorizons.Components.Stars; using NewHorizons.Utility; using UnityEngine; namespace NewHorizons.Handlers { public static class EyeSceneHandler { public static void OnSceneLoad() { // Create astro objects for eye and vessel because they didn't have them somehow. var eyeOfTheUniverse = SearchUtilities.Find("EyeOfTheUniverse_Body"); var eyeSector = eyeOfTheUniverse.FindChild("Sector_EyeOfTheUniverse").GetComponent(); var eyeAO = eyeOfTheUniverse.AddComponent(); var eyeBody = eyeOfTheUniverse.GetAttachedOWRigidbody(); var eyeMarker = eyeOfTheUniverse.AddComponent(); var eyeSphere = eyeSector.GetComponent(); eyeSphere.SetLayer(Shape.Layer.Sector); eyeAO._owRigidbody = eyeBody; eyeAO._rootSector = eyeSector; eyeAO._gravityVolume = eyeSector.GetComponentInChildren(); eyeAO._customName = "Eye Of The Universe"; eyeAO._name = AstroObject.Name.Eye; eyeAO._type = AstroObject.Type.None; eyeAO.Register(); eyeMarker._markerType = MapMarker.MarkerType.Sun; eyeMarker._labelID = UITextType.LocationEye_Cap; var eyeRFV = RFVolumeBuilder.Make(eyeOfTheUniverse, eyeBody, 400, new External.Modules.ReferenceFrameModule()); var vessel = SearchUtilities.Find("Vessel_Body"); var vesselSector = vessel.FindChild("Sector_VesselBridge").GetComponent(); var vesselAO = vessel.AddComponent(); var vesselBody = vessel.GetAttachedOWRigidbody(); var vesselMapMarker = vessel.AddComponent(); vesselAO._owRigidbody = vesselBody; vesselAO._primaryBody = eyeAO; eyeAO._satellite = vesselAO; vesselAO._rootSector = vesselSector; vesselAO._customName = "Vessel"; vesselAO._name = AstroObject.Name.CustomString; vesselAO._type = AstroObject.Type.SpaceStation; vesselAO.Register(); vesselMapMarker._markerType = MapMarker.MarkerType.Moon; vesselMapMarker._labelID = (UITextType)TranslationHandler.AddUI("VESSEL"); RFVolumeBuilder.Make(vessel, vesselBody, 600, new External.Modules.ReferenceFrameModule { localPosition = new MVector3(0, 0, -207.375f) }); // Resize vessel sector so that the vessel is fully collidable. var vesselSectorTrigger = vesselSector.gameObject.FindChild("SectorTriggerVolume_VesselBridge"); vesselSectorTrigger.transform.localPosition = new Vector3(0, 0, -207.375f); var vesselSectorTriggerBox = vesselSectorTrigger.GetComponent(); vesselSectorTriggerBox.size = new Vector3(600, 600, 600); vesselSectorTriggerBox.SetLayer(Shape.Layer.Sector); // Why were the vessel's lights inside the eye? Let's move them from the eye to vessel. var vesselPointlight = eyeSector.gameObject.FindChild("Pointlight_NOM_Vessel"); vesselPointlight.transform.SetParent(vesselSector.transform, true); var vesselSpotlight = eyeSector.gameObject.FindChild("Spotlight_NOM_Vessel"); vesselSpotlight.transform.SetParent(vesselSector.transform, true); var vesselAmbientLight = eyeSector.gameObject.FindChild("AmbientLight_Vessel"); vesselAmbientLight.transform.SetParent(vesselSector.transform, true); // Add sector streaming to vessel just in case some one moves the vessel. var vesselStreaming = new GameObject("Sector_Streaming"); vesselStreaming.transform.SetParent(vesselSector.transform, false); var vessel_ss = vesselStreaming.AddComponent(); vessel_ss._streamingGroup = eyeSector.gameObject.FindChild("StreamingGroup_EYE").GetComponent(); vessel_ss.SetSector(vesselSector); var eyeCoordinatePromptTrigger = vesselSector.GetComponentInChildren(true); eyeCoordinatePromptTrigger._warpController = eyeCoordinatePromptTrigger.GetComponentInParent(); eyeCoordinatePromptTrigger.gameObject.SetActive(true); var solarSystemRoot = SearchUtilities.Find("SolarSystemRoot"); // Disable forest and observatory so that a custom body doesn't accidentally pass through them. (they are 6.5km away from eye) // idk why mobius didn't add activation controllers for these var forestActivation = solarSystemRoot.AddComponent(); forestActivation._object = eyeSector.gameObject.FindChild("ForestOfGalaxies_Root"); forestActivation._activeStates = new EyeState[] { EyeState.Observatory, EyeState.ZoomOut, EyeState.ForestOfGalaxies, EyeState.ForestIsDark }; // mark var observatoryActivation = solarSystemRoot.AddComponent(); observatoryActivation._object = eyeSector.gameObject.FindChild("Sector_Observatory"); observatoryActivation._activeStates = new EyeState[] { EyeState.IntoTheVortex, EyeState.Observatory, EyeState.ZoomOut }; var referenceFrameActivation = solarSystemRoot.AddComponent(); referenceFrameActivation._object = eyeRFV; referenceFrameActivation._activeStates = new EyeState[] { EyeState.AboardVessel, EyeState.WarpedToSurface, EyeState.IntoTheVortex }; // This component breaks the cosmic orb guy but only on Steam? // solarSystemRoot.AddComponent(); var distantSun = eyeSector.gameObject.FindChild("DistantSun/Directional light"); var starController = distantSun.AddComponent(); var sunLight = distantSun.GetComponent(); starController.Light = sunLight; var ambientLightFake = new GameObject("AmbientLightFake", typeof(Light)); ambientLightFake.transform.SetParent(distantSun.transform, false); ambientLightFake.SetActive(false); var ambientLight = ambientLightFake.GetComponent(); ambientLight.intensity = 0; ambientLight.range = 0; ambientLight.enabled = false; starController.AmbientLight = ambientLight; starController.Intensity = 0.2f; starController.SunColor = new Color(0.3569f, 0.7843f, 1, 1); var sunLightController = distantSun.AddComponent(); sunLightController._sunLight = sunLight; sunLightController._ambientLight = ambientLight; sunLightController.Initialize(); var starLightController = distantSun.AddComponent(); starLightController.Awake(); SunLightEffectsController.AddStar(starController); SunLightEffectsController.AddStarLight(sunLight); } } }