diff --git a/.gitignore b/.gitignore index e645270..e009146 100644 --- a/.gitignore +++ b/.gitignore @@ -351,3 +351,4 @@ MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ +build-bep5mono.ps1 diff --git a/src/Inspectors/MouseInspector.cs b/src/Inspectors/MouseInspector.cs index 850903b..ec05c57 100644 --- a/src/Inspectors/MouseInspector.cs +++ b/src/Inspectors/MouseInspector.cs @@ -44,6 +44,7 @@ namespace UnityExplorer.Inspectors public override Vector2 DefaultAnchorMax => Vector2.zero; public override bool CanDragAndResize => false; + private Action inspectorAction = null; internal Text objNameLabel; internal Text objPathLabel; @@ -61,13 +62,13 @@ namespace UnityExplorer.Inspectors switch (index) { case 0: return; - case 1: Instance.StartInspect(MouseInspectMode.World); break; - case 2: Instance.StartInspect(MouseInspectMode.UI); break; + case 1: Instance.StartInspect(MouseInspectMode.World, (obj) => InspectorManager.Inspect(obj, null)); break; + case 2: Instance.StartInspect(MouseInspectMode.UI, (obj) => InspectorManager.Inspect(obj, null)); break; } InspectorPanel.Instance.MouseInspectDropdown.value = 0; } - public void StartInspect(MouseInspectMode mode) + public void StartInspect(MouseInspectMode mode, Action newInspectorAction) { Mode = mode; Inspecting = true; @@ -80,6 +81,8 @@ namespace UnityExplorer.Inspectors UIManager.UiBase.SetOnTop(); SetActive(true); + + inspectorAction = newInspectorAction; } internal void ClearHitData() @@ -111,10 +114,10 @@ namespace UnityExplorer.Inspectors public bool TryUpdate() { if (InputManager.GetKeyDown(ConfigManager.World_MouseInspect_Keybind.Value)) - Instance.StartInspect(MouseInspectMode.World); + Instance.StartInspect(MouseInspectMode.World, inspectorAction); if (InputManager.GetKeyDown(ConfigManager.UI_MouseInspect_Keybind.Value)) - Instance.StartInspect(MouseInspectMode.UI); + Instance.StartInspect(MouseInspectMode.UI, inspectorAction); if (Inspecting) UpdateInspect(); @@ -132,7 +135,7 @@ namespace UnityExplorer.Inspectors if (InputManager.GetMouseButtonDown(0)) { - CurrentInspector.OnSelectMouseInspect(); + CurrentInspector.OnSelectMouseInspect(inspectorAction); StopInspect(); return; } diff --git a/src/Inspectors/MouseInspectors/MouseInspectorBase.cs b/src/Inspectors/MouseInspectors/MouseInspectorBase.cs index d484ecb..10b5861 100644 --- a/src/Inspectors/MouseInspectors/MouseInspectorBase.cs +++ b/src/Inspectors/MouseInspectors/MouseInspectorBase.cs @@ -6,7 +6,7 @@ public abstract void UpdateMouseInspect(Vector2 mousePos); - public abstract void OnSelectMouseInspect(); + public abstract void OnSelectMouseInspect(Action inspectorAction); public abstract void ClearHitData(); diff --git a/src/Inspectors/MouseInspectors/UiInspector.cs b/src/Inspectors/MouseInspectors/UiInspector.cs index 7dcccfb..c23cc20 100644 --- a/src/Inspectors/MouseInspectors/UiInspector.cs +++ b/src/Inspectors/MouseInspectors/UiInspector.cs @@ -28,8 +28,9 @@ namespace UnityExplorer.Inspectors.MouseInspectors currentHitObjects.Clear(); } - public override void OnSelectMouseInspect() + public override void OnSelectMouseInspect(Action inspectorAction) { + // need to properly handle inspectorAction here LastHitObjects.Clear(); LastHitObjects.AddRange(currentHitObjects); RuntimeHelper.StartCoroutine(SetPanelActiveCoro()); diff --git a/src/Inspectors/MouseInspectors/WorldInspector.cs b/src/Inspectors/MouseInspectors/WorldInspector.cs index aa518f4..85f4c01 100644 --- a/src/Inspectors/MouseInspectors/WorldInspector.cs +++ b/src/Inspectors/MouseInspectors/WorldInspector.cs @@ -21,9 +21,9 @@ lastHitObject = null; } - public override void OnSelectMouseInspect() + public override void OnSelectMouseInspect(Action inspectorAction) { - InspectorManager.Inspect(lastHitObject); + inspectorAction(lastHitObject); } public override void UpdateMouseInspect(Vector2 mousePos) diff --git a/src/UI/Panels/FreeCamPanel.cs b/src/UI/Panels/FreeCamPanel.cs index 47bf9d5..364f4a7 100644 --- a/src/UI/Panels/FreeCamPanel.cs +++ b/src/UI/Panels/FreeCamPanel.cs @@ -1,4 +1,5 @@ using UniverseLib.Input; +using UnityExplorer.Inspectors; using UniverseLib.UI; using UniverseLib.UI.Models; #if UNHOLLOWER @@ -45,6 +46,7 @@ namespace UnityExplorer.UI.Panels static ButtonRef startStopButton; static Toggle useGameCameraToggle; + public static Toggle blockFreecamMovementToggle; static InputFieldRef positionInput; static InputFieldRef moveSpeedInput; static ButtonRef inspectButton; @@ -184,11 +186,11 @@ namespace UnityExplorer.UI.Panels AddSpacer(5); - GameObject toggleObj = UIFactory.CreateToggle(ContentRoot, "UseGameCameraToggle", out useGameCameraToggle, out Text toggleText); + GameObject toggleObj = UIFactory.CreateToggle(ContentRoot, "UseGameCameraToggle", out useGameCameraToggle, out Text useGameCameraText); UIFactory.SetLayoutElement(toggleObj, minHeight: 25, flexibleWidth: 9999); useGameCameraToggle.onValueChanged.AddListener(OnUseGameCameraToggled); useGameCameraToggle.isOn = false; - toggleText.text = "Use Game Camera?"; + useGameCameraText.text = "Use Game Camera?"; AddSpacer(5); @@ -205,6 +207,21 @@ namespace UnityExplorer.UI.Panels AddSpacer(5); + ButtonRef followButton = UIFactory.CreateButton(ContentRoot, "FollowButton", "Make camera Follow Gameobject"); + UIFactory.SetLayoutElement(followButton.GameObject, minWidth: 150, minHeight: 25, flexibleWidth: 9999); + followButton.OnClick += FollowButton_OnClick; + + AddSpacer(5); + + GameObject blockFreecamMovement = UIFactory.CreateToggle(ContentRoot, "blockFreecamMovement", out blockFreecamMovementToggle, out Text blockFreecamMovementText); + UIFactory.SetLayoutElement(blockFreecamMovement, minHeight: 25, flexibleWidth: 9999); + blockFreecamMovementToggle.onValueChanged.AddListener(OnUseGameCameraToggled); + blockFreecamMovementToggle.isOn = false; + blockFreecamMovementText.text = "Block Freecam movement"; + + AddSpacer(5); + + string instructions = @"Controls: - WASD / Arrows: Movement - Space / PgUp: Move up @@ -260,6 +277,19 @@ namespace UnityExplorer.UI.Panels SetToggleButtonState(); } + void temporalAction(GameObject obj){ + if(!ourCamera){ + ExplorerCore.LogWarning("Error: Start the freecam at least once before setting a follow object."); + return; + } + ourCamera.transform.SetParent(obj.transform, true); + } + + void FollowButton_OnClick() + { + MouseInspector.Instance.StartInspect(MouseInspectMode.World, temporalAction); + } + void SetToggleButtonState() { if (inFreeCamMode) @@ -349,6 +379,10 @@ namespace UnityExplorer.UI.Panels return; } + if (FreeCamPanel.blockFreecamMovementToggle.isOn){ + return; + } + Transform transform = FreeCamPanel.ourCamera.transform; FreeCamPanel.currentUserCameraPosition = transform.position;