From c60a16729d4cec81cf338ae8c92354186b5252f5 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 5 Aug 2025 00:35:16 -0400 Subject: [PATCH] added: target offset to camera settings controls. refactored settings code --- .../Core/Graph Tasks/ChangeCameraSettings.cs | 241 +++++++----------- .../Scripts/Player/CameraSettingsProcessor.cs | 8 +- 2 files changed, 105 insertions(+), 144 deletions(-) diff --git a/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs b/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs index 7ed0929..73f8256 100644 --- a/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs +++ b/Assets/Scripts/Core/Graph Tasks/ChangeCameraSettings.cs @@ -5,7 +5,7 @@ using UnityEditor; using UnityEngine; // Individual bool setting for each ring. Three of these will be used. -public struct OrbitalFollowValueGroup{ +public struct OrbitalFollowValueGroup : ICameraValueGroup{ public string label; public CameraSettingsToggle changeHeight; @@ -38,7 +38,11 @@ public enum CameraSettingsToggle{ ResetValue, } -public struct Vector3CameraValueGroup{ +public interface ICameraValueGroup{ + +} + +public struct Vector3CameraValueGroup : ICameraValueGroup{ public string label; public Vector3 newValue; @@ -56,7 +60,7 @@ public struct Vector3CameraValueGroup{ } } -public struct Vector2CameraValueGroup{ +public struct Vector2CameraValueGroup : ICameraValueGroup{ public string label; public Vector2 newValue; @@ -72,7 +76,7 @@ public struct Vector2CameraValueGroup{ } } -public struct FloatCameraValueGroup{ +public struct FloatCameraValueGroup : ICameraValueGroup{ public string label; public float value; @@ -328,7 +332,9 @@ namespace NodeCanvas.Tasks.Actions { public FloatCameraValueGroup fieldOfView = new (newLabel: "FOV"); [ParadoxNotion.Design.Header("Orbit Follow Ring Settings"), Space (5)] - public Vector3CameraValueGroup orbitPositionDamping = new(newLabel: "Position Damping"); + public Vector3CameraValueGroup orbitTargetOffset = new(newLabel: "Target Offset"); + [Space(5)]public Vector3CameraValueGroup orbitPositionDamping = new(newLabel: "Position Damping"); + public OrbitalFollowValueGroup orbitFollowTop = new (newLabel: "Top"); public OrbitalFollowValueGroup orbitFollowCenter = new (newLabel: "Center"); public OrbitalFollowValueGroup orbitFollowBottom = new (newLabel: "Bottom"); @@ -349,150 +355,101 @@ namespace NodeCanvas.Tasks.Actions { //Call EndAction() to mark the action as finished, either in success or failure. //EndAction can be called from anywhere. protected override void OnExecute(){ - // Switch case farm for checking if values should be changed and what to - // Field of view - switch (fieldOfView.changeValue) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.mainFieldOfView.targetValue = fieldOfView.value; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.mainFieldOfView.Reset(); - break; - } + UpdateOrbitFollowValue(orbitFollowTop, ref CameraSettingsProcessor.values.orbitFollowTopHeight, ref CameraSettingsProcessor.values.orbitFollowTopRadius); + UpdateOrbitFollowValue(orbitFollowCenter, ref CameraSettingsProcessor.values.orbitFollowCenterHeight, ref CameraSettingsProcessor.values.orbitFollowCenterRadius); + UpdateOrbitFollowValue(orbitFollowBottom, ref CameraSettingsProcessor.values.orbitFollowBottomHeight, ref CameraSettingsProcessor.values.orbitFollowBottomRadius); - // Orbit follow rings - switch (orbitFollowTop.changeHeight) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitFollowTopHeight.targetValue = orbitFollowTop.height; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitFollowTopHeight.Reset(); - break; - } + UpdateVector3Value(cameraOffset, ref CameraSettingsProcessor.values.cameraOffsetOffset); - switch (orbitFollowTop.changeRadius) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitFollowTopRadius.targetValue = orbitFollowTop.radius; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitFollowTopRadius.Reset(); - break; - } + UpdateVector3Value(orbitPositionDamping, ref CameraSettingsProcessor.values.orbitPositionDamping); + // UpdateVector3Value(orbitTargetOffset, ref CameraSettingsProcessor.values.orbitTargetOffset); - switch (orbitFollowCenter.changeHeight) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitFollowCenterHeight.targetValue = orbitFollowCenter.height; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitFollowCenterHeight.Reset(); - break; - } - - switch (orbitFollowCenter.changeRadius) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitFollowCenterRadius.targetValue = orbitFollowCenter.radius; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitFollowCenterRadius.Reset(); - break; - } - - switch (orbitFollowBottom.changeHeight) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitFollowBottomHeight.targetValue = orbitFollowBottom.height; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitFollowBottomHeight.Reset(); - break; - } - - switch (orbitFollowBottom.changeRadius) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitFollowBottomRadius.targetValue = orbitFollowBottom.radius; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitFollowBottomRadius.Reset(); - break; - } - - // Screen Position - switch (screenPosition.changeX) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.rotationComposerScreenPos.targetValue.x = screenPosition.newValue.x; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.rotationComposerScreenPos.targetValue.x = CameraSettingsProcessor.values.rotationComposerScreenPos.originalValue.x; - break; - } - - switch (screenPosition.changeY) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.rotationComposerScreenPos.targetValue.y = screenPosition.newValue.y; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.rotationComposerScreenPos.targetValue.y = CameraSettingsProcessor.values.rotationComposerScreenPos.originalValue.y; - break; - } - - // Camera Offset - switch (cameraOffset.changeX) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.cameraOffsetOffset.targetValue.x = cameraOffset.newValue.x; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.cameraOffsetOffset.targetValue.x = CameraSettingsProcessor.values.cameraOffsetOffset.originalValue.x; - break; - } - - switch (cameraOffset.changeY) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.cameraOffsetOffset.targetValue.y = cameraOffset.newValue.y; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.cameraOffsetOffset.targetValue.y = CameraSettingsProcessor.values.cameraOffsetOffset.originalValue.y; - break; - } - - switch (cameraOffset.changeZ) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.cameraOffsetOffset.targetValue.z = cameraOffset.newValue.z; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.cameraOffsetOffset.targetValue.z = CameraSettingsProcessor.values.cameraOffsetOffset.originalValue.z; - break; - } - - // Position Damping - switch (orbitPositionDamping.changeX) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitPositionDamping.targetValue.x = orbitPositionDamping.newValue.x; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitPositionDamping.targetValue.x = CameraSettingsProcessor.values.orbitPositionDamping.originalValue.x; - break; - } - - switch (orbitPositionDamping.changeY) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitPositionDamping.targetValue.y = orbitPositionDamping.newValue.y; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitPositionDamping.targetValue.y = CameraSettingsProcessor.values.orbitPositionDamping.originalValue.y; - break; - } - - switch (orbitPositionDamping.changeZ) { - case CameraSettingsToggle.NewValue: - CameraSettingsProcessor.values.orbitPositionDamping.targetValue.z = orbitPositionDamping.newValue.z; - break; - case CameraSettingsToggle.ResetValue: - CameraSettingsProcessor.values.orbitPositionDamping.targetValue.z = CameraSettingsProcessor.values.orbitPositionDamping.originalValue.z; - break; - } + UpdateVector2Value(screenPosition, ref CameraSettingsProcessor.values.rotationComposerScreenPos); + UpdateFloatValue(fieldOfView, ref CameraSettingsProcessor.values.mainFieldOfView); EndAction(true); } + public void UpdateVector3Value(Vector3CameraValueGroup valueGroup, ref CameraSettingSingleValue targetProperty){ + switch (valueGroup.changeX) { + case CameraSettingsToggle.NewValue: + targetProperty.targetValue.x = valueGroup.newValue.x; + break; + case CameraSettingsToggle.ResetValue: + targetProperty.targetValue.x = targetProperty.originalValue.x; + break; + } + + switch (valueGroup.changeY) { + case CameraSettingsToggle.NewValue: + targetProperty.targetValue.y = valueGroup.newValue.y; + break; + case CameraSettingsToggle.ResetValue: + targetProperty.targetValue.y = targetProperty.originalValue.y; + break; + } + + switch (valueGroup.changeZ) { + case CameraSettingsToggle.NewValue: + targetProperty.targetValue.z = valueGroup.newValue.z; + break; + case CameraSettingsToggle.ResetValue: + targetProperty.targetValue.z = targetProperty.originalValue.z; + break; + } + } + + public void UpdateVector2Value(Vector2CameraValueGroup valueGroup, ref CameraSettingSingleValue targetProperty){ + switch (valueGroup.changeX) { + case CameraSettingsToggle.NewValue: + targetProperty.targetValue.x = valueGroup.newValue.x; + break; + case CameraSettingsToggle.ResetValue: + targetProperty.targetValue.x = targetProperty.originalValue.x; + break; + } + + switch (valueGroup.changeY) { + case CameraSettingsToggle.NewValue: + targetProperty.targetValue.y = valueGroup.newValue.y; + break; + case CameraSettingsToggle.ResetValue: + targetProperty.targetValue.y = targetProperty.originalValue.y; + break; + } + } + + public void UpdateOrbitFollowValue(OrbitalFollowValueGroup valueGroup, ref CameraSettingSingleValue targetHeight, ref CameraSettingSingleValue targetRadius){ + switch (valueGroup.changeHeight) { + case CameraSettingsToggle.NewValue: + targetHeight.targetValue = valueGroup.height; + break; + case CameraSettingsToggle.ResetValue: + targetHeight.targetValue = targetHeight.originalValue; + break; + } + + switch (valueGroup.changeRadius) { + case CameraSettingsToggle.NewValue: + targetRadius.targetValue = valueGroup.radius; + break; + case CameraSettingsToggle.ResetValue: + targetRadius.targetValue = targetRadius.originalValue; + break; + } + } + + public void UpdateFloatValue(FloatCameraValueGroup valueGroup, ref CameraSettingSingleValue targetProperty){ + switch (valueGroup.changeValue) { + case CameraSettingsToggle.NewValue: + targetProperty.targetValue = valueGroup.value; + break; + case CameraSettingsToggle.ResetValue: + targetProperty.targetValue = targetProperty.originalValue; + break; + } + } + //Called once per frame while the action is active. protected override void OnUpdate() { diff --git a/Assets/Scripts/Player/CameraSettingsProcessor.cs b/Assets/Scripts/Player/CameraSettingsProcessor.cs index 47670cf..3c1a697 100644 --- a/Assets/Scripts/Player/CameraSettingsProcessor.cs +++ b/Assets/Scripts/Player/CameraSettingsProcessor.cs @@ -30,6 +30,7 @@ public struct CameraSettingValues{ public CameraSettingSingleValue mainFieldOfView; public CameraSettingSingleValue orbitPositionDamping; + public CameraSettingSingleValue orbitTargetOffset; public CameraSettingSingleValue orbitFollowTopHeight; public CameraSettingSingleValue orbitFollowTopRadius; @@ -46,6 +47,7 @@ public struct CameraSettingValues{ mainFieldOfView = new CameraSettingSingleValue(defaultSmoothing); orbitPositionDamping = new CameraSettingSingleValue(defaultSmoothing); + orbitTargetOffset = new CameraSettingSingleValue(defaultSmoothing); orbitFollowTopHeight = new CameraSettingSingleValue(defaultSmoothing); orbitFollowTopRadius = new CameraSettingSingleValue(defaultSmoothing); @@ -106,6 +108,10 @@ public class CameraSettingsProcessor : MonoBehaviour{ values.mainFieldOfView.targetValue, ref values.mainFieldOfView.velocityRef, values.mainFieldOfView.smoothing); + orbit.TargetOffset = Vector3.SmoothDamp(orbit.TargetOffset, + values.orbitTargetOffset.targetValue, ref values.orbitTargetOffset.velocityRefV3, + values.orbitTargetOffset.smoothing); + orbit.TrackerSettings.PositionDamping = Vector3.SmoothDamp(orbit.TrackerSettings.PositionDamping, values.orbitPositionDamping.targetValue, ref values.orbitPositionDamping.velocityRefV3, values.orbitPositionDamping.smoothing); @@ -122,8 +128,6 @@ public class CameraSettingsProcessor : MonoBehaviour{ values.orbitFollowCenterHeight.targetValue, ref values.orbitFollowCenterHeight.velocityRef, values.orbitFollowCenterHeight.smoothing); - - orbit.Orbits.Center.Radius = Mathf.SmoothDamp(orbit.Orbits.Center.Radius, values.orbitFollowCenterRadius.targetValue, ref values.orbitFollowCenterRadius.velocityRef, values.orbitFollowCenterRadius.smoothing);