diff options
Diffstat (limited to 'Assets/Plugins/Editor')
152 files changed, 8125 insertions, 0 deletions
diff --git a/Assets/Plugins/Editor/AdvancedInspector.meta b/Assets/Plugins/Editor/AdvancedInspector.meta new file mode 100644 index 00000000..95d6ec65 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 5fc2dde4e518f4743be154c3078ef7c9 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.XML b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.XML new file mode 100644 index 00000000..a2386fed --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.XML @@ -0,0 +1,1630 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>AdvancedInspector</name> + </assembly> + <members> + <member name="T:AdvancedInspector.AdvancedInspectorControl"> + <summary> + A collection of static method made to handle the drawing of the Advanced Inspector. + In most cases, you won't have to deal with this class. + </summary> + </member> + <member name="T:AdvancedInspector.IModal"> + <summary> + This EditorWindow can recieve and send Toolbox inputs. + </summary> + </member> + <member name="M:AdvancedInspector.IModal.ModalRequest(System.Boolean)"> + <summary> + Called when the Toolbox shortcut is pressed. + The implementation should call CreateToolbox if the condition are right. + </summary> + </member> + <member name="M:AdvancedInspector.IModal.ModalClosed(AdvancedInspector.ModalWindow)"> + <summary> + Called when the associated toolbox is closed. + Only called when Ok/Cancel or Enter/Escape is pressed. + There's no reliable way of trapping the "click outside the popup" event. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.ModalRequest(System.Boolean)"> + <summary> + IModal Implementation. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.ModalClosed(AdvancedInspector.ModalWindow)"> + <summary> + IModal Implementation. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.Inspect(AdvancedInspector.InspectorEditor,System.Collections.Generic.List{AdvancedInspector.InspectorField},System.Boolean,System.Boolean)"> + <summary> + Called by an Editor to have a collection of InspectorField to be displayed. + Uniformized entry point of inspector drawing. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.Inspect(AdvancedInspector.InspectorEditor,System.Collections.Generic.List{AdvancedInspector.InspectorField},System.Boolean,System.Boolean,System.Boolean)"> + <summary> + Called by an Editor to have a collection of InspectorField to be displayed. + Uniformized entry point of inspector drawing. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.Inspect(AdvancedInspector.InspectorEditor,System.Collections.Generic.List{AdvancedInspector.InspectorField},System.Boolean,System.Boolean,System.Boolean,Separator)"> + <summary> + Called by an Editor to have a collection of InspectorField to be displayed. + Uniformized entry point of inspector drawing. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.Draw(AdvancedInspector.InspectorEditor,AdvancedInspector.InspectorField,System.Collections.Generic.List{AdvancedInspector.InspectorField},System.Boolean,System.Boolean,System.Boolean)"> + <summary> + Entry point of the inspection of a Property based editor. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.InitList(AdvancedInspector.InspectorField)"> + <summary> + Unity doesn't always properly init it's array/list if a serialization reload didn't occur. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawExpander(AdvancedInspector.InspectorField,AdvancedInspector.FieldEditor,System.Boolean)"> + <summary> + Draw the arrow icon that allow to browse sub-object property. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawIndexedControl(AdvancedInspector.InspectorField)"> + <summary> + Draw the control of an sortable list. + Return true if a list has been modified and requires a redraw. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawKeyedControl(AdvancedInspector.InspectorField)"> + <summary> + Draw the - button for a Dictionary + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawRestricted(AdvancedInspector.InspectorEditor,AdvancedInspector.InspectorField,System.Collections.Generic.IList{AdvancedInspector.DescriptorPair},UnityEngine.GUIStyle)"> + <summary> + Draw the "Restricted" enum, which is a runtime list provide by a method. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawDerived(AdvancedInspector.InspectorEditor,AdvancedInspector.InspectorField)"> + <summary> + Draw the +/- icon to control the creation and deletion of user created object. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawList(AdvancedInspector.InspectorEditor,AdvancedInspector.InspectorField)"> + <summary> + Draw the + icon of a List + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawDictionary(AdvancedInspector.InspectorEditor,AdvancedInspector.InspectorField)"> + <summary> + Draw the + icon of a Dictionary + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawLabel(AdvancedInspector.FieldEditor,AdvancedInspector.InspectorField,System.Boolean)"> + <summary> + Draw the left side of a field, the label. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.GetWidth(AdvancedInspector.InspectorField)"> + <summary> + Width of the label part. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawHelp(AdvancedInspector.InspectorField,System.Boolean)"> + <summary> + Draw the help box bellow the field. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.DrawClassHelp(System.Object[],System.Boolean)"> + <summary> + Help box at the top or bottom of the whole inspector. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.ParseRuntimeAttributes(AdvancedInspector.IRuntimeAttribute,System.Type,System.Object[])"> + <summary> + This method is invoked to build a list of proper delegate to invoke. + </summary> + </member> + <member name="M:AdvancedInspector.AdvancedInspectorControl.GetDerived(System.Type)"> + <summary> + Get the list of valid derivaton from a specific type. + Used to create derived object, should always be from ComponentMonoBehaviour but is not enforced. + </summary> + </member> + <member name="P:AdvancedInspector.AdvancedInspectorControl.BoxStyle"> + <summary> + Group box style + </summary> + </member> + <member name="P:AdvancedInspector.AdvancedInspectorControl.Suspended"> + <summary> + When complex operation are performed, the Inspector blocks repaint. + </summary> + </member> + <member name="P:AdvancedInspector.AdvancedInspectorControl.Level"> + <summary> + Current complexity level. + </summary> + </member> + <member name="P:AdvancedInspector.AdvancedInspectorControl.Sorting"> + <summary> + How the fields are sorted. + </summary> + </member> + <member name="E:AdvancedInspector.AdvancedInspectorControl.SortingChanged"> + <summary> + Raised if the inspector needs a redraw. + </summary> + </member> + <member name="P:AdvancedInspector.AdvancedInspectorControl.Editor"> + <summary> + Used for internal callback from a modal windows. + </summary> + </member> + <member name="P:AdvancedInspector.AdvancedInspectorControl.Field"> + <summary> + Used for internal callback from a modal windows. + </summary> + </member> + <member name="T:AdvancedInspector.AdvancedInspectorControl.InspectorSorting"> + <summary> + Field sorting enum. + </summary> + </member> + <member name="F:AdvancedInspector.AdvancedInspectorControl.InspectorSorting.None"> + <summary> + No sorting, using the order found in code. + </summary> + </member> + <member name="F:AdvancedInspector.AdvancedInspectorControl.InspectorSorting.Alpha"> + <summary> + Alphabethic sorting A, B, C... + </summary> + </member> + <member name="F:AdvancedInspector.AdvancedInspectorControl.InspectorSorting.AntiAlpha"> + <summary> + Anti-alphabethic sorting, C, B, A... + </summary> + </member> + <member name="T:AdvancedInspector.FieldEditor"> + <summary> + When a specific type is encounter by the Inspector, we check if someone defined an field editor for it. + When it occurs, all the field drawing is left to the custom editor. + </summary> + </member> + <member name="F:AdvancedInspector.FieldEditor.MIN_FIELD_HEIGHT"> + <summary> + Minimum field height + </summary> + </member> + <member name="F:AdvancedInspector.FieldEditor.BUTTON_HEIGHT"> + <summary> + Button Height + </summary> + </member> + <member name="F:AdvancedInspector.FieldEditor.VECTOR_FIELD_WIDTH"> + <summary> + Standard float-in-vector label width + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.Draw(AdvancedInspector.InspectorField,UnityEngine.GUIStyle)"> + <summary> + The draw call from the Inspector. + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.OnLabelDraw(AdvancedInspector.InspectorField,UnityEngine.Rect)"> + <summary> + Called after the label is drawn. + Useful to add dragging modifier. + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.OnLabelClick(AdvancedInspector.InspectorField)"> + <summary> + Event raised when someone click a label. + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.OnLabelDoubleClick(AdvancedInspector.InspectorField)"> + <summary> + Event raised when someone double click a label. + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.OnLabelDragged(AdvancedInspector.InspectorField)"> + <summary> + Fired when someone click and drag the label with modified key (control/shift/alt) pressed. + A normal drag performs a copy/paste. + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.OnContextualClick(AdvancedInspector.InspectorField,UnityEditor.GenericMenu)"> + <summary> + Event raised when someone right-click a label. + The GenenicMenu is empty and can add new items in it. + </summary> + </member> + <member name="M:AdvancedInspector.FieldEditor.GetValue(AdvancedInspector.InspectorField)"> + <summary> + Get the value of a field. + Flag "Show Mixed Value" automaticly and return null if a multi-selection has different values. + </summary> + </member> + <member name="P:AdvancedInspector.FieldEditor.Expandable"> + <summary> + Override if you want to prevent a type from being expandable at any time. + Override the Expandable attributes. + </summary> + </member> + <member name="P:AdvancedInspector.FieldEditor.EditDerived"> + <summary> + If true and no fieldeditor is found for a specific type, this fieldeditor is used for the derived type. + </summary> + </member> + <member name="P:AdvancedInspector.FieldEditor.EditedTypes"> + <summary> + List of type this FieldEditor edit. + </summary> + </member> + <member name="T:AdvancedInspector.InspectorEditor"> + <summary> + Base class of BehaviourEditor, ScriptableEditor and ExternalEditor. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.HasPreviewGUI"> + <summary> + Preview is handled internally and is turned on and off using IPreview interface. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorEditor.parent"> + <summary> + In case of value type, we need to know the parent. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorEditor.fields"> + <summary> + List of fields held by this inspector. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorEditor.refresh"> + <summary> + When a value changed internally, this forces the fields to be refreshed. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.OnEnable"> + <summary> + Unity's OnEnable. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.OnDisable"> + <summary> + Unity's OnDisable + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.StartPicking(System.Action{UnityEngine.GameObject,System.Object},System.Object)"> + <summary> + Start the Scene View picking tool. + Type can define the component we seek on a GameObject. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.StopPicking"> + <summary> + Stop the picking tool before it has resolved. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.OnPreviewGUI(UnityEngine.Rect,UnityEngine.GUIStyle)"> + <summary> + Preview Draw + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.OnSceneGUI"> + <summary> + Override this method if you want to draw on the scene view. + Don't forget to call the base. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.OnPreviewSettings"> + <summary> + Preview Settings + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.DataChanged"> + <summary> + Data Changed, repaint. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.UseDefaultMargins"> + <summary> + Unity's Default Margins. False if running in Advanced Inspector. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.OnInspectorGUI"> + <summary> + Default Inspector entry point. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.DrawAdvancedInspector"> + <summary> + Similar to "DrawDefaultInspector", except this is the Advanced one. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorEditor.RefreshFields"> + <summary> + Force this field to rebuild the list of its children. + If you implement an editor specific to a type, you should only need to override this method. + Consider clearing existing fields before adding new one. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorEditor.Picking"> + <summary> + Is the Inspector currently in picking mode? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorEditor.Advanced"> + <summary> + Return true if this editor is using advanced features. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorEditor.Instances"> + <summary> + We use our own targets list because we can draw object not deriving from UnityEngine.Object. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorEditor.Fields"> + <summary> + List of fields held by this inspector. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorEditor.Expandable"> + <summary> + Override this if you implement your own inspector and doesn't want it to be expandable. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorEditor.TestForDefaultInspector"> + <summary> + If true, will test if the type of in the inspector object has "AdvancedInspector" attributes. + Default; false; + </summary> + </member> + <member name="T:AdvancedInspector.BehaviourEditor"> + <summary> + Behaviour Editor is the entry point for all MonoBehaviour in Advanced Inspector. + </summary> + </member> + <member name="M:AdvancedInspector.BehaviourEditor.OnEnable"> + <summary> + Unity's OnEnable. + </summary> + </member> + <member name="P:AdvancedInspector.BehaviourEditor.TestForDefaultInspector"> + <summary> + Should we check for the [AdvancedInspectorAttribute]? + </summary> + </member> + <member name="T:AdvancedInspector.ExternalEditor"> + <summary> + Similar to a standard PropertyInspector, but can be called from outside the scope of a Inspector. + Useful to build your own EditorWindow with an integrated inspector. + Call the method Draw with a Rect of the region to draw on. + </summary> + </member> + <member name="T:AdvancedInspector.IControl"> + <summary> + Define a control that can be drawn in an EditorWindow. + </summary> + </member> + <member name="M:AdvancedInspector.IControl.Draw(UnityEngine.Rect)"> + <summary> + Draw the control. Return if the parent EditorWindow should repaint the window. + </summary> + </member> + <member name="E:AdvancedInspector.IControl.RequestRepaint"> + <summary> + In the event an internal process of the Control want a repaint of the window outside the Drawing scope. + </summary> + </member> + <member name="M:AdvancedInspector.ExternalEditor.Draw(UnityEngine.Rect)"> + <summary> + IControl implementation + </summary> + </member> + <member name="P:AdvancedInspector.ExternalEditor.Expandable"> + <summary> + If false, the Inspector won't draw the expander and won't reserve space on the left of the labels. + </summary> + </member> + <member name="P:AdvancedInspector.ExternalEditor.DraggableSeparator"> + <summary> + Can the separator be dragged around? + </summary> + </member> + <member name="P:AdvancedInspector.ExternalEditor.DivisionSeparator"> + <summary> + Where is the separator? + In PerPixel, the value is in pixel from the top or the left. + Otherwise, it's in %. + </summary> + </member> + <member name="E:AdvancedInspector.ExternalEditor.RequestRepaint"> + <summary> + IControl implementation + </summary> + </member> + <member name="T:AdvancedInspector.ScriptableEditor"> + <summary> + Scriptable Editor is the entry point for all ScriptableObject in Advanced Inspector. + </summary> + </member> + <member name="M:AdvancedInspector.ScriptableEditor.OnEnable"> + <summary> + Unity's OnEnable. + </summary> + </member> + <member name="P:AdvancedInspector.ScriptableEditor.TestForDefaultInspector"> + <summary> + Should we check for the [AdvancedInspectorAttribute]? + </summary> + </member> + <member name="T:AdvancedInspector.InspectorField"> + <summary> + Pooled information about a PropertyInfo and translated for the Inspector. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField)"> + <summary> + This constructor is used as a duplication. + Note that this field is free and not parented to anything. + Use with great care! + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(System.Type,System.Object[],System.Reflection.MemberInfo,System.Attribute[])"> + <summary> + Entry point for a generic manually created field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,System.Type,System.Object[],System.Reflection.MemberInfo,System.Attribute[])"> + <summary> + Entry point for a generic manually created field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,System.Int32,UnityEditor.SerializedProperty,System.Attribute[])"> + <summary> + Entry point for a generic indexed serialized created field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(System.Type,System.Object[],UnityEditor.SerializedProperty,System.Attribute[])"> + <summary> + Entry point for a generic serialized created field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(System.String)"> + <summary> + Entry point for an empty field with no editor. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.GroupAttribute)"> + <summary> + Entry point of a group. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.ToolbarAttribute)"> + <summary> + Entry point of a toolbar. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,System.Object[],System.Int32,System.Attribute[])"> + <summary> + Entry point for a indexed field. + You should not create this manually. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,System.Object[],System.Object,System.Attribute[])"> + <summary> + Entry point of a Dictionary item. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(System.Type)"> + <summary> + Entry point for a non-member related field. + Useful to draw a single FieldEditor. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEditor.SerializedProperty)"> + <summary> + Script entry point. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(UnityEngine.Object[],System.String)"> + <summary> + Entry point for a Field created from a path and Object ids. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],System.Reflection.MethodInfo)"> + <summary> + Entry point for a method field. (Button) + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],System.Reflection.MethodInfo,System.Attribute[])"> + <summary> + Entry point for a method field. (Button) + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEngine.Object,System.Reflection.FieldInfo)"> + <summary> + Entry point for a standard field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEngine.Object,System.Reflection.FieldInfo,System.Boolean)"> + <summary> + Entry point for a standard field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEngine.Object,System.Reflection.FieldInfo,System.Boolean,System.Attribute[])"> + <summary> + Entry point for a standard field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEngine.Object,System.Reflection.PropertyInfo)"> + <summary> + Entry point for a standard property. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEngine.Object,System.Reflection.PropertyInfo,System.Boolean)"> + <summary> + Entry point for a standard property. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.#ctor(AdvancedInspector.InspectorField,UnityEngine.Object[],System.Object[],UnityEngine.Object,System.Reflection.PropertyInfo,System.Boolean,System.Attribute[])"> + <summary> + Entry point for a standard property. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.op_Equality(AdvancedInspector.InspectorField,AdvancedInspector.InspectorField)"> + <summary> + Compares if two InspectorField contains the same data. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.op_Inequality(AdvancedInspector.InspectorField,AdvancedInspector.InspectorField)"> + <summary> + Compares if two InspectorField contains the same data. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Equals(System.Object)"> + <summary> + Compares if two InspectorField contains the same data. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetHashCode"> + <summary> + HashCode + </summary> + <returns></returns> + </member> + <member name="M:AdvancedInspector.InspectorField.CompareTo(System.Object)"> + <summary> + IComparable implementation + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.CompareTo(AdvancedInspector.InspectorField)"> + <summary> + IComparable implementation + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.AddAttribute(System.Attribute)"> + <summary> + Force a new attribute to be added a runtime. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetAttribute``1"> + <summary> + Get an attribute by type that was applied to the original item. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetAttribute(System.Type)"> + <summary> + Get an attribute by type that was applied to the original item. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetAttributes``1"> + <summary> + Get all the attributes by type that were applied to the original item. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetAttributes(System.Type)"> + <summary> + Get all the attributes by type that were applied to the original item. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.HasAttribute``1"> + <summary> + Return true if the memberinfo of this field is sporting that specific attribute type. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.HasAttribute(System.Type)"> + <summary> + Return true if the memberinfo of this field is sporting that specific attribute type. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Watch"> + <summary> + Add this field to the watch list, which is displayed on the Watch window. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Select"> + <summary> + Force the selection of the serialized instances of this field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Save"> + <summary> + Attempt to save this field value in play mode the next time it is stopped. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Apply"> + <summary> + Apply this field modification to its prefab parent. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Revert"> + <summary> + Revert any modification of this field and retreived the original value of its prefab parent. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.RecordObjects(System.String)"> + <summary> + Record the object state for undo purpose. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Copy"> + <summary> + Copy the current value of this field to the clipboard. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.CanPaste(System.Object)"> + <summary> + Return true if the passed value can be copied over this field. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.Paste"> + <summary> + Paste the clipboard data to this field. + Careful, you should do a type test before. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValue"> + <summary> + The current value of this field. + If not a field, returns null. + If multi object, return null if all the value aren't the same. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValue``1"> + <summary> + The current value of this field. + If not a field, returns null. + If multi object, return null if all the value aren't the same. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValue(System.Object)"> + <summary> + The value of this field, based on a specific object instance. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValue``1(System.Object)"> + <summary> + The value of this field, based on a specific object instance. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValues"> + <summary> + Get all instances value. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValues``1"> + <summary> + Get all instances value. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.ResetToDefault"> + <summary> + Reset this field to its default value. + Object = null + Value Type = default(T) + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.SetValue(System.Object)"> + <summary> + Set the value of this field. + Support undo. When calling this, assume undo will be "Set Value MyField" + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.SetValue(System.Object,System.Object)"> + <summary> + Set the value of this field, based on a specific object instance. + Does not support undo, should be recorded before calling. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.SetDirty"> + <summary> + Flags the related serialized instance as dirty. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.RefreshFields"> + <summary> + Reparse the internal sub-fields of this field. + Useful when a list or an object changed. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.SortFields"> + <summary> + Sort all children fields. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetInfoByPath(UnityEngine.Object,System.String)"> + <summary> + Get a MemberInfo from a serializable path. + The "Path" property from a InspectorField is a valid path. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetValueByPath(UnityEngine.Object,System.String)"> + <summary> + Get a value from a serializable path. + The "Path" property from a InspectorField is a valid path. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.SetValueByPath(UnityEngine.Object,System.String,System.Object)"> + <summary> + Set a value by a serializable path. + The "Path" property from a InspectorField is a valid path. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetIndexedProperties(AdvancedInspector.InspectorField,System.Collections.Generic.List{System.Collections.IList})"> + <summary> + Return a list of indexed field. Work with List and Array. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetKeyedProperties(AdvancedInspector.InspectorField,System.Collections.Generic.List{System.Collections.IDictionary})"> + <summary> + Return a list of keyed field. Work with IDictionary. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetMembers(AdvancedInspector.InspectorField,System.Object[])"> + <summary> + Get fields from an object. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetMembers(AdvancedInspector.InspectorField,System.Object[],System.Boolean)"> + <summary> + Get fields from an object. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorField.GetMembers(AdvancedInspector.InspectorField,System.Object[],System.Boolean,System.Boolean)"> + <summary> + Get fields from an object. Bypass ignore Inspect and Expandable attributes. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Instances"> + <summary> + The object owning this specific field. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.SerializedInstances"> + <summary> + The serialized object owning this specific field. + May not be the same as the instance, or even the currently Selected item in the Inspector. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Prefab"> + <summary> + The prefab parent to this object. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Info"> + <summary> + The member info of this field. + PropertyInfo, FieldInfo or MethodInfo. Otherwise null. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Attributes"> + <summary> + The attributes of this field, manually and by reflection. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.SerializedProperty"> + <summary> + Used only for the Script object reference at the top, or hidden Unity property. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.GameObjects"> + <summary> + Get the parents GameObjects in cases of components. Useful for undoes. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Parent"> + <summary> + The parent field in case of nesting. + Null if directly at the top. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Fields"> + <summary> + Subfields, such as field in an expandable object, or a list. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.InternalFields"> + <summary> + Fields used for edition, are not drawn by the Inspector automaticly. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Depth"> + <summary> + Indentation depth of this field. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.InspectorType"> + <summary> + Is this field a method, field, property or a group? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Undoable"> + <summary> + External editor are sometimes used to browse non-Unity object. + Sadly, undo only works on valid Unity objects. + Also return false if one of the serializable parent became null or none. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Type"> + <summary> + The type of this field. + In most case, would return the FieldInfo.FieldType or PropertyInfo.PropertyType + In case of a group, it returns null. + If this field is flagged as Runtime-Resolved, it returns the type of the current value. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.BaseType"> + <summary> + In case of a collection, returns the base type. + Ex.: int[] or List(int), base type if int. + In a dictionary, return the value type. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.KeyType"> + <summary> + In case of a dictionary, returns the key type. + Return null otherwise. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Inspect"> + <summary> + The Inspect Attribute that made this field visible. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Editor"> + <summary> + The Override Editor assigned to this field. + No field can be drawn without one. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Restrictor"> + <summary> + A restrictor turns any field into a drop down list of specific choices. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Group"> + <summary> + Is this field part of a group? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Toolbar"> + <summary> + Is this field part of a toolbar? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Tab"> + <summary> + Is this field visibility controlled by a tab? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.SelectedTab"> + <summary> + In cases of tabs, this is the currently selected tab enum value. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Descriptor"> + <summary> + The Descriptor assigned to this field. Name, tooltip, icon, etc. + In case of multi-objects, there is no runtime invokation and the descriptor returned is the one on the member. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Static"> + <summary> + Returns true if the item inspected is static. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.ReadOnly"> + <summary> + Readonly field cannot be edited. + In case of multi-objects, if any is readonly, all are. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Animated"> + <summary> + Is this field animated. Only works for fields, not property. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Help"> + <summary> + The Help data being drawn after the field. + Does not work in multi-object edition. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Bypass"> + <summary> + This field is a bypass field, and sub-field automaticly recieve that flag. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Expandable"> + <summary> + Can this field be expanded? + It display the arrow button. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Expanded"> + <summary> + Is this field open and displaying internal fields? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Erased"> + <summary> + Was this field erased? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.DisplayAsParent"> + <summary> + Is this object display as being part of the parent? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.CreateDerived"> + <summary> + Can this object field display the "+" sign to create a derived object from the base type? + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Name"> + <summary> + Name of the label of that field. + Can be modified by Descriptor. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.FieldColor"> + <summary> + The color of the editable field. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.BackgroundColor"> + <summary> + The color of the background (ex.: Expandable box) + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Priority"> + <summary> + Priority of a field, used when sorting. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Order"> + <summary> + The order at which this field was found in the code. + If an indexed field, return the index. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Label"> + <summary> + If false, this field does not draw its label. + Useful for toolbar. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Style"> + <summary> + The specific style this field is draw with. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Path"> + <summary> + Internal path to this specific field. + Used to keep persistant data across selection. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Hidden"> + <summary> + Many thing can prevent a field from being drawn. Ex.: InspectAttribute can hide it. + If internal data from Unity return an exception on read, we skip it. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Editable"> + <summary> + Return false is any of the serialized parent have the hide flag "Not Editable". + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Modified"> + <summary> + Return true if the item is different from it's prefab parent. + Always return false if it's a non-value type and not a ref (UnityEngine.Object). + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Mixed"> + <summary> + Return true when editing multiple object that doesn't have the same value. + Always return true if they are objects and not the same instance. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Similar"> + <summary> + Return true if all instances are of the same type. + Which mean they are expandable even in multi-objects edition + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Index"> + <summary> + Index of the field in a list or array. + Return -1 if not part of a collection. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.IsList"> + <summary> + Is this a collection? (array or list) + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Key"> + <summary> + When in a dictionary, the key of this value. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.IsDictionary"> + <summary> + Is this a dictionary? (UDictionary) + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.Count"> + <summary> + Returns the current number of children. + In case of list, returns the number of items in it. + In case of multiples list, return -1 if all list doesn't have the same number of items. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorField.OverloadToString"> + <summary> + Test if the current type overload ToString properly. + </summary> + </member> + <member name="T:AdvancedInspector.InspectorType"> + <summary> + Type of InspectorField. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.None"> + <summary> + Empty unset field + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Field"> + <summary> + Field containing a FieldInfo + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Property"> + <summary> + Field containing a PropertyInfo + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Method"> + <summary> + Field containing a MethodInfo + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Serialized"> + <summary> + The InspectorField is only a wrapper around a SerializedProperty object. + To use in case of hidden property in the Unity API. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Group"> + <summary> + Field that is a group of other field. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Toolbar"> + <summary> + Field that is drawn as a toolbar. (horizontal group) + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Unlinked"> + <summary> + Unlinked field just stores a value internally and is not bound to an object. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorType.Script"> + <summary> + The top field, the reference towards the original script. + </summary> + </member> + <member name="T:AdvancedInspector.InspectorPreferences"> + <summary> + Handles the Advanced Inspector preferences. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorPreferences.IsDragControl(AdvancedInspector.InspectorPreferences.InspectorDragControl)"> + <summary> + Returns true if the control is valid in the current Event context. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorPreferences.IsControl(AdvancedInspector.InspectorPreferences.InspectorModifierControl)"> + <summary> + Returns true if the control is valid in the current Event context. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.Style"> + <summary> + The style collection used for the different element. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.InspectDefaultItems"> + <summary> + If true, all classes that do not have a Custom Editor are drawn by Advanced Inspector. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.ValueScroll"> + <summary> + The control for scrolling numbers. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.CopyPaste"> + <summary> + The control to copy-paste by drag. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.MassExpand"> + <summary> + The control modifier used when clicking on an expansion arrow. Expand/Collapse sub-nodes. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.Contextual"> + <summary> + Usually to open the contextual menu, you do Right-Click. + In some cases, people may not have access to a proper right-click, so they can do CTRL+Click for example. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.ExtraIndentation"> + <summary> + Extra indentation applied to boxes. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreferences.LargeCollection"> + <summary> + The maximum number of displayed item in a collection. Trigger the large collection arrow display beyond that. + </summary> + </member> + <member name="T:AdvancedInspector.InspectorPreferences.InspectorDragControl"> + <summary> + The accepted control that involves dragging. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorDragControl.None"> + <summary> + The control is turned off. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorDragControl.Drag"> + <summary> + Single drag. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorDragControl.AltDrag"> + <summary> + Alt+Drag + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorDragControl.ControlDrag"> + <summary> + Control+Drag + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorDragControl.ShiftDrag"> + <summary> + Shift+Drag + </summary> + </member> + <member name="T:AdvancedInspector.InspectorPreferences.InspectorModifierControl"> + <summary> + The modifier keys involded in non-dragging action. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorModifierControl.Alt"> + <summary> + Alt Key + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorModifierControl.Control"> + <summary> + Control Key + </summary> + </member> + <member name="F:AdvancedInspector.InspectorPreferences.InspectorModifierControl.Shift"> + <summary> + Shift Key + </summary> + </member> + <member name="T:AdvancedInspector.InspectorPreview"> + <summary> + This class handles the rendering and input of the Preview zone. + </summary> + </member> + <member name="P:AdvancedInspector.InspectorPreview.Targets"> + <summary> + Object to be previewed + Supported type; + GameObject + Mesh + Material + Texture + </summary> + </member> + <member name="T:AdvancedInspector.InspectorStyle"> + <summary> + The different internal style. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorStyle.Empty"> + <summary> + No boxes, no nothing. Clean, similar to Unity default. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorStyle.Round"> + <summary> + Round boxes. + </summary> + </member> + <member name="F:AdvancedInspector.InspectorStyle.Flat"> + <summary> + Unity flat style + </summary> + </member> + <member name="T:AdvancedInspector.InspectorWrapper"> + <summary> + A wrapper recongnized by the internal inspector so that non-UnityEngine.Object can be inspected. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorWrapper.Select(System.Object)"> + <summary> + Force Unity's "Selection" to use a non-unity object. + </summary> + </member> + <member name="M:AdvancedInspector.InspectorWrapper.IsSelected(System.Object)"> + <summary> + Is this object selected by Unity's Selection? + </summary> + </member> + <member name="M:AdvancedInspector.InspectorWrapper.GetSelection``1"> + <summary> + Get currenty Unity's Selection + </summary> + </member> + <member name="P:AdvancedInspector.InspectorWrapper.Tag"> + <summary> + Object to Inspector + </summary> + </member> + <member name="T:Clipboard"> + <summary> + A copy/paste buffer. + Does not use the System buffer, as it's limited to a string and Unity does not provide a uniformed string serialization. + </summary> + </member> + <member name="M:Clipboard.CreateInstance(System.Type)"> + <summary> + Create an instance of type + Works with values, list, array, scriptableObject, string + Components are ignored. + </summary> + </member> + <member name="M:Clipboard.CreateInstance(UnityEngine.MonoBehaviour,System.Type)"> + <summary> + Create an instance of type + Works with values, list, array, scriptableObject, string + Components are ignored. + + The owner MonoBeahviour is used in case of the creation of a ComponentMonoBehaviour for its internal binding. + </summary> + </member> + <member name="M:Clipboard.Copy(System.Object)"> + <summary> + Perform a deep copy if an object. + Does not perform copies of Components or GameObject + Values are returned as is (ex.: 14) + strings are cloned. + List/Array are enumerated and copied. + Everything else is deep copied by fields. + </summary> + </member> + <member name="M:Clipboard.TryConvertion(System.Type,System.Object@)"> + <summary> + Test if the current clipboard data can be converted into a specific type. + Ex.: int to string + </summary> + </member> + <member name="M:Clipboard.TryConvertion``1(``0@)"> + <summary> + Test if the current clipboard data can be converted into a specific type. + Ex.: int to string + </summary> + </member> + <member name="M:Clipboard.CanConvert(System.Type,System.Object)"> + <summary> + Return true if an object is convertable to a type. + </summary> + </member> + <member name="P:Clipboard.Data"> + <summary> + In case of any normal object, returns deep copy of that object. + In case of a Component, returns the original so you can apply it on a GameObject yourself (sorry) + In case of a UnityEngine.Object, create a new one and perforce a Serialization Copy. + </summary> + </member> + <member name="P:Clipboard.Type"> + <summary> + Type of the current data in the clipboard. + </summary> + </member> + <member name="T:Separator"> + <summary> + A separator holds two control side by side and divide them with a draggable line. + It can be horizontal or vertical. + </summary> + </member> + <member name="M:Separator.Draw(UnityEngine.Rect)"> + <summary> + Draw the whole region holding the two control and the separator. + The separator pass down the proper region to Draw of the sub-controls. + Returns true if the window needs to be repainted. + </summary> + </member> + <member name="P:DragEventArgs.Target"> + <summary> + Targeted object + </summary> + </member> + <member name="P:DragEventArgs.InBetween"> + <summary> + Is on top of the target + </summary> + </member> + <member name="P:DragEventArgs.Dragged"> + <summary> + Selecttion dragged + </summary> + </member> + <member name="T:EnumExtension"> + <summary> + Extends Enum with some bitfields related method. + </summary> + </member> + <member name="M:EnumExtension.Append``1(System.Enum,``0)"> + <summary> + Add a value to a bitfield. + </summary> + </member> + <member name="M:EnumExtension.Remove``1(System.Enum,``0)"> + <summary> + Remove a value from a bitfield. + </summary> + </member> + <member name="M:EnumExtension.Has``1(System.Enum,``0)"> + <summary> + Test if a bitfield has a value. + </summary> + </member> + <member name="M:EnumExtension.GetAttribute``1(System.Enum)"> + <summary> + Gets an attribute on an enum field value + </summary> + <typeparam name="T">The type of the attribute you want to retrieve</typeparam> + <param name="enumVal">The enum value</param> + <returns>The attribute of type T that exists on the enum value</returns> + </member> + <member name="T:TypeExtension"> + <summary> + Extends Enum with some bitfields related method. + </summary> + </member> + <member name="M:TypeExtension.GetBaseGenericType(System.Type)"> + <summary> + Returns the nearest parent class that is generic. + </summary> + </member> + <member name="T:AdvancedInspector.DateTimeDialog"> + <summary> + The DateTime dialog is a date picker that is day/week accurate. + </summary> + </member> + <member name="T:AdvancedInspector.ModalWindow"> + <summary> + Define a popup window that return a result. + Base class for IModal implementation. + </summary> + </member> + <member name="F:AdvancedInspector.ModalWindow.TITLEBAR"> + <summary> + Top title bar height + </summary> + </member> + <member name="F:AdvancedInspector.ModalWindow.owner"> + <summary> + The object that invoked this modal. + </summary> + </member> + <member name="F:AdvancedInspector.ModalWindow.result"> + <summary> + Internal modal result. + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.#ctor"> + <summary> + Default constructor. + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.OnLostFocus"> + <summary> + Invoked by Unity when the user click outside the window. + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.Cancel"> + <summary> + Called when pressing Escape or Cancel. + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.Ok"> + <summary> + Called when pressing Enter or Ok. + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.Exist``1"> + <summary> + Does this specific modal type exist? + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.OnGUI"> + <summary> + Usually you should not override this. + </summary> + </member> + <member name="M:AdvancedInspector.ModalWindow.Draw(UnityEngine.Rect)"> + <summary> + Implement your draw items here. + </summary> + </member> + <member name="P:AdvancedInspector.ModalWindow.Result"> + <summary> + Result of this modal window. + </summary> + </member> + <member name="F:AdvancedInspector.DateTimeDialog.HEIGHT"> + <summary> + Height of dialog + </summary> + </member> + <member name="F:AdvancedInspector.DateTimeDialog.WIDTH"> + <summary> + Width of dialog + </summary> + </member> + <member name="M:AdvancedInspector.DateTimeDialog.Create(AdvancedInspector.IModal,System.DateTime,UnityEngine.Vector2)"> + <summary> + Create this dialog. + </summary> + </member> + <member name="M:AdvancedInspector.DateTimeDialog.Draw(UnityEngine.Rect)"> + <summary> + Draw the dialog region. + </summary> + </member> + <member name="P:AdvancedInspector.DateTimeDialog.Time"> + <summary> + Modified DateTime if Result is Ok + </summary> + </member> + <member name="T:AdvancedInspector.Toolbox"> + <summary> + The toolbox is a generic way of display a selection to the user. + Any EditorWindow that implement IToolbox will call it when CTRL+Q is request it. + It is up to the window to fill the content of the Toolbox. + </summary> + </member> + <member name="M:AdvancedInspector.Toolbox.AddItem(System.Object,System.String,System.String,UnityEngine.Texture)"> + <summary> + Add an item to the toolbox list. + </summary> + </member> + <member name="M:AdvancedInspector.Toolbox.Create(AdvancedInspector.IModal,System.String,System.Collections.Generic.List{AdvancedInspector.DescriptorPair},UnityEngine.Vector2)"> + <summary> + Create a toolbox for this IModal. + </summary> + </member> + <member name="M:AdvancedInspector.Toolbox.Create(AdvancedInspector.IModal,System.String,System.Collections.Generic.List{AdvancedInspector.DescriptorPair},UnityEngine.Vector2,System.String)"> + <summary> + Create a toolbox for this IModal. + </summary> + </member> + <member name="M:AdvancedInspector.Toolbox.Draw(UnityEngine.Rect)"> + <summary> + IControl implementation + </summary> + </member> + <member name="P:AdvancedInspector.Toolbox.Items"> + <summary> + List of items visible by this toolbox. + </summary> + </member> + <member name="P:AdvancedInspector.Toolbox.Selection"> + <summary> + The current selection. + </summary> + </member> + <member name="P:AdvancedInspector.Toolbox.Search"> + <summary> + The search term entered in the search field. + </summary> + </member> + <member name="T:AdvancedInspector.WindowResult"> + <summary> + Result returned by a Modal Window + </summary> + </member> + <member name="F:AdvancedInspector.WindowResult.None"> + <summary> + No result, no action taken + </summary> + </member> + <member name="F:AdvancedInspector.WindowResult.Ok"> + <summary> + Ok or Enter + </summary> + </member> + <member name="F:AdvancedInspector.WindowResult.Cancel"> + <summary> + Cancel or Escape + </summary> + </member> + <member name="F:AdvancedInspector.WindowResult.Invalid"> + <summary> + An error occured + </summary> + </member> + <member name="F:AdvancedInspector.WindowResult.LostFocus"> + <summary> + User clicked outside the modal + </summary> + </member> + <member name="T:TreeView"> + <summary> + A control that is a list of item that can be nested. + Support drag and drop, editing and sorting. + </summary> + </member> + <member name="M:TreeView.BuildVisibility"> + <summary> + Refresh the list of visible item when the items list has changed. + </summary> + </member> + <member name="M:TreeView.BuildVisibility(System.Collections.Generic.List{TreeViewItem},System.Collections.Generic.List{TreeViewItem})"> + <summary> + Refresh the list of visible item when the items list has changed. + </summary> + </member> + <member name="P:TreeView.Selection"> + <summary> + Current selected tags. + </summary> + </member> + <member name="P:TreeView.Count"> + <summary> + Number of visible nodes. + </summary> + </member> + </members> +</doc> diff --git a/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.XML.meta b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.XML.meta new file mode 100644 index 00000000..55a2b378 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.XML.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e96c4a7c78e365541b0512e981e9e981 +timeCreated: 1426031802 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.dll b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.dll Binary files differnew file mode 100644 index 00000000..86f31e26 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.dll diff --git a/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.dll.meta b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.dll.meta new file mode 100644 index 00000000..196bd820 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 09b9181468d6b774aa9b3e4e0654892d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.pdb b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.pdb Binary files differnew file mode 100644 index 00000000..7cfacf7d --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.pdb diff --git a/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.pdb.meta b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.pdb.meta new file mode 100644 index 00000000..f65772af --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/AdvancedInspector.pdb.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 454ad4bbaca47654ba1ba02c97f6efab +timeCreated: 1426031799 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/AdvancedInspector/Examples.meta b/Assets/Plugins/Editor/AdvancedInspector/Examples.meta new file mode 100644 index 00000000..c595a197 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/Examples.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: bbde48e2fa9194d469ae2a4b99c3729a +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/Examples/ExternalInspectorWindow.cs b/Assets/Plugins/Editor/AdvancedInspector/Examples/ExternalInspectorWindow.cs new file mode 100644 index 00000000..e1a7cdac --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/Examples/ExternalInspectorWindow.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using UnityEditor; + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +using AdvancedInspector; + +public class ExternalInspectorWindow : EditorWindow +{ + private ExternalEditor editor; + + private GameObject go; + private Component component; + + [MenuItem("Window/Advanced Insector Example")] + public static void Init() + { + ExternalInspectorWindow window = EditorWindow.GetWindow<ExternalInspectorWindow>(); + window.wantsMouseMove = true; + window.editor = ExternalEditor.CreateInstance<ExternalEditor>(); + + window.editor.DraggableSeparator = false; + window.editor.DivisionSeparator = 150; + } + + private void OnSelectionChange() + { + go = Selection.activeGameObject; + Repaint(); + } + + private void OnGUI() + { + if (go == null) + { + GUILayout.Label("Select a GameObject..."); + component = null; + editor.Instances = new object[0]; + } + else + { + Component[] components = go.GetComponents(typeof(Component)); + GUIContent[] contents = new GUIContent[components.Length + 1]; + contents[0] = new GUIContent("None"); + int index = -1; + for (int i = 0; i < components.Length; i++) + { + contents[i + 1] = new GUIContent(components[i].GetType().Name); + if (components[i] == component) + index = i + 1; + } + + EditorGUI.BeginChangeCheck(); + index = EditorGUILayout.Popup(new GUIContent("Select a component: "), index, contents); + if (EditorGUI.EndChangeCheck()) + { + if (index == 0) + { + component = null; + editor.Instances = new object[0]; + } + else + { + component = components[index - 1]; + editor.Instances = new object[] { component }; + } + } + } + + if (editor.Draw(new Rect(0, 16, position.width, position.height - 16))) + Repaint(); + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/Examples/ExternalInspectorWindow.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/Examples/ExternalInspectorWindow.cs.meta new file mode 100644 index 00000000..a7870aa5 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/Examples/ExternalInspectorWindow.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9740780a68d7d744b5281622bbd706b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI.meta b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI.meta new file mode 100644 index 00000000..8c84ce35 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: a52feea1ebf19884bb717531c7fd0cac +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUI.cs b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUI.cs new file mode 100644 index 00000000..4219fa75 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUI.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using UnityEngine; +using UnityEditor; + +using UniToolsEditor; + +namespace AdvancedInspector +{ + public static class ExtraGUI + { + private static Texture knob; + + private static Texture Knob + { + get + { + if (knob == null) + { + knob = Helper.Load(EditorResources.Knob); + knob.filterMode = FilterMode.Trilinear; + } + + return knob; + } + } + + private static Texture knobBack; + + private static Texture KnobBack + { + get + { + if (knobBack == null) + knobBack = Helper.Load(EditorResources.KnobBack); + + return knobBack; + } + } + + private static Vector2 mousePosition; + + public static float FloatAngle(Rect rect, float value) + { + return FloatAngle(rect, value, -1, -1, -1); + } + + public static float FloatAngle(Rect rect, float value, float snap) + { + return FloatAngle(rect, value, snap, -1, -1); + } + + public static float FloatAngle(Rect rect, float value, float snap, float min, float max) + { + int id = GUIUtility.GetControlID(FocusType.Passive, rect); + + Rect knobRect = new Rect(rect.x, rect.y, rect.height, rect.height); + + float delta; + if (min != max) + delta = ((max - min) / 360); + else + delta = 1; + + if (Event.current != null) + { + if (Event.current.type == EventType.MouseDown && knobRect.Contains(Event.current.mousePosition)) + { + GUIUtility.hotControl = id; + mousePosition = Event.current.mousePosition; + } + else if (Event.current.type == EventType.MouseUp && GUIUtility.hotControl == id) + GUIUtility.hotControl = 0; + else if (Event.current.type == EventType.MouseDrag && GUIUtility.hotControl == id) + { + Vector2 move = mousePosition - Event.current.mousePosition; + value += delta * (-move.x - move.y); + + if (snap > 0) + { + float mod = value % snap; + + if (mod < (delta * 3) || Mathf.Abs(mod - snap) < (delta * 3)) + value = Mathf.Round(value / snap) * snap; + } + + mousePosition = Event.current.mousePosition; + GUI.changed = true; + } + } + + GUI.DrawTexture(knobRect, KnobBack); + Matrix4x4 matrix = GUI.matrix; + + if (min != max) + GUIUtility.RotateAroundPivot(value * (360 / (max - min)), knobRect.center); + else + GUIUtility.RotateAroundPivot(value, knobRect.center); + + GUI.DrawTexture(knobRect, Knob); + GUI.matrix = matrix; + + Rect label = new Rect(rect.x + rect.height + 9, rect.y + (rect.height / 2) - 9, rect.height, 18); + value = EditorGUI.FloatField(label, value); + + if (min != max) + value = Mathf.Clamp(value, min, max); + + return value; + } + + public static int IntAngle(Rect rect, int value) + { + return IntAngle(rect, value, -1, -1, -1); + } + + public static int IntAngle(Rect rect, int value, int snap) + { + return IntAngle(rect, value, snap, -1, -1); + } + + public static int IntAngle(Rect rect, int value, int snap, int min, int max) + { + int id = GUIUtility.GetControlID(FocusType.Passive, rect); + + Rect knobRect = new Rect(rect.x, rect.y, rect.height, rect.height); + + int delta; + if (min != max) + delta = ((max - min) / 360); + else + delta = 1; + + if (Event.current != null) + { + if (Event.current.type == EventType.MouseDown && knobRect.Contains(Event.current.mousePosition)) + { + GUIUtility.hotControl = id; + mousePosition = Event.current.mousePosition; + } + else if (Event.current.type == EventType.MouseUp && GUIUtility.hotControl == id) + GUIUtility.hotControl = 0; + else if (Event.current.type == EventType.MouseDrag && GUIUtility.hotControl == id) + { + Vector2 move = mousePosition - Event.current.mousePosition; + value += delta * (-(int)move.x - (int)move.y); + + if (snap > 0) + { + float mod = value % snap; + + if (mod < (delta * 3) || Mathf.Abs(mod - snap) < (delta * 3)) + value = (int)Mathf.Round(value / snap) * snap; + } + + mousePosition = Event.current.mousePosition; + GUI.changed = true; + } + } + + GUI.DrawTexture(knobRect, KnobBack); + Matrix4x4 matrix = GUI.matrix; + + if (min != max) + GUIUtility.RotateAroundPivot(value * (360 / (max - min)), knobRect.center); + else + GUIUtility.RotateAroundPivot(value, knobRect.center); + + GUI.DrawTexture(knobRect, Knob); + GUI.matrix = matrix; + + Rect label = new Rect(rect.x + rect.height + 9, rect.y + (rect.height / 2) - 9, rect.height, 18); + value = EditorGUI.IntField(label, value); + + if (min != max) + value = Mathf.Clamp(value, min, max); + + return value; + } + + public static int CycleButton(Rect rect, int selected, GUIContent[] contents, GUIStyle style) + { + if (GUI.Button(rect, contents[selected], style)) + { + selected++; + if (selected >= contents.Length) + selected = 0; + } + + return selected; + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUI.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUI.cs.meta new file mode 100644 index 00000000..82b25bc2 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUI.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e020a2d8f59a2864999a0b1bce4e072e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUILayout.cs b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUILayout.cs new file mode 100644 index 00000000..608a45f5 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUILayout.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using UnityEngine; +using UnityEditor; + +namespace AdvancedInspector +{ + public static class ExtraGUILayout + { + public static float FloatAngle(float value) + { + return FloatAngle(value, -1, -1, -1); + } + + public static float FloatAngle(float value, float snap) + { + return FloatAngle(value, snap, -1, -1); + } + + public static float FloatAngle(float value, float snap, float min, float max) + { + Rect rect = GUILayoutUtility.GetRect(128, 512, 32, 32); + rect.x += 8; + return ExtraGUI.FloatAngle(rect, value, snap, min, max); + } + + public static int IntAngle(int value) + { + return IntAngle(value, -1, -1, -1); + } + + public static int IntAngle(int value, int snap) + { + return IntAngle(value, snap, -1, -1); + } + + public static int IntAngle(int value, int snap, int min, int max) + { + Rect rect = GUILayoutUtility.GetRect(128, 512, 32, 32); + rect.x += 8; + return ExtraGUI.IntAngle(rect, value, snap, min, max); + } + + public static int CycleButton(int selected, GUIContent[] contents, GUIStyle style) + { + if (GUILayout.Button(contents[selected], style)) + { + selected++; + if (selected >= contents.Length) + selected = 0; + } + + return selected; + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUILayout.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUILayout.cs.meta new file mode 100644 index 00000000..37dfd46d --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/ExtraGUI/ExtraGUILayout.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a5c459bbc6263843ad47a5a586832ce +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors.meta new file mode 100644 index 00000000..4977dd9e --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: ab0ea0ba2acfe2e4ebd1654a33714ef2 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/AnimationCurveEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/AnimationCurveEditor.cs new file mode 100644 index 00000000..e5514427 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/AnimationCurveEditor.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class AnimationCurveEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(AnimationCurve) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + AnimationCurve curve = GetValue(field) as AnimationCurve; + if (curve == null && !field.Mixed) + curve = new AnimationCurve(); + + EditorGUI.BeginChangeCheck(); + + AnimationCurve result = EditorGUILayout.CurveField(curve); + + if (EditorGUI.EndChangeCheck()) + field.SetValue(result); + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/AnimationCurveEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/AnimationCurveEditor.cs.meta new file mode 100644 index 00000000..5a6ec81d --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/AnimationCurveEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 175374f05b4f81243bd565df4b3842ac +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BooleanEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BooleanEditor.cs new file mode 100644 index 00000000..f4d25a86 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BooleanEditor.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class BooleanEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(bool) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + object value = GetValue(field); + + EditorGUI.BeginChangeCheck(); + bool result; + if (style != null) + result = EditorGUILayout.Toggle((bool)value, style); + else + result = EditorGUILayout.Toggle((bool)value); + + if (EditorGUI.EndChangeCheck()) + field.SetValue(result); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BooleanEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BooleanEditor.cs.meta new file mode 100644 index 00000000..7013dc4e --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BooleanEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ed44e8dcffbde44eb2efd1c009248c6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BoundsEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BoundsEditor.cs new file mode 100644 index 00000000..773201e1 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BoundsEditor.cs @@ -0,0 +1,134 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class BoundsEditor : FieldEditor + { + public override bool Expandable + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Bounds) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + float labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; + + Bounds[] values = field.GetValues<Bounds>(); + + float[] centerX = new float[values.Length]; + float[] centerY = new float[values.Length]; + float[] centerZ = new float[values.Length]; + float[] extendX = new float[values.Length]; + float[] extendY = new float[values.Length]; + float[] extendZ = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + centerX[i] = values[i].center.x; + centerY[i] = values[i].center.y; + centerZ[i] = values[i].center.z; + extendX[i] = values[i].extents.x; + extendY[i] = values[i].extents.y; + extendZ[i] = values[i].extents.z; + } + + GUILayout.BeginHorizontal(); + float result; + EditorGUILayout.LabelField("Center: ", GUILayout.Width(48)); + if (FloatEditor.DrawFloat("X", centerX, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Center X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 center = values[i].center; + center.x = result; + values[i].center = center; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Y", centerY, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Center Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 center = values[i].center; + center.y = result; + values[i].center = center; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Z", centerZ, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Center Z"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 center = values[i].center; + center.z = result; + values[i].center = center; + field.SetValue(field.Instances[i], values[i]); + } + } + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Extend: ", GUILayout.Width(48)); + if (FloatEditor.DrawFloat("X", extendX, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Extend X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 extents = values[i].extents; + extents.x = result; + values[i].extents = extents; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Y", extendY, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Extend Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 extents = values[i].extents; + extents.y = result; + values[i].extents = extents; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Z", extendZ, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Extend Z"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 extents = values[i].extents; + extents.z = result; + values[i].extents = extents; + field.SetValue(field.Instances[i], values[i]); + } + } + GUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + + EditorGUIUtility.labelWidth = labelWidth; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BoundsEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BoundsEditor.cs.meta new file mode 100644 index 00000000..a51cf2ca --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/BoundsEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c18b641c92f5f44eb38e807d2feed74 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/CharEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/CharEditor.cs new file mode 100644 index 00000000..2a82f0ea --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/CharEditor.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class CharEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(char) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + GUILayout.BeginHorizontal(); + + object value = GetValue(field); + string text = ""; + if (value != null) + text = value.ToString(); + + EditorGUI.BeginChangeCheck(); + + string result = EditorGUILayout.TextField(text); + + char c; + if (result.Length == 0) + c = '\0'; + else + c = result[0]; + + if (EditorGUI.EndChangeCheck()) + field.SetValue(c); + + GUILayout.EndHorizontal(); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/CharEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/CharEditor.cs.meta new file mode 100644 index 00000000..e9be5d8b --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/CharEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b97d572b1c98e564f91d1a16c55cabc3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ColorEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ColorEditor.cs new file mode 100644 index 00000000..c8974082 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ColorEditor.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class ColorEditor : FieldEditor + { + public override bool Expandable + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Color), typeof(Color32) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + object o = GetValue(field); + Type type = o.GetType(); + + Color color; + if (type == typeof(Color32)) + { + Color32 color32 = (Color32)o; + color = color32; + } + else + color = (Color)o; + + EditorGUI.BeginChangeCheck(); + color = EditorGUILayout.ColorField(color); + + if (EditorGUI.EndChangeCheck()) + { + if (type == typeof(Color32)) + { + Color32 color32 = color; + field.SetValue(color32); + } + else + field.SetValue(color); + } + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ColorEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ColorEditor.cs.meta new file mode 100644 index 00000000..e2813cf6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ColorEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95ebae573d4fa724eb1787d862581a82 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/DateTimeEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/DateTimeEditor.cs new file mode 100644 index 00000000..de120b87 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/DateTimeEditor.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +using UniToolsEditor; + +namespace AdvancedInspector +{ + public class DateTimeEditor : FieldEditor, IModal + { + private InspectorField field; + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(DateTime) }; } + } + + private static Texture calendar; + + internal static Texture Calendar + { + get + { + if (calendar == null) + calendar = Helper.Load(EditorResources.Calendar); + + return calendar; + } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + DateTime time = field.GetValue<DateTime>(); + if (time == DateTime.MinValue) + time = DateTime.Now; + + string title = time.ToString(); + if (field.Mixed) + title = " - - - "; + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.Space(); + if (GUILayout.Button(Calendar, GUIStyle.none, GUILayout.Width(18), GUILayout.Height(18))) + { + this.field = field; + DateTimeDialog.Create(this, time, GUIUtility.GUIToScreenPoint(Event.current.mousePosition)); + } + + TextAnchor anchor = GUI.skin.label.alignment; + GUI.skin.label.alignment = TextAnchor.MiddleLeft; + GUILayout.Label(title); + GUI.skin.label.alignment = anchor; + + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + } + + public void ModalRequest(bool shift) { } + + public void ModalClosed(ModalWindow window) + { + if (window.Result != WindowResult.Ok) + return; + + field.SetValue(((DateTimeDialog)window).Time); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/DateTimeEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/DateTimeEditor.cs.meta new file mode 100644 index 00000000..f247aa3f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/DateTimeEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4176afc2bf64fb4cb22c40d470180a7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/EnumEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/EnumEditor.cs new file mode 100644 index 00000000..627aba7c --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/EnumEditor.cs @@ -0,0 +1,192 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace AdvancedInspector +{ + public class EnumEditor : FieldEditor + { + public override bool EditDerived + { + get { return true; } + } + + public override bool Expandable + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Enum) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + EnumAttribute display = field.GetAttribute<EnumAttribute>(); + + EditorGUI.showMixedValue = field.Mixed; + + EditorGUI.BeginChangeCheck(); + + object result = null; + long value = Convert.ToInt64(GetValue(field)); + if (display == null || !display.Masked) + { + if (display == null || display.Display == EnumDisplay.DropDown) + result = DrawDropDown(field.Type, value, style, false); + else if (display.Display == EnumDisplay.Button) + result = DrawEnum(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toolbarButton : style); + else if (display.Display == EnumDisplay.Checkbox) + result = DrawEnum(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toggle : style); + } + else + { + if (display == null || display.Display == EnumDisplay.DropDown) + result = DrawDropDown(field.Type, value, style, true); + else if (display.Display == EnumDisplay.Button) + result = DrawMasked(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toolbarButton : style); + else if (display.Display == EnumDisplay.Checkbox) + result = DrawMasked(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toggle : style); + } + + if (EditorGUI.EndChangeCheck()) + field.SetValue(result); + } + + private int SelectedIndex(Array values, long value) + { + for (int i = 0; i < values.Length; i++) + if (Convert.ToInt64(values.GetValue(i)) == value) + return i; + + return 0; + } + + private string[] GetNames(Type type) + { + Array values = Enum.GetValues(type); + List<string> names = Enum.GetNames(type).ToList(); + + for (int i = 0; i < names.Count; i++) + { + DescriptorAttribute descriptor = ((Enum)values.GetValue(i)).GetAttribute<DescriptorAttribute>(); + if (descriptor != null && !string.IsNullOrEmpty(descriptor.Name)) + names[i] = descriptor.Name; + else + names[i] = ObjectNames.NicifyVariableName(names[i]); + } + + return names.ToArray(); + } + + private object DrawDropDown(Type type, long value, GUIStyle style, bool masked) + { + string[] names = GetNames(type); + Array values = Enum.GetValues(type); + + if (masked) + { + if (style == null) + value = EditorGUILayout.MaskField(Convert.ToInt32(value), names); + else + value = EditorGUILayout.MaskField(Convert.ToInt32(value), names, style); + + return Enum.ToObject(type, value); + } + else + { + int selected = SelectedIndex(values, value); + + if (style == null) + selected = EditorGUILayout.Popup(selected, names); + else + selected = EditorGUILayout.Popup(selected, names, style); + + return Enum.ToObject(type, values.GetValue(selected)); + } + } + + private object DrawEnum(Type type, long value, int max, GUIStyle style) + { + if (max < 1) + max = 6; + + string[] names = GetNames(type); + Array values = Enum.GetValues(type); + + int rows = Mathf.CeilToInt((float)names.Length / (float)max); + int count = (names.Length / rows); + if (count * rows < names.Length) + count++; + + int selected = SelectedIndex(values, value); + + GUILayout.BeginVertical(); + + for (int i = 0; i < rows; i++) + { + GUILayout.BeginHorizontal(); + + for (int j = count * i; j < count * (i + 1); j++) + { + if (j >= names.Length) + break; + + if (selected == j) + GUILayout.Toggle(true, names[j], style); + else if (GUILayout.Toggle(false, names[j], style)) + selected = j; + } + + GUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + + return Enum.ToObject(type, values.GetValue(selected)); + } + + private object DrawMasked(Type type, long value, int max, GUIStyle style) + { + if (max < 1) + max = 6; + + Array values = Enum.GetValues(type); + string[] names = GetNames(type); + + int rows = Mathf.CeilToInt((float)names.Length / (float)max); + int count = (names.Length / rows); + if (count * rows < names.Length) + count++; + + int result = 0; + + GUILayout.BeginVertical(); + + for (int i = 0; i < rows; i++) + { + GUILayout.BeginHorizontal(); + + for (int j = count * i; j < count * (i + 1); j++) + { + if (j >= names.Length) + break; + + int v = (int)values.GetValue(j); + if (GUILayout.Toggle(((int)value & v) == v, names[j], style)) + result |= v; + } + + GUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + + return Enum.ToObject(type, result); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/EnumEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/EnumEditor.cs.meta new file mode 100644 index 00000000..e8d95004 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/EnumEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60d56c7709f5e334c837239c33327bbd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/FloatEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/FloatEditor.cs new file mode 100644 index 00000000..d139c02f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/FloatEditor.cs @@ -0,0 +1,208 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class FloatEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(float), typeof(decimal), typeof(double) }; } + } + + public override void OnLabelDraw(InspectorField field, Rect rect) + { + if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) + EditorGUIUtility.AddCursorRect(rect, MouseCursor.ResizeHorizontal); + } + + public override void OnLabelClick(InspectorField field) + { + EditorGUIUtility.SetWantsMouseJumping(1); + } + + public override void OnLabelDragged(InspectorField field) + { + if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) + { + object result = field.GetValues()[0]; + double sensitivity = CalculateDragSensitivity(result); + result = Convert.ToDouble(result) + (double)(sensitivity * HandleUtility.niceMouseDelta); + + RangeValueAttribute rangeValue = field.GetAttribute<RangeValueAttribute>(); + if (rangeValue != null) + result = Math.Min(Math.Max((double)result, rangeValue.Min), rangeValue.Max); + + RangeAttribute range = field.GetAttribute<RangeAttribute>(); + if (range != null) + result = Math.Min(Math.Max((double)result, range.min), range.max); + + try + { + result = Convert.ChangeType(result, field.Type); + field.SetValue(result); + } + catch (Exception) + { + return; + } + } + } + + private static double CalculateDragSensitivity(object value) + { + double number = Convert.ToDouble(value); + + if (!double.IsInfinity(number) && !double.IsNaN(number)) + return (Math.Max(1d, Math.Pow(Math.Abs(number), 0.5d)) * 0.03d); + + return 0d; + } + + public override void Draw(InspectorField field, GUIStyle style) + { + RangeValueAttribute rangeValue = field.GetAttribute<RangeValueAttribute>(); + RangeAttribute range = field.GetAttribute<RangeAttribute>(); + + if (range != null && rangeValue == null) + rangeValue = new RangeValueAttribute(range.min, range.max); + + AngleAttribute angle = field.GetAttribute<AngleAttribute>(); + + object result; + if (DrawFloatingNumber(new GUIContent(""), field.GetValues(), rangeValue, angle, style, out result)) + field.SetValue(result); + } + + public static bool DrawFloat(string label, float[] values, out float result, params GUILayoutOption[] options) + { + return DrawFloat(label, values, null, null, null, out result, options); + } + + public static bool DrawFloat(string label, float[] values, GUIStyle style, out float result, params GUILayoutOption[] options) + { + return DrawFloat(label, values, null, null, style, out result, options); + } + + public static bool DrawFloat(string label, float[] values, RangeValueAttribute range, AngleAttribute angle, GUIStyle style, out float result, params GUILayoutOption[] options) + { + object genericResult; + object[] genericValues = new object[values.Length]; + for (int i = 0; i < values.Length; i++) + genericValues[i] = values[i]; + + bool changed = DrawFloatingNumber(new GUIContent(label), genericValues, range, angle, style, out genericResult, options); + + try + { + result = (float)genericResult; + } + catch (Exception) + { + result = values[0]; + return false; + } + + return changed; + } + + public static bool DrawFloatingNumber(GUIContent label, object[] values, RangeValueAttribute range, AngleAttribute angle, GUIStyle style, out object result, params GUILayoutOption[] options) + { + result = 0; + + EditorGUI.showMixedValue = false; + result = values[0]; + Type type = result.GetType(); + for (int i = 1; i < values.Length; i++) + { + if (values[i].Equals(result)) + continue; + + EditorGUI.showMixedValue = true; + break; + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.BeginHorizontal(); + + if (!string.IsNullOrEmpty(label.text)) + { + int size = (int)GUI.skin.label.CalcSize(label).x; + if (size > 4) + size = Mathf.Max(size, 15); + + GUILayout.Label(label, GUI.skin.label, GUILayout.Width(size)); + + Event e = Event.current; + Rect labelRect = GUILayoutUtility.GetLastRect(); + int id = EditorGUIUtility.GetControlID(FocusType.Passive, labelRect); + + if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) + { + if (e.type == EventType.Repaint) + { + EditorGUIUtility.AddCursorRect(labelRect, MouseCursor.ResizeHorizontal); + } + else if (e.type == EventType.MouseDown && labelRect.Contains(e.mousePosition) && e.button == 0) + { + GUIUtility.hotControl = id; + GUIUtility.keyboardControl = id; + EditorGUIUtility.SetWantsMouseJumping(1); + e.Use(); + } + else if (e.type == EventType.MouseDrag && GUIUtility.hotControl == id) + { + double sensitivity = CalculateDragSensitivity(result); + result = Convert.ToDecimal(result) + (decimal)(sensitivity * HandleUtility.niceMouseDelta); + + if (range != null) + result = Math.Min(Math.Max((double)result, (double)range.Min), (double)range.Max); + + GUI.changed = true; + e.Use(); + } + else if (e.type == EventType.MouseUp && GUIUtility.hotControl == id) + { + GUIUtility.hotControl = 0; + EditorGUIUtility.SetWantsMouseJumping(0); + e.Use(); + } + } + } + + if (angle != null) + { + if (range != null) + result = ExtraGUILayout.FloatAngle((float)result, angle.Snap, range.Min, range.Max); + else + result = ExtraGUILayout.FloatAngle((float)result, angle.Snap); + } + else + { + if (range != null) + result = EditorGUILayout.Slider((float)result, range.Min, range.Max, options); + else + { + if (style != null) + result = EditorGUILayout.TextField(result.ToString(), style, options); + else + result = EditorGUILayout.TextField(result.ToString(), options); + } + } + + try + { + result = Convert.ChangeType(result, type); + } + catch (Exception) + { + return false; + } + + EditorGUILayout.EndHorizontal(); + return EditorGUI.EndChangeCheck(); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/FloatEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/FloatEditor.cs.meta new file mode 100644 index 00000000..edfb7b23 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/FloatEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4724a82f5fd3d9e44a50d524deae4259 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GradientEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GradientEditor.cs new file mode 100644 index 00000000..09910618 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GradientEditor.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Reflection; + +namespace AdvancedInspector +{ + public class GradientEditor : FieldEditor + { + private static MethodInfo gradientField; + + public GradientEditor() + { + // Because Unity does not expose this EditorGUI. + gradientField = typeof(EditorGUILayout).GetMethod("GradientField", BindingFlags.NonPublic | BindingFlags.Static, null, new Type[] { typeof(Gradient), typeof(GUILayoutOption).MakeArrayType() }, null); + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Gradient) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + object value = GetValue(field); + + try + { + //Always throw "ExitGUIException" + gradientField.Invoke(null, new object[] { value, null }); + } + catch (Exception) { } + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GradientEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GradientEditor.cs.meta new file mode 100644 index 00000000..275d4027 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GradientEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96cba1c5f2f4273468699cb64ae8726e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GuidEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GuidEditor.cs new file mode 100644 index 00000000..43fd51c9 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GuidEditor.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class GuidEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Guid) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + // GetValue returns null if multi-selection and different values + Guid id = field.GetValue<Guid>(); + if (id == Guid.Empty) + GUILayout.Label("GUID: --------------"); + else + GUILayout.Label("GUID: " + id.ToString()); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GuidEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GuidEditor.cs.meta new file mode 100644 index 00000000..15843f11 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/GuidEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 054dd34a1ddeb8b46848fcc673189bab +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/IntegerEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/IntegerEditor.cs new file mode 100644 index 00000000..c88f59f2 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/IntegerEditor.cs @@ -0,0 +1,195 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class IntegerEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(int), typeof(byte), typeof(short), typeof(long), typeof(uint), typeof(ushort), typeof(ulong), typeof(sbyte) }; } + } + + public override void OnLabelDraw(InspectorField field, Rect rect) + { + if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) + EditorGUIUtility.AddCursorRect(rect, MouseCursor.ResizeHorizontal); + } + + public override void OnLabelClick(InspectorField field) + { + EditorGUIUtility.SetWantsMouseJumping(1); + } + + public override void OnLabelDragged(InspectorField field) + { + if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) + { + object result = field.GetValues()[0]; + long value = Convert.ToInt64(result); + result = (long)Math.Round(value + (CalculateDragSensitivity(value) * HandleUtility.niceMouseDelta * 0.1f)); + + RangeValueAttribute rangeValue = field.GetAttribute<RangeValueAttribute>(); + if (rangeValue != null) + result = Math.Min(Math.Max((long)result, (long)rangeValue.Min), (long)rangeValue.Max); + + RangeAttribute range = field.GetAttribute<RangeAttribute>(); + if (range != null) + result = Math.Min(Math.Max((long)result, (long)range.min), (long)range.max); + + try + { + result = Convert.ChangeType(result, field.Type); + field.SetValue(result); + } + catch (Exception) + { + return; + } + } + } + + private static double CalculateDragSensitivity(object value) + { + return Math.Max(1, Math.Pow(Math.Abs((long)value), 0.5d) * 0.03d); + } + + public override void Draw(InspectorField field, GUIStyle style) + { + AngleAttribute angle = field.GetAttribute<AngleAttribute>(); + + RangeValueAttribute rangeValue = field.GetAttribute<RangeValueAttribute>(); + RangeAttribute range = field.GetAttribute<RangeAttribute>(); + + if (range != null && rangeValue == null) + rangeValue = new RangeValueAttribute(range.min, range.max); + + object result; + if (DrawIntegerNumber(GUIContent.none, field.GetValues(), rangeValue, angle, style, out result)) + field.SetValue(result); + } + + public static bool DrawInt(string label, int[] values, out int result, params GUILayoutOption[] options) + { + return DrawInt(label, values, null, out result, options); + } + + public static bool DrawInt(string label, int[] values, GUIStyle style, out int result, params GUILayoutOption[] options) + { + object genericResult; + object[] genericValues = new object[values.Length]; + for (int i = 0; i < values.Length; i++) + genericValues[i] = values[i]; + + bool changed = DrawIntegerNumber(new GUIContent(label), genericValues, null, null, style, out genericResult, options); + + try + { + result = (int)genericResult; + } + catch (Exception) + { + result = values[0]; + return false; + } + + return changed; + } + + public static bool DrawIntegerNumber(GUIContent label, object[] values, RangeValueAttribute range, AngleAttribute angle, GUIStyle style, out object result, params GUILayoutOption[] options) + { + EditorGUI.showMixedValue = false; + result = values[0]; + Type type = result.GetType(); + for (int i = 1; i < values.Length; i++) + { + if (values[i].Equals(result)) + continue; + + EditorGUI.showMixedValue = true; + break; + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.BeginHorizontal(); + + if (!string.IsNullOrEmpty(label.text)) + { + int size = (int)GUI.skin.label.CalcSize(label).x; + if (size > 4) + size = Mathf.Max(size, 15); + + GUILayout.Label(label, GUI.skin.label, GUILayout.Width(size)); + + Event e = Event.current; + Rect labelRect = GUILayoutUtility.GetLastRect(); + int id = EditorGUIUtility.GetControlID(FocusType.Passive, labelRect); + + if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) + { + if (e.type == EventType.Repaint) + { + EditorGUIUtility.AddCursorRect(labelRect, MouseCursor.ResizeHorizontal); + } + else if (e.type == EventType.MouseDown && labelRect.Contains(e.mousePosition) && e.button == 0) + { + GUIUtility.hotControl = id; + GUIUtility.keyboardControl = id; + EditorGUIUtility.SetWantsMouseJumping(1); + e.Use(); + } + else if (e.type == EventType.MouseDrag && GUIUtility.hotControl == id) + { + long value = Convert.ToInt64(result); + result = (long)Math.Round(value + (CalculateDragSensitivity(value) * HandleUtility.niceMouseDelta * 0.1f)); + if (range != null) + result = Math.Min(Math.Max((long)result, (long)range.Min), (long)range.Max); + + GUI.changed = true; + e.Use(); + } + else if (e.type == EventType.MouseUp && GUIUtility.hotControl == id) + { + GUIUtility.hotControl = 0; + EditorGUIUtility.SetWantsMouseJumping(0); + e.Use(); + } + } + } + + if (angle != null) + { + if (range != null) + result = ExtraGUILayout.IntAngle((int)result, (int)angle.Snap, (int)range.Min, (int)range.Max); + else + result = ExtraGUILayout.IntAngle((int)result, (int)angle.Snap); + } + else + { + if (range != null) + result = EditorGUILayout.IntSlider((int)result, (int)range.Min, (int)range.Max, options); + else + { + if (style != null) + result = EditorGUILayout.TextField(result.ToString(), style, options); + else + result = EditorGUILayout.TextField(result.ToString(), options); + } + } + + try + { + result = Convert.ChangeType(result, type); + } + catch (Exception) + { + return false; + } + + EditorGUILayout.EndHorizontal(); + return EditorGUI.EndChangeCheck(); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/IntegerEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/IntegerEditor.cs.meta new file mode 100644 index 00000000..21f570b6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/IntegerEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c1396463f395614b976eb98c848bfa5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/LayerMaskEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/LayerMaskEditor.cs new file mode 100644 index 00000000..a007f1b6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/LayerMaskEditor.cs @@ -0,0 +1,104 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace AdvancedInspector +{ + public class LayerMaskEditor : FieldEditor + { + private static List<string> names; + private static List<int> masks; + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(LayerMask) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + names = new List<string>(); + masks = new List<int>(); + + for (int i = 0; i < 32; i++) + { + string name = LayerMask.LayerToName(i); + + if (!string.IsNullOrEmpty(name)) + { + names.Add(name); + masks.Add(1 << i); + } + } + + object value = field.GetValue(); + + bool isMask = value is LayerMask; + + int mask; + if (isMask) + mask = (int)(LayerMask)value; + else + mask = (int)value; + + int result; + if (DrawLayerMaskField(mask, style, out result)) + { + if (isMask) + field.SetValue((LayerMask)result); + else + field.SetValue(result); + } + } + + public static bool DrawLayerMaskField(int aMask, GUIStyle style, out int result) + { + int val = aMask; + int maskVal = 0; + for (int i = 0; i < names.Count; i++) + { + if (masks[i] != 0) + { + if ((val & masks[i]) == masks[i]) + maskVal |= 1 << i; + } + else if (val == 0) + maskVal |= 1 << i; + } + + EditorGUI.BeginChangeCheck(); + + int newMaskVal; + if (style != null) + newMaskVal = EditorGUILayout.MaskField(maskVal, names.ToArray(), style); + else + newMaskVal = EditorGUILayout.MaskField(maskVal, names.ToArray()); + + int changes = maskVal ^ newMaskVal; + + for (int i = 0; i < masks.Count; i++) + { + if ((changes & (1 << i)) != 0) + { + if ((newMaskVal & (1 << i)) != 0) + { + if (masks[i] == 0) + { + val = 0; + break; + } + else + val |= masks[i]; + } + else + val &= ~masks[i]; + } + } + + result = val; + + return EditorGUI.EndChangeCheck(); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/LayerMaskEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/LayerMaskEditor.cs.meta new file mode 100644 index 00000000..404c93c3 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/LayerMaskEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8da80cb340d7b8b4b817f05fbae4e554 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/MonoEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/MonoEditor.cs new file mode 100644 index 00000000..92083794 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/MonoEditor.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UniToolsEditor; + +namespace AdvancedInspector +{ + public class MonoEditor : FieldEditor + { + public override bool EditDerived + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(UnityEditor.MonoScript) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + if (field.SerializedProperty == null || field.SerializedProperty.serializedObject == null) + return; + + Type type = field.SerializedInstances[0].GetType(); + if (typeof(ComponentMonoBehaviour).IsAssignableFrom(type)) + GUILayout.Label(type.Name); + else + { + EditorGUI.BeginChangeCheck(); + + field.SerializedProperty.serializedObject.Update(); + EditorGUILayout.PropertyField(field.SerializedProperty, new GUIContent("")); + field.SerializedProperty.serializedObject.ApplyModifiedProperties(); + + if (EditorGUI.EndChangeCheck()) + { + if (field.Parent != null) + field.Parent.RefreshFields(); + else + AdvancedInspectorControl.Editor.Instances = new object[] { field.SerializedProperty.serializedObject.targetObject }; + } + } + + DrawObjectSelector(field); + } + + private void DrawObjectSelector(InspectorField field) + { + MonoBehaviour behaviour = field.GetValue() as MonoBehaviour; + if (behaviour == null) + return; + + List<Component> components = new List<Component>(behaviour.gameObject.GetComponents(field.BaseType)); + if (components.Count == 1) + return; + + int index = components.IndexOf(behaviour); + string[] texts = new string[components.Count]; + + for (int i = 0; i < components.Count; i++) + texts[i] = i.ToString() + " : " + components[i].ToString(); + + EditorGUILayout.BeginHorizontal(); + int selection = EditorGUILayout.Popup(index, texts); + EditorGUILayout.EndHorizontal(); + + if (selection == index) + return; + + field.SetValue(components[selection]); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/MonoEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/MonoEditor.cs.meta new file mode 100644 index 00000000..d796dee7 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/MonoEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9fbe9f800efcf241b78c75454f58a12 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ObjectEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ObjectEditor.cs new file mode 100644 index 00000000..ddfe8b55 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ObjectEditor.cs @@ -0,0 +1,192 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UniToolsEditor; + +namespace AdvancedInspector +{ + public class ObjectEditor : FieldEditor + { + private static Texture picker; + + private static Texture pickerPro; + + private static Texture Picker + { + get + { + if (EditorGUIUtility.isProSkin) + { + if (pickerPro == null) + pickerPro = Helper.Load(EditorResources.PickerPro); + + return pickerPro; + } + else + { + if (picker == null) + picker = Helper.Load(EditorResources.Picker); + + return picker; + } + } + } + + private static int s_ObjectFieldHash = "s_ObjectFieldHash".GetHashCode(); + private static Type validator = null; + private static MethodInfo doObjectField = null; + + public override bool EditDerived + { + get { return true; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(UnityEngine.Object) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + if (field.GetAttribute<NoPicker>() != null) + { + object obj = field.GetValue(); + if (field.Mixed) + GUILayout.Label("---"); + else if (obj == null) + GUILayout.Label("None"); + else if (field.OverloadToString) + GUILayout.Label(obj.ToString()); + else if (field.Type != null) + GUILayout.Label(field.Type.Name); + + return; + } + + if (field.DisplayAsParent) + return; + + if (validator == null) + validator = typeof(EditorGUI).GetNestedType("ObjectFieldValidator", BindingFlags.NonPublic); + + if (doObjectField == null) + doObjectField = typeof(EditorGUI).GetMethod("DoObjectField", BindingFlags.NonPublic | BindingFlags.Static, null, new Type[] { typeof(Rect), typeof(Rect), typeof(int), + typeof(UnityEngine.Object), typeof(Type), typeof(SerializedProperty), validator, typeof(bool), typeof(GUIStyle) }, null); + + DontAllowSceneObjectAttribute dontAllow = field.GetAttribute<DontAllowSceneObjectAttribute>(); ; + + UnityEngine.Object value = (UnityEngine.Object)GetValue(field); + + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + + Type type = field.Type; + + UnityEngine.Object result = null; + + if (type.IsInterface) + { + Rect position = EditorGUILayout.GetControlRect(false, 16f); + int id = GUIUtility.GetControlID(s_ObjectFieldHash, EditorGUIUtility.native, position); + Delegate validation = Delegate.CreateDelegate(validator, typeof(ObjectEditor).GetMethod("ValidateObjectFieldAssignment", BindingFlags.NonPublic | BindingFlags.Static)); + + result = doObjectField.Invoke(null, new object[] { position, position, id, value, type, null, validation, dontAllow == null, EditorStyles.objectField } ) as UnityEngine.Object; + } + else + result = EditorGUILayout.ObjectField(value, type, dontAllow == null); + + if (EditorGUI.EndChangeCheck()) + field.SetValue(result); + + if (dontAllow == null && (field.Type == typeof(GameObject) || + typeof(Component).IsAssignableFrom(field.Type) || field.Type.IsAssignableFrom(typeof(Component)))) + if (GUILayout.Button(Picker, GUIStyle.none, GUILayout.Width(18), GUILayout.Height(18))) + InspectorEditor.StartPicking(Picked, field); + + EditorGUILayout.EndHorizontal(); + + DrawObjectSelector(field); + } + + private static UnityEngine.Object ValidateObjectFieldAssignment(UnityEngine.Object[] references, Type objType, SerializedProperty property) + { + if (references.Length > 0) + { + if (((references[0] != null) && (references[0].GetType() == typeof(GameObject)))) + { + foreach (UnityEngine.Object obj in ((GameObject)references[0]).GetComponents(typeof(Component))) + { + if ((obj != null) && objType.IsAssignableFrom(obj.GetType())) + { + return obj; + } + } + } + } + + return null; + } + + private void Picked(GameObject go, object tag) + { + InspectorField field = tag as InspectorField; + if (field == null) + return; + + if (field.Type == typeof(GameObject)) + field.SetValue(go); + else if (typeof(Component).IsAssignableFrom(field.Type)) + field.SetValue(go.GetComponent(field.Type)); + } + + public override void OnLabelDoubleClick(InspectorField field) + { + UnityEngine.Object target = field.GetValue() as UnityEngine.Object; + if (target == null) + return; + + if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(target))) + EditorGUIUtility.PingObject(target); + else + { + SceneView view = SceneView.lastActiveSceneView; + Quaternion rotation = view.camera.transform.rotation; + + if (target is GameObject) + SceneView.lastActiveSceneView.LookAt(((GameObject)target).transform.position, rotation, 10); + else if (target is Component) + SceneView.lastActiveSceneView.LookAt(((Component)target).transform.position, rotation, 10); + } + } + + private void DrawObjectSelector(InspectorField field) + { + MonoBehaviour behaviour = field.GetValue() as MonoBehaviour; + if (behaviour == null) + return; + + List<Component> components = new List<Component>(behaviour.gameObject.GetComponents(field.BaseType)); + if (components.Count == 1) + return; + + int index = components.IndexOf(behaviour); + string[] texts = new string[components.Count]; + + for (int i = 0; i < components.Count; i++) + texts[i] = i.ToString() + " : " + components[i].ToString(); + + EditorGUILayout.BeginHorizontal(); + int selection = EditorGUILayout.Popup(index, texts); + EditorGUILayout.EndHorizontal(); + + if (selection == index) + return; + + field.SetValue(components[selection]); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ObjectEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ObjectEditor.cs.meta new file mode 100644 index 00000000..b975cbcc --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/ObjectEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c38d144247c0f9448c0c285b7c255fc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs new file mode 100644 index 00000000..789ebbb6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs @@ -0,0 +1,168 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class QuaternionEditor : FieldEditor + { + public override bool Expandable + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Quaternion) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + float width = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; + + Quaternion[] values = field.GetValues<Quaternion>(); + if (AdvancedInspectorControl.Level <= InspectorLevel.Advanced) + { + float[] x = new float[values.Length]; + float[] y = new float[values.Length]; + float[] z = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + Vector3 euler = values[i].eulerAngles; + x[i] = euler.x; + y[i] = euler.y; + z[i] = euler.z; + } + + GUILayout.BeginHorizontal(); + + float result; + if (FloatEditor.DrawFloat("X", x, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 v = field.GetValue<Quaternion>(field.Instances[i]).eulerAngles; + v.x = result; + field.SetValue(field.Instances[i], Quaternion.Euler(v)); + } + } + + if (FloatEditor.DrawFloat("Y", y, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 v = field.GetValue<Quaternion>(field.Instances[i]).eulerAngles; + v.y = result; + field.SetValue(field.Instances[i], Quaternion.Euler(v)); + } + } + + if (FloatEditor.DrawFloat("Z", z, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Z"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Vector3 v = field.GetValue<Quaternion>(field.Instances[i]).eulerAngles; + v.z = result; + field.SetValue(field.Instances[i], Quaternion.Euler(v)); + } + } + + GUILayout.EndHorizontal(); + } + else + { + float[] x = new float[values.Length]; + float[] y = new float[values.Length]; + float[] z = new float[values.Length]; + float[] w = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + x[i] = values[i].x; + y[i] = values[i].y; + z[i] = values[i].z; + w[i] = values[i].w; + } + + GUILayout.BeginHorizontal(); + + float result; + if (FloatEditor.DrawFloat("X", x, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Quaternion v = field.GetValue<Quaternion>(field.Instances[i]); + v.x = result; + field.SetValue(field.Instances[i], v); + } + } + + if (FloatEditor.DrawFloat("Y", y, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Quaternion v = field.GetValue<Quaternion>(field.Instances[i]); + v.y = result; + field.SetValue(field.Instances[i], v); + } + } + + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + + if (FloatEditor.DrawFloat("Z", z, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Z"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Quaternion v = field.GetValue<Quaternion>(field.Instances[i]); + v.z = result; + field.SetValue(field.Instances[i], v); + } + } + + if (FloatEditor.DrawFloat("W", w, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " W"); + + for (int i = 0; i < field.Instances.Length; i++) + { + Quaternion v = field.GetValue<Quaternion>(field.Instances[i]); + v.w = result; + field.SetValue(field.Instances[i], v); + } + } + + GUILayout.EndHorizontal(); + } + + EditorGUIUtility.labelWidth = width; + } + + public override void OnContextualClick(InspectorField field, GenericMenu menu) + { + menu.AddItem(new GUIContent("Identity"), false, Identity); + + menu.AddSeparator(""); + } + + private void Identity() + { + AdvancedInspectorControl.Field.SetValue(Quaternion.identity); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs.meta new file mode 100644 index 00000000..96defe29 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4fd00569d2e889248bedf34a4e50c078 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs new file mode 100644 index 00000000..0f540c19 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class RangeIntEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(RangeInt) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + RangeValueAttribute range = field.GetAttribute<RangeValueAttribute>(); + if (range == null) + return; + + EditorGUILayout.BeginHorizontal(); + + RangeInt[] ranges = field.GetValues<RangeInt>(); + + int[] mins = new int[ranges.Length]; + int[] maxs = new int[ranges.Length]; + int min = ranges[0].min; + int max = ranges[0].max; + bool different = false; + + for (int i = 0; i < ranges.Length; i++) + { + mins[i] = ranges[i].min; + maxs[i] = ranges[i].max; + if (ranges[i].min != min || ranges[0].max != max) + different = true; + } + + if (IntegerEditor.DrawInt("", mins, out min, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeInt(min, ranges[i].max)); + + EditorGUI.BeginChangeCheck(); + float fMin = min; + float fMax = max; + EditorGUI.showMixedValue = different; + EditorGUILayout.MinMaxSlider(ref fMin, ref fMax, range.Min, range.Max); + if (EditorGUI.EndChangeCheck() && min < max) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeInt((int)fMin, (int)fMax)); + + if (IntegerEditor.DrawInt("", maxs, out max, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeInt(ranges[i].min, max)); + + EditorGUILayout.EndHorizontal(); + } + } + + public class RangeFloatEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(RangeFloat) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + RangeValueAttribute range = field.GetAttribute<RangeValueAttribute>(); + if (range == null) + return; + + EditorGUILayout.BeginHorizontal(); + + RangeFloat[] ranges = field.GetValues<RangeFloat>(); + + float[] mins = new float[ranges.Length]; + float[] maxs = new float[ranges.Length]; + float min = ranges[0].min; + float max = ranges[0].max; + bool different = false; + + for (int i = 0; i < ranges.Length; i++) + { + mins[i] = ranges[i].min; + maxs[i] = ranges[i].max; + if (ranges[i].min != min || ranges[0].max != max) + different = true; + } + + if (FloatEditor.DrawFloat("", mins, out min, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeFloat(min, ranges[i].max)); + + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = different; + EditorGUILayout.MinMaxSlider(ref min, ref max, range.Min, range.Max); + if (EditorGUI.EndChangeCheck() && min < max) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeFloat(min, max)); + + if (FloatEditor.DrawFloat("", maxs, out max, GUILayout.Width(64))) + for (int i = 0; i < field.Instances.Length; i++) + field.SetValue(field.Instances[i], new RangeFloat(ranges[i].min, max)); + + EditorGUILayout.EndHorizontal(); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs.meta new file mode 100644 index 00000000..0701b335 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RangeEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 94080e99d0e3f994a8415cc19062dbde +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RectEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RectEditor.cs new file mode 100644 index 00000000..ee3e61e4 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RectEditor.cs @@ -0,0 +1,165 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class RectEditor : FieldEditor + { + public override bool Expandable + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Rect), typeof(RectOffset) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + Type type = field.BaseType; + + float labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; + + if (type == typeof(Rect)) + { + Rect[] values = field.GetValues<Rect>(); + + float[] x = new float[values.Length]; + float[] y = new float[values.Length]; + float[] height = new float[values.Length]; + float[] width = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + x[i] = values[i].x; + y[i] = values[i].y; + height[i] = values[i].height; + width[i] = values[i].width; + } + + GUILayout.BeginHorizontal(); + float result; + if (FloatEditor.DrawFloat("X", x, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].x = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Y", y, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].y = result; + field.SetValue(field.Instances[i], values[i]); + } + } + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + if (FloatEditor.DrawFloat("W", width, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Width"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].width = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("H", height, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Height"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].height = result; + field.SetValue(field.Instances[i], values[i]); + } + } + GUILayout.EndHorizontal(); + } + else if (type == typeof(RectOffset)) + { + RectOffset[] values = field.GetValues<RectOffset>(); + + int[] left = new int[values.Length]; + int[] right = new int[values.Length]; + int[] top = new int[values.Length]; + int[] bottom = new int[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + left[i] = values[i].left; + right[i] = values[i].right; + top[i] = values[i].top; + bottom[i] = values[i].bottom; + } + + GUILayout.BeginHorizontal(); + int result; + if (IntegerEditor.DrawInt("L", left, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Left"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].left = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (IntegerEditor.DrawInt("R", right, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Right"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].right = result; + field.SetValue(field.Instances[i], values[i]); + } + } + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + if (IntegerEditor.DrawInt("T", top, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Top"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].top = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (IntegerEditor.DrawInt("B", bottom, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Bottom"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].bottom = result; + field.SetValue(field.Instances[i], values[i]); + } + } + GUILayout.EndHorizontal(); + } + + EditorGUILayout.Space(); + + EditorGUIUtility.labelWidth = labelWidth; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RectEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RectEditor.cs.meta new file mode 100644 index 00000000..aaf7d190 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RectEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fccb35960df296244b543fc8b0adbb98 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraints2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraints2DEditor.cs new file mode 100644 index 00000000..4e54cbaa --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraints2DEditor.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class RigidbodyConstraints2DEditor : FieldEditor + { + private const int LABEL_WIDTH = 96; + private const int TOGGLE_WIDTH = 28; + + public override bool EditDerived + { + get { return false; } + } + + public override bool Expandable + { + get { return true; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(RigidbodyConstraints2D) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + field.Expandable = true; + if (!field.Expanded) + return; + + EditorGUI.showMixedValue = field.Mixed; + + EditorGUI.BeginChangeCheck(); + + RigidbodyConstraints2D value = (RigidbodyConstraints2D)GetValue(field); + int newValue = 0; + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Freeze Position ", GUILayout.Width(LABEL_WIDTH)); + if (GUILayout.Toggle(value.Has(RigidbodyConstraints2D.FreezePositionX), "X", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints2D.FreezePositionX; + + if (GUILayout.Toggle(value.Has(RigidbodyConstraints2D.FreezePositionY), "Y", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints2D.FreezePositionY; + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Freeze Rotation ", GUILayout.Width(LABEL_WIDTH)); + if (GUILayout.Toggle(value.Has(RigidbodyConstraints2D.FreezeRotation), "Z", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints2D.FreezeRotation; + EditorGUILayout.EndHorizontal(); + + if (EditorGUI.EndChangeCheck()) + field.SetValue(Enum.ToObject(typeof(RigidbodyConstraints2D), newValue)); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraints2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraints2DEditor.cs.meta new file mode 100644 index 00000000..7e23526b --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraints2DEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4d2541cd5af63614a837b0ad6801c1ed +timeCreated: 1433909068 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraintsEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraintsEditor.cs new file mode 100644 index 00000000..781c92b8 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraintsEditor.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class RigidbodyConstraintsEditor : FieldEditor + { + private const int LABEL_WIDTH = 96; + private const int TOGGLE_WIDTH = 28; + + public override bool EditDerived + { + get { return false; } + } + + public override bool Expandable + { + get { return true; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(RigidbodyConstraints) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + field.Expandable = true; + if (!field.Expanded) + return; + + EditorGUI.showMixedValue = field.Mixed; + + EditorGUI.BeginChangeCheck(); + + RigidbodyConstraints value = (RigidbodyConstraints)GetValue(field); + int newValue = 0; + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Freeze Position ", GUILayout.Width(LABEL_WIDTH)); + if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezePositionX), "X", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints.FreezePositionX; + + if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezePositionY), "Y", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints.FreezePositionY; + + if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezePositionZ), "Z", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints.FreezePositionZ; + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Freeze Rotation ", GUILayout.Width(LABEL_WIDTH)); + if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezeRotationX), "X", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints.FreezeRotationX; + + if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezeRotationY), "Y", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints.FreezeRotationY; + + if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezeRotationZ), "Z", GUILayout.Width(TOGGLE_WIDTH))) + newValue += (int)RigidbodyConstraints.FreezeRotationZ; + EditorGUILayout.EndHorizontal(); + + if (EditorGUI.EndChangeCheck()) + field.SetValue(Enum.ToObject(typeof(RigidbodyConstraints), newValue)); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraintsEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraintsEditor.cs.meta new file mode 100644 index 00000000..1121e382 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/RigidbodyConstraintsEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1aa0c3b940b87d14cbb9705339f378b3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/StringEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/StringEditor.cs new file mode 100644 index 00000000..573450d9 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/StringEditor.cs @@ -0,0 +1,89 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class StringEditor : FieldEditor + { + public override Type[] EditedTypes + { + get { return new Type[] { typeof(string) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + GUILayout.BeginHorizontal(); + + float width = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 0; + + TextFieldAttribute text = field.GetAttribute<TextFieldAttribute>(); + MultilineAttribute multiline = field.GetAttribute<MultilineAttribute>(); + TextAreaAttribute area = field.GetAttribute<TextAreaAttribute>(); + + object value = GetValue(field); + + EditorGUI.BeginChangeCheck(); + GUIUtility.GetControlID(field.Path.GetHashCode(), FocusType.Passive); + + string result = ""; + if ((text == null && multiline == null && area == null) || (text != null && text.Type == TextFieldType.Standard)) + { + if (style != null) + result = EditorGUILayout.TextField((string)value, style); + else + result = EditorGUILayout.TextField((string)value); + } + else if (multiline != null || area != null || text.Type == TextFieldType.Area) + { + if (style != null) + result = EditorGUILayout.TextArea((string)value, style); + else + result = EditorGUILayout.TextArea((string)value); + } + else if (text.Type == TextFieldType.Password) + { + if (style != null) + result = EditorGUILayout.PasswordField((string)value, style); + else + result = EditorGUILayout.PasswordField((string)value); + } + else if (text.Type == TextFieldType.Tag) + { + if (style != null) + result = EditorGUILayout.TagField((string)value, style); + else + result = EditorGUILayout.TagField((string)value); + } + else if (text.Type == TextFieldType.File) + { + if (GUILayout.Button("...", GUILayout.Height(BUTTON_HEIGHT), GUILayout.Width(BUTTON_HEIGHT * 2))) + result = EditorUtility.OpenFilePanel(text.Title, text.Path, text.Extension); + + if (field.Mixed) + GUILayout.Label("---"); + else + GUILayout.Label((string)value); + } + else if (text.Type == TextFieldType.Folder) + { + if (GUILayout.Button("...", GUILayout.Height(BUTTON_HEIGHT), GUILayout.Width(BUTTON_HEIGHT * 2))) + result = EditorUtility.OpenFolderPanel(text.Title, "", ""); + + if (field.Mixed) + GUILayout.Label("---"); + else + GUILayout.Label((string)value); + } + + if (EditorGUI.EndChangeCheck()) + field.SetValue(result); + + EditorGUIUtility.labelWidth = width; + + GUILayout.EndHorizontal(); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/StringEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/StringEditor.cs.meta new file mode 100644 index 00000000..4154c0d7 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/StringEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90da81dc74f23b44c85a60181928af9b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/TimeSpanEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/TimeSpanEditor.cs new file mode 100644 index 00000000..fa720ce7 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/TimeSpanEditor.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class TimeSpanEditor : FieldEditor + { + private InspectorField field; + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(TimeSpan) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + int[] days = new int[field.Instances.Length]; + int[] hours = new int[field.Instances.Length]; + int[] mins = new int[field.Instances.Length]; + int[] secs = new int[field.Instances.Length]; + for (int i = 0; i < field.Instances.Length; i++) + { + TimeSpan span = field.GetValue<TimeSpan>(field.Instances[i]); + days[i] = span.Days; + hours[i] = span.Hours; + mins[i] = span.Minutes; + secs[i] = span.Seconds; + } + + float labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 42; + GUILayout.BeginHorizontal(); + + int result; + if (IntegerEditor.DrawInt("Days", days, style, out result)) + { + result = Mathf.Clamp(result, 0, int.MaxValue); + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Days"); + + for (int i = 0; i < field.Instances.Length; i++) + { + TimeSpan span = field.GetValue<TimeSpan>(field.Instances[i]); + span = new TimeSpan(result, span.Hours, span.Minutes, span.Seconds); + field.SetValue(field.Instances[i], span); + } + } + + if (IntegerEditor.DrawInt("Hours", hours, style, out result)) + { + result = Mathf.Clamp(result, 0, int.MaxValue); + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Hours"); + + for (int i = 0; i < field.Instances.Length; i++) + { + TimeSpan span = field.GetValue<TimeSpan>(field.Instances[i]); + span = new TimeSpan(span.Days, result, span.Minutes, span.Seconds); + field.SetValue(field.Instances[i], span); + } + } + + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + + if (IntegerEditor.DrawInt("Mins", mins, style, out result)) + { + result = Mathf.Clamp(result, 0, int.MaxValue); + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Minutes"); + + for (int i = 0; i < field.Instances.Length; i++) + { + TimeSpan span = field.GetValue<TimeSpan>(field.Instances[i]); + span = new TimeSpan(span.Days, span.Hours, result, span.Seconds); + field.SetValue(field.Instances[i], span); + } + } + + if (IntegerEditor.DrawInt("Secs", secs, style, out result)) + { + result = Mathf.Clamp(result, 0, int.MaxValue); + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Seconds"); + + for (int i = 0; i < field.Instances.Length; i++) + { + TimeSpan span = field.GetValue<TimeSpan>(field.Instances[i]); + span = new TimeSpan(span.Days, span.Hours, span.Minutes, result); + field.SetValue(field.Instances[i], span); + } + } + + GUILayout.EndHorizontal(); + EditorGUILayout.Space(); + + EditorGUIUtility.labelWidth = labelWidth; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/TimeSpanEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/TimeSpanEditor.cs.meta new file mode 100644 index 00000000..e0d700c4 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/TimeSpanEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8e1b583a89c0f2468b87c50783399f9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/VectorEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/VectorEditor.cs new file mode 100644 index 00000000..00b9bb3e --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/VectorEditor.cs @@ -0,0 +1,208 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; + +namespace AdvancedInspector +{ + public class VectorEditor : FieldEditor + { + public override bool Expandable + { + get { return false; } + } + + public override Type[] EditedTypes + { + get { return new Type[] { typeof(Vector2), typeof(Vector3), typeof(Vector4) }; } + } + + public override void Draw(InspectorField field, GUIStyle style) + { + Type type = field.BaseType; + + float width = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; + + GUILayout.BeginHorizontal(); + if (type == typeof(Vector2)) + { + Vector2[] values = field.GetValues<Vector2>(); + + float[] x = new float[values.Length]; + float[] y = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + x[i] = values[i].x; + y[i] = values[i].y; + } + + float result; + if (FloatEditor.DrawFloat("X", x, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].x = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Y", y, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].y = result; + field.SetValue(field.Instances[i], values[i]); + } + } + } + else if (type == typeof(Vector3)) + { + Vector3[] values = field.GetValues<Vector3>(); + + float[] x = new float[values.Length]; + float[] y = new float[values.Length]; + float[] z = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + x[i] = values[i].x; + y[i] = values[i].y; + z[i] = values[i].z; + } + + float result; + if (FloatEditor.DrawFloat("X", x, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].x = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Y", y, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].y = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Z", z, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Z"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].z = result; + field.SetValue(field.Instances[i], values[i]); + } + } + } + else if (type == typeof(Vector4)) + { + Vector4[] values = field.GetValues<Vector4>(); + + float[] x = new float[values.Length]; + float[] y = new float[values.Length]; + float[] z = new float[values.Length]; + float[] w = new float[values.Length]; + + for (int i = 0; i < values.Length; i++) + { + x[i] = values[i].x; + y[i] = values[i].y; + z[i] = values[i].z; + w[i] = values[i].w; + } + + float result; + if (FloatEditor.DrawFloat("X", x, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].x = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Y", y, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].y = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("Z", z, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Z"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].z = result; + field.SetValue(field.Instances[i], values[i]); + } + } + + if (FloatEditor.DrawFloat("W", w, style, out result)) + { + Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " W"); + + for (int i = 0; i < field.Instances.Length; i++) + { + values[i].w = result; + field.SetValue(field.Instances[i], values[i]); + } + } + } + GUILayout.EndHorizontal(); + + EditorGUIUtility.labelWidth = width; + } + + public override void OnContextualClick(InspectorField field, GenericMenu menu) + { + menu.AddItem(new GUIContent("Zero"), false, Zero); + menu.AddItem(new GUIContent("One"), false, One); + + menu.AddSeparator(""); + } + + private void Zero() + { + if (AdvancedInspectorControl.Field.Type == typeof(Vector2)) + AdvancedInspectorControl.Field.SetValue(Vector2.zero); + else if (AdvancedInspectorControl.Field.Type == typeof(Vector3)) + AdvancedInspectorControl.Field.SetValue(Vector3.zero); + else if (AdvancedInspectorControl.Field.Type == typeof(Vector4)) + AdvancedInspectorControl.Field.SetValue(Vector4.zero); + } + + private void One() + { + if (AdvancedInspectorControl.Field.Type == typeof(Vector2)) + AdvancedInspectorControl.Field.SetValue(Vector2.one); + else if (AdvancedInspectorControl.Field.Type == typeof(Vector3)) + AdvancedInspectorControl.Field.SetValue(Vector3.one); + else if (AdvancedInspectorControl.Field.Type == typeof(Vector4)) + AdvancedInspectorControl.Field.SetValue(Vector4.one); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/VectorEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/VectorEditor.cs.meta new file mode 100644 index 00000000..79d8e5d8 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/VectorEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 851a4084094a34f439dc7c658c5343bb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.XML b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.XML new file mode 100644 index 00000000..51610453 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.XML @@ -0,0 +1,453 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>UniToolsEditor</name> + </assembly> + <members> + <member name="T:UniToolsEditor.EditorResources"> + <summary> + A strongly-typed resource class, for looking up localized strings, etc. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ResourceManager"> + <summary> + Returns the cached ResourceManager instance used by this class. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Culture"> + <summary> + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Add"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.AlphaOrder"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.AntiAlphaOrder"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Box_Empty"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxFlat"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxFlat_Pro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxFlat_Title"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxFlat_TitlePro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxRound"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxRound_Pro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxRound_Title"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.BoxRound_TitlePro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Calendar"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Capsule"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Check"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Checkbox_Back_Idle"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Checkbox_Back_Pressed"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Checkbox_Check"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.CheckpointHead"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.CheckpointLine"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.CheckpointPersistant"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ClipBackground"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Connected"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Cross"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Cube"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Cylinder"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Delete"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Directory"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Disconnected"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Drag"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Drag_Light"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Edit"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.EditorBackground"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ExtendBot"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ExtendBotPro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ExtendTop"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ExtendTopPro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Favorited"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.File"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.FolderClosed"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.FolderOpen"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Hidden"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Hierarchy"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Hourglass"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Jump"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Knob"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.KnobBack"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Length"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Locked"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Logo"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.MoveDown"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.MoveEmpty"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.MoveUp"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.NoOrder"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.NotFavorited"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Package"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Picker"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.PickerCursor"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.PickerPro"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.PreviewLight1"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.PreviewLight2"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.PreviewLight3"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Refresh"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Save"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.SaveProject"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.SaveScene"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Scene"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ScrollDown"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ScrollLeft"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ScrollLeft_Light"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ScrollRight"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ScrollRight_Light"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.ScrollUp"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.SeparatorHorizontal"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.SeparatorVertical"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Sphere"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Unlocked"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.Visible"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="P:UniToolsEditor.EditorResources.White"> + <summary> + Looks up a localized resource of type System.Byte[]. + </summary> + </member> + <member name="T:UniToolsEditor.Helper"> + <summary> + Collection of static helping method. + </summary> + </member> + <member name="M:UniToolsEditor.Helper.Load(System.String)"> + <summary> + Load a binary file (ex.: from a .resx file) and covert it to a Unity Texture2D + This one is generally used when a non-editor script requires a texture. + It is requested by a the TextureRequest event. + </summary> + <param name="name">The name of the embedded resource.</param> + <returns>A UnityEngine.Texture</returns> + </member> + <member name="M:UniToolsEditor.Helper.Load(System.Byte[])"> + <summary> + Load a binary file (ex.: from a .resx file) and covert it to a Unity Texture2D + </summary> + <param name="binary">The binary resources.</param> + <returns>A UnityEngine.Texture</returns> + </member> + <member name="M:UniToolsEditor.Helper.DrawColor(UnityEngine.Rect,UnityEngine.Color)"> + <summary> + Similar to GUI.DrawTexture, but draw a color instead. + </summary> + <param name="rect">Region to draw.</param> + <param name="color">The color of the draw call.</param> + </member> + <member name="P:UniToolsEditor.Helper.White"> + <summary> + A fully white texture. + Usually used by the DrawColor method. + </summary> + </member> + </members> +</doc> diff --git a/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.XML.meta b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.XML.meta new file mode 100644 index 00000000..9a50f739 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 963a7470a10df4e46acea0b0b709948e +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.dll b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.dll Binary files differnew file mode 100644 index 00000000..93c50a83 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.dll diff --git a/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.dll.meta b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.dll.meta new file mode 100644 index 00000000..9d4c7893 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 45d0940e8e0f52a44876009e88edec75 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.pdb b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.pdb Binary files differnew file mode 100644 index 00000000..09f3307e --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.pdb diff --git a/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.pdb.meta b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.pdb.meta new file mode 100644 index 00000000..ab678cfb --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UniToolsEditor.pdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 6c3bf347a80d91c45a5aa19d41a1c61c +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes.meta new file mode 100644 index 00000000..8a5877f3 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: d41f8a83848329147be650112ba92e02 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnchoredJoint2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnchoredJoint2DEditor.cs new file mode 100644 index 00000000..af18303f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnchoredJoint2DEditor.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + public class AnchoredJoint2DEditor : Joint2DEditor + { + private const float snapDistance = 0.13f; + private AnchoredJoint2D anchorJoint2D; + + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(AnchoredJoint2D); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("anchor"), + new DescriptorAttribute("Anchor", "The joint's anchor point on the object that has the joint component.", "http://docs.unity3d.com/ScriptReference/AnchoredJoint2D-anchor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("connectedAnchor"), + new DescriptorAttribute("Connected Anchor", "The joint's anchor point on the second object (ie, the one which doesn't have the joint component).", "http://docs.unity3d.com/ScriptReference/AnchoredJoint2D-connectedAnchor.html"))); + } + + protected override void OnSceneGUI() + { + anchorJoint2D = (AnchoredJoint2D)target; + Vector3 v1 = TransformPoint(anchorJoint2D.transform, anchorJoint2D.anchor); + Vector3 v2 = anchorJoint2D.connectedAnchor; + + if (anchorJoint2D.connectedBody) + v2 = TransformPoint(anchorJoint2D.connectedBody.transform, v2); + + Vector3 v3 = v1 + (v2 - v1).normalized * HandleUtility.GetHandleSize(v1) * 0.1f; + Handles.color = Color.green; + Handles.DrawAAPolyLine(new Vector3[] { v3, v2 }); + + if (HandleAnchor(ref v2, true)) + { + v2 = SnapToSprites(v2); + v2 = SnapToPoint(v2, v1, 0.13f); + if (anchorJoint2D.connectedBody) + v2 = InverseTransformPoint(anchorJoint2D.connectedBody.transform, v2); + + Undo.RecordObject(anchorJoint2D, "Move Connected Anchor"); + anchorJoint2D.connectedAnchor = v2; + } + + if (HandleAnchor(ref v1, false)) + { + v1 = SnapToSprites(v1); + v1 = SnapToPoint(v1, v2, 0.13f); + + Undo.RecordObject(anchorJoint2D, "Move Anchor"); + anchorJoint2D.anchor = InverseTransformPoint(anchorJoint2D.transform, v1); + } + } + + private Vector3 SnapToSprites(Vector3 position) + { + SpriteRenderer component = anchorJoint2D.GetComponent<SpriteRenderer>(); + position = SnapToSprite(component, position, 0.13f); + + if (anchorJoint2D.connectedBody) + { + component = anchorJoint2D.connectedBody.GetComponent<SpriteRenderer>(); + position = SnapToSprite(component, position, 0.13f); + } + + return position; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnchoredJoint2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnchoredJoint2DEditor.cs.meta new file mode 100644 index 00000000..e4bfde48 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnchoredJoint2DEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92274081a60084d499072975be2ef644 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimationEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimationEditor.cs new file mode 100644 index 00000000..6a9783bf --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimationEditor.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Animation), true)] + public class AnimationEditor : InspectorEditor + { + private static readonly int hash = "AnimationBoundsEditorHash".GetHashCode(); + private object boxEditor; + private MethodInfo edit; + private MethodInfo set; + private Color handleColor = new Color(1, 1, 1, 0.6f); + + protected override void OnEnable() + { + base.OnEnable(); + + Type box = TypeUtility.GetTypeByName("BoxEditor"); + boxEditor = Activator.CreateInstance(box, true, hash); + edit = box.GetMethod("OnSceneGUI", new Type[] { typeof(Transform), typeof(Color), typeof(Vector3).MakeByRefType(), typeof(Vector3).MakeByRefType() }); + set = box.GetMethod("SetAlwaysDisplayHandles"); + } + + protected override void RefreshFields() + { + Type type = typeof(Animation); + if (Instances == null || Instances.Length == 0) + return; + + SerializedObject so = new SerializedObject(Instances.Cast<UnityEngine.Object>().ToArray()); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("clip"), + new DescriptorAttribute("Animation", "The default animation.", "http://docs.unity3d.com/ScriptReference/Animation-clip.html"))); + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_Animations"), + new DescriptorAttribute("Animations", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("playAutomatically"), + new DescriptorAttribute("Play Automatically", "Should the default animation clip (Animation.clip) automatically start playing on startup.", "http://docs.unity3d.com/ScriptReference/Animation-playAutomatically.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("animatePhysics"), + new DescriptorAttribute("Animate Physic", "When turned on, animations will be executed in the physics loop. This is only useful in conjunction with kinematic rigidbodies.", "http://docs.unity3d.com/ScriptReference/Animation-animatePhysics.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("cullingType"), + new DescriptorAttribute("Culling Type", "Controls culling of this Animation component.", "http://docs.unity3d.com/ScriptReference/Animation-cullingType.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("isPlaying"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Is Playing", "Are we playing any animations?", "http://docs.unity3d.com/ScriptReference/Animation-isPlaying.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("localBounds"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Bounds", "AABB of this Animation animation component in local space.", "http://docs.unity3d.com/ScriptReference/Animation-localBounds.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("wrapMode"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Wrap Mode", "How should time beyond the playback range of the clip be treated?", "http://docs.unity3d.com/ScriptReference/Animation-wrapMode.html"))); + + } + + protected override void OnSceneGUI() + { + Animation animation = (Animation)target; + + if ((animation != null) && ((animation.cullingType == AnimationCullingType.BasedOnClipBounds) || (animation.cullingType == AnimationCullingType.BasedOnUserBounds))) + { + set.Invoke(boxEditor, new object[] { animation.cullingType == AnimationCullingType.BasedOnUserBounds }); + Bounds localBounds = animation.localBounds; + Vector3 center = localBounds.center; + Vector3 size = localBounds.size; + + object[] arguments = new object[] { animation.transform, handleColor, center, size }; + + if ((bool)edit.Invoke(boxEditor, arguments)) + { + center = (Vector3)arguments[2]; + size = (Vector3)arguments[3]; + + Undo.RecordObject(animation, "Modified Animation bounds"); + animation.localBounds = new Bounds(center, size); + } + } + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimationEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimationEditor.cs.meta new file mode 100644 index 00000000..2a887671 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimationEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39152dbad278fc841bed6ccf81404831 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimatorEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimatorEditor.cs new file mode 100644 index 00000000..eabe711c --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimatorEditor.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Animator), true)] + public class AnimatorEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Animator); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("runtimeAnimatorController"), new HelpAttribute(new HelpAttribute.HelpDelegate(HelpController)), + new DescriptorAttribute("Controller", "The runtime representation of AnimatorController that controls the Animator.", "http://docs.unity3d.com/ScriptReference/Animator-runtimeAnimatorController.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("avatar"), + new DescriptorAttribute("Avatar", "Gets/Sets the current Avatar.", "http://docs.unity3d.com/ScriptReference/Animator-avatar.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("applyRootMotion"), + new DescriptorAttribute("Apply Root Motion", "Should root motion be applied?", "http://docs.unity3d.com/ScriptReference/Animator-applyRootMotion.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("updateMode"), + new DescriptorAttribute("Update Mode", "Specifies the update mode of the Animator.", "http://docs.unity3d.com/ScriptReference/Animator-updateMode.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("cullingMode"), + new DescriptorAttribute("Culling Mode", "Controls culling of this Animator component.", "http://docs.unity3d.com/ScriptReference/Animator-cullingMode.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("fireEvents"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Fire Events", "If true, the animation track fires their event.", ""))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("logWarnings"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Log Warnings", "Log Animator internal warnings.", ""))); + + InspectorField transform = new InspectorField("Transform"); + + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("speed"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Speed", "The playback speed of the Animator. 1 is normal playback speed.", "http://docs.unity3d.com/ScriptReference/Animator-speed.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("bodyPosition"), new InspectAttribute(InspectorLevel.Advanced), new ReadOnlyAttribute(), + new DescriptorAttribute("Body Position", "The position of the body center of mass.", "http://docs.unity3d.com/ScriptReference/Animator-bodyPosition.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("rootPosition"), new InspectAttribute(InspectorLevel.Advanced), new ReadOnlyAttribute(), + new DescriptorAttribute("Root Position", "The root position, the position of the game object.", "http://docs.unity3d.com/ScriptReference/Animator-rootPosition.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("bodyRotation"), new InspectAttribute(InspectorLevel.Advanced), new ReadOnlyAttribute(), + new DescriptorAttribute("Body Rotation", "The rotation of the body center of mass.", "http://docs.unity3d.com/ScriptReference/Animator-bodyRotation.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("rootRotation"), new InspectAttribute(InspectorLevel.Advanced), new ReadOnlyAttribute(), + new DescriptorAttribute("Root Rotation", "The root rotation, the rotation of the game object.", "http://docs.unity3d.com/ScriptReference/Animator-rootRotation.html"))); + + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("targetPosition"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Target Position", "Returns the position of the target specified by SetTarget(AvatarTarget targetIndex, float targetNormalizedTime)).", "http://docs.unity3d.com/ScriptReference/Animator-targetPosition.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("targetRotation"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Target Rotation", "Returns the rotation of the target specified by SetTarget(AvatarTarget targetIndex, float targetNormalizedTime)).", "http://docs.unity3d.com/ScriptReference/Animator-targetRotation.html"))); + + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("deltaPosition"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Delta Position", "Gets the avatar delta position for the last evaluated frame.", "http://docs.unity3d.com/ScriptReference/Animator-deltaPosition.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("deltaRotation"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Delta Rotation", "Gets the avatar delta rotation for the last evaluated frame.", "http://docs.unity3d.com/ScriptReference/Animator-deltaRotation.html"))); + + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("pivotPosition"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Pivot Position", "Get the current position of the pivot.", "http://docs.unity3d.com/ScriptReference/Animator-pivotPosition.html"))); + transform.Fields.Add(new InspectorField(type, Instances, type.GetProperty("pivotWeight"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Pivot Weight", "Gets the pivot weight.", "http://docs.unity3d.com/ScriptReference/Animator-pivotWeight.html"))); + + InspectorField feet = new InspectorField("Feet"); + + feet.Fields.Add(new InspectorField(type, Instances, type.GetProperty("layersAffectMassCenter"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Layers Affect Mass Center", "", ""))); + feet.Fields.Add(new InspectorField(type, Instances, type.GetProperty("feetPivotActive"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Feet Pivot", "Blends pivot point between body center of mass and feet pivot. At 0%, the blending point is body center of mass. At 100%, the blending point is feet pivot.", "http://docs.unity3d.com/ScriptReference/Animator-feetPivotActive.html"))); + feet.Fields.Add(new InspectorField(type, Instances, type.GetProperty("stabilizeFeet"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Stabilize Feet", "Automatic stabilization of feet during transition and blending.", "http://docs.unity3d.com/ScriptReference/Animator-stabilizeFeet.html"))); + feet.Fields.Add(new InspectorField(type, Instances, type.GetProperty("leftFeetBottomHeight"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Left Feet Bottom Height", "Get left foot bottom height.", "http://docs.unity3d.com/ScriptReference/Animator-leftFeetBottomHeight.html"))); + feet.Fields.Add(new InspectorField(type, Instances, type.GetProperty("rightFeetBottomHeight"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Right Feet Bottom Height", "Get right foot bottom height.", "http://docs.unity3d.com/ScriptReference/Animator-rightFeetBottomHeight.html"))); + + InspectorField debug = new InspectorField("Debug"); + + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("gravityWeight"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Gravity Weight", "The current gravity weight based on current animations that are played.", "http://docs.unity3d.com/ScriptReference/Animator-gravityWeight.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("hasRootMotion"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Has Root Motion", "Returns true if the current rig has root motion.", "http://docs.unity3d.com/ScriptReference/Animator-hasRootMotion.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("hasTransformHierarchy"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Has Tranform Hierarchy", "Returns true if the object has a transform hierarchy.", "http://docs.unity3d.com/ScriptReference/Animator-hasTransformHierarchy.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("humanScale"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Human Scale", "Returns the scale of the current Avatar for a humanoid rig, (1 by default if the rig is generic).", "http://docs.unity3d.com/ScriptReference/Animator-humanScale.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("isHuman"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Is Human", "Returns true if the current rig is humanoid, false if it is generic.", "http://docs.unity3d.com/ScriptReference/Animator-isHuman.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("isMatchingTarget"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Is Matching Target", "If automatic matching is active.", "http://docs.unity3d.com/ScriptReference/Animator-isMatchingTarget.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("isOptimizable"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Is Optimizable", "Returns true if the current rig is optimizable with AnimatorUtility.OptimizeTransformHierarchy.", "http://docs.unity3d.com/ScriptReference/Animator-isOptimizable.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("layerCount"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Layer Count", "The AnimatorController layer count.", "http://docs.unity3d.com/ScriptReference/Animator-layerCount.html"))); + + fields.Add(transform); + fields.Add(feet); + fields.Add(debug); + } + + private HelpAttribute HelpController() + { + foreach (object instance in Instances) + { + Animator animator = instance as Animator; + + if (animator == null) + continue; + + if (animator.runtimeAnimatorController == null) + return new HelpAttribute(HelpType.Error, "The Animator requires a controller to work."); + } + + return null; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimatorEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimatorEditor.cs.meta new file mode 100644 index 00000000..8ca688a1 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/AnimatorEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9f314ed08707a14daa8524b1f18c511 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/BoxColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/BoxColliderEditor.cs new file mode 100644 index 00000000..99dffeb8 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/BoxColliderEditor.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(BoxCollider), true)] + public class BoxColliderEditor : ColliderEditor + { + private static readonly int hash = "BoxColliderEditor".GetHashCode(); + private object boxEditor; + private MethodInfo edit; + + protected override void OnEnable() + { + base.OnEnable(); + + Type box = TypeUtility.GetTypeByName("BoxEditor"); + boxEditor = Activator.CreateInstance(box, true, hash); + edit = box.GetMethod("OnSceneGUI", new Type[] { typeof(Transform), typeof(Color), typeof(Vector3).MakeByRefType(), typeof(Vector3).MakeByRefType() }); + } + + protected override void RefreshFields() + { + Type type = typeof(BoxCollider); + + base.RefreshFields(); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("center"), + new DescriptorAttribute("Center", "The center of the box, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/BoxCollider-center.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("size"), + new DescriptorAttribute("Size", "The size of the box, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/BoxCollider-size.html"))); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + if (Event.current.type == EventType.Used) + return; + + BoxCollider boxCollider = (BoxCollider)target; + Vector3 center = boxCollider.center; + Vector3 size = boxCollider.size; + Color color = ColliderHandleColor; + + if (!boxCollider.enabled) + { + color = ColliderHandleColorDisabled; + } + + object[] arguments = new object[] { boxCollider.transform, color, center, size }; + + if ((bool)edit.Invoke(boxEditor, arguments)) + { + center = (Vector3)arguments[2]; + size = (Vector3)arguments[3]; + + Undo.RecordObject(boxCollider, "Modified Box Collider"); + boxCollider.center = center; + boxCollider.size = size; + } + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/BoxColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/BoxColliderEditor.cs.meta new file mode 100644 index 00000000..09c7191b --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/BoxColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f68ddc25c79b9d741b18bac5986fc4f4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CameraEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CameraEditor.cs new file mode 100644 index 00000000..03b2b55b --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CameraEditor.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Camera), true)] + public class CameraEditor : InspectorEditor + { + private Rect[] rects; + private Camera camera; + + private SceneView view = null; + + public Vector2 screenshotResolution = new Vector2(); + + protected override void RefreshFields() + { + Type type = typeof(Camera); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("clearFlags"), + new DescriptorAttribute("Clear Flag", "How the camera clears the background.", "http://docs.unity3d.com/ScriptReference/Camera-clearFlags.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("backgroundColor"), new InspectAttribute(new InspectAttribute.InspectDelegate(ShowBackground)), + new DescriptorAttribute("Background Color", "The color with which the screen will be cleared.", "http://docs.unity3d.com/ScriptReference/Camera-backgroundColor.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("cullingMask"), new FieldEditorAttribute("LayerMaskEditor"), + new DescriptorAttribute("Culling Mask", "This is used to render parts of the scene selectively.", "http://docs.unity3d.com/ScriptReference/Camera-cullingMask.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("orthographic"), new RestrictAttribute(new RestrictAttribute.RestrictDelegate(Projection)), + new DescriptorAttribute("Orthographic", "Is the camera orthographic (true) or perspective (false)?", "http://docs.unity3d.com/ScriptReference/Camera-orthographic.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("orthographicSize"), new InspectAttribute(new InspectAttribute.InspectDelegate(IsOrthographic)), + new DescriptorAttribute("Size", "Camera's half-size when in orthographic mode.", "http://docs.unity3d.com/ScriptReference/Camera-orthographicSize.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("fieldOfView"), new InspectAttribute(new InspectAttribute.InspectDelegate(IsFieldOfView)), + new RangeValueAttribute(1, 179), new DescriptorAttribute("Field Of View", "The field of view of the camera in degrees.", "http://docs.unity3d.com/ScriptReference/Camera-fieldOfView.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("nearClipPlane"), + new DescriptorAttribute("Near Clip", "The near clipping plane distance.", "http://docs.unity3d.com/ScriptReference/Camera-nearClipPlane.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("farClipPlane"), + new DescriptorAttribute("Far Clip", "The far clipping plane distance.", "http://docs.unity3d.com/ScriptReference/Camera-farClipPlane.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("rect"), + new DescriptorAttribute("Viewport Rect", "Where on the screen is the camera rendered in normalized coordinates.", "http://docs.unity3d.com/ScriptReference/Camera-rect.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("depth"), + new DescriptorAttribute("Depth", "Camera's depth in the camera rendering order.", "http://docs.unity3d.com/ScriptReference/Camera-depth.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("renderingPath"), new HelpAttribute(new HelpAttribute.HelpDelegate(RenderingHelp)), + new DescriptorAttribute("Rendering Path", "Rendering path.", "http://docs.unity3d.com/ScriptReference/Camera-renderingPath.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("targetTexture"), + new DescriptorAttribute("Render Texture", "Destination render texture (Unity Pro only).", "http://docs.unity3d.com/ScriptReference/Camera-targetTexture.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useOcclusionCulling"), + new DescriptorAttribute("Occlusion Culling", "Whether or not the Camera will use occlusion culling during rendering.", "http://docs.unity3d.com/ScriptReference/Camera-useOcclusionCulling.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("hdr"), new ReadOnlyAttribute(new ReadOnlyAttribute.ReadOnlyDelegate(IsHDRAvailable)), + new DescriptorAttribute("HDR", "High dynamic range rendering.", "http://docs.unity3d.com/ScriptReference/Camera-hdr.html"))); + + fields.Add(new InspectorField(null, new UnityEngine.Object[] { this }, new object[] { this }, this.GetType().GetMethod("TakeScreenshot"), + new Attribute[] { new InspectAttribute(InspectorLevel.Advanced) })); + fields.Add(new InspectorField(null, new UnityEngine.Object[] { this }, new object[] { this }, null, this.GetType().GetField("screenshotResolution"), false, + new Attribute[] { new InspectAttribute(InspectorLevel.Advanced) })); + + // Debug + InspectorField debug = new InspectorField("Debug"); + fields.Add(debug); + + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("aspect"), new InspectAttribute(InspectorLevel.Debug), new ReadOnlyAttribute(), + new DescriptorAttribute("Aspect Ratio", "The aspect ratio (width divided by height).", "http://docs.unity3d.com/ScriptReference/Camera-aspect.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("clearStencilAfterLightingPass"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Clear Stencil After Lighting", "Clear Stencil After Lighting Pass."))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("depthTextureMode"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Depth Texture Mode", "How and if camera generates a depth texture.", "http://docs.unity3d.com/ScriptReference/Camera-depthTextureMode.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("eventMask"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Event Mask", "Mask to select which layers can trigger events on the camera.", "http://docs.unity3d.com/ScriptReference/Camera-eventMask.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("layerCullDistances"), new InspectAttribute(InspectorLevel.Debug), new CollectionAttribute(0), + new DescriptorAttribute("Layer Cull Distances", "Per-layer culling distances.", "http://docs.unity3d.com/ScriptReference/Camera-layerCullDistances.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("layerCullSpherical"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Layer Cull Spherical", "How to perform per-layer culling for a Camera.", "http://docs.unity3d.com/ScriptReference/Camera-layerCullSpherical.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("pixelRect"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Pixel Rect", "Where on the screen is the camera rendered in pixel coordinates.", "http://docs.unity3d.com/ScriptReference/Camera-pixelRect.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("transparencySortMode"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Transparency Sort Mode", "Transparent object sorting mode.", "http://docs.unity3d.com/ScriptReference/Camera-transparencySortMode.html"))); + + if (camera == null) + { + camera = EditorUtility.CreateGameObjectWithHideFlags("Preview Camera", HideFlags.HideAndDontSave, new Type[] { typeof(Camera) }).GetComponent<Camera>(); + camera.enabled = false; + } + + rects = new Rect[Instances.Length]; + + for (int i = 0; i < Instances.Length; i++) + rects[i] = new Rect(25, 25, 0, 0); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + if (Event.current.type == EventType.Used) + return; + + if (view != SceneView.currentDrawingSceneView) + InitPosition(SceneView.currentDrawingSceneView); + + Handles.BeginGUI(); + + for (int i = 0; i < Instances.Length; i++) + { + Camera instance = Instances[i] as Camera; + rects[i] = GUILayout.Window(i, rects[i], DrawWindow, instance.name + " Preview"); + } + + Handles.EndGUI(); + } + + public void TakeScreenshot() + { + Camera camera = target as Camera; + if (camera == null) + return; + + RenderTexture texture = RenderTexture.GetTemporary((int)screenshotResolution.x, (int)screenshotResolution.y); + camera.targetTexture = texture; + camera.Render(); + camera.targetTexture = null; + RenderTexture.active = texture; + + Texture2D image = new Texture2D((int)screenshotResolution.x, (int)screenshotResolution.y); + image.ReadPixels(new Rect(0, 0, (int)screenshotResolution.x, (int)screenshotResolution.y), 0, 0); + image.Apply(); + + RenderTexture.ReleaseTemporary(texture); + RenderTexture.active = null; + + byte[] file = image.EncodeToPNG(); + + int count = 1; + string path; + while (true) + { + path = Application.dataPath + "/Screenshot_" + count.ToString() + ".png"; + FileInfo info = new FileInfo(path); + if (!info.Exists) + break; + + count++; + } + + File.WriteAllBytes(path, file); + } + + private void InitPosition(SceneView view) + { + this.view = view; + + int offset = 45; + for (int i = 0; i < Instances.Length; i++) + { + Type gameView = TypeUtility.GetTypeByName("GameView"); + MethodInfo info = gameView.GetMethod("GetSizeOfMainGameView", BindingFlags.Static | BindingFlags.NonPublic); + Vector2 camSize = (Vector2)info.Invoke(null, null); + + int width = (int)(camSize.x * 0.25f); + int height = (int)(camSize.y * 0.25f); + + rects[i] = new Rect(view.position.width - width - 25, view.position.height - height - offset, 0, 0); + offset += height + 35; + } + } + + private void DrawWindow(int i) + { + Rect rect = SceneView.currentDrawingSceneView.camera.pixelRect; + + Camera instance = Instances[i] as Camera; + Type gameView = TypeUtility.GetTypeByName("GameView"); + MethodInfo info = gameView.GetMethod("GetSizeOfMainGameView", BindingFlags.Static | BindingFlags.NonPublic); + Vector2 camSize = (Vector2)info.Invoke(null, null); + + int width = (int)(camSize.x * 0.25f); + int height = (int)(camSize.y * 0.25f); + + camera.CopyFrom(instance); + camera.pixelRect = new Rect(rects[i].x + 5, rect.height - rects[i].y - (height), width, height); + camera.Render(); + GUI.DragWindow(); + GUI.Label(GUILayoutUtility.GetRect(width, height), "", GUIStyle.none); + } + + private IList Projection() + { + List<object> list = new List<object>(); + list.Add(new DescriptorPair(false, new DescriptorAttribute("Perspective", ""))); + list.Add(new DescriptorPair(true, new DescriptorAttribute("Orthographic", ""))); + return list; + } + + private bool ShowBackground() + { + foreach (object instance in Instances) + { + Camera camera = instance as Camera; + + if (camera == null) + continue; + + if (camera.clearFlags == CameraClearFlags.Depth || camera.clearFlags == CameraClearFlags.Nothing) + return false; + } + + return true; + } + + private bool IsOrthographic() + { + foreach (object instance in Instances) + { + Camera camera = instance as Camera; + if (camera == null) + continue; + + if (!camera.orthographic) + return false; + } + + return true; + } + + private bool IsFieldOfView() + { + foreach (object instance in Instances) + { + Camera camera = instance as Camera; + if (camera == null) + continue; + + if (camera.orthographic) + return false; + } + + return true; + } + + private bool IsHDRAvailable() + { + return !UnityEditorInternal.InternalEditorUtility.HasPro(); + } + + private HelpAttribute RenderingHelp() + { + foreach (object instance in Instances) + { + Camera camera = instance as Camera; + if (camera == null) + return null; + + if (camera.renderingPath == RenderingPath.DeferredLighting && !UnityEditorInternal.InternalEditorUtility.HasPro()) + return new HelpAttribute(HelpType.Warning, "Deferred lighting requires Unity Pro."); + } + + return null; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CameraEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CameraEditor.cs.meta new file mode 100644 index 00000000..4aac20f8 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CameraEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5065fd5b555113c46adf4c9bde73b526 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CapsuleColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CapsuleColliderEditor.cs new file mode 100644 index 00000000..cbfd761b --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CapsuleColliderEditor.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(CapsuleCollider), true)] + public class CapsuleColliderEditor : ColliderEditor + { + private int ControlID; + + protected override void RefreshFields() + { + Type type = typeof(CapsuleCollider); + + base.RefreshFields(); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("center"), + new DescriptorAttribute("Center", "The center of the capsule, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/CapsuleCollider-center.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("height"), + new DescriptorAttribute("Height", "The height of the capsule meased in the object's local space.", "http://docs.unity3d.com/ScriptReference/CapsuleCollider-height.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("radius"), + new DescriptorAttribute("Radius", "The radius of the sphere, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/CapsuleCollider-radius.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("direction"), new RestrictAttribute(new RestrictAttribute.RestrictDelegate(Direction)), + new DescriptorAttribute("Direction", "The direction of the capsule.", "http://docs.unity3d.com/ScriptReference/CapsuleCollider-direction.html"))); + } + + private List<DescriptorPair> Direction() + { + List<DescriptorPair> list = new List<DescriptorPair>(); + foreach (AxisOrientation orientation in Enum.GetValues(typeof(AxisOrientation))) + list.Add(new DescriptorPair((int)orientation, new DescriptorAttribute(orientation.ToString(), ""))); + + return list; + } + + private Vector3 CapsuleExtends(CapsuleCollider target) + { + return new Vector3(target.radius, target.height, target.radius) + target.center; + } + + private Matrix4x4 CapsuleOrientation(CapsuleCollider target) + { + if (target.direction == (int)AxisOrientation.YAxis) + return Matrix4x4.TRS(target.transform.TransformPoint(target.center), + target.gameObject.transform.rotation, Vector3.one); + else if (target.direction == (int)AxisOrientation.XAxis) + return Matrix4x4.TRS(target.transform.TransformPoint(target.center), + target.transform.rotation * Quaternion.LookRotation(Vector3.up, Vector3.right), Vector3.one); + else + return Matrix4x4.TRS(target.transform.TransformPoint(target.center), + target.transform.rotation * Quaternion.LookRotation(Vector3.right, Vector3.forward), Vector3.one); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + if (Event.current.type == EventType.Used) + return; + + CapsuleCollider collider = (CapsuleCollider)target; + + Color color = Handles.color; + if (collider.enabled) + Handles.color = ColliderHandleColor; + else + Handles.color = ColliderHandleColorDisabled; + + bool enabled = GUI.enabled; + if (!Event.current.shift && GUIUtility.hotControl != ControlID) + { + GUI.enabled = false; + Handles.color = new Color(0f, 0f, 0f, 0.001f); + } + + Vector3 capsuleExtents = CapsuleExtends(collider); + Matrix4x4 matrix = CapsuleOrientation(collider); + + float y = capsuleExtents.y - collider.center.y - 1; + float x = capsuleExtents.x - collider.center.x; + + int hotControl = GUIUtility.hotControl; + Vector3 localPos = Vector3.up * y; + + float value = SizeHandle(localPos, Vector3.up, matrix); + if (!GUI.changed) + value = SizeHandle(-localPos, Vector3.down, matrix); + + if (GUI.changed) + collider.height += value / y / collider.height; + + value = SizeHandle(Vector3.left * x, Vector3.left, matrix); + if (!GUI.changed) + value = SizeHandle(-Vector3.left * x, -Vector3.left, matrix); + + if (!GUI.changed) + value = SizeHandle(Vector3.forward * x, Vector3.forward, matrix); + + if (!GUI.changed) + value = SizeHandle(-Vector3.forward * x, -Vector3.forward, matrix); + + if (GUI.changed) + collider.radius += value / Mathf.Max(capsuleExtents.z / collider.radius, capsuleExtents.x / collider.radius); + + if (hotControl != GUIUtility.hotControl && GUIUtility.hotControl != 0) + ControlID = GUIUtility.hotControl; + + if (GUI.changed) + { + Undo.RecordObject(collider, "Edited Capsule Collider"); + collider.radius = Mathf.Max(collider.radius, 0.001f); + collider.height = Mathf.Max(collider.height, 0.001f); + } + + Handles.color = color; + GUI.enabled = enabled; + } + + private float SizeHandle(Vector3 localPos, Vector3 localPullDir, Matrix4x4 matrix) + { + bool changed = GUI.changed; + GUI.changed = false; + + Vector3 rhs = matrix.MultiplyVector(localPullDir); + Vector3 position = matrix.MultiplyPoint(localPos); + float handleSize = HandleUtility.GetHandleSize(position); + + Color color = Handles.color; + float angle = Mathf.Cos(0.7853982f); + + float dot; + if (Camera.current.orthographic) + dot = Vector3.Dot(-Camera.current.transform.forward, rhs); + else + dot = Vector3.Dot((Camera.current.transform.position - position).normalized, rhs); + + if (dot < -angle) + Handles.color = new Color(Handles.color.r, Handles.color.g, Handles.color.b, Handles.color.a * 0.2f); + + Vector3 point = Handles.Slider(position, rhs, handleSize * 0.03f, new Handles.DrawCapFunction(Handles.DotCap), 0f); + + float result = 0f; + if (GUI.changed) + result = HandleUtility.PointOnLineParameter(point, position, rhs); + + GUI.changed |= changed; + Handles.color = color; + + return result; + } + } + + public enum AxisOrientation + { + XAxis = 0, + YAxis = 1, + ZAxis = 2 + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CapsuleColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CapsuleColliderEditor.cs.meta new file mode 100644 index 00000000..f1ab81af --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CapsuleColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c1dcc8846c486e14cb8db81f231d4f59 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterControllerEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterControllerEditor.cs new file mode 100644 index 00000000..6caab9a4 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterControllerEditor.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(CharacterController), true)] + public class CharacterControllerEditor : InspectorEditor + { + private int controlID = -1; + + private Color colliderHandleColor = new Color(145f, 244f, 139f, 210f) / 255f; + private Color colliderHandleColorDisabled = new Color(84f, 200f, 77f, 140f) / 255f; + + protected override void RefreshFields() + { + Type type = typeof(CharacterController); + if (Instances == null || Instances.Length == 0) + return; + + SerializedObject so = new SerializedObject(Instances.Cast<UnityEngine.Object>().ToArray()); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("slopeLimit"), + new DescriptorAttribute("Slope Limit", "The character controllers slope limit in degrees.", "http://docs.unity3d.com/ScriptReference/CharacterController-slopeLimit.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("stepOffset"), + new DescriptorAttribute("Step Offset", "The character controllers step offset in meters.", "http://docs.unity3d.com/ScriptReference/CharacterController-stepOffset.html"))); + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_SkinWidth"), + new DescriptorAttribute("Skin Width", "The thickness of the interpenetration of this capsule.", ""))); + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_MinMoveDistance"), + new DescriptorAttribute("Min Move Distance", "The smallest distance required for the character to move.", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("center"), + new DescriptorAttribute("Center", "The center of the character's capsule relative to the transform's position.", "http://docs.unity3d.com/ScriptReference/CharacterController-center.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("radius"), + new DescriptorAttribute("Radius", "The radius of the character's capsule.", "http://docs.unity3d.com/ScriptReference/CharacterController-radius.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("height"), + new DescriptorAttribute("Height", "The height of the character's capsule.", "http://docs.unity3d.com/ScriptReference/CharacterController-height.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("detectCollisions"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Detect Collisions", "Determines whether other rigidbodies or character controllers collide with this character controller (by default this is always enabled).", "http://docs.unity3d.com/ScriptReference/CharacterController-detectCollisions.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("isGrounded"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Is Grounded", "Was the CharacterController touching the ground during the last move?", "http://docs.unity3d.com/ScriptReference/CharacterController-isGrounded.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("collisionFlags"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Collision Flags", "What part of the capsule collided with the environment during the last CharacterController.Move call.", "http://docs.unity3d.com/ScriptReference/CharacterController-collisionFlags.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("velocity"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Velocity", "The current relative velocity of the Character (see notes).", "http://docs.unity3d.com/ScriptReference/CharacterController-velocity.html"))); + } + + protected override void OnSceneGUI() + { + bool flag = GUIUtility.hotControl == controlID; + + CharacterController controller = (CharacterController)target; + Color color = Handles.color; + + if (controller.enabled) + Handles.color = colliderHandleColor; + else + Handles.color = colliderHandleColorDisabled; + + bool enabled = GUI.enabled; + if (!Event.current.shift && !flag) + { + GUI.enabled = false; + Handles.color = new Color(1f, 0f, 0f, 0.001f); + } + + float height = controller.height * controller.transform.lossyScale.y; + float radius = controller.radius * Mathf.Max(controller.transform.lossyScale.x, controller.transform.lossyScale.z); + + height = Mathf.Max(height, radius * 2f); + + Matrix4x4 matrix = Matrix4x4.TRS(controller.transform.TransformPoint(controller.center), Quaternion.identity, Vector3.one); + Vector3 localPos = (Vector3.up * height) * 0.5f; + + float size = SizeHandle(localPos, Vector3.up, matrix, true); + if (!GUI.changed) + size = SizeHandle(-localPos, Vector3.down, matrix, true); + + size = SizeHandle((Vector3)(Vector3.left * radius), Vector3.left, matrix, true); + if (!GUI.changed) + size = SizeHandle((Vector3)(-Vector3.left * radius), -Vector3.left, matrix, true); + + if (!GUI.changed) + size = SizeHandle((Vector3)(Vector3.forward * radius), Vector3.forward, matrix, true); + + if (!GUI.changed) + size = SizeHandle((Vector3)(-Vector3.forward * radius), -Vector3.forward, matrix, true); + + if (GUI.changed) + { + Undo.RecordObject(controller, "Character Controller Resize"); + + controller.radius += size / (radius / controller.radius); + controller.height += size / (height / controller.height); + + controller.radius = Mathf.Max(controller.radius, 1E-05f); + controller.height = Mathf.Max(controller.height, 1E-05f); + } + + int hotControl = GUIUtility.hotControl; + if ((hotControl != GUIUtility.hotControl) && (GUIUtility.hotControl != 0)) + controlID = GUIUtility.hotControl; + + Handles.color = color; + GUI.enabled = enabled; + } + + private static float SizeHandle(Vector3 localPos, Vector3 localPullDir, Matrix4x4 matrix, bool isEdgeHandle) + { + Vector3 rhs = matrix.MultiplyVector(localPullDir); + Vector3 position = matrix.MultiplyPoint(localPos); + float handleSize = HandleUtility.GetHandleSize(position); + bool changed = GUI.changed; + GUI.changed = false; + Color color = Handles.color; + + float edge = 0f; + if (isEdgeHandle) + edge = Mathf.Cos(0.7853982f); + + float dot; + + if (Camera.current.orthographic) + dot = Vector3.Dot(-Camera.current.transform.forward, rhs); + else + { + Vector3 vector4 = Camera.current.transform.position - position; + dot = Vector3.Dot(vector4.normalized, rhs); + } + + if (dot < -edge) + Handles.color = new Color(Handles.color.r, Handles.color.g, Handles.color.b, Handles.color.a * 0.2f); + + Vector3 point = Handles.Slider(position, rhs, handleSize * 0.03f, new Handles.DrawCapFunction(Handles.DotCap), 0f); + + float distance = 0f; + if (GUI.changed) + distance = HandleUtility.PointOnLineParameter(point, position, rhs); + + GUI.changed |= changed; + Handles.color = color; + return distance; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterControllerEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterControllerEditor.cs.meta new file mode 100644 index 00000000..3a6a95fb --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterControllerEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fc3a1df54ad5cf4a998c183ab2986a4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterJointEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterJointEditor.cs new file mode 100644 index 00000000..3cf6ad10 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterJointEditor.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(CharacterJoint), true)] + public class CharacterJointEditor : JointEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + + Type type = typeof(CharacterJoint); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("swingAxis"), + new DescriptorAttribute("Swing Axis", "The secondary axis around which the joint can rotate.", "http://docs.unity3d.com/ScriptReference/CharacterJoint-swingAxis.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("lowTwistLimit"), new ExpandableAttribute(), + new DescriptorAttribute("Low Twist Limit", "The lower limit around the primary axis of the character joint.", "http://docs.unity3d.com/ScriptReference/CharacterJoint-lowTwistLimit.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("highTwistLimit"), new ExpandableAttribute(), + new DescriptorAttribute("High Twist Limit", "The upper limit around the primary axis of the character joint.", "http://docs.unity3d.com/ScriptReference/CharacterJoint-highTwistLimit.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("swing1Limit"), new ExpandableAttribute(), + new DescriptorAttribute("Swing Limit 1", "The limit around the primary axis of the character joint.", "http://docs.unity3d.com/ScriptReference/CharacterJoint-swing1Limit.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("swing2Limit"), new ExpandableAttribute(), + new DescriptorAttribute("Swing Limit 2", "The limit around the primary axis of the character joint.", "http://docs.unity3d.com/ScriptReference/CharacterJoint-swing2Limit.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterJointEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterJointEditor.cs.meta new file mode 100644 index 00000000..625f6dd4 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/CharacterJointEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f8b73519c149ad479e14abd44c0a416 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothEditor.cs new file mode 100644 index 00000000..4935a3a3 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothEditor.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + //[CustomEditor(typeof(Cloth), true)] + public class ClothEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Cloth); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("bendingStiffness"), + new DescriptorAttribute("Bending Stiffness", "Is the collider a trigger?", "http://docs.unity3d.com/ScriptReference/Collider-isTrigger.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("stretchingStiffness"), + new DescriptorAttribute("Stretching Stiffness", "", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("damping"), + new DescriptorAttribute("Damping", "", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("thickness"), + new DescriptorAttribute("Thickness", "", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useGravity"), + new DescriptorAttribute("Use Gravity", "", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("selfCollision"), + new DescriptorAttribute("Self Collision", "", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("externalAcceleration"), + new DescriptorAttribute("External Acceleration", "", ""))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("randomAcceleration"), + new DescriptorAttribute("Random Acceleration", "", ""))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothEditor.cs.meta new file mode 100644 index 00000000..2d97e4f0 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea3b75a7a50b8fd4285dc88b3a1b41f6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothRendererEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothRendererEditor.cs new file mode 100644 index 00000000..a5c4f0a1 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothRendererEditor.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +#if UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(ClothRenderer), true)] + public class ClothRendererEditor : RendererEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(ClothRenderer); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("pauseWhenNotVisible"), + new DescriptorAttribute("Pause When Not Visible", "Should the cloth simulation be paused when the ClothRenderer is not visible?", "http://docs.unity3d.com/ScriptReference/ClothRenderer-pauseWhenNotVisible.html"))); + } + } +} +#endif
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothRendererEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothRendererEditor.cs.meta new file mode 100644 index 00000000..80e14e84 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ClothRendererEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd91353f928567e45b9f95d914376353 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ColliderEditor.cs new file mode 100644 index 00000000..93dad847 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ColliderEditor.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + public abstract class ColliderEditor : InspectorEditor + { + public static Color ColliderHandleColor = new Color(0.57f, 0.96f, 0.54f, 0.82f); + public static Color ColliderHandleColorDisabled = new Color(0.33f, 0.78f, 0.3f, 0.55f); + + protected override void RefreshFields() + { + Type type = typeof(Collider); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("isTrigger"), + new DescriptorAttribute("Is Trigger", "Is the collider a trigger?", "http://docs.unity3d.com/ScriptReference/Collider-isTrigger.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sharedMaterial"), new InspectAttribute(new InspectAttribute.InspectDelegate(IsNotTrigger)), + new DescriptorAttribute("Physic Material", "The shared physic material of this collider.", "http://docs.unity3d.com/ScriptReference/Collider-sharedMaterial.html"))); + } + + private bool IsNotTrigger() + { + for (int i = 0; i < Instances.Length; i++) + { + Collider collider = Instances[i] as Collider; + + if (!collider.isTrigger) + return true; + } + + return false; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ColliderEditor.cs.meta new file mode 100644 index 00000000..06c6b96c --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 164d1d8ffdf5b86498399c42eac1eec2 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ConstantForceEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ConstantForceEditor.cs new file mode 100644 index 00000000..aad051da --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ConstantForceEditor.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(ConstantForce), true)] + public class ConstantForceEditor : JointEditor + { + protected override void RefreshFields() + { + Type type = typeof(ConstantForce); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("force"), + new DescriptorAttribute("Force", "The force applied to the rigidbody every frame.", "http://docs.unity3d.com/ScriptReference/ConstantForce-force.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("relativeForce"), + new DescriptorAttribute("Relative Force", "The force - relative to the rigid bodies coordinate system - applied every frame.", "http://docs.unity3d.com/ScriptReference/ConstantForce-relativeForce.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("torque"), + new DescriptorAttribute("Torque", "The torque applied to the rigidbody every frame.", "http://docs.unity3d.com/ScriptReference/ConstantForce-torque.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("relativeTorque"), + new DescriptorAttribute("Relative Torque", "The torque - relative to the rigid bodies coordinate system - applied every frame.", "http://docs.unity3d.com/ScriptReference/ConstantForce-relativeTorque.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ConstantForceEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ConstantForceEditor.cs.meta new file mode 100644 index 00000000..6b847cce --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/ConstantForceEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67132d5b321335c45ade534dfc5b466e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/FixedJointEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/FixedJointEditor.cs new file mode 100644 index 00000000..753a5da7 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/FixedJointEditor.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(FixedJoint), true)] + public class FixedJointEditor : JointEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/FixedJointEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/FixedJointEditor.cs.meta new file mode 100644 index 00000000..3b953fd9 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/FixedJointEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d710a6940dd6a8469c34b2076d239f6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJoint2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJoint2DEditor.cs new file mode 100644 index 00000000..eb23d53f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJoint2DEditor.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(HingeJoint2D), true)] + public class HingeJoint2DEditor : AnchoredJoint2DEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(HingeJoint2D); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("useLimits"), + new DescriptorAttribute("Use Limit", "Should limits be placed on the range of rotation?", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-useLimits.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("limits"), new ExpandableAttribute(), new InspectAttribute(new InspectAttribute.InspectDelegate(UsesLimits)), + new DescriptorAttribute("Limits", "Limit of angular rotation on the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-limits.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useMotor"), + new DescriptorAttribute("Use Motor", "Should the joint be rotated automatically by a motor torque?", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-useMotor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("motor"), new ExpandableAttribute(), new InspectAttribute(new InspectAttribute.InspectDelegate(UsesMotor)), + new DescriptorAttribute("Motor", "Parameters for the motor force applied to the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-motor.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("jointAngle"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Angle", "The current joint angle with respect to the reference angle.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-jointAngle.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("jointSpeed"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Speed", "The current joint speed.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-jointSpeed.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("limitState"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Limit State", "Gets the state of the joint limit.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-limitState.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("referenceAngle"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Reference Angle", "The angle referenced between the two bodies used as the constraint for the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-referenceAngle.html"))); + } + + private bool UsesLimits() + { + foreach (object instance in Instances) + { + HingeJoint2D hinge = instance as HingeJoint2D; + if (hinge == null) + continue; + + if (hinge.useLimits) + return true; + } + + return false; + } + + private bool UsesMotor() + { + foreach (object instance in Instances) + { + HingeJoint2D hinge = instance as HingeJoint2D; + if (hinge == null) + continue; + + if (hinge.useMotor) + return true; + } + + return false; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJoint2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJoint2DEditor.cs.meta new file mode 100644 index 00000000..799d168d --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJoint2DEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a080a881e1bc867428d443b192d7c91a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJointEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJointEditor.cs new file mode 100644 index 00000000..a1c47ee5 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJointEditor.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(HingeJoint), true)] + public class HingeJointEditor : JointEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(HingeJoint); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("useLimits"), + new DescriptorAttribute("Use Limits", "Limit of angular rotation on the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-limits.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("limits"), new ExpandableAttribute(), new InspectAttribute(new InspectAttribute.InspectDelegate(UsesLimits)), + new DescriptorAttribute("Limits", "Should the joint be rotated automatically by a motor torque?", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-useMotor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useMotor"), + new DescriptorAttribute("Use Motor", "Parameters for the motor force applied to the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-motor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("motor"), new ExpandableAttribute(), new InspectAttribute(new InspectAttribute.InspectDelegate(UsesMotor)), + new DescriptorAttribute("Motor", "Parameters for the motor force applied to the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-motor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useSpring"), + new DescriptorAttribute("Use Spring", "Parameters for the motor force applied to the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-motor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("spring"), new ExpandableAttribute(), new InspectAttribute(new InspectAttribute.InspectDelegate(UsesSpring)), + new DescriptorAttribute("Spring", "Parameters for the motor force applied to the joint.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-motor.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("angle"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Angle", "Should limits be placed on the range of rotation?", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-useLimits.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("velocity"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Velocity", "The current joint angle with respect to the reference angle.", "http://docs.unity3d.com/ScriptReference/HingeJoint2D-jointAngle.html"))); + } + + private bool UsesLimits() + { + foreach (object instance in Instances) + { + HingeJoint hinge = instance as HingeJoint; + if (hinge == null) + continue; + + if (hinge.useLimits) + return true; + } + + return false; + } + + private bool UsesMotor() + { + foreach (object instance in Instances) + { + HingeJoint hinge = instance as HingeJoint; + if (hinge == null) + continue; + + if (hinge.useMotor) + return true; + } + + return false; + } + + private bool UsesSpring() + { + foreach (object instance in Instances) + { + HingeJoint hinge = instance as HingeJoint; + if (hinge == null) + continue; + + if (hinge.useSpring) + return true; + } + + return false; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJointEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJointEditor.cs.meta new file mode 100644 index 00000000..38d52e78 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/HingeJointEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 908add4326cc5094aad042216c8ffe74 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Joint2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Joint2DEditor.cs new file mode 100644 index 00000000..d0df6821 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Joint2DEditor.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + public class Joint2DEditor : InspectorEditor + { + public static GUIStyle anchor = null; + public static GUIStyle anchorActive = null; + public static GUIStyle connectedAnchor = null; + public static GUIStyle connectedAnchorActive = null; + + protected override void RefreshFields() + { + Type type = typeof(Joint2D); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("enableCollision"), + new DescriptorAttribute("Enable Collision", "Should rigid bodies connected with this joint collide?", "http://docs.unity3d.com/ScriptReference/Joint2D-enableCollision.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("connectedBody"), + new DescriptorAttribute("Connected Body", "The Rigidbody2D object to which the other end of the joint is attached (ie, the object without the joint component).", "http://docs.unity3d.com/ScriptReference/Joint2D-connectedBody.html"))); + } + + protected bool HandleAnchor(ref Vector3 position, bool isConnectedAnchor) + { + if (anchor == null) + { + anchor = "U2D.pivotDot"; + anchorActive = "U2D.pivotDotActive"; + connectedAnchor = "U2D.dragDot"; + connectedAnchorActive = "U2D.dragDotActive"; + } + + Handles.DrawCapFunction drawFunc = (!isConnectedAnchor) ? new Handles.DrawCapFunction(AnchorCap) : new Handles.DrawCapFunction(ConnectedAnchorCap); + int id = this.target.GetInstanceID() + ((!isConnectedAnchor) ? 0 : 1); + EditorGUI.BeginChangeCheck(); + position = Handles.Slider2D(id, position, Vector3.back, Vector3.right, Vector3.up, 0f, drawFunc, Vector2.zero); + return EditorGUI.EndChangeCheck(); + } + + public static void AnchorCap(int controlID, Vector3 position, Quaternion rotation, float size) + { + if (controlID == GUIUtility.keyboardControl) + DrawCap(controlID, position, anchorActive); + else + DrawCap(controlID, position, anchor); + } + + public static void ConnectedAnchorCap(int controlID, Vector3 position, Quaternion rotation, float size) + { + if (controlID == GUIUtility.keyboardControl) + DrawCap(controlID, position, connectedAnchorActive); + + else + DrawCap(controlID, position, connectedAnchor); + } + + private static void DrawCap(int controlID, Vector3 position, GUIStyle guiStyle) + { + if (Event.current.type != EventType.Repaint) + { + return; + } + Handles.BeginGUI(); + position = HandleUtility.WorldToGUIPoint(position); + float fixedWidth = guiStyle.fixedWidth; + float fixedHeight = guiStyle.fixedHeight; + Rect position2 = new Rect(position.x - fixedWidth / 2f, position.y - fixedHeight / 2f, fixedWidth, fixedHeight); + guiStyle.Draw(position2, GUIContent.none, controlID); + Handles.EndGUI(); + } + + public static void DrawAALine(Vector3 start, Vector3 end) + { + Handles.DrawAAPolyLine(new Vector3[] { start, end }); + } + + public static void DrawDistanceGizmo(Vector3 anchor, Vector3 connectedAnchor, float distance) + { + Vector3 normalized = (anchor - connectedAnchor).normalized; + Vector3 vector = connectedAnchor + normalized * distance; + Vector3 vector2 = Vector3.Cross(normalized, Vector3.forward); + vector2 *= HandleUtility.GetHandleSize(connectedAnchor) * 0.16f; + Handles.color = Color.green; + DrawAALine(anchor, vector); + DrawAALine(connectedAnchor + vector2, connectedAnchor - vector2); + DrawAALine(vector + vector2, vector - vector2); + } + + private static Matrix4x4 GetAnchorSpaceMatrix(Transform transform) + { + return Matrix4x4.TRS(transform.position, Quaternion.Euler(0f, 0f, transform.rotation.eulerAngles.z), transform.lossyScale); + } + + protected static Vector3 TransformPoint(Transform transform, Vector3 position) + { + return GetAnchorSpaceMatrix(transform).MultiplyPoint(position); + } + + protected static Vector3 InverseTransformPoint(Transform transform, Vector3 position) + { + return GetAnchorSpaceMatrix(transform).inverse.MultiplyPoint(position); + } + + protected static Vector3 SnapToSprite(SpriteRenderer spriteRenderer, Vector3 position, float snapDistance) + { + if (spriteRenderer == null) + return position; + + snapDistance = HandleUtility.GetHandleSize(position) * snapDistance; + float num = spriteRenderer.sprite.bounds.size.x / 2f; + float num2 = spriteRenderer.sprite.bounds.size.y / 2f; + + Vector2[] array = new Vector2[] + { + new Vector2(-num, -num2), + new Vector2(0f, -num2), + new Vector2(num, -num2), + new Vector2(-num, 0f), + new Vector2(0f, 0f), + new Vector2(num, 0f), + new Vector2(-num, num2), + new Vector2(0f, num2), + new Vector2(num, num2) + }; + + Vector2[] array2 = array; + for (int i = 0; i < array2.Length; i++) + { + Vector2 v = array2[i]; + Vector3 vector = spriteRenderer.transform.TransformPoint(v); + if (Vector2.Distance(position, vector) <= snapDistance) + return vector; + } + + return position; + } + + protected static Vector3 SnapToPoint(Vector3 position, Vector3 snapPosition, float snapDistance) + { + snapDistance = HandleUtility.GetHandleSize(position) * snapDistance; + return (Vector3.Distance(position, snapPosition) > snapDistance) ? position : snapPosition; + } + + protected static Vector2 RotateVector2(Vector2 direction, float angle) + { + float f = 0.0174532924f * -angle; + float cos = Mathf.Cos(f); + float sin = Mathf.Sin(f); + float x = direction.x * cos - direction.y * sin; + float y = direction.x * sin + direction.y * cos; + return new Vector2(x, y); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Joint2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Joint2DEditor.cs.meta new file mode 100644 index 00000000..8b26bc9f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Joint2DEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83502c096c3da4e41a24f0c5dd3245e9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/JointEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/JointEditor.cs new file mode 100644 index 00000000..e86c9518 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/JointEditor.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + //[CustomEditor(typeof(Joint), true)] + public class JointEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Joint); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("connectedBody"), + new DescriptorAttribute("Connected Body", "A reference to another rigidbody this joint connects to.", "http://docs.unity3d.com/ScriptReference/Joint-connectedBody.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("anchor"), + new DescriptorAttribute("Anchor", "The Position of the anchor around which the joints motion is constrained.", "http://docs.unity3d.com/ScriptReference/Joint-anchor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("axis"), + new DescriptorAttribute("Axis", "The Direction of the axis around which the body is constrained.", "http://docs.unity3d.com/ScriptReference/Joint-axis.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("autoConfigureConnectedAnchor"), + new DescriptorAttribute("Auto Configure Anchor", "Should the connectedAnchor be calculated automatically?", "http://docs.unity3d.com/ScriptReference/Joint-autoConfigureConnectedAnchor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("connectedAnchor"), + new DescriptorAttribute("Connected Anchor", "Position of the anchor relative to the connected Rigidbody.", "http://docs.unity3d.com/ScriptReference/Joint-connectedAnchor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("breakForce"), + new DescriptorAttribute("Break Force", "The force that needs to be applied for this joint to break.", "http://docs.unity3d.com/ScriptReference/Joint-breakForce.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("breakTorque"), + new DescriptorAttribute("Break Torque", "The torque that needs to be applied for this joint to break.", "http://docs.unity3d.com/ScriptReference/Joint-breakTorque.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("enableCollision"), + new DescriptorAttribute("Enable Collision", "Enable collision between bodies connected with the joint.", "http://docs.unity3d.com/ScriptReference/Joint-enableCollision.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/JointEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/JointEditor.cs.meta new file mode 100644 index 00000000..410ccaa6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/JointEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4194aa8c25a02c48951516e3e30ac9a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/LightEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/LightEditor.cs new file mode 100644 index 00000000..b4efe4a2 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/LightEditor.cs @@ -0,0 +1,351 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Light), true)] + public class LightEditor : InspectorEditor + { + private static Color disabledLightColor = new Color(0.5f, 0.45f, 0.2f, 0.5f); + private static Color lightColor = new Color(0.95f, 0.95f, 0.5f, 0.5f); + + private SerializedProperty m_Lightmapping; + + protected override void RefreshFields() + { + Type type = typeof(Light); + if (Instances == null || Instances.Length == 0) + return; + + SerializedObject so = new SerializedObject(Instances.Cast<UnityEngine.Object>().ToArray()); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("type"), + new HelpAttribute(new HelpAttribute.HelpDelegate(HelpLightType)), + new DescriptorAttribute("Type", "The type of the light.", "http://docs.unity3d.com/ScriptReference/Light-type.html"))); + + m_Lightmapping = so.FindProperty("m_Lightmapping"); + fields.Add(new InspectorField(type, Instances, m_Lightmapping, + new InspectAttribute(new InspectAttribute.InspectDelegate(IsNotArea)), + new RestrictAttribute(new RestrictAttribute.RestrictDelegate(Baking)), + new DescriptorAttribute("Baking", "How the light is handled versus lightmaps."))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("range"), + new InspectAttribute(new InspectAttribute.InspectDelegate(IsPointOrSpot)), + new DescriptorAttribute("Range", "The range of the light.", "http://docs.unity3d.com/ScriptReference/Light-range.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("spotAngle"), + new InspectAttribute(new InspectAttribute.InspectDelegate(IsSpot)), + new DescriptorAttribute("Spot Angle", "The angle of the light's spotlight cone in degrees.", "http://docs.unity3d.com/ScriptReference/Light-spotAngle.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("areaSize"), + new InspectAttribute(new InspectAttribute.InspectDelegate(IsArea)), + new DescriptorAttribute("Area Size", "The size of the area light. Editor only.", "http://docs.unity3d.com/ScriptReference/Light-areaSize.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("color"), + new DescriptorAttribute("Color", "The color of the light.", "http://docs.unity3d.com/ScriptReference/Light-color.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("intensity"), + new RangeValueAttribute(0f, 8f), + new DescriptorAttribute("Intensity", "The Intensity of a light is multiplied with the Light color.", "http://docs.unity3d.com/ScriptReference/Light-intensity.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("bounceIntensity"), + new RangeValueAttribute(0f, 8f), new HelpAttribute(new HelpAttribute.HelpDelegate(HelpBouncedGI)), + new DescriptorAttribute("Bounce Intensity", "The multiplier that defines the strength of the bounce lighting.", "http://docs.unity3d.com/ScriptReference/Light-bounceIntensity.html"))); + + + + //Acts like a group + fields.Add(new InspectorField(type, Instances, type.GetProperty("shadows"), + new InspectAttribute(new InspectAttribute.InspectDelegate(IsNotArea)), + new HelpAttribute(new HelpAttribute.HelpDelegate(HelpShadowPro)), + new DescriptorAttribute("Shadow Type", "How this light casts shadows", "http://docs.unity3d.com/ScriptReference/Light-shadows.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("shadowStrength"), + new InspectAttribute(new InspectAttribute.InspectDelegate(HasShadow)), + new DescriptorAttribute("Strength", "How this light casts shadows.", "http://docs.unity3d.com/ScriptReference/Light-shadowStrength.html"))); + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_Shadows.m_Resolution"), + new InspectAttribute(new InspectAttribute.InspectDelegate(HasShadow)), + new DescriptorAttribute("Resolution", "The shadow's resolution."))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("shadowBias"), + new InspectAttribute(new InspectAttribute.InspectDelegate(HasShadow)), + new DescriptorAttribute("Bias", "Shadow mapping bias.", "http://docs.unity3d.com/ScriptReference/Light-shadowBias.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("shadowNormalBias"), + new InspectAttribute(new InspectAttribute.InspectDelegate(HasShadow)), + new DescriptorAttribute("Normal Bias", "Shadow mapping normal-based bias.", "http://docs.unity3d.com/ScriptReference/Light-shadowNormalBias.html"))); + + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_DrawHalo"), + new DescriptorAttribute("Draw Halo", "Draw a halo around the light. Now work with the Halo class."))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("cookie"), + new DescriptorAttribute("Cookie", "The cookie texture projected by the light.", "http://docs.unity3d.com/ScriptReference/Light-cookie.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("cookieSize"), + new InspectAttribute(new InspectAttribute.InspectDelegate(IsDirectional)), + new DescriptorAttribute("Cookie Size", "The size of a directional light's cookie.", "http://docs.unity3d.com/ScriptReference/Light-cookieSize.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("flare"), + new DescriptorAttribute("Flare", "The flare asset to use for this light.", "http://docs.unity3d.com/ScriptReference/Light-flare.html"))); + + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_RenderMode"), + new DescriptorAttribute("Render Mode", "The rendering path for the lights."))); + + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_CullingMask"), + new HelpAttribute(new HelpAttribute.HelpDelegate(HelpSceneLighting)), + new DescriptorAttribute("Culling Mask", "The object that are affected or ignored by the light."))); + } + + private IList Baking() + { + return new DescriptorPair[] { new DescriptorPair(4, "Realtime", ""), new DescriptorPair(2, "Baked", ""), new DescriptorPair(1, "Mixed", "") }; + } + + public bool IsPointOrSpot() + { + if (IsPoint() || IsSpot()) + return true; + + return false; + } + + public bool IsPoint() + { + return ((Light)Instances[0]).type == LightType.Point; + } + + public bool IsSpot() + { + return ((Light)Instances[0]).type == LightType.Spot; + } + + public bool IsDirectional() + { + return ((Light)Instances[0]).type == LightType.Directional; + } + + public bool IsNotArea() + { + return !IsArea(); + } + + public bool IsArea() + { + return ((Light)Instances[0]).type == LightType.Area; + } + + public bool HasShadow() + { + Light light = (Light)Instances[0]; + return IsNotArea() && (light.shadows == LightShadows.Hard || light.shadows == LightShadows.Soft); + } + + public bool IsSoft() + { + return ((Light)Instances[0]).shadows == LightShadows.Soft; + } + + public bool DoesAnyCameraUseDeferred() + { + Camera[] allCameras = Camera.allCameras; + for (int i = 0; i < allCameras.Length; i++) + if (allCameras[i].actualRenderingPath == RenderingPath.DeferredLighting) + return true; + + return false; + } + + public HelpAttribute HelpBouncedGI() + { + if (((Light)Instances[0]).bounceIntensity > 0 && IsPointOrSpot() && m_Lightmapping.intValue != 2) + return new HelpAttribute(HelpType.Warning, "Currently realtime indirect bounce light shadowing for spot and point lights is not supported."); + + return null; + } + + public HelpAttribute HelpShadowPro() + { + if (HasShadow() && IsPointOrSpot() && !UnityEditorInternal.InternalEditorUtility.HasPro()) + return new HelpAttribute(HelpType.Warning, "Real time shadow for point and spot lights requires Unity Pro."); + + return null; + } + + public HelpAttribute HelpLightType() + { + if (IsArea() && !UnityEditorInternal.InternalEditorUtility.HasPro()) + return new HelpAttribute(HelpType.Warning, "Area lights require Unity Pro."); + + return null; + } + + public HelpAttribute HelpSceneLighting() + { + if (SceneView.currentDrawingSceneView != null && !SceneView.currentDrawingSceneView.m_SceneLighting) + return new HelpAttribute(HelpType.Warning, "One of your scene views has lighting disable, please keep this in mind when editing lighting."); + + return null; + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + if (Event.current.type == EventType.Used) + return; + + Light light = (Light)target; + Color color = Handles.color; + + if (light.enabled) + Handles.color = lightColor; + else + Handles.color = disabledLightColor; + + float range = light.range; + switch (light.type) + { + case LightType.Spot: + { + Color color2 = Handles.color; + color2.a = Mathf.Clamp01(color.a * 2f); + Handles.color = color2; + Vector2 angleAndRange = new Vector2(light.spotAngle, light.range); + angleAndRange = ConeHandle(light.transform.rotation, light.transform.position, angleAndRange, 1f, 1f, true); + if (GUI.changed) + { + Undo.RecordObject(light, "Adjust Spot Light"); + light.spotAngle = angleAndRange.x; + light.range = Mathf.Max(angleAndRange.y, 0.01f); + } + + break; + } + + case LightType.Point: + { + range = Handles.RadiusHandle(Quaternion.identity, light.transform.position, range, true); + if (GUI.changed) + { + Undo.RecordObject(light, "Adjust Point Light"); + light.range = range; + } + + break; + } + + case LightType.Area: + { + EditorGUI.BeginChangeCheck(); + Vector2 vector2 = RectHandles(light.transform.rotation, light.transform.position, light.areaSize); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(light, "Adjust Area Light"); + light.areaSize = vector2; + } + + break; + } + } + Handles.color = color; + } + + private Vector2 ConeHandle(Quaternion rotation, Vector3 position, Vector2 angleAndRange, float angleScale, float rangeScale, bool handlesOnly) + { + float x = angleAndRange.x; + float y = angleAndRange.y; + float r = y * rangeScale; + + Vector3 forward = rotation * Vector3.forward; + Vector3 up = rotation * Vector3.up; + Vector3 right = rotation * Vector3.right; + + bool changed = GUI.changed; + GUI.changed = false; + r = SizeSlider(position, forward, r); + if (GUI.changed) + y = Mathf.Max(0f, r / rangeScale); + + GUI.changed |= changed; + changed = GUI.changed; + GUI.changed = false; + + float angle = (r * Mathf.Tan((0.01745329f * x) / 2f)) * angleScale; + angle = SizeSlider(position + (forward * r), up, angle); + angle = SizeSlider(position + (forward * r), -up, angle); + angle = SizeSlider(position + (forward * r), right, angle); + angle = SizeSlider(position + (forward * r), -right, angle); + + if (GUI.changed) + x = Mathf.Clamp((57.29578f * Mathf.Atan(angle / (r * angleScale))) * 2f, 0f, 179f); + + GUI.changed |= changed; + if (!handlesOnly) + { + Handles.DrawLine(position, (Vector3)((position + (forward * r)) + (up * angle))); + Handles.DrawLine(position, (Vector3)((position + (forward * r)) - (up * angle))); + Handles.DrawLine(position, (Vector3)((position + (forward * r)) + (right * angle))); + Handles.DrawLine(position, (Vector3)((position + (forward * r)) - (right * angle))); + Handles.DrawWireDisc(position + ((Vector3)(r * forward)), forward, angle); + } + + return new Vector2(x, y); + } + + private Vector2 RectHandles(Quaternion rotation, Vector3 position, Vector2 size) + { + Vector3 forward = (Vector3)(rotation * Vector3.forward); + Vector3 up = (Vector3)(rotation * Vector3.up); + Vector3 right = (Vector3)(rotation * Vector3.right); + + float radiusX = 0.5f * size.x; + float radiusY = 0.5f * size.y; + + Vector3 v1 = (position + (up * radiusY)) + (right * radiusX); + Vector3 v2 = (position - (up * radiusY)) + (right * radiusX); + Vector3 v3 = (position - (up * radiusY)) - (right * radiusX); + Vector3 v4 = (position + (up * radiusY)) - (right * radiusX); + + Handles.DrawLine(v1, v2); + Handles.DrawLine(v2, v3); + Handles.DrawLine(v3, v4); + Handles.DrawLine(v4, v1); + + Color color = Handles.color; + color.a = Mathf.Clamp01(color.a * 2f); + Handles.color = color; + + radiusY = SizeSlider(position, up, radiusY); + radiusY = SizeSlider(position, -up, radiusY); + radiusX = SizeSlider(position, right, radiusX); + radiusX = SizeSlider(position, -right, radiusX); + + if (((Tools.current != Tool.Move) && (Tools.current != Tool.Scale)) || Tools.pivotRotation != PivotRotation.Local) + Handles.DrawLine(position, position + forward); + + size.x = 2f * radiusX; + size.y = 2f * radiusY; + + return size; + } + + private float SizeSlider(Vector3 p, Vector3 direction, float radius) + { + Vector3 position = p + (direction * radius); + float handleSize = HandleUtility.GetHandleSize(position); + + bool changed = GUI.changed; + GUI.changed = false; + + position = Handles.Slider(position, direction, handleSize * 0.03f, new Handles.DrawCapFunction(Handles.DotCap), 0f); + + if (GUI.changed) + radius = Vector3.Dot(position - p, direction); + + GUI.changed |= changed; + return radius; + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/LightEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/LightEditor.cs.meta new file mode 100644 index 00000000..b6532a8e --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/LightEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eebe3cc40d780b84e8af810e11b0d210 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshColliderEditor.cs new file mode 100644 index 00000000..901a3d78 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshColliderEditor.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(MeshCollider), true)] + public class MeshColliderEditor : ColliderEditor + { + protected override void RefreshFields() + { + Type type = typeof(MeshCollider); + + base.RefreshFields(); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("convex"), + new DescriptorAttribute("Convex", "Use a convex collider from the mesh.", "http://docs.unity3d.com/ScriptReference/MeshCollider-convex.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sharedMesh"), new HelpAttribute(new HelpAttribute.HelpDelegate(HelpMesh)), + new DescriptorAttribute("Mesh", "The mesh object used for collision detection.", "http://docs.unity3d.com/ScriptReference/MeshCollider-sharedMesh.html"))); + } + + private HelpAttribute HelpMesh() + { + foreach (object instance in Instances) + { + MeshCollider collider = instance as MeshCollider; + + if (collider == null) + continue; + + if (collider.sharedMesh == null) + return new HelpAttribute(HelpType.Error, "The Mesh Collider requires a Mesh to work."); + } + + return null; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshColliderEditor.cs.meta new file mode 100644 index 00000000..dabc1f67 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 84ba51c5c587f614e8ebc91d7f72209c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshEditor.cs new file mode 100644 index 00000000..dbc63dc7 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshEditor.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Mesh), true)] + public class MeshEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Mesh); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("subMeshCount"), + new DescriptorAttribute("Sub Mesh Count", "The number of submeshes. Every material has a separate triangle list.", "http://docs.unity3d.com/ScriptReference/Mesh-subMeshCount.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("vertices"), + new DescriptorAttribute("Vertices", "Returns a copy of the vertex positions or assigns a new vertex positions array.", "http://docs.unity3d.com/ScriptReference/Mesh-vertices.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("triangles"), + new DescriptorAttribute("Triangles", "An array containing all triangles in the mesh.", "http://docs.unity3d.com/ScriptReference/Mesh-triangles.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("uv"), + new DescriptorAttribute("UV", "The base texture coordinates of the mesh.", "http://docs.unity3d.com/ScriptReference/Mesh-uv.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("uv2"), + new DescriptorAttribute("UV2", "The second texture coordinate set of the mesh, if present.", "http://docs.unity3d.com/ScriptReference/Mesh-uv2.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("uv3"), + new DescriptorAttribute("UV3", "The third texture coordinate set of the mesh, if present.", "http://docs.unity3d.com/ScriptReference/Mesh-uv3.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("uv4"), + new DescriptorAttribute("UV4", "The fourth texture coordinate set of the mesh, if present.", "http://docs.unity3d.com/ScriptReference/Mesh-uv4.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("boneWeights"), + new DescriptorAttribute("Bone Weight", "The bone weights of each vertex.", "http://docs.unity3d.com/ScriptReference/Mesh-boneWeights.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("colors"), + new DescriptorAttribute("Colors", "Vertex colors of the mesh.", "http://docs.unity3d.com/ScriptReference/Mesh-colors.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("normals"), + new DescriptorAttribute("Normals", "The normals of the mesh.", "http://docs.unity3d.com/ScriptReference/Mesh-normals.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("tangents"), + new DescriptorAttribute("Tangents", "The tangents of the mesh.", "http://docs.unity3d.com/ScriptReference/Mesh-tangents.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("bounds"), + new DescriptorAttribute("Bounds", "The bounding volume of the mesh.", "http://docs.unity3d.com/ScriptReference/Mesh-bounds.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshEditor.cs.meta new file mode 100644 index 00000000..5c0453c9 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01fd2f5ffcf96cb4fbea0525b8abac31 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshFilterEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshFilterEditor.cs new file mode 100644 index 00000000..b74e76a5 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshFilterEditor.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(MeshFilter), true)] + public class MeshFilterEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(MeshFilter); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("sharedMesh"), new ExpandableAttribute(), + new DescriptorAttribute("Mesh", "Returns the shared mesh of the mesh filter.", "http://docs.unity3d.com/ScriptReference/MeshFilter-sharedMesh.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshFilterEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshFilterEditor.cs.meta new file mode 100644 index 00000000..f65f8840 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshFilterEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d593b3a6858817e44a554bfc7b09e8bc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshRendererEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshRendererEditor.cs new file mode 100644 index 00000000..049ff62c --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshRendererEditor.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(MeshRenderer), true)] + public class MeshRendererEditor : RendererEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshRendererEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshRendererEditor.cs.meta new file mode 100644 index 00000000..9864e12f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/MeshRendererEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c5a0dded0d6c1d4891ba69e2a80bf19 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RendererEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RendererEditor.cs new file mode 100644 index 00000000..08c4ac1c --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RendererEditor.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + //[CustomEditor(typeof(Renderer), true)] + public class RendererEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Renderer); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("shadowCastingMode"), + new DescriptorAttribute("Cast Shadows", "Does this object cast shadows?", "http://docs.unity3d.com/ScriptReference/Renderer-shadowCastingMode.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("receiveShadows"), + new DescriptorAttribute("Receive Shadows", "Does this object receive shadows?", "http://docs.unity3d.com/ScriptReference/Renderer-receiveShadows.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useLightProbes"), + new DescriptorAttribute("Use Light Probes", "Use light probes for this Renderer.", "http://docs.unity3d.com/ScriptReference/Renderer-useLightProbes.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("probeAnchor"), new InspectAttribute(new InspectAttribute.InspectDelegate(IsUsingLightProbe)), + new DescriptorAttribute("Probes Anchor", "If set, Renderer will use this Transform's position to find the interpolated light probe.", "http://docs.unity3d.com/ScriptReference/Renderer-lightProbeAnchor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sharedMaterials"), + new DescriptorAttribute("Materials", "All the shared materials of this object.", "http://docs.unity3d.com/ScriptReference/Renderer-sharedMaterials.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("isPartOfStaticBatch"), + new DescriptorAttribute("Static Batched", "Has this renderer been statically batched with any other renderers?", "http://docs.unity3d.com/ScriptReference/Renderer-isPartOfStaticBatch.html"), new InspectAttribute(InspectorLevel.Debug))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("isVisible"), + new DescriptorAttribute("Is Visible", "Is this renderer visible in any camera? (Read Only)", "http://docs.unity3d.com/ScriptReference/Renderer-isVisible.html"), new InspectAttribute(InspectorLevel.Debug))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("lightmapIndex"), + new DescriptorAttribute("Lightmap Index", "The index of the lightmap applied to this renderer.", "http://docs.unity3d.com/ScriptReference/Renderer-lightmapIndex.html"), new InspectAttribute(InspectorLevel.Debug))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sortingLayerID"), + new DescriptorAttribute("Sorting Layer ID", "ID of the Renderer's sorting layer.", "http://docs.unity3d.com/ScriptReference/Renderer-sortingLayerID.html"), new InspectAttribute(InspectorLevel.Debug))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sortingLayerName"), + new DescriptorAttribute("Sorting Layer Name", "Name of the Renderer's sorting layer.", "http://docs.unity3d.com/ScriptReference/Renderer-sortingLayerName.html"), new InspectAttribute(InspectorLevel.Debug))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sortingOrder"), + new DescriptorAttribute("Sorting Order", "Renderer's order within a sorting layer.", "http://docs.unity3d.com/ScriptReference/Renderer-sortingOrder.html"), new InspectAttribute(InspectorLevel.Debug))); + } + + private bool IsUsingLightProbe() + { + for (int i = 0; i < Instances.Length; i++) + if (!((Renderer)Instances[i]).useLightProbes) + return false; + + return true; + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RendererEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RendererEditor.cs.meta new file mode 100644 index 00000000..f2217be6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RendererEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce4ec5cace74bb249aca3027a18d293a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Rigidbody2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Rigidbody2DEditor.cs new file mode 100644 index 00000000..18a5c850 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Rigidbody2DEditor.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Rigidbody2D), true)] + public class Rigidbody2DEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Rigidbody2D); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("mass"), + new DescriptorAttribute("Mass", "The mass of the rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-mass.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("drag"), + new DescriptorAttribute("Linear Drag", "Coefficient of drag.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-drag.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("angularDrag"), + new DescriptorAttribute("Angular Drag", "Coefficient of angular drag.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-angularDrag.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("gravityScale"), + new DescriptorAttribute("Gravity Scale", "The degree to which this object is affected by gravity.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-gravityScale.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("isKinematic"), + new DescriptorAttribute("Is Kinematic", "Should this rigidbody be taken out of physics control?", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-isKinematic.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("interpolation"), + new DescriptorAttribute("Interpolation", "Physics interpolation used between updates.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-interpolation.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sleepMode"), + new DescriptorAttribute("Sleep Mode", "The sleep state that the rigidbody will initially be in.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-sleepMode.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("collisionDetectionMode"), + new DescriptorAttribute("Collision Detection", "The method used by the physics engine to check if two objects have collided.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-collisionDetectionMode.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("constraints"), + new DescriptorAttribute("Constraints", "Controls which degrees of freedom are allowed for the simulation of this Rigidbody2D.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-constraints.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("velocity"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Velocity", "Linear velocity of the rigidbody.", "http://docs.unity3d.com/ScriptReference/Rigidbody2D-velocity.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Rigidbody2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Rigidbody2DEditor.cs.meta new file mode 100644 index 00000000..f12a6d7c --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/Rigidbody2DEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0bb3c1cf8af559429a6595132875d69 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RigidbodyEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RigidbodyEditor.cs new file mode 100644 index 00000000..c2d95781 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RigidbodyEditor.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Rigidbody), true)] + public class RigidbodyEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Rigidbody); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("mass"), + new DescriptorAttribute("Mass", "The mass of the rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-mass.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("drag"), + new DescriptorAttribute("Drag", "The drag of the object", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-drag.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("angularDrag"), + new DescriptorAttribute("Angular Drag", "The angular drag of the object", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-angularDrag.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useGravity"), + new DescriptorAttribute("Use Gravity", "Is the object affected by world gravity", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-useGravity.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("isKinematic"), + new DescriptorAttribute("Is Kinematic", "If true, physic does not drive this object, used for animation", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-isKinematic.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("interpolation"), + new DescriptorAttribute("Interpolation", "Interpolation allows you to smooth out the effect of running physics at a fixed frame rate", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-interpolation.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("collisionDetectionMode"), + new DescriptorAttribute("Collision Detection", "How collision are detected", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-collisionDetectionMode.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("constraints"), new EnumAttribute(true), + new DescriptorAttribute("Constraints", "Controls which degrees of freedom are allowed for the simulation of this Rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-constraints.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("centerOfMass"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Center of Mass", "In essence, the pivot around which the object spins", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-centerOfMass.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("freezeRotation"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Freeze Rotation", "Controls whether physics will change the rotation of the object", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-freezeRotation.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("inertiaTensor"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Inertia Tensor", "The diagonal inertia tensor of mass relative to the center of mass", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-inertiaTensor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("inertiaTensorRotation"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Inertia Tensor Rotation", "The rotation of the inertia tensor", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-inertiaTensorRotation.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("maxAngularVelocity"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Max Angular Velocity", "The maximimum angular velocity of the rigidbody. (Default 7) range { 0, infinity }", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-maxAngularVelocity.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("sleepThreshold"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Sleep Threshold", "The mass-normalized energy threshold, below which objects start going to sleep.", "http://docs.unity3d.com/ScriptReference/Rigidbody-sleepThreshold.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("solverIterationCount"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Solver Iteration Count", "Allows you to override the solver iteration count per rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-solverIterationCount.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("useConeFriction"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Use Cone Friction", "Force cone friction to be used for this rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-useConeFriction.html"))); + + InspectorField debug = new InspectorField("Debug"); + fields.Add(debug); + + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("position"), new ReadOnlyAttribute(), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Position", "The position of the rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-position.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("rotation"), new ReadOnlyAttribute(), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Rotation", "The rotation of the rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-rotation.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("velocity"), new ReadOnlyAttribute(), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Velocity", "The velocity of the rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-velocity.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("angularVelocity"), new ReadOnlyAttribute(), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("Angular Velocity", "The rotation velocity of the rigidbody", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-angularVelocity.html"))); + debug.Fields.Add(new InspectorField(type, Instances, type.GetProperty("worldCenterOfMass"), new InspectAttribute(InspectorLevel.Debug), + new DescriptorAttribute("World Center of Mass", "The center of mass of the rigidbody in world space", "https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-worldCenterOfMass.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RigidbodyEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RigidbodyEditor.cs.meta new file mode 100644 index 00000000..be1230bf --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/RigidbodyEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d67a22510eb1e240abe8ebec8839fa4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SkinnedMeshRendererEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SkinnedMeshRendererEditor.cs new file mode 100644 index 00000000..a030be92 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SkinnedMeshRendererEditor.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(SkinnedMeshRenderer), true)] + public class SkinnedMeshRendererEditor : RendererEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(SkinnedMeshRenderer); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("quality"), + new DescriptorAttribute("Quality", "The maximum number of bones affecting a single vertex.", "http://docs.unity3d.com/ScriptReference/SkinnedMeshRenderer-quality.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("updateWhenOffscreen"), + new DescriptorAttribute("Update Off Screen", "If enabled, the Skinned Mesh will be updated when offscreen. If disabled, this also disables updating animations.", "http://docs.unity3d.com/ScriptReference/SkinnedMeshRenderer-updateWhenOffscreen.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("sharedMesh"), + new DescriptorAttribute("Mesh", "The mesh used for skinning.", "http://docs.unity3d.com/ScriptReference/SkinnedMeshRenderer-sharedMesh.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("rootBone"), + new DescriptorAttribute("Root", "The root boot of the skeletton hierarchy."))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("bones"), + new CollectionAttribute(-1), new DescriptorAttribute("Bones", "The bones used to skin the mesh.", "http://docs.unity3d.com/ScriptReference/SkinnedMeshRenderer-bones.html"), new InspectAttribute(InspectorLevel.Advanced))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("localBounds"), + new DescriptorAttribute("Bounds", "AABB of this Skinned Mesh in its local space.", "http://docs.unity3d.com/ScriptReference/SkinnedMeshRenderer-localBounds.html"), new InspectAttribute(InspectorLevel.Advanced))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SkinnedMeshRendererEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SkinnedMeshRendererEditor.cs.meta new file mode 100644 index 00000000..b8af0844 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SkinnedMeshRendererEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e89a2246ecd24504bafbbe834d56c265 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SphereColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SphereColliderEditor.cs new file mode 100644 index 00000000..16f0b519 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SphereColliderEditor.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(SphereCollider), true)] + public class SphereColliderEditor : ColliderEditor + { + private int ControlID = -1; + + protected override void RefreshFields() + { + Type type = typeof(SphereCollider); + + base.RefreshFields(); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("center"), + new DescriptorAttribute("Center", "The center of the sphere, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/SphereCollider-center.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("radius"), + new DescriptorAttribute("Radius", "The radius of the sphere, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/SphereCollider-radius.html"))); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + if (Event.current.type == EventType.Used) + return; + + SphereCollider collider = (SphereCollider)target; + Color color = Handles.color; + + if (collider.enabled) + Handles.color = ColliderHandleColor; + else + Handles.color = ColliderHandleColorDisabled; + + bool enabled = GUI.enabled; + if (!Event.current.shift && GUIUtility.hotControl != ControlID) + { + GUI.enabled = false; + Handles.color = new Color(0f, 0f, 0f, 0.001f); + } + + Vector3 lossyScale = collider.transform.lossyScale; + float x = Mathf.Abs(lossyScale.x); + + float scale = Mathf.Max(Mathf.Max(x, Mathf.Abs(lossyScale.y)), Mathf.Abs(lossyScale.z)); + float radius = Mathf.Max(Mathf.Abs(scale * collider.radius), 0.001f); + + Vector3 position = collider.transform.TransformPoint(collider.center); + Quaternion rotation = collider.transform.rotation; + + int hotControl = GUIUtility.hotControl; + float value = Handles.RadiusHandle(rotation, position, radius, true); + + if (GUI.changed) + { + Undo.RecordObject(collider, "Edited Sphere Collider"); + collider.radius = value / scale; + } + + if (hotControl != GUIUtility.hotControl && GUIUtility.hotControl != 0) + ControlID = GUIUtility.hotControl; + + Handles.color = color; + GUI.enabled = enabled; + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SphereColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SphereColliderEditor.cs.meta new file mode 100644 index 00000000..ecfce56a --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SphereColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c593d1bebd359cc4c8a9ab8af4ab926d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJoint2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJoint2DEditor.cs new file mode 100644 index 00000000..c297b985 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJoint2DEditor.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(SpringJoint2D), true)] + public class SpringJoint2DEditor : AnchoredJoint2DEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(SpringJoint2D); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("dampingRatio"), + new DescriptorAttribute("Damping Ratio", "The amount by which the spring force is reduced in proportion to the movement speed.", "http://docs.unity3d.com/ScriptReference/SpringJoint2D-dampingRatio.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("distance"), + new DescriptorAttribute("Distance", "The distance the spring will try to keep between the two objects.", "http://docs.unity3d.com/ScriptReference/SpringJoint2D-distance.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("frequency"), + new DescriptorAttribute("Frequency", "The frequency at which the spring oscillates around the distance distance between the objects.", "http://docs.unity3d.com/ScriptReference/SpringJoint2D-frequency.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJoint2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJoint2DEditor.cs.meta new file mode 100644 index 00000000..7b6300b5 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJoint2DEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4b19f118a5c41a43b3069f11a4c8490 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJointEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJointEditor.cs new file mode 100644 index 00000000..445095ed --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJointEditor.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(SpringJoint), true)] + public class SpringJointEditor : JointEditor + { + protected override void RefreshFields() + { + base.RefreshFields(); + Type type = typeof(SpringJoint); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("damper"), + new DescriptorAttribute("Damper", "The damper force used to dampen the spring force.", "http://docs.unity3d.com/ScriptReference/SpringJoint-damper.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("spring"), + new DescriptorAttribute("Spring", "The spring force used to keep the two objects together.", "http://docs.unity3d.com/ScriptReference/SpringJoint-spring.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("minDistance"), + new DescriptorAttribute("Minimum Distance", "The minimum distance between the bodies relative to their initial distance.", "http://docs.unity3d.com/ScriptReference/SpringJoint-minDistance.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("maxDistance"), + new DescriptorAttribute("Maximum Distance", "The maximum distance between the bodies relative to their initial distance.", "http://docs.unity3d.com/ScriptReference/SpringJoint-maxDistance.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJointEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJointEditor.cs.meta new file mode 100644 index 00000000..89f200fd --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpringJointEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef55a4c43739280438783fe3c0648c60 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpriteRendererEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpriteRendererEditor.cs new file mode 100644 index 00000000..6ee4f9ee --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpriteRendererEditor.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + //Under construction. Unity's editor has multiple internal method and classes used for this editor. + /*[CanEditMultipleObjects] + //[CustomEditor(typeof(SpriteRenderer), true)] + public class SpriteRendererEditor : RendererEditor + { + protected override void RefreshFields() + { + Type type = typeof(SpriteRenderer); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("subMeshCount"), + new DescriptorAttribute("Sub Mesh Count", "The number of submesh this mesh has."))); + } + + private void IsMaterialUsingFixedFunction(out bool vertex, out bool fragment) + { + vertex = false; + fragment = false; + Material sharedMaterial = (base.target as SpriteRenderer).sharedMaterial; + if (sharedMaterial != null) + { + vertex = ShaderUtil.GetVertexModel(sharedMaterial.shader) == ShaderUtil.ShaderModel.None; + fragment = ShaderUtil.GetFragmentModel(sharedMaterial.shader) == ShaderUtil.ShaderModel.None; + } + } + }*/ +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpriteRendererEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpriteRendererEditor.cs.meta new file mode 100644 index 00000000..23399f70 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SpriteRendererEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e7e1c25afd649e429c7ebc946213e1b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes.meta new file mode 100644 index 00000000..65799e90 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 17d10043e438a1b4a957506dd467ac9d +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointAngleLimits2D.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointAngleLimits2D.cs new file mode 100644 index 00000000..ee057444 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointAngleLimits2D.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(JointAngleLimits2D), true)] + public class JointAngleLimits2DEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(JointAngleLimits2D); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("min"), + new DescriptorAttribute("Lower Angle", "Lower angular limit of rotation.", "http://docs.unity3d.com/ScriptReference/JointAngleLimits2D-min.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("max"), + new DescriptorAttribute("Upper Angle", "Upper angular limit of rotation.", "http://docs.unity3d.com/ScriptReference/JointAngleLimits2D-max.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointAngleLimits2D.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointAngleLimits2D.cs.meta new file mode 100644 index 00000000..da5932a3 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointAngleLimits2D.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1931b05fa3c73e043b6c0808c650582e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointDriveEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointDriveEditor.cs new file mode 100644 index 00000000..99b097d2 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointDriveEditor.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(JointDrive), true)] + public class JointDriveEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(JointDrive); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("maximumForce"), + new DescriptorAttribute("Maximum Force", "Amount of force applied to push the object toward the defined direction.", "http://docs.unity3d.com/ScriptReference/JointDrive-maximumForce.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("mode"), + new DescriptorAttribute("Mode", "Whether the drive should attempt to reach position, velocity, both or nothing.", "http://docs.unity3d.com/ScriptReference/JointDrive-mode.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("positionDamper"), + new DescriptorAttribute("Position Damper", "Resistance strength against the Position Spring. Only used if mode includes Position.", "http://docs.unity3d.com/ScriptReference/JointDrive-positionDamper.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("positionSpring"), + new DescriptorAttribute("Position Spring", "Strength of a rubber-band pull toward the defined direction. Only used if mode includes Position.", "http://docs.unity3d.com/ScriptReference/JointDrive-positionSpring.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointDriveEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointDriveEditor.cs.meta new file mode 100644 index 00000000..b7aeab71 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointDriveEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecf97e5de8d75dc48abf82579a240c2b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointLimitsEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointLimitsEditor.cs new file mode 100644 index 00000000..834679eb --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointLimitsEditor.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(JointLimits), true)] + public class JointLimitsEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(JointLimits); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("min"), + new DescriptorAttribute("Minimum", "The lower limit of the joint.", "http://docs.unity3d.com/ScriptReference/JointLimits-min.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("minBounce"), + new DescriptorAttribute("Minimum Bounce", "The bounciness of the joint when hitting the lower limit of the joint.", "http://docs.unity3d.com/ScriptReference/JointLimits-minBounce.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("max"), + new DescriptorAttribute("Maximum", "The upper limit of the joint.", "http://docs.unity3d.com/ScriptReference/JointLimits-max.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("maxBounce"), + new DescriptorAttribute("Maximum Bounce", "The bounciness of the joint when hitting the upper limit of the joint.", "http://docs.unity3d.com/ScriptReference/JointLimits-maxBounce.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointLimitsEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointLimitsEditor.cs.meta new file mode 100644 index 00000000..3a19c9c0 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointLimitsEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6604bae731e21cc428c2af5fe4345816 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotor2DEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotor2DEditor.cs new file mode 100644 index 00000000..7878455f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotor2DEditor.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(JointMotor2D), true)] + public class JointMotor2DEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(JointMotor2D); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("maxMotorTorque"), + new DescriptorAttribute("Maximum Motor Torque", "The maximum force that can be applied to the Rigidbody2D at the joint to attain the target speed.", "http://docs.unity3d.com/ScriptReference/JointMotor2D-maxMotorTorque.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("motorSpeed"), + new DescriptorAttribute("Motor Speed", "The desired speed for the Rigidbody2D to reach as it moves with the joint.", "http://docs.unity3d.com/ScriptReference/JointMotor2D-motorSpeed.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotor2DEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotor2DEditor.cs.meta new file mode 100644 index 00000000..5cd76dec --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotor2DEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df584c85589b426428f18a1db8819468 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotorEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotorEditor.cs new file mode 100644 index 00000000..aa08051f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotorEditor.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(JointMotor), true)] + public class JointMotorEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(JointMotor); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("force"), + new DescriptorAttribute("Force", "The motor will apply a force.", "http://docs.unity3d.com/ScriptReference/JointMotor-force.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("freeSpin"), + new DescriptorAttribute("Free Spin", "If freeSpin is enabled the motor will only accelerate but never slow down.", "http://docs.unity3d.com/ScriptReference/JointMotor-freeSpin.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("targetVelocity"), + new DescriptorAttribute("Target Velocity", "The motor will apply a force up to force to achieve targetVelocity.", "http://docs.unity3d.com/ScriptReference/JointMotor-targetVelocity.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotorEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotorEditor.cs.meta new file mode 100644 index 00000000..9d3377d6 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointMotorEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edad1525ab08563449869286171570fe +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointSpringEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointSpringEditor.cs new file mode 100644 index 00000000..925489e4 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointSpringEditor.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(JointSpring), true)] + public class JointSpringEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(JointSpring); + + fields.Add(new InspectorField(parent, type, Instances, type.GetField("damper"), + new DescriptorAttribute("Damper", "The damper force uses to dampen the spring.", "http://docs.unity3d.com/ScriptReference/JointSpring-damper.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetField("spring"), + new DescriptorAttribute("Spring", "The spring forces used to reach the target position.", "http://docs.unity3d.com/ScriptReference/JointSpring-spring.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetField("targetPosition"), + new DescriptorAttribute("Target Position", "The target position the joint attempts to reach.", "http://docs.unity3d.com/ScriptReference/JointSpring-targetPosition.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointSpringEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointSpringEditor.cs.meta new file mode 100644 index 00000000..22e7faa5 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/JointSpringEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78cd38f97873b494696f3b39efb6be6b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/SoftJointLimitEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/SoftJointLimitEditor.cs new file mode 100644 index 00000000..216b85ae --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/SoftJointLimitEditor.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(SoftJointLimit), true)] + public class SoftJointLimitEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(SoftJointLimit); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("bounciness"), + new DescriptorAttribute("Bounciness", "When the joint hits the limit, it can be made to bounce off it.", "http://docs.unity3d.com/ScriptReference/SoftJointLimit-bounciness.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("damper"), + new DescriptorAttribute("Damper", "If spring is greater than zero, the limit is soft.", "http://docs.unity3d.com/ScriptReference/SoftJointLimit-damper.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("limit"), + new DescriptorAttribute("Limit", "The limit position/angle of the joint.", "http://docs.unity3d.com/ScriptReference/SoftJointLimit-limit.html"))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("spring"), + new DescriptorAttribute("Spring", "If greater than zero, the limit is soft. The spring will pull the joint back.", "http://docs.unity3d.com/ScriptReference/SoftJointLimit-spring.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/SoftJointLimitEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/SoftJointLimitEditor.cs.meta new file mode 100644 index 00000000..b87ed17f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/SoftJointLimitEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 394fe629fc2ed3344b6393d22fd84d6e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/WheelFrictionCurveEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/WheelFrictionCurveEditor.cs new file mode 100644 index 00000000..7fefbdf9 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/WheelFrictionCurveEditor.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(WheelFrictionCurve), true)] + public class WheelFrictionCurveEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(WheelFrictionCurve); + + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("extremumSlip"), + new DescriptorAttribute("Extremum Slip", ""))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("extremumValue"), + new DescriptorAttribute("Extremum Value", ""))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("asymptoteSlip"), + new DescriptorAttribute("Asymptote Slip", ""))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("asymptoteValue"), + new DescriptorAttribute("Asymptote Value", ""))); + fields.Add(new InspectorField(parent, type, Instances, type.GetProperty("stiffness"), + new DescriptorAttribute("Stiffness", ""))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/WheelFrictionCurveEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/WheelFrictionCurveEditor.cs.meta new file mode 100644 index 00000000..a0590680 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/SubTypes/WheelFrictionCurveEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88effe38dc3d6ed46a367906af5bc842 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TerrainColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TerrainColliderEditor.cs new file mode 100644 index 00000000..d2c41a48 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TerrainColliderEditor.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(TerrainCollider), true)] + public class TerrainColliderEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(TerrainCollider); + if (Instances == null || Instances.Length == 0) + return; + + SerializedObject so = new SerializedObject(Instances.Cast<UnityEngine.Object>().ToArray()); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("isTrigger"), + new DescriptorAttribute("Is Trigger", "Is the collider a trigger?", "http://docs.unity3d.com/ScriptReference/Collider-isTrigger.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("terrainData"), + new DescriptorAttribute("Terrain Data", "The terrain that stores the heightmap.", "http://docs.unity3d.com/ScriptReference/TerrainCollider-terrainData.html"))); + fields.Add(new InspectorField(type, Instances, so.FindProperty("m_EnableTreeColliders"), + new DescriptorAttribute("Create Tree Colliders", "", ""))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TerrainColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TerrainColliderEditor.cs.meta new file mode 100644 index 00000000..e6ff5f46 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TerrainColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e47c360e7747b4840891bf1f1c1dbad4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TextMeshEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TextMeshEditor.cs new file mode 100644 index 00000000..3f955169 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TextMeshEditor.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(TextMesh), true)] + public class TextMeshEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(TextMesh); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("text"), new TextFieldAttribute(TextFieldType.Area), + new DescriptorAttribute("Text", "The text that is displayed.", "http://docs.unity3d.com/ScriptReference/TextMesh-text.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("font"), + new DescriptorAttribute("Font", "The Font used.", "http://docs.unity3d.com/ScriptReference/TextMesh-font.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("color"), + new DescriptorAttribute("Color", "The color used to render the text.", "http://docs.unity3d.com/ScriptReference/TextMesh-color.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("fontSize"), + new DescriptorAttribute("Font Size", "The font size to use (for dynamic fonts).", "http://docs.unity3d.com/ScriptReference/TextMesh-fontSize.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("characterSize"), + new DescriptorAttribute("Character Size", "The size of each character (This scales the whole text).", "http://docs.unity3d.com/ScriptReference/TextMesh-characterSize.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("tabSize"), + new DescriptorAttribute("Tab Size", "How much space will be inserted for a tab '\t' character. This is a multiplum of the 'spacebar' character offset.", "http://docs.unity3d.com/ScriptReference/TextMesh-tabSize.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("lineSpacing"), + new DescriptorAttribute("Line Spacing", "How much space will be in-between lines of text.", "http://docs.unity3d.com/ScriptReference/TextMesh-lineSpacing.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("offsetZ"), + new DescriptorAttribute("Z Offset", "How far should the text be offset from the transform.position.z when drawing.", "http://docs.unity3d.com/ScriptReference/TextMesh-offsetZ.html"))); + + + fields.Add(new InspectorField(type, Instances, type.GetProperty("fontStyle"), + new DescriptorAttribute("Font Style", "The font style to use (for dynamic fonts).", "http://docs.unity3d.com/ScriptReference/TextMesh-fontStyle.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("anchor"), + new DescriptorAttribute("Anchor", "Which point of the text shares the position of the Transform.", "http://docs.unity3d.com/ScriptReference/TextMesh-anchor.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("alignment"), + new DescriptorAttribute("Alignment", "How lines of text are aligned (Left, Right, Center).", "http://docs.unity3d.com/ScriptReference/TextMesh-alignment.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("richText"), + new DescriptorAttribute("Rich Text", "Enable HTML-style tags for Text Formatting Markup.", "http://docs.unity3d.com/ScriptReference/TextMesh-richText.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TextMeshEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TextMeshEditor.cs.meta new file mode 100644 index 00000000..aee5baa7 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TextMeshEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1943876aa3c70a848aeadef8f6a6b46b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TransformEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TransformEditor.cs new file mode 100644 index 00000000..3cea991f --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TransformEditor.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(Transform), true)] + public class TransformEditor : InspectorEditor + { + protected override void RefreshFields() + { + Type type = typeof(Transform); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("localPosition"), + new DescriptorAttribute("Position", "Position of the transform relative to the parent transform.", "http://docs.unity3d.com/ScriptReference/Transform-localPosition.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("localEulerAngles"), + new DescriptorAttribute("Rotation", "The rotation of the transform relative to the parent transform's rotation.", "http://docs.unity3d.com/ScriptReference/Transform-localRotation.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("localScale"), + new DescriptorAttribute("Scale", "The scale of the transform relative to the parent.", "http://docs.unity3d.com/ScriptReference/Transform-localScale.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("position"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("World Position", "The position of the transform in world space.", "http://docs.unity3d.com/ScriptReference/Transform-position.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("rotation"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("World Rotation", "The rotation of the transform in world space stored as a Quaternion.", "http://docs.unity3d.com/ScriptReference/Transform-rotation.html"))); + } + } +} diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TransformEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TransformEditor.cs.meta new file mode 100644 index 00000000..51386f31 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/TransformEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4a8fde3da56bf6439cd4b5a39090868 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/WheelColliderEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/WheelColliderEditor.cs new file mode 100644 index 00000000..dd84d871 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/WheelColliderEditor.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using UnityEditor; +using UnityEngine; + +namespace AdvancedInspector +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(WheelCollider), true)] + public class WheelColliderEditor : ColliderEditor + { + protected override void RefreshFields() + { + Type type = typeof(WheelCollider); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("mass"), + new DescriptorAttribute("Mass", "The mass of the wheel. Must be larger than zero.", "http://docs.unity3d.com/ScriptReference/WheelCollider-mass.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("radius"), + new DescriptorAttribute("Radius", "The radius of the wheel, measured in local space.", "http://docs.unity3d.com/ScriptReference/WheelCollider-radius.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("suspensionDistance"), + new DescriptorAttribute("Suspension Distance", "Maximum extension distance of wheel suspension, measured in local space.", "http://docs.unity3d.com/ScriptReference/WheelCollider-suspensionDistance.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("center"), + new DescriptorAttribute("Center", "The center of the wheel, measured in the object's local space.", "http://docs.unity3d.com/ScriptReference/WheelCollider-center.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("suspensionSpring"), new BypassAttribute(), + new DescriptorAttribute("Suspension Spring", "The parameters of wheel's suspension. The suspension attempts to reach a target position.", "http://docs.unity3d.com/ScriptReference/WheelCollider-suspensionSpring.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("forwardFriction"), + new DescriptorAttribute("Forward Friction", "Properties of tire friction in the direction the wheel is pointing in.", "http://docs.unity3d.com/ScriptReference/WheelCollider-forwardFriction.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("sidewaysFriction"), + new DescriptorAttribute("Sideways Friction", "Properties of tire friction in the sideways direction.", "http://docs.unity3d.com/ScriptReference/WheelCollider-sidewaysFriction.html"))); + + fields.Add(new InspectorField(type, Instances, type.GetProperty("brakeTorque"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Brake Torque", "Brake torque. Must be positive.", "http://docs.unity3d.com/ScriptReference/WheelCollider-brakeTorque.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("motorTorque"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Motor Torque", "Motor torque on the wheel axle. Positive or negative depending on direction.", "http://docs.unity3d.com/ScriptReference/WheelCollider-motorTorque.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("steerAngle"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Steer Angle", "Steering angle in degrees, always around the local y-axis.", "http://docs.unity3d.com/ScriptReference/WheelCollider-steerAngle.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("isGrounded"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("Is Grounded", "Indicates whether the wheel currently collides with something (Read Only).", "http://docs.unity3d.com/ScriptReference/WheelCollider-isGrounded.html"))); + fields.Add(new InspectorField(type, Instances, type.GetProperty("rpm"), new InspectAttribute(InspectorLevel.Advanced), + new DescriptorAttribute("RPM", "Current wheel axle rotation speed, in rotations per minute (Read Only).", "http://docs.unity3d.com/ScriptReference/WheelCollider-rpm.html"))); + } + } +}
\ No newline at end of file diff --git a/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/WheelColliderEditor.cs.meta b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/WheelColliderEditor.cs.meta new file mode 100644 index 00000000..1d401583 --- /dev/null +++ b/Assets/Plugins/Editor/AdvancedInspector/UnityTypes/WheelColliderEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b26718886a14c964687ac19bab859614 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: |