diff --git a/NewHorizons/Assets/vessel.newhorizons b/NewHorizons/Assets/vessel.newhorizons new file mode 100644 index 00000000..2906f46b Binary files /dev/null and b/NewHorizons/Assets/vessel.newhorizons differ diff --git a/NewHorizons/Components/MaterialReplacer.cs b/NewHorizons/Components/MaterialReplacer.cs new file mode 100644 index 00000000..adf73001 --- /dev/null +++ b/NewHorizons/Components/MaterialReplacer.cs @@ -0,0 +1,34 @@ +using NewHorizons.Utility; +using System.Linq; +using UnityEngine; + +namespace NewHorizons.Components +{ + /// + /// Used by vessel asset bundle to change materials to the in-game ones. + /// + public class MaterialReplacer : MonoBehaviour + { + public string[] materialNames; + + public void Start() + { + Renderer renderer = GetComponent(); + NomaiNodeController nnc = GetComponent(); + if (renderer != null) + { + var materials = materialNames.Select(name => SearchUtilities.FindResourceOfTypeAndName(name)).ToArray(); + if (renderer is ParticleSystemRenderer psr) + psr.materials = materials; + else + renderer.sharedMaterials = materials; + } + else if (nnc != null) + { + var materials = materialNames.Select(name => SearchUtilities.FindResourceOfTypeAndName(name)).ToArray(); + nnc._inactiveMaterial = materials[0]; + nnc._activeMaterial = materials[1]; + } + } + } +} diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index ae2a715a..c34edd2b 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -24,6 +24,7 @@ namespace NewHorizons public class Main : ModBehaviour { public static AssetBundle NHAssetBundle { get; private set; } + public static AssetBundle VesselBundle { get; private set; } public static Main Instance { get; private set; } // Settings @@ -57,7 +58,6 @@ namespace NewHorizons // Vessel private SpawnPoint _vesselSpawnPoint; - public static bool HasVessel = false; private static GameObject VesselPrefab = null; // API events @@ -156,6 +156,8 @@ namespace NewHorizons GlobalMessenger.AddListener("WakeUp", OnWakeUp); NHAssetBundle = ModHelper.Assets.LoadBundle("Assets/xen.newhorizons"); + VesselBundle = ModHelper.Assets.LoadBundle("Assets/vessel.newhorizons"); + VesselPrefab = VesselBundle.LoadAsset("Vessel_Body"); ResetConfigs(resetTranslation: false); @@ -212,29 +214,6 @@ namespace NewHorizons { Logger.Log($"Scene Loaded: {scene.name} {mode}"); - if (IsWarpingFromVessel && scene.name == "EyeOfTheUniverse" && !HasVessel) - { - Logger.Log("Grabbing the vessel."); - HasVessel = true; - GameObject vessel = SearchUtilities.Find("Vessel_Body"); - NomaiWarpPlatform vesselPlatform = vessel.GetComponentInChildren(true); - vesselPlatform.gameObject.name = "Prefab_NOM_WarpPlatform_Vessel"; - GameObject warpPlatform = SearchUtilities.Find("EyeOfTheUniverse_Body/Sector_EyeOfTheUniverse/SixthPlanet_Root/Interactables_SixthPlanet/Prefab_NOM_WarpPlatform"); - warpPlatform.name = "Prefab_NOM_WarpPlatform_Eye"; - warpPlatform.transform.SetParent(SearchUtilities.Find("Vessel_Body/Sector_VesselBridge/Interactibles_VesselBridge").transform, true); - foreach (NomaiInterfaceOrb orb in FindObjectsOfType()) - { - orb.GetComponent()?.Suspend(); - orb.gameObject.SetActive(false); - } - vessel.SetActive(false); - VesselPrefab = GameObject.Instantiate(vessel); - VesselPrefab.name = "Vessel_Body"; - DontDestroyOnLoad(VesselPrefab); - LoadManager.LoadSceneAsync(OWScene.SolarSystem, true, LoadManager.FadeType.ToBlack, 0.1f, true); - return; - } - // Set time loop stuff if its enabled and if we're warping to a new place if (IsChangingStarSystem && (SystemDict[_currentStarSystem].Config.enableTimeLoop || _currentStarSystem == "SolarSystem") && SecondsLeftInLoop > 0f) { @@ -349,11 +328,6 @@ namespace NewHorizons s_rb.SetPosition(newPos); s_rb.SetRotation(player_body.transform.rotation); s_rb.SetVelocity(p_rb.GetVelocity()); - ModHelper.Events.Unity.FireOnNextUpdate(() => - { - vessel.GetComponent()?.DisableMarker(); - vessel.SetActive(false); - }); } } @@ -377,14 +351,7 @@ namespace NewHorizons vesselWarpController._targetWarpPlatform.transform.localPosition = system.Config.warpExitPosition; if (system.Config.warpExitRotation != null) vesselObject.transform.localEulerAngles = system.Config.warpExitRotation; - MapMarker mapMarker = vesselObject.AddComponent(); - mapMarker._labelID = (UITextType)TranslationHandler.AddUI("Vessel"); - mapMarker._markerType = MapMarker.MarkerType.Planet; - foreach (NomaiInterfaceOrb orb in vesselObject.GetComponentsInChildren(true)) - { - orb.gameObject.SetActive(true); - orb.gameObject.GetComponent()?.UnsuspendImmediate(true); - } + vesselObject.GetComponent()._labelID = (UITextType)TranslationHandler.AddUI("Vessel"); EyeSpawnPoint eyeSpawnPoint = vesselObject.GetComponentInChildren(true); system.SpawnPoint = eyeSpawnPoint; ModHelper.Events.Unity.FireOnNextUpdate(() => SetupWarpController(vesselWarpController)); @@ -449,11 +416,15 @@ namespace NewHorizons vesselWarpController._coordinateCable.SetPowered(!db); vesselWarpController._warpPlatformCable.SetPowered(false); vesselWarpController._cageClosed = true; - vesselWarpController._cageAnimator.TranslateToLocalPosition(new Vector3(0.0f, -8.1f, 0.0f), 0.1f); - vesselWarpController._cageAnimator.RotateToLocalEulerAngles(new Vector3(0.0f, 180f, 0.0f), 0.1f); - vesselWarpController._cageAnimator.OnTranslationComplete -= new TransformAnimator.AnimationEvent(vesselWarpController.OnCageAnimationComplete); - vesselWarpController._cageAnimator.OnTranslationComplete += new TransformAnimator.AnimationEvent(vesselWarpController.OnCageAnimationComplete); - vesselWarpController._cageLoopingAudio.FadeIn(1f); + if (vesselWarpController._cageAnimator != null) + { + vesselWarpController._cageAnimator.TranslateToLocalPosition(new Vector3(0.0f, -8.1f, 0.0f), 0.1f); + vesselWarpController._cageAnimator.RotateToLocalEulerAngles(new Vector3(0.0f, 180f, 0.0f), 0.1f); + vesselWarpController._cageAnimator.OnTranslationComplete -= new TransformAnimator.AnimationEvent(vesselWarpController.OnCageAnimationComplete); + vesselWarpController._cageAnimator.OnTranslationComplete += new TransformAnimator.AnimationEvent(vesselWarpController.OnCageAnimationComplete); + } + if (vesselWarpController._cageLoopingAudio != null) + vesselWarpController._cageLoopingAudio.FadeIn(1f); } // Had a bunch of separate unity things firing stuff when the system is ready so I moved it all to here @@ -645,13 +616,7 @@ namespace NewHorizons _currentStarSystem = newStarSystem; - if (vessel && !HasVessel && newStarSystem != "SolarSystem" && newStarSystem != "EyeOfTheUniverse") - { - Logger.Log("Going to grab the vessel."); - LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, !vessel, LoadManager.FadeType.ToBlack, 0.1f, true); - } - else - LoadManager.LoadSceneAsync(sceneToLoad, !vessel, LoadManager.FadeType.ToBlack, 0.1f, true); + LoadManager.LoadSceneAsync(sceneToLoad, !vessel, LoadManager.FadeType.ToBlack, 0.1f, true); } void OnDeath(DeathType _)