diff options
Diffstat (limited to 'Assets/RTS_Camera/Scripts/Editor')
| -rw-r--r-- | Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs | 108 | ||||
| -rw-r--r-- | Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs.meta | 12 | ||||
| -rw-r--r-- | Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs | 158 | ||||
| -rw-r--r-- | Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs.meta | 12 |
4 files changed, 290 insertions, 0 deletions
diff --git a/Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs b/Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs new file mode 100644 index 0000000..2c41a09 --- /dev/null +++ b/Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs @@ -0,0 +1,108 @@ +using UnityEngine; +using System; +using System.Collections.Generic; +using UnityEditor; +using System.Linq; + + +public class VerticalBlock : IDisposable +{ + public VerticalBlock(params GUILayoutOption[] options) + { + GUILayout.BeginVertical(options); + } + + public VerticalBlock(GUIStyle style, params GUILayoutOption[] options) + { + GUILayout.BeginVertical(style, options); + } + + public void Dispose() + { + GUILayout.EndVertical(); + } +} + +public class ScrollviewBlock : IDisposable +{ + public ScrollviewBlock(ref Vector2 scrollPos, params GUILayoutOption[] options) + { + scrollPos = GUILayout.BeginScrollView(scrollPos, options); + } + + public void Dispose() + { + GUILayout.EndScrollView(); + } +} + +public class HorizontalBlock : IDisposable +{ + public HorizontalBlock(params GUILayoutOption[] options) + { + GUILayout.BeginHorizontal(options); + } + + public HorizontalBlock(GUIStyle style, params GUILayoutOption[] options) + { + GUILayout.BeginHorizontal(style, options); + } + + public void Dispose() + { + GUILayout.EndHorizontal(); + } +} + +public class ColoredBlock : System.IDisposable +{ + public ColoredBlock(Color color) + { + GUI.color = color; + } + + public void Dispose() + { + GUI.color = Color.white; + } +} + +[Serializable] +public class TabsBlock +{ + private Dictionary<string, Action> methods; + private Action currentGuiMethod; + public int curMethodIndex = -1; + + public TabsBlock(Dictionary<string, Action> _methods) + { + methods = _methods; + SetCurrentMethod(0); + } + + public void Draw() + { + var keys = methods.Keys.ToArray(); + using (new VerticalBlock(EditorStyles.helpBox)) + { + using (new HorizontalBlock()) + { + for (int i = 0; i < keys.Length; i++) + { + var btnStyle = i == 0 ? EditorStyles.miniButtonLeft : i == (keys.Length - 1) ? EditorStyles.miniButtonRight : EditorStyles.miniButtonMid; + using (new ColoredBlock(currentGuiMethod == methods[keys[i]] ? Color.grey : Color.white)) + if (GUILayout.Button(keys[i], btnStyle)) + SetCurrentMethod(i); + } + } + GUILayout.Label(keys[curMethodIndex], EditorStyles.centeredGreyMiniLabel); + currentGuiMethod(); + } + } + + public void SetCurrentMethod(int index) + { + curMethodIndex = index; + currentGuiMethod = methods[methods.Keys.ToArray()[index]]; + } +}
\ No newline at end of file diff --git a/Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs.meta b/Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs.meta new file mode 100644 index 0000000..07148cb --- /dev/null +++ b/Assets/RTS_Camera/Scripts/Editor/LayoutHelpers.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e6604c54827307c4083b63203d4fed4b +timeCreated: 1451938860 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs b/Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs new file mode 100644 index 0000000..d4a828f --- /dev/null +++ b/Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs @@ -0,0 +1,158 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEditor; + +namespace RTS_Cam +{ + [CustomEditor(typeof(RTS_Camera))] + public class RTS_CameraEditor : Editor + { + private RTS_Camera camera { get { return target as RTS_Camera; } } + + private TabsBlock tabs; + + private void OnEnable() + { + tabs = new TabsBlock(new Dictionary<string, System.Action>() + { + {"Movement", MovementTab}, + {"Rotation", RotationTab}, + {"Height", HeightTab} + }); + tabs.SetCurrentMethod(camera.lastTab); + } + + public override void OnInspectorGUI() + { + //base.OnInspectorGUI(); + Undo.RecordObject(camera, "RTS_CAmera"); + tabs.Draw(); + if (GUI.changed) + camera.lastTab = tabs.curMethodIndex; + EditorUtility.SetDirty(camera); + } + + private void MovementTab() + { + using (new HorizontalBlock()) + { + GUILayout.Label("Use keyboard input: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.useKeyboardInput = EditorGUILayout.Toggle( camera.useKeyboardInput); + } + if(camera.useKeyboardInput) + { + camera.horizontalAxis = EditorGUILayout.TextField("Horizontal axis name: ", camera.horizontalAxis); + camera.verticalAxis = EditorGUILayout.TextField("Vertical axis name: ", camera.verticalAxis); + camera.keyboardMovementSpeed = EditorGUILayout.FloatField("Movement speed: ", camera.keyboardMovementSpeed); + } + + using (new HorizontalBlock()) + { + GUILayout.Label("Screen edge input: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.useScreenEdgeInput = EditorGUILayout.Toggle( camera.useScreenEdgeInput); + } + + if(camera.useScreenEdgeInput) + { + EditorGUILayout.FloatField("Screen edge border size: ", camera.screenEdgeBorder); + camera.screenEdgeMovementSpeed = EditorGUILayout.FloatField("Screen edge movement speed: ", camera.screenEdgeMovementSpeed); + } + + using (new HorizontalBlock()) + { + GUILayout.Label("Panning with mouse: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.usePanning = EditorGUILayout.Toggle(camera.usePanning); + } + if(camera.usePanning) + { + camera.panningKey = (KeyCode)EditorGUILayout.EnumPopup("Panning when holding: ", camera.panningKey); + camera.panningSpeed = EditorGUILayout.FloatField("Panning speed: ", camera.panningSpeed); + } + + using (new HorizontalBlock()) + { + GUILayout.Label("Limit movement: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.limitMap = EditorGUILayout.Toggle(camera.limitMap); + } + if (camera.limitMap) + { + camera.limitX = EditorGUILayout.FloatField("Limit X: ", camera.limitX); + camera.limitY = EditorGUILayout.FloatField("Limit Y: ", camera.limitY); + } + + GUILayout.Label("Follow target", EditorStyles.boldLabel); + camera.targetFollow = EditorGUILayout.ObjectField("Target to follow: ", camera.targetFollow, typeof(Transform)) as Transform; + camera.targetOffset = EditorGUILayout.Vector3Field("Target offset: ", camera.targetOffset); + camera.followingSpeed = EditorGUILayout.FloatField("Following speed: ", camera.followingSpeed); + } + + private void RotationTab() + { + using (new HorizontalBlock()) + { + GUILayout.Label("Keyboard input: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.useKeyboardRotation = EditorGUILayout.Toggle(camera.useKeyboardRotation); + } + if(camera.useKeyboardRotation) + { + camera.rotateLeftKey = (KeyCode)EditorGUILayout.EnumPopup("Rotate left: ", camera.rotateLeftKey); + camera.rotateRightKey = (KeyCode)EditorGUILayout.EnumPopup("Rotate right: ", camera.rotateRightKey); + camera.rotationSped = EditorGUILayout.FloatField("Keyboard rotation speed", camera.rotationSped); + } + + using (new HorizontalBlock()) + { + GUILayout.Label("Mouse input: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.useMouseRotation = EditorGUILayout.Toggle(camera.useMouseRotation); + } + if(camera.useMouseRotation) + { + camera.mouseRotationKey = (KeyCode)EditorGUILayout.EnumPopup("Mouse rotation key: ", camera.mouseRotationKey); + camera.mouseRotationSpeed = EditorGUILayout.FloatField("Mouse rotation speed: ", camera.mouseRotationSpeed); + } + } + + private void HeightTab() + { + using (new HorizontalBlock()) + { + GUILayout.Label("Auto height: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.autoHeight = EditorGUILayout.Toggle(camera.autoHeight); + } + if (camera.autoHeight) + { + camera.heightDampening = EditorGUILayout.FloatField("Height dampening: ", camera.heightDampening); + EditorGUILayout.PropertyField(serializedObject.FindProperty("groundMask")); + } + + using (new HorizontalBlock()) + { + GUILayout.Label("Keyboard zooming: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.useKeyboardZooming = EditorGUILayout.Toggle(camera.useKeyboardZooming); + } + if(camera.useKeyboardZooming) + { + camera.zoomInKey = (KeyCode)EditorGUILayout.EnumPopup("Zoom In: ", camera.zoomInKey); + camera.zoomOutKey = (KeyCode)EditorGUILayout.EnumPopup("Zoom Out: ", camera.zoomOutKey); + camera.keyboardZoomingSensitivity = EditorGUILayout.FloatField("Keyboard sensitivity: ", camera.keyboardZoomingSensitivity); + } + + using (new HorizontalBlock()) + { + GUILayout.Label("Scrollwheel zooming: ", EditorStyles.boldLabel, GUILayout.Width(170f)); + camera.useScrollwheelZooming = EditorGUILayout.Toggle(camera.useScrollwheelZooming); + } + if (camera.useScrollwheelZooming) + camera.scrollWheelZoomingSensitivity = EditorGUILayout.FloatField("Scrollwheel sensitivity: ", camera.scrollWheelZoomingSensitivity); + + if (camera.useScrollwheelZooming || camera.useKeyboardZooming) + { + using (new HorizontalBlock()) + { + camera.maxHeight = EditorGUILayout.FloatField("Max height: ", camera.maxHeight); + camera.minHeight = EditorGUILayout.FloatField("Min height: ", camera.minHeight); + } + } + } + } +}
\ No newline at end of file diff --git a/Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs.meta b/Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs.meta new file mode 100644 index 0000000..2c39be4 --- /dev/null +++ b/Assets/RTS_Camera/Scripts/Editor/RTS_CameraEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f43923eb579b5ab44bc30687c03d3abe +timeCreated: 1438769886 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |
