SerializableObject.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.CompilerServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace BansheeEngine
  8. {
  9. #pragma warning disable 649
  10. public sealed class SerializableObject : ScriptObject
  11. {
  12. internal SerializableProperty parentProperty;
  13. internal object parentObject;
  14. private SerializableField[] _fields;
  15. // Note: Also called from native code
  16. public SerializableObject(Type objectType, SerializableProperty parentProperty)
  17. {
  18. Internal_CreateInstance(this, objectType);
  19. this.parentProperty = parentProperty;
  20. this.parentObject = null;
  21. }
  22. public SerializableObject(Type objectType, object parentObject)
  23. {
  24. Internal_CreateInstance(this, objectType);
  25. this.parentProperty = null;
  26. this.parentObject = parentObject;
  27. }
  28. public SerializableField[] fields
  29. {
  30. get { return _fields; }
  31. }
  32. public object GetReferencedObject()
  33. {
  34. if (parentProperty != null)
  35. return parentProperty.GetValue<object>();
  36. else
  37. return parentObject;
  38. }
  39. [MethodImpl(MethodImplOptions.InternalCall)]
  40. private static extern void Internal_CreateInstance(SerializableObject instance, Type objectType);
  41. }
  42. }