Vector2Converter.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using Newtonsoft.Json;
  3. using UnityEngine;
  4. using UnityEngine.Scripting;
  5. namespace Siccity.GLTFUtility.Converters {
  6. /// <summary> Converts from float array to Vector2 during deserialization, and back </summary>
  7. [Preserve] public class Vector2Converter : JsonConverter {
  8. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
  9. Vector2 pos = (Vector2) value;
  10. writer.WriteStartArray();
  11. writer.WriteValue(pos.x);
  12. writer.WriteValue(pos.y);
  13. writer.WriteEndArray();
  14. }
  15. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
  16. float[] floatArray = null;
  17. try {
  18. floatArray = serializer.Deserialize<float[]>(reader);
  19. } catch (System.Exception) {
  20. floatArray = new float[] { serializer.Deserialize<float>(reader) };
  21. }
  22. switch (floatArray.Length) {
  23. case 1:
  24. return new Vector2(floatArray[0], floatArray[0]); // just copy float
  25. case 2:
  26. return new Vector2(floatArray[0], floatArray[1]);
  27. case 3:
  28. return new Vector2(floatArray[0], floatArray[1]); // we dont need third float
  29. default:
  30. return new Vector2(1, 1);
  31. }
  32. }
  33. public override bool CanConvert(Type objectType) {
  34. return objectType == typeof(Vector2);
  35. }
  36. }
  37. }