diff --git a/NewHorizons/Builder/Props/DetailBuilder.cs b/NewHorizons/Builder/Props/DetailBuilder.cs index 69171274..55406e64 100644 --- a/NewHorizons/Builder/Props/DetailBuilder.cs +++ b/NewHorizons/Builder/Props/DetailBuilder.cs @@ -253,39 +253,41 @@ namespace NewHorizons.Builder.Props /// private static void FixSectoredComponent(Component component, Sector sector, bool isTorch = false) { - if (component is Sector s) - { - s.SetParentSector(sector); - } - - if (component is SectorCullGroup sectorCullGroup) - { - sectorCullGroup._controllingProxy = null; - } - // fix Sector stuff, eg SectorCullGroup (without this, props that have a SectorCullGroup component will become invisible inappropriately) if (component is ISectorGroup sectorGroup) { sectorGroup.SetSector(sector); } - if (component is SectoredMonoBehaviour behaviour) + // Not doing else if here because idk if any of the classes below implement ISectorGroup + + if (component is Sector s) + { + s.SetParentSector(sector); + } + + else if (component is SectorCullGroup sectorCullGroup) + { + sectorCullGroup._controllingProxy = null; + } + + else if(component is SectoredMonoBehaviour behaviour) { behaviour.SetSector(sector); } - if (component is OWItemSocket socket) + else if(component is OWItemSocket socket) { socket._sector = sector; } // Fix slide reel - Softlocks if this object is a vision torch - if (!isTorch && component is SlideCollectionContainer container) + else if(!isTorch && component is SlideCollectionContainer container) { sector.OnOccupantEnterSector.AddListener(_ => container.LoadStreamingTextures()); } - if (component is NomaiRemoteCameraPlatform remoteCameraPlatform) + else if(component is NomaiRemoteCameraPlatform remoteCameraPlatform) { remoteCameraPlatform._visualSector = sector; } @@ -314,22 +316,19 @@ namespace NewHorizons.Builder.Props Component.DestroyImmediate(component); return; } - - if (component is DarkMatterVolume) + else if (component is DarkMatterVolume) { var probeVisuals = component.gameObject.transform.Find("ProbeVisuals"); if (probeVisuals != null) probeVisuals.gameObject.SetActive(true); } - - if (component is DarkMatterSubmergeController submergeController) + else if (component is DarkMatterSubmergeController submergeController) { var water = planetGO.GetComponentsInChildren().FirstOrDefault(x => x._fluidType == FluidVolume.Type.WATER); if (submergeController._fluidDetector) submergeController._fluidDetector._onlyDetectableFluid = water; } - // Fix anglerfish speed on orbiting planets - if (component is AnglerfishController angler) + else if (component is AnglerfishController angler) { try { @@ -342,50 +341,48 @@ namespace NewHorizons.Builder.Props } // fix campfires - if (component is InteractVolume interactVolume) + else if (component is InteractVolume) { - Delay.FireOnNextUpdate(() => interactVolume._playerCam = Locator.GetPlayerCamera()); + component.gameObject.AddComponent(); } - if (component is PlayerAttachPoint playerAttachPoint) + else if (component is PlayerAttachPoint) { - var playerBody = GameObject.Find("Player_Body"); - playerAttachPoint._playerController = playerBody.GetComponent(); - playerAttachPoint._playerOWRigidbody = playerBody.GetComponent(); - playerAttachPoint._playerTransform = playerBody.transform; - Delay.FireOnNextUpdate(() => playerAttachPoint._fpsCamController = Locator.GetPlayerCameraController()); + component.gameObject.AddComponent(); } - if (component is NomaiInterfaceOrb orb) + else if (component is NomaiInterfaceOrb orb) { orb._parentAstroObject = planetGO.GetComponent(); orb._parentBody = planetGO.GetComponent(); } - if (component is VisionTorchItem torchItem) + else if (component is VisionTorchItem torchItem) { torchItem.enabled = true; torchItem.mindProjectorTrigger.enabled = true; - Delay.FireOnNextUpdate(() => torchItem.mindSlideProjector._mindProjectorImageEffect = Locator.GetPlayerCamera().GetComponent()); + torchItem.gameObject.AddComponent(); } - if (component is Animator animator) animator.enabled = true; - if (component is Collider collider) collider.enabled = true; + else if (component is Animator animator) animator.enabled = true; + else if(component is Collider collider) collider.enabled = true; // Bug 533 - Don't show the electricity effect renderers - if (component is Renderer renderer && component.gameObject.GetComponent() == null) renderer.enabled = true; - if (component is Shape shape) shape.enabled = true; + else if (component is Renderer renderer && component.gameObject.GetComponent() == null) renderer.enabled = true; + else if(component is Shape shape) shape.enabled = true; // fixes sector cull group deactivating renderers on map view enter and fast foward // TODO: does this actually work? what? how? - if (component is SectorCullGroup sectorCullGroup) + else if(component is SectorCullGroup sectorCullGroup) { sectorCullGroup._inMapView = false; sectorCullGroup._isFastForwarding = false; sectorCullGroup.SetVisible(sectorCullGroup.ShouldBeVisible(), true, false); } - + // If it's not a moving anglerfish make sure the anim controller is regular - if (component is AnglerfishAnimController && component.GetComponentInParent() == null) + else if(component is AnglerfishAnimController && component.GetComponentInParent() == null) + { component.gameObject.AddComponent(); + } } /// @@ -416,5 +413,53 @@ namespace NewHorizons.Builder.Props Destroy(this); } } + + /// + /// Has to happen after 1 frame to work with VR + /// + [RequireComponent(typeof(InteractVolume))] + private class InteractVolumeFixer : MonoBehaviour + { + public void Start() + { + var interactVolume = GetComponent(); + interactVolume._playerCam = Locator.GetPlayerCamera(); + + Destroy(this); + } + } + + /// + /// Has to happen after 1 frame to work with VR + /// + [RequireComponent(typeof(PlayerAttachPoint))] + private class PlayerAttachPointFixer : MonoBehaviour + { + public void Start() + { + var playerAttachPoint = GetComponent(); + playerAttachPoint._playerController = Locator.GetPlayerController(); + playerAttachPoint._playerOWRigidbody = Locator.GetPlayerBody(); + playerAttachPoint._playerTransform = Locator.GetPlayerTransform(); + playerAttachPoint._fpsCamController = Locator.GetPlayerCameraController(); + + Destroy(this); + } + } + + /// + /// Has to happen after 1 frame to work with VR + /// + [RequireComponent(typeof(VisionTorchItem))] + private class VisionTorchItemFixer : MonoBehaviour + { + public void Start() + { + var torchItem = GetComponent(); + torchItem.mindSlideProjector._mindProjectorImageEffect = Locator.GetPlayerCamera().GetComponent(); + + Destroy(this); + } + } } } \ No newline at end of file