Просмотр исходного кода

SerializableField tested and appears to be working

Marko Pintera 11 лет назад
Родитель
Сommit
d83cccf61b

+ 2 - 0
MBansheeEngine/DbgSerzCls.cs

@@ -10,5 +10,7 @@ namespace BansheeEngine
     {
     {
         public int someValue2;
         public int someValue2;
         public string anotherValue2;
         public string anotherValue2;
+
+        public DbgSerzCls child;
     }
     }
 }
 }

+ 6 - 6
MBansheeEngine/Debug.cs

@@ -8,19 +8,19 @@ namespace BansheeEngine
 {
 {
     public sealed class Debug
     public sealed class Debug
     {
     {
-        public static void Log(string message)
+        public static void Log(object message)
         {
         {
-            Internal_Log(message);
+            Internal_Log(message.ToString());
         }
         }
 
 
-        public static void LogWarning(string message)
+        public static void LogWarning(object message)
         {
         {
-            Internal_LogWarning(message);
+            Internal_LogWarning(message.ToString());
         }
         }
 
 
-        public static void LogError(string message)
+        public static void LogError(object message)
         {
         {
-            Internal_LogError(message);
+            Internal_LogError(message.ToString());
         }
         }
 
 
         [MethodImpl(MethodImplOptions.InternalCall)]
         [MethodImpl(MethodImplOptions.InternalCall)]

+ 25 - 1
MBansheeEngine/Program.cs

@@ -108,7 +108,31 @@ namespace BansheeEngine
             //Color myColor = dbgStyle.textColor;
             //Color myColor = dbgStyle.textColor;
             //dbgStyle.textColor = myColor;
             //dbgStyle.textColor = myColor;
 
 
-            //SerializableObject obj = new SerializableObject(new DbgSerzCls());
+            SerializableObject obj = new SerializableObject(new DbgSerzCls());
+
+            Debug.Log(obj.fields.Length);
+            for (int i = 0; i < obj.fields.Length; i++)
+            {
+                Debug.Log(i + ". " + obj.fields[i].Name + " - " + obj.fields[i].Type.ToString());
+            }
+
+            SerializableValue val = obj.fields[0].GetValue();
+            Debug.Log("Old value: " + val.GetValue<int>());
+            val.SetValue<int>(33);
+            Debug.Log("New value: " + val.GetValue<int>());
+
+            SerializableValue val2 = obj.fields[2].GetValue();
+
+            Debug.Log("Old value: " + (val2.GetValue<DbgSerzCls>() == null));
+
+            DbgSerzCls child = new DbgSerzCls();
+            child.anotherValue2 = "ass";
+            val2.SetValue<DbgSerzCls>(child);
+
+            if (val2.GetValue<DbgSerzCls>() == null)
+                Debug.Log("New value: null");
+            else
+                Debug.Log("New value: " + val2.GetValue<DbgSerzCls>().anotherValue2);
         }
         }
 
 
         [MethodImpl(MethodImplOptions.InternalCall)]
         [MethodImpl(MethodImplOptions.InternalCall)]

+ 2 - 2
MBansheeEngine/SerializableValue.cs

@@ -25,7 +25,7 @@ namespace BansheeEngine
         public T GetValue<T>()
         public T GetValue<T>()
         {
         {
             if (typeof (T) != type)
             if (typeof (T) != type)
-                throw new Exception("Attempted to retrieve a serializable value using an invalid type.");
+                throw new Exception("Attempted to retrieve a serializable value using an invalid type. Provided type: " + typeof(T) + ". Needed type: " + type);
 
 
             return (T) getter();
             return (T) getter();
         }
         }
@@ -33,7 +33,7 @@ namespace BansheeEngine
         public void SetValue<T>(T value)
         public void SetValue<T>(T value)
         {
         {
             if (typeof(T) != type)
             if (typeof(T) != type)
-                throw new Exception("Attempted to set a serializable value using an invalid type.");
+                throw new Exception("Attempted to set a serializable value using an invalid type. Provided type: " + typeof(T) + ". Needed type: " + type);
 
 
             setter(value);
             setter(value);
         }
         }

+ 2 - 2
SBansheeEngine/Include/BsScriptSerializableField.h

@@ -15,8 +15,8 @@ namespace BansheeEngine
 	private:
 	private:
 		static void internal_destroyInstance(ScriptSerializableField* nativeInstance);
 		static void internal_destroyInstance(ScriptSerializableField* nativeInstance);
 
 
-		static MonoObject* internal_getValue(ScriptSerializableField* nativeInstance);
-		static void internal_setValue(ScriptSerializableField* nativeInstance, MonoObject* value);
+		static MonoObject* internal_getValue(ScriptSerializableField* nativeInstance, MonoObject* instance);
+		static void internal_setValue(ScriptSerializableField* nativeInstance, MonoObject* instance, MonoObject* value);
 
 
 		static void initRuntimeData();
 		static void initRuntimeData();
 
 

+ 7 - 7
SBansheeEngine/Source/BsScriptSerializableField.cpp

@@ -24,8 +24,8 @@ namespace BansheeEngine
 	void ScriptSerializableField::initRuntimeData()
 	void ScriptSerializableField::initRuntimeData()
 	{
 	{
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptSerializableField::internal_destroyInstance);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptSerializableField::internal_destroyInstance);
-		metaData.scriptClass->addInternalCall("Internal_GetValue", &ScriptSerializableField::internal_setValue);
-		metaData.scriptClass->addInternalCall("Internal_SetValue", &ScriptSerializableField::internal_getValue);
+		metaData.scriptClass->addInternalCall("Internal_GetValue", &ScriptSerializableField::internal_getValue);
+		metaData.scriptClass->addInternalCall("Internal_SetValue", &ScriptSerializableField::internal_setValue);
 	}
 	}
 
 
 	ScriptSerializableField* ScriptSerializableField::create(MonoObject* parentObject, const ManagedSerializableFieldInfoPtr& fieldInfo)
 	ScriptSerializableField* ScriptSerializableField::create(MonoObject* parentObject, const ManagedSerializableFieldInfoPtr& fieldInfo)
@@ -52,19 +52,19 @@ namespace BansheeEngine
 		cm_free(nativeInstance);
 		cm_free(nativeInstance);
 	}
 	}
 
 
-	MonoObject* ScriptSerializableField::internal_getValue(ScriptSerializableField* nativeInstance)
+	MonoObject* ScriptSerializableField::internal_getValue(ScriptSerializableField* nativeInstance, MonoObject* instance)
 	{
 	{
-		return nativeInstance->mFieldInfo->mMonoField->getValueBoxed(nativeInstance->getManagedInstance());
+		return nativeInstance->mFieldInfo->mMonoField->getValueBoxed(instance);
 	}
 	}
 
 
-	void ScriptSerializableField::internal_setValue(ScriptSerializableField* nativeInstance, MonoObject* value)
+	void ScriptSerializableField::internal_setValue(ScriptSerializableField* nativeInstance, MonoObject* instance, MonoObject* value)
 	{
 	{
 		if(mono_class_is_valuetype(mono_object_get_class(value)))
 		if(mono_class_is_valuetype(mono_object_get_class(value)))
 		{
 		{
 			void* rawValue = mono_object_unbox(value);
 			void* rawValue = mono_object_unbox(value);
-			nativeInstance->mFieldInfo->mMonoField->setValue(nativeInstance->getManagedInstance(), rawValue);
+			nativeInstance->mFieldInfo->mMonoField->setValue(instance, rawValue);
 		}
 		}
 		else
 		else
-			nativeInstance->mFieldInfo->mMonoField->setValue(nativeInstance->getManagedInstance(), value);
+			nativeInstance->mFieldInfo->mMonoField->setValue(instance, value);
 	}
 	}
 }
 }