Tanoda
pb_VectorConverter.cs
Go to the documentation of this file.
1using UnityEngine;
2using Newtonsoft.Json;
3using Newtonsoft.Json.Serialization;
4using Newtonsoft.Json.Linq;
5using System.Reflection;
6using System;
7using System.Linq;
8
10{
14 public class pb_VectorConverter : JsonConverter
15 {
16 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
17 {
18 JObject o = new JObject();
19
20 o.Add("$type", value.GetType().AssemblyQualifiedName);
21
22 if( value is Vector2 )
23 {
24 o.Add("x", ((UnityEngine.Vector2)value).x);
25 o.Add("y", ((UnityEngine.Vector2)value).y);
26 }
27 else if( value is Vector3 )
28 {
29 o.Add("x", ((UnityEngine.Vector3)value).x);
30 o.Add("y", ((UnityEngine.Vector3)value).y);
31 o.Add("z", ((UnityEngine.Vector3)value).z);
32 }
33 else if( value is Vector4 )
34 {
35 o.Add("x", ((UnityEngine.Vector4)value).x);
36 o.Add("y", ((UnityEngine.Vector4)value).y);
37 o.Add("z", ((UnityEngine.Vector4)value).z);
38 o.Add("w", ((UnityEngine.Vector4)value).w);
39 }
40 else if( value is Quaternion )
41 {
42 o.Add("x", ((UnityEngine.Quaternion)value).x);
43 o.Add("y", ((UnityEngine.Quaternion)value).y);
44 o.Add("z", ((UnityEngine.Quaternion)value).z);
45 o.Add("w", ((UnityEngine.Quaternion)value).w);
46 }
47
48 o.WriteTo(writer, serializer.Converters.ToArray());
49 }
50
51 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
52 {
53 JObject o = JObject.Load(reader);
54
55 if(objectType == typeof(Vector2))
56 {
57 return new Vector2( (float) o.GetValue("x"),
58 (float) o.GetValue("y"));
59 }
60 else
61 if(objectType == typeof(Vector3))
62 {
63 return new Vector3( (float) o.GetValue("x"),
64 (float) o.GetValue("y"),
65 (float) o.GetValue("z"));
66 }
67 else
68 if(objectType == typeof(Vector4))
69 {
70 return new Vector4( (float) o.GetValue("x"),
71 (float) o.GetValue("y"),
72 (float) o.GetValue("z"),
73 (float) o.GetValue("w"));
74 }
75 else
76 if(objectType == typeof(Quaternion))
77 {
78 return new Quaternion( (float) o.GetValue("x"),
79 (float) o.GetValue("y"),
80 (float) o.GetValue("z"),
81 (float) o.GetValue("w"));
82 }
83
84 return new Vector3(0,0,0);
85 }
86
87 public override bool CanConvert(Type objectType)
88 {
89 return typeof(UnityEngine.Vector2).IsAssignableFrom(objectType) || typeof(UnityEngine.Quaternion).IsAssignableFrom(objectType);
90 }
91 }
92}
override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
override bool CanConvert(Type objectType)
override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)