diff --git a/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs b/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs index ff34ba31f..c4406a3fe 100644 --- a/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs +++ b/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs @@ -143,7 +143,7 @@ namespace ProjectM.Client } if (!SystemAPI.TryGetSingleton(out var anchor)) { HideGhost(); return; } - if (_camera == null) _camera = ResolveCamera(); + if (_camera == null) _camera = CameraResolver.Resolve(); if (_camera == null || mouse == null) { HideGhost(); return; } // Cursor -> ground -> cell. @@ -248,16 +248,7 @@ namespace ProjectM.Client _ghost.SetActive(false); } - UnityEngine.Camera ResolveCamera() - { - var cam = UnityEngine.Camera.main; - if (cam == null) - { - var rig = Object.FindAnyObjectByType(); - if (rig != null) cam = rig.GetComponent(); - } - return cam; - } + bool TryGetLocalPlayerCell(out int2 cell) { diff --git a/Assets/_Project/Scripts/Client/Input/PlayerInputGatherSystem.cs b/Assets/_Project/Scripts/Client/Input/PlayerInputGatherSystem.cs index a086a95ca..2644b8902 100644 --- a/Assets/_Project/Scripts/Client/Input/PlayerInputGatherSystem.cs +++ b/Assets/_Project/Scripts/Client/Input/PlayerInputGatherSystem.cs @@ -126,7 +126,7 @@ namespace ProjectM.Client AimPresentation.Scheme = _scheme; // Mouse cursor projection needs the camera; resolve/cache it (Camera.main or the rig's camera). - if (_camera == null) _camera = ResolveCamera(); + if (_camera == null) _camera = CameraResolver.Resolve(); UnityEngine.Vector2 cursorScreen = mouse != null ? mouse.position.ReadValue() : default; foreach (var (input, xform) in @@ -173,15 +173,6 @@ namespace ProjectM.Client } } - private UnityEngine.Camera ResolveCamera() - { - var cam = UnityEngine.Camera.main; - if (cam == null) - { - var rig = UnityEngine.Object.FindAnyObjectByType(); - if (rig != null) cam = rig.GetComponent(); - } - return cam; - } + } } diff --git a/Assets/_Project/Scripts/Client/Presentation/AimReticleSystem.cs b/Assets/_Project/Scripts/Client/Presentation/AimReticleSystem.cs index 5895f9785..e5071dd50 100644 --- a/Assets/_Project/Scripts/Client/Presentation/AimReticleSystem.cs +++ b/Assets/_Project/Scripts/Client/Presentation/AimReticleSystem.cs @@ -51,7 +51,7 @@ namespace ProjectM.Client protected override void OnUpdate() { byte scheme = AimPresentation.Scheme; - if (_camera == null) _camera = ResolveCamera(); + if (_camera == null) _camera = CameraResolver.Resolve(); bool haveTarget = false; float3 ringPos = default; @@ -157,16 +157,7 @@ namespace ProjectM.Client } } - UnityEngine.Camera ResolveCamera() - { - var cam = UnityEngine.Camera.main; - if (cam == null) - { - var rig = UnityEngine.Object.FindAnyObjectByType(); - if (rig != null) cam = rig.GetComponent(); - } - return cam; - } + protected override void OnDestroy() { diff --git a/Assets/_Project/Scripts/Client/Presentation/CameraResolver.cs b/Assets/_Project/Scripts/Client/Presentation/CameraResolver.cs new file mode 100644 index 000000000..75be353d0 --- /dev/null +++ b/Assets/_Project/Scripts/Client/Presentation/CameraResolver.cs @@ -0,0 +1,21 @@ +namespace ProjectM.Client +{ + /// + /// Resolves the gameplay camera for the client systems that cursor-raycast against the ground (input aim, + /// build placement, aim reticle): , falling back to the + /// 's Camera. Single source so the camera-resolution policy lives in one place. + /// + public static class CameraResolver + { + public static UnityEngine.Camera Resolve() + { + var cam = UnityEngine.Camera.main; + if (cam == null) + { + var rig = UnityEngine.Object.FindAnyObjectByType(); + if (rig != null) cam = rig.GetComponent(); + } + return cam; + } + } +} diff --git a/Assets/_Project/Scripts/Client/Presentation/CameraResolver.cs.meta b/Assets/_Project/Scripts/Client/Presentation/CameraResolver.cs.meta new file mode 100644 index 000000000..cf93348a3 --- /dev/null +++ b/Assets/_Project/Scripts/Client/Presentation/CameraResolver.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 94961d35ebce5d34a80b77b53592b156 \ No newline at end of file