Sfoglia il codice sorgente

Added IsSlider field to [Range] attribute to define if it should be rendered as slider or not

marco.bellan 9 anni fa
parent
commit
00b32f7af1

+ 4 - 2
Source/MBansheeEngine/Serialization/Range.cs

@@ -19,15 +19,17 @@ namespace BansheeEngine
         /// </summary>
         /// <param name="min">Minimum boundary of the range to clamp the field value to.</param>
         /// <param name="max">Maximum boundary of the range to clamp the field value to.</param>
-        /// 
-        public Range(float min, float max)
+        /// <param name="slider">Whether the field should be rendered as a slider</param>
+        public Range(float min, float max, bool slider = true)
         {
             this.min = min;
             this.max = max;
+            this.slider = slider;
         }
 
         private float min;
         private float max;
+        private bool slider;
     }
 
     /** @} */

+ 20 - 4
Source/MBansheeEngine/Serialization/SerializableField.cs

@@ -63,7 +63,7 @@ namespace BansheeEngine
         /// <summary>
         /// Returns true if the field accepts a defined range.
         /// </summary>
-        public bool Range
+        public bool Ranged
         {
             get { return (flags & 0x04) != 0; }
         }
@@ -73,7 +73,7 @@ namespace BansheeEngine
         /// </summary>
         public float RangeMaximum
         {
-            get { return Range? Internal_GetRangeMaximum(mCachedPtr) : 0; }
+            get { return Ranged? Internal_GetRangeMaximum(mCachedPtr) : 0; }
         }
 
         /// <summary>
@@ -81,7 +81,20 @@ namespace BansheeEngine
         /// </summary>
         public float RangeMinimum
         {
-            get { return Range? Internal_GetRangeMinimum(mCachedPtr) : 0; }
+            get { return Ranged? Internal_GetRangeMinimum(mCachedPtr) : 0; }
+        }
+
+        /// <summary>
+        /// Whether the field is rendered as a slider
+        /// </summary>
+        public bool IsSlider
+        {
+            get { return (Ranged && Internal_RenderAsSlider(mCachedPtr)); }
+        }
+
+        public bool Stepped
+        {
+            get { return (flags & 0x04) != 0; }
         }
 
         /// <summary>
@@ -89,7 +102,7 @@ namespace BansheeEngine
         /// </summary>
         public float Step
         {
-            get { return Range ? Internal_GetStep(mCachedPtr) : 0; }
+            get { return Internal_GetStep(mCachedPtr); }
         }
 
         /// <summary>
@@ -159,6 +172,9 @@ namespace BansheeEngine
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern float Internal_GetRangeMinimum(IntPtr field);
 
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern bool Internal_RenderAsSlider(IntPtr field);
+
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern float Internal_GetStep(IntPtr field);
     }

+ 6 - 3
Source/SBansheeEngine/Include/BsManagedSerializableObjectInfo.h

@@ -258,13 +258,16 @@ namespace BansheeEngine
 		/**	Determines should the field be serialized when serializing the parent object. */
 		bool isSerializable() const { return ((UINT32)mFlags & (UINT32)ScriptFieldFlags::Serializable) != 0; }
 
-		/** Returns the minimum value associated to a Range attribute */
+		/** Returns the minimum value associated to a Range attribute. */
 		float getRangeMinimum() const;
 
-		/** Returns the maximum value associated to a Range attribute */
+		/** Returns the maximum value associated to a Range attribute. */
 		float getRangeMaximum() const;
 
-		/** Returns the step value of a Range attribute */
+		/** Whether the field should be rendered as a slider. */
+		bool renderAsSlider() const;
+
+		/** Returns the step value of the field. */
 		float getStep() const;
 
 		String mName;

+ 1 - 0
Source/SBansheeEngine/Include/BsScriptSerializableField.h

@@ -38,6 +38,7 @@ namespace BansheeEngine
 		static void internal_setValue(ScriptSerializableField* nativeInstance, MonoObject* instance, MonoObject* value);
 		static float internal_getRangeMaximum(ScriptSerializableField* nativeInstance);
 		static float internal_getRangeMinimum(ScriptSerializableField* nativeInstance);
+		static bool internal_renderAsSlider(ScriptSerializableField* nativeInstance);
 		static float internal_getStep(ScriptSerializableField* nativeInstance);
 	};
 

+ 21 - 5
Source/SBansheeEngine/Source/BsManagedSerializableObjectInfo.cpp

@@ -128,17 +128,33 @@ namespace BansheeEngine
 		return 0;
 	}
 
+	bool ManagedSerializableFieldInfo::renderAsSlider() const
+	{
+		if (((UINT32)mFlags & (UINT32)ScriptFieldFlags::Range) != 0)
+		{
+			MonoClass* range = ScriptAssemblyManager::instance().getRangeAttribute();
+			if (range != nullptr)
+			{
+				bool slider = false;
+				range->getField("slider")->getValue(mMonoField->getAttribute(range), &slider);
+				return slider;
+			}
+		}
+		return false;
+	}
+
+
 	float ManagedSerializableFieldInfo::getStep() const
 	{
 		if (((UINT32)mFlags & (UINT32)ScriptFieldFlags::Step) != 0)
 		{
 
-			MonoClass* range = ScriptAssemblyManager::instance().getStepAttribute();
-			if (range != nullptr)
+			MonoClass* step = ScriptAssemblyManager::instance().getStepAttribute();
+			if (step != nullptr)
 			{
-				float step = 0;
-				range->getField("step")->getValue(mMonoField->getAttribute(range), &step);
-				return step;
+				float value = 0;
+				step->getField("step")->getValue(mMonoField->getAttribute(step), &value);
+				return value;
 			}
 		}
 		return 0;

+ 2 - 0
Source/SBansheeEngine/Source/BsScriptSerializableField.cpp

@@ -25,6 +25,7 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_SetValue", &ScriptSerializableField::internal_setValue);
 		metaData.scriptClass->addInternalCall("Internal_GetRangeMaximum", &ScriptSerializableField::internal_getRangeMaximum);
 		metaData.scriptClass->addInternalCall("Internal_GetRangeMinimum", &ScriptSerializableField::internal_getRangeMinimum);
+		metaData.scriptClass->addInternalCall("Internal_RenderAsSlider", &ScriptSerializableField::internal_renderAsSlider);
 		metaData.scriptClass->addInternalCall("Internal_GetStep", &ScriptSerializableField::internal_getStep);
 	}
 
@@ -66,5 +67,6 @@ namespace BansheeEngine
 	}
 	float ScriptSerializableField::internal_getRangeMaximum(ScriptSerializableField* nativeInstance) { return nativeInstance->mFieldInfo->getRangeMaximum(); }
 	float ScriptSerializableField::internal_getRangeMinimum(ScriptSerializableField* nativeInstance) { return nativeInstance->mFieldInfo->getRangeMinimum(); }
+	bool ScriptSerializableField::internal_renderAsSlider(ScriptSerializableField* nativeInstance) { return  nativeInstance->mFieldInfo->renderAsSlider(); }
 	float ScriptSerializableField::internal_getStep(ScriptSerializableField* nativeInstance) { return nativeInstance->mFieldInfo->getStep(); }
 }