Преглед изворни кода

Feature: Added an inspector element for the RRef type

BearishSun пре 7 година
родитељ
комит
6b4e26e238

+ 2 - 1
Source/Scripting/MBansheeEditor/MBansheeEditor.csproj

@@ -91,6 +91,7 @@
     <Compile Include="Inspectors\SphereColliderInspector.cs" />
     <Compile Include="Inspectors\SphericalJointInspector.cs" />
     <Compile Include="Windows\GradientPicker.cs" />
+    <Compile Include="Windows\Inspector\InspectableRRef.cs" />
     <Compile Include="Windows\Inspector\Style\InspectableFieldRangeStyle.cs" />
     <Compile Include="Windows\Inspector\Style\InspectableFieldStepStyle.cs" />
     <Compile Include="Windows\Inspector\Style\InspectableFieldStyle.cs" />
@@ -176,7 +177,7 @@
     <Compile Include="Windows\Inspector\InspectableObject.cs" />
     <Compile Include="Windows\Inspector\InspectableField.cs" />
     <Compile Include="Windows\Inspector\InspectableInt.cs" />
-    <Compile Include="Windows\Inspector\InspectableResourceRef.cs" />
+    <Compile Include="Windows\Inspector\InspectableResource.cs" />
     <Compile Include="Windows\Inspector\InspectableString.cs" />
     <Compile Include="Windows\Inspector\InspectableVector2.cs" />
     <Compile Include="Windows\Inspector\InspectableVector3.cs" />

+ 4 - 1
Source/Scripting/MBansheeEditor/Windows/Inspector/InspectableField.cs

@@ -185,7 +185,10 @@ namespace BansheeEditor
                         field = new InspectableVector4(parent, title, path, depth, layout, property);
                         break;
                     case SerializableProperty.FieldType.Resource:
-                        field = new InspectableResourceRef(parent, title, path, depth, layout, property);
+                        field = new InspectableResource(parent, title, path, depth, layout, property);
+                        break;
+                    case SerializableProperty.FieldType.RRef:
+                        field = new InspectableRRef(parent, title, path, depth, layout, property);
                         break;
                     case SerializableProperty.FieldType.GameObjectRef:
                         field = new InspectableGameObjectRef(parent, title, path, depth, layout, property);

+ 73 - 0
Source/Scripting/MBansheeEditor/Windows/Inspector/InspectableRRef.cs

@@ -0,0 +1,73 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using BansheeEngine;
+
+namespace BansheeEditor
+{
+    /** @addtogroup Inspector
+     *  @{
+     */
+
+    /// <summary>
+    /// Displays GUI for a serializable property containing a <see cref="Resource"/> reference.
+    /// </summary>
+    public class InspectableRRef : InspectableField
+    {
+        private GUIResourceField guiField;
+        private InspectableState state;
+
+        /// <summary>
+        /// Creates a new inspectable resource reference GUI for the specified property.
+        /// </summary>
+        /// <param name="parent">Parent Inspector this field belongs to.</param>
+        /// <param name="title">Name of the property, or some other value to set as the title.</param>
+        /// <param name="path">Full path to this property (includes name of this property and all parent properties).</param>
+        /// <param name="depth">Determines how deep within the inspector nesting hierarchy is this field. Some fields may
+        ///                     contain other fields, in which case you should increase this value by one.</param>
+        /// <param name="layout">Parent layout that all the field elements will be added to.</param>
+        /// <param name="property">Serializable property referencing the array whose contents to display.</param>
+        public InspectableRRef(Inspector parent, string title, string path, int depth, InspectableFieldLayout layout,
+            SerializableProperty property)
+            : base(parent, title, path, SerializableProperty.FieldType.RRef, depth, layout, property)
+        {
+
+        }
+
+        /// <inheritoc/>
+        protected internal override void Initialize(int layoutIndex)
+        {
+            if (property.Type == SerializableProperty.FieldType.RRef)
+            {
+                guiField = new GUIResourceField(property.InternalType, new GUIContent(title));
+                guiField.OnChanged += OnFieldValueChanged;
+
+                layout.AddElement(layoutIndex, guiField);
+            }
+        }
+
+        /// <inheritdoc/>
+        public override InspectableState Refresh(int layoutIndex)
+        {
+            if (guiField != null)
+                guiField.ValueRef = property.GetValue<RRefBase>();
+
+            InspectableState oldState = state;
+            if (state.HasFlag(InspectableState.Modified))
+                state = InspectableState.NotModified;
+
+            return oldState;
+        }
+
+        /// <summary>
+        /// Triggered when the user drops a new resource onto the field, or clears the current value.
+        /// </summary>
+        /// <param name="newValue">New resource to reference.</param>
+        private void OnFieldValueChanged(RRefBase newValue)
+        {
+            property.SetValue(newValue);
+            state = InspectableState.Modified;
+        }
+    }
+
+    /** @} */
+}

+ 2 - 2
Source/Scripting/MBansheeEditor/Windows/Inspector/InspectableResourceRef.cs → Source/Scripting/MBansheeEditor/Windows/Inspector/InspectableResource.cs

@@ -11,7 +11,7 @@ namespace BansheeEditor
     /// <summary>
     /// Displays GUI for a serializable property containing a <see cref="Resource"/> reference.
     /// </summary>
-    public class InspectableResourceRef : InspectableField
+    public class InspectableResource : InspectableField
     {
         private GUIResourceField guiField;
         private InspectableState state;
@@ -26,7 +26,7 @@ namespace BansheeEditor
         ///                     contain other fields, in which case you should increase this value by one.</param>
         /// <param name="layout">Parent layout that all the field elements will be added to.</param>
         /// <param name="property">Serializable property referencing the array whose contents to display.</param>
-        public InspectableResourceRef(Inspector parent, string title, string path, int depth, InspectableFieldLayout layout,
+        public InspectableResource(Inspector parent, string title, string path, int depth, InspectableFieldLayout layout,
             SerializableProperty property)
             : base(parent, title, path, SerializableProperty.FieldType.Resource, depth, layout, property)
         {