From 2fcb4625389b1594bbefdbaf2e038b2cfffa8ead Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Tue, 30 May 2023 14:27:59 +0800 Subject: + json extends --- WorldlineKeepers/Assets/Scripts/Common/Common.cs | 348 +++++++ .../Assets/Scripts/Common/Common.cs.meta | 12 + .../Assets/Scripts/Common/CommonParse.cs | 317 ++++++ .../Assets/Scripts/Common/CommonParse.cs.meta | 12 + .../Assets/Scripts/Data/DataManager_Load.cs | 8 - .../Assets/Scripts/Physics/PhysicsManager.cs | 1 + WorldlineKeepers/Assets/Scripts/Utils/LogHelper.cs | 25 +- .../Assets/Standard Assets/LitJson.meta | 8 - .../Standard Assets/LitJson/AssemblyInfo.cs.in | 18 - .../LitJson/AssemblyInfo.cs.in.meta | 7 - .../Assets/Standard Assets/LitJson/IJsonWrapper.cs | 60 -- .../Standard Assets/LitJson/IJsonWrapper.cs.meta | 11 - .../Assets/Standard Assets/LitJson/JsonData.cs | 1059 ------------------- .../Standard Assets/LitJson/JsonData.cs.meta | 11 - .../Standard Assets/LitJson/JsonException.cs | 65 -- .../Standard Assets/LitJson/JsonException.cs.meta | 11 - .../Assets/Standard Assets/LitJson/JsonMapper.cs | 987 ------------------ .../Standard Assets/LitJson/JsonMapper.cs.meta | 11 - .../Standard Assets/LitJson/JsonMockWrapper.cs | 105 -- .../LitJson/JsonMockWrapper.cs.meta | 11 - .../Assets/Standard Assets/LitJson/JsonReader.cs | 478 --------- .../Standard Assets/LitJson/JsonReader.cs.meta | 11 - .../Assets/Standard Assets/LitJson/JsonWriter.cs | 484 --------- .../Standard Assets/LitJson/JsonWriter.cs.meta | 11 - .../Assets/Standard Assets/LitJson/Lexer.cs | 912 ---------------- .../Assets/Standard Assets/LitJson/Lexer.cs.meta | 11 - .../Assets/Standard Assets/LitJson/LitJSON.csproj | 82 -- .../Standard Assets/LitJson/LitJSON.csproj.meta | 7 - .../LitJson/Netstandard15Polyfill.cs | 24 - .../LitJson/Netstandard15Polyfill.cs.meta | 11 - .../Assets/Standard Assets/LitJson/ParserToken.cs | 44 - .../Standard Assets/LitJson/ParserToken.cs.meta | 11 - .../Assets/Standard Assets/LitJson/litjson.png | Bin 3356 -> 0 bytes .../Standard Assets/LitJson/litjson.png.meta | 98 -- WorldlineKeepers/Assets/ThirdParty/LitJson.meta | 8 + .../Assets/ThirdParty/LitJson/IJsonWrapper.cs | 60 ++ .../Assets/ThirdParty/LitJson/IJsonWrapper.cs.meta | 12 + .../Assets/ThirdParty/LitJson/JsonData.cs | 1032 ++++++++++++++++++ .../Assets/ThirdParty/LitJson/JsonData.cs.meta | 12 + .../Assets/ThirdParty/LitJson/JsonException.cs | 60 ++ .../ThirdParty/LitJson/JsonException.cs.meta | 12 + .../Assets/ThirdParty/LitJson/JsonFormatter.cs | 144 +++ .../ThirdParty/LitJson/JsonFormatter.cs.meta | 12 + .../Assets/ThirdParty/LitJson/JsonMapper.cs | 1091 ++++++++++++++++++++ .../Assets/ThirdParty/LitJson/JsonMapper.cs.meta | 12 + .../Assets/ThirdParty/LitJson/JsonReader.cs | 455 ++++++++ .../Assets/ThirdParty/LitJson/JsonReader.cs.meta | 12 + .../Assets/ThirdParty/LitJson/JsonWriter.cs | 595 +++++++++++ .../Assets/ThirdParty/LitJson/JsonWriter.cs.meta | 12 + .../Assets/ThirdParty/LitJson/Lexer.cs | 912 ++++++++++++++++ .../Assets/ThirdParty/LitJson/Lexer.cs.meta | 12 + .../Assets/ThirdParty/LitJson/ParserToken.cs | 44 + .../Assets/ThirdParty/LitJson/ParserToken.cs.meta | 12 + WorldlineKeepers/Assets/ThirdParty/StringUtil.meta | 8 + .../Assets/ThirdParty/StringUtil/DoubleVString.cs | 37 + .../ThirdParty/StringUtil/DoubleVString.cs.meta | 12 + .../Assets/ThirdParty/StringUtil/StringUtil.cs | 750 ++++++++++++++ .../ThirdParty/StringUtil/StringUtil.cs.meta | 12 + .../ThirdParty/StringUtil/StringUtil_Other.cs | 300 ++++++ .../ThirdParty/StringUtil/StringUtil_Other.cs.meta | 12 + .../Assets/ThirdParty/StringUtil/VString.cs | 618 +++++++++++ .../Assets/ThirdParty/StringUtil/VString.cs.meta | 12 + .../ThirdParty/StringUtil/VStringShareObject.cs | 54 + .../StringUtil/VStringShareObject.cs.meta | 12 + .../Assets/ThirdParty/StringUtil/VStringUtil.cs | 107 ++ .../ThirdParty/StringUtil/VStringUtil.cs.meta | 12 + .../Assets/ThirdParty/StringUtil/VTypingString.cs | 171 +++ .../ThirdParty/StringUtil/VTypingString.cs.meta | 12 + .../Assets/ThirdParty/UnsafeFunction.cs | 53 + .../Assets/ThirdParty/UnsafeFunction.cs.meta | 11 + .../ProjectSettings/ProjectSettings.asset | 2 +- 71 files changed, 7408 insertions(+), 4567 deletions(-) create mode 100644 WorldlineKeepers/Assets/Scripts/Common/Common.cs create mode 100644 WorldlineKeepers/Assets/Scripts/Common/Common.cs.meta create mode 100644 WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs create mode 100644 WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs.meta delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png delete mode 100644 WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs.meta create mode 100644 WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs create mode 100644 WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs.meta diff --git a/WorldlineKeepers/Assets/Scripts/Common/Common.cs b/WorldlineKeepers/Assets/Scripts/Common/Common.cs new file mode 100644 index 0000000..13a9f58 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Common/Common.cs @@ -0,0 +1,348 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// author: hanjun +// date: 2018/12/03 16:31:57 +// desc: 某类 +// +// +// +// +// +///////////////////////////////////////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; + +namespace DNA +{ + [System.Serializable] + public struct IntVector2 + { + public int x; + public int y; + + public IntVector2(int x, int y) + { + this.x = x; + this.y = y; + } + + static IntVector2 mZero = new IntVector2(0, 0); + static IntVector2 mOne = new IntVector2(1, 1); + public static IntVector2 Zero + { + get + { + return mZero; + } + } + + public static IntVector2 One + { + get + { + return mOne; + } + } + public int ConstCount + { + get + { + return 2; + } + } + public int this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + default: + throw new System.ArgumentOutOfRangeException("IntVector2索引越界"); + } + } + set + { + switch (index) + { + case 0: + x = value; + break; + case 1: + y = value; + break; + default: + throw new System.ArgumentOutOfRangeException("IntVector2索引越界"); + } + } + } + public static implicit operator Vector2(IntVector2 v) + { + return new Vector2(v.x, v.y); + } + public static IntVector2 operator *(int d, IntVector2 a) + { + a.x *= d; + a.y *= d; + return a; + } + public static bool operator ==(IntVector2 lhs, IntVector2 rhs) + { + return (lhs.x == rhs.x && lhs.y == rhs.y); + } + + public static bool operator !=(IntVector2 lhs, IntVector2 rhs) + { + return (lhs.x != rhs.x || lhs.y != rhs.y); + } + public override string ToString() + { + return StringUtil.Concat(x.ToTempString(), ",", y.ToTempString()); + } + public override bool Equals(object obj) + { + if (obj is IntVector2) + { + IntVector2 other = (IntVector2)obj; + return other.x == x && other.y == y; + } + else + { + return false; + } + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + } + + public struct IntVector3 + { + public int x; + public int y; + public int z; + + public IntVector3(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + + static IntVector3 mZero = new IntVector3(0, 0, 0); + public static IntVector3 Zero + { + get + { + return mZero; + } + } + public int ConstCount + { + get + { + return 3; + } + } + public int this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return z; + default: + throw new System.ArgumentOutOfRangeException("IntVector3索引越界"); + } + } + set + { + switch (index) + { + case 0: + x = value; + break; + case 1: + y = value; + break; + case 2: + z = value; + break; + default: + throw new System.ArgumentOutOfRangeException("IntVector3索引越界"); + } + } + } + public static implicit operator Vector3(IntVector3 v) + { + return new Vector3(v.x, v.y, v.z); + } + public static IntVector3 operator *(int d, IntVector3 a) + { + a.x *= d; + a.y *= d; + a.z *= d; + return a; + } + public static bool operator ==(IntVector3 lhs, IntVector3 rhs) + { + return (lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z); + } + public static bool operator !=(IntVector3 lhs, IntVector3 rhs) + { + return (lhs.x != rhs.x || lhs.y != rhs.y || lhs.z != rhs.z); + } + public override string ToString() + { + return StringUtil.Concat(x.ToTempString(), ",", y.ToTempString(), ",", z.ToTempString()); + } + public override bool Equals(object obj) + { + if (obj is IntVector3) + { + IntVector3 other = (IntVector3)obj; + return other.x == x && other.y == y && other.z == z; + } + else + { + return false; + } + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public bool Contains(int a) + { + if (x == a || y == a || z == a) + return true; + return false; + } + } + + public struct IntVector4 + { + public int x; + public int y; + public int z; + public int w; + + public IntVector4(int x, int y, int z, int w) + { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + + static IntVector4 mZero = new IntVector4(0, 0, 0, 0); + public static IntVector4 Zero + { + get + { + return mZero; + } + } + public static int ConstCount + { + get + { + return 4; + } + } + public int this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return z; + case 3: + return w; + default: + throw new System.ArgumentOutOfRangeException("IntVector4索引越界"); + } + } + set + { + switch (index) + { + case 0: + x = value; + break; + case 1: + y = value; + break; + case 2: + z = value; + break; + case 3: + w = value; + break; + default: + throw new System.ArgumentOutOfRangeException("IntVector4索引越界"); + } + } + } + public static implicit operator Vector4(IntVector4 v) + { + return new Vector4(v.x, v.y, v.z, v.w); + } + public static IntVector4 operator *(int d, IntVector4 a) + { + a.x *= d; + a.y *= d; + a.z *= d; + a.w *= d; + return a; + } + public static bool operator ==(IntVector4 lhs, IntVector4 rhs) + { + return (lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z && lhs.w == rhs.w); + } + public static bool operator !=(IntVector4 lhs, IntVector4 rhs) + { + return (lhs.x != rhs.x || lhs.y != rhs.y || lhs.z != rhs.z || lhs.w != rhs.w); + } + + public override string ToString() + { + return StringUtil.Concat(x.ToTempString(), ",", y.ToTempString(), ",", z.ToTempString(), ",", w.ToTempString()); + } + public override bool Equals(object obj) + { + if (obj is IntVector4) + { + IntVector4 other = (IntVector4)obj; + return other.x == x && other.y == y && other.z == z && other.w == w; + } + else + { + return false; + } + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/Scripts/Common/Common.cs.meta b/WorldlineKeepers/Assets/Scripts/Common/Common.cs.meta new file mode 100644 index 0000000..e738e0b --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Common/Common.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c2cff652623bdff42acbdbfe57c4b998 +timeCreated: 1543825917 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs b/WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs new file mode 100644 index 0000000..6d06eff --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs @@ -0,0 +1,317 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// author: hanjun +// date: 2018/12/03 16:33:35 +// desc: 某类 +// +// +// +// +// +///////////////////////////////////////////////////////////////////////////////// + +using UnityEngine; +using System.Collections; +using System; +using LitJson; + +namespace DNA +{ + public class CommonParse + { + public static float ParseFloat(string str) + { + float target = 0f; + ParseFloat(ref target, str, 0f); + return target; + } + public static void ParseFloat(ref float target, string str) + { + ParseFloat(ref target, str, 0f); + } + public static void ParseFloat(ref float target, string str, float defaultValue) + { + if (string.IsNullOrEmpty(str)) + { + target = defaultValue; + return; + } + str = str.Replace("(", ""); + str = str.Replace(")", ""); + float result = defaultValue;//使用默认值 + if (float.TryParse(str, out result)) + { + target = result; + } + else + { + LogHelper.LogEditorError("ParseFloat Error at field : " + str); + target = defaultValue; + } + } + public static int ParseInt(string str) + { + int target = 0; + ParseInt(ref target, str, 0); + return target; + } + public static void ParseInt(ref int target, string str) + { + ParseInt(ref target, str, 0); + } + public static void ParseInt(ref int target, string str, int defaultValue) + { + if (string.IsNullOrEmpty(str)) + { + target = defaultValue; + return; + } + + int result = defaultValue;//使用默认值 + if (int.TryParse(str, out result)) + { + target = result; + } + else + { + if (str.Contains("0x")) + { + target = Convert.ToInt32(str, 16); + } + else + { + LogHelper.LogEditorError("ParseInt Error at field : " + str); + target = defaultValue; + } + } + } + public static byte ParseByte(string str) + { + byte target = 0; + ParseByte(ref target, str, 0); + return target; + } + public static void ParseByte(ref byte target, string str) + { + ParseByte(ref target, str, 0); + } + public static void ParseByte(ref byte target, string str, byte defaultValue) + { + if (string.IsNullOrEmpty(str)) + { + target = defaultValue; + return; + } + + byte result = defaultValue;//使用默认值 + if (byte.TryParse(str, out result)) + { + target = result; + } + else + { + if (str.Contains("0x")) + { + target = Convert.ToByte(str, 16); + } + else + { + LogHelper.LogEditorError("ParseByte Error at field : " + str); + target = defaultValue; + } + } + } + + public static void ParseVector2(ref Vector2 v2, string str) + { + if (string.IsNullOrEmpty(str)) + { + v2 = Vector2.zero; + return; + } + + string[] array = str.Split(',', ';', '='); + if (array.Length >= 1) + ParseFloat(ref v2.x, array[0]); + if (array.Length >= 2) + ParseFloat(ref v2.y, array[1]); + + //if (array.Length == 2) + //{ + // ParseFloat(ref v2.x, array[0]); + // ParseFloat(ref v2.y, array[1]); + //} + //else + //{ + // LogHelper.LogError("解析ParseVector2失败," + str); + //} + } + public static void ParseVector3(ref Vector3 v3, string str) + { + if (string.IsNullOrEmpty(str)) + { + v3 = Vector3.zero; + return; + } + string[] array = str.Split(',', ';', '='); + if (array.Length >= 1) + ParseFloat(ref v3.x, array[0]); + if (array.Length >= 2) + ParseFloat(ref v3.y, array[1]); + if (array.Length >= 3) + ParseFloat(ref v3.z, array[2]); + + //if (array.Length == 3) + //{ + // ParseFloat(ref v3.x, array[0]); + // ParseFloat(ref v3.y, array[1]); + // ParseFloat(ref v3.z, array[2]); + //} + //else + //{ + // LogHelper.LogError("解析ParseVector3失败," + str); + //} + } + public static void ParseVector4(ref Vector4 v4, string str) + { + if (string.IsNullOrEmpty(str)) + { + v4 = Vector4.zero; + return; + } + string[] array = str.Split(',', ';', '='); + if (array.Length >= 1) + ParseFloat(ref v4.x, array[0]); + if (array.Length >= 2) + ParseFloat(ref v4.y, array[1]); + if (array.Length >= 3) + ParseFloat(ref v4.z, array[2]); + if (array.Length >= 4) + ParseFloat(ref v4.w, array[3]); + + //if (array.Length == 4) + //{ + // ParseFloat(ref v4.x, array[0]); + // ParseFloat(ref v4.y, array[1]); + // ParseFloat(ref v4.z, array[2]); + // ParseFloat(ref v4.w, array[3]); + //} + //else + //{ + // LogHelper.LogError("解析ParseVector4失败," + str); + //} + } + + #region Json序列化 + public static Vector3 ParseVector4(string str) + { + Vector4 v = Vector4.zero; + ParseVector4(ref v, str); + return v; + } + + public static Vector3 ParseVector3(string str) + { + Vector3 v = Vector3.zero; + ParseVector3(ref v, str); + return v; + } + + public static Vector2 ParseVector2(string str) + { + Vector2 v = Vector2.zero; + ParseVector2(ref v, str); + return v; + } + + public static IntVector2 ParseIntVector2(string str) + { + IntVector2 iv2 = IntVector2.Zero; + if (string.IsNullOrEmpty(str)) + { + return iv2; + } + + string[] array = str.Split(',', ';', '='); + if (array.Length >= 1) + ParseInt(ref iv2.x, array[0]); + if (array.Length >= 2) + ParseInt(ref iv2.y, array[1]); + + return iv2; + } + + public static IntVector3 ParseIntVector3(string str) + { + IntVector3 iv3 = IntVector3.Zero; + if (string.IsNullOrEmpty(str)) + { + return iv3; + } + + string[] array = str.Split(',', ';', '='); + if (array.Length >= 1) + ParseInt(ref iv3.x, array[0]); + if (array.Length >= 2) + ParseInt(ref iv3.y, array[1]); + if (array.Length >= 3) + ParseInt(ref iv3.z, array[2]); + + return iv3; + } + + public static IntVector4 ParseIntVector4(string str) + { + IntVector4 iv4 = IntVector4.Zero; + if (string.IsNullOrEmpty(str)) + { + return iv4; + } + + string[] array = str.Split(',', ';', '='); + if (array.Length >= 1) + ParseInt(ref iv4.x, array[0]); + if (array.Length >= 2) + ParseInt(ref iv4.y, array[1]); + if (array.Length >= 3) + ParseInt(ref iv4.z, array[2]); + if (array.Length >= 4) + ParseInt(ref iv4.w, array[3]); + return iv4; + } + + public static Color ParseColor(string str) + { + Color col = Color.white; + string[] array = str.Split(',', ';', '='); + int i = array.Length; + if (i > 0) col.r = ParseFloat(array[0]); + if (i > 1) col.g = ParseFloat(array[1]); + if (i > 2) col.b = ParseFloat(array[2]); + if (i > 3) col.a = ParseFloat(array[3]); + return col; + } + + public static Color32 ParseColor32(string str) + { + Color32 col = new Color32(255,255,255,255); + string[] array = str.Split(',', ';', '='); + int i = array.Length; + if (i > 0) col.r = ParseByte(array[0]); + if (i > 1) col.g = ParseByte(array[1]); + if (i > 2) col.b = ParseByte(array[2]); + if (i > 3) col.a = ParseByte(array[3]); + return col; + } + #endregion + + public static string ToJsonByFormat(System.Object obj) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + JsonWriter jw = new JsonWriter(sb); + jw.PrettyPrint = true; + JsonMapper.ToJson(obj, jw); + return sb.ToString(); + } + } +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs.meta b/WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs.meta new file mode 100644 index 0000000..0573243 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Common/CommonParse.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d52e289ce1c1b5d4c836a2f671dca346 +timeCreated: 1543826015 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs index 75de5f3..811f5b4 100644 --- a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs +++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs @@ -34,15 +34,7 @@ namespace WK.Data TextAsset text = ResourceManager.Instance.LoadAsset(StaticDefine.FileList); string content = text.text; List files = CSVReader.Read(content); - //for (int i = 0; i < files.Count; ++i) - //{ - // MetadataFile file = files[i]; - // int key = (int)Enum.Parse(typeof(EFileKey), file.key); - // m_Filelist.Add(key, file); - //} - CSVReader.ReadDictionary(m_Filelist, content, "key"); - Debug.Log(m_Filelist.Count); } diff --git a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs index 182ea16..b8f1ec2 100644 --- a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs +++ b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs @@ -20,6 +20,7 @@ public partial class PhysicsManager : Singleton { m_CollisionQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); m_HurtboxQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); + m_StaticCollisionQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); } public System.Func GetRetriverByType(ColliderType type) diff --git a/WorldlineKeepers/Assets/Scripts/Utils/LogHelper.cs b/WorldlineKeepers/Assets/Scripts/Utils/LogHelper.cs index e019695..9d8b3e6 100644 --- a/WorldlineKeepers/Assets/Scripts/Utils/LogHelper.cs +++ b/WorldlineKeepers/Assets/Scripts/Utils/LogHelper.cs @@ -6,19 +6,24 @@ using UnityEngine; namespace WK { - public static class LogHelper - { +} - public static void LogError(object msg) - { - Debug.LogError(msg); - } +public static class LogHelper +{ - public static void Log(object msg) - { - Debug.Log(msg); - } + public static void LogError(object msg) + { + Debug.LogError(msg); + } + public static void Log(object msg) + { + Debug.Log(msg); + } + + public static void LogEditorError(object msg) + { + Debug.Log(msg); } } diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson.meta deleted file mode 100644 index 662dc44..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a9ccf60bb6d211e43b32dcc579bc9c21 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in b/WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in deleted file mode 100644 index 2cd1f90..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Reflection; -using System.Runtime.CompilerServices; - - -[assembly: CLSCompliant (true)] - -[assembly: AssemblyTitle ("LitJson")] -[assembly: AssemblyDescription ("LitJSON library")] -[assembly: AssemblyConfiguration ("")] -[assembly: AssemblyCompany ("")] -[assembly: AssemblyProduct ("LitJSON")] -[assembly: AssemblyCopyright ( - "The authors disclaim copyright to this source code")] -[assembly: AssemblyTrademark ("")] -[assembly: AssemblyCulture ("")] - -[assembly: AssemblyVersion ("@ASSEMBLY_VERSION@")] diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in.meta deleted file mode 100644 index cad42a0..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/AssemblyInfo.cs.in.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 059367c3b7b889346a0830ae29aafa6f -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs deleted file mode 100644 index 9b7e2d1..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs +++ /dev/null @@ -1,60 +0,0 @@ -#region Header -/** - * IJsonWrapper.cs - * Interface that represents a type capable of handling all kinds of JSON - * data. This is mainly used when mapping objects through JsonMapper, and - * it's implemented by JsonData. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System.Collections; -using System.Collections.Specialized; - - -namespace LitJson -{ - public enum JsonType - { - None, - - Object, - Array, - String, - Int, - Long, - Double, - Boolean - } - - public interface IJsonWrapper : IList, IOrderedDictionary - { - bool IsArray { get; } - bool IsBoolean { get; } - bool IsDouble { get; } - bool IsInt { get; } - bool IsLong { get; } - bool IsObject { get; } - bool IsString { get; } - - bool GetBoolean (); - double GetDouble (); - int GetInt (); - JsonType GetJsonType (); - long GetLong (); - string GetString (); - - void SetBoolean (bool val); - void SetDouble (double val); - void SetInt (int val); - void SetJsonType (JsonType type); - void SetLong (long val); - void SetString (string val); - - string ToJson (); - void ToJson (JsonWriter writer); - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs.meta deleted file mode 100644 index 77db7f8..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/IJsonWrapper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6404856db9d78cf439362703c3133fec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs deleted file mode 100644 index e89e4b1..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs +++ /dev/null @@ -1,1059 +0,0 @@ -#region Header -/** - * JsonData.cs - * Generic type to hold JSON data (objects, arrays, and so on). This is - * the default type returned by JsonMapper.ToObject(). - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; - - -namespace LitJson -{ - public class JsonData : IJsonWrapper, IEquatable - { - #region Fields - private IList inst_array; - private bool inst_boolean; - private double inst_double; - private int inst_int; - private long inst_long; - private IDictionary inst_object; - private string inst_string; - private string json; - private JsonType type; - - // Used to implement the IOrderedDictionary interface - private IList> object_list; - #endregion - - - #region Properties - public int Count { - get { return EnsureCollection ().Count; } - } - - public bool IsArray { - get { return type == JsonType.Array; } - } - - public bool IsBoolean { - get { return type == JsonType.Boolean; } - } - - public bool IsDouble { - get { return type == JsonType.Double; } - } - - public bool IsInt { - get { return type == JsonType.Int; } - } - - public bool IsLong { - get { return type == JsonType.Long; } - } - - public bool IsObject { - get { return type == JsonType.Object; } - } - - public bool IsString { - get { return type == JsonType.String; } - } - - public ICollection Keys { - get { EnsureDictionary (); return inst_object.Keys; } - } - - /// - /// Determines whether the json contains an element that has the specified key. - /// - /// The key to locate in the json. - /// true if the json contains an element that has the specified key; otherwise, false. - public Boolean ContainsKey(String key) { - EnsureDictionary(); - return this.inst_object.Keys.Contains(key); - } - #endregion - - - #region ICollection Properties - int ICollection.Count { - get { - return Count; - } - } - - bool ICollection.IsSynchronized { - get { - return EnsureCollection ().IsSynchronized; - } - } - - object ICollection.SyncRoot { - get { - return EnsureCollection ().SyncRoot; - } - } - #endregion - - - #region IDictionary Properties - bool IDictionary.IsFixedSize { - get { - return EnsureDictionary ().IsFixedSize; - } - } - - bool IDictionary.IsReadOnly { - get { - return EnsureDictionary ().IsReadOnly; - } - } - - ICollection IDictionary.Keys { - get { - EnsureDictionary (); - IList keys = new List (); - - foreach (KeyValuePair entry in - object_list) { - keys.Add (entry.Key); - } - - return (ICollection) keys; - } - } - - ICollection IDictionary.Values { - get { - EnsureDictionary (); - IList values = new List (); - - foreach (KeyValuePair entry in - object_list) { - values.Add (entry.Value); - } - - return (ICollection) values; - } - } - #endregion - - - - #region IJsonWrapper Properties - bool IJsonWrapper.IsArray { - get { return IsArray; } - } - - bool IJsonWrapper.IsBoolean { - get { return IsBoolean; } - } - - bool IJsonWrapper.IsDouble { - get { return IsDouble; } - } - - bool IJsonWrapper.IsInt { - get { return IsInt; } - } - - bool IJsonWrapper.IsLong { - get { return IsLong; } - } - - bool IJsonWrapper.IsObject { - get { return IsObject; } - } - - bool IJsonWrapper.IsString { - get { return IsString; } - } - #endregion - - - #region IList Properties - bool IList.IsFixedSize { - get { - return EnsureList ().IsFixedSize; - } - } - - bool IList.IsReadOnly { - get { - return EnsureList ().IsReadOnly; - } - } - #endregion - - - #region IDictionary Indexer - object IDictionary.this[object key] { - get { - return EnsureDictionary ()[key]; - } - - set { - if (! (key is String)) - throw new ArgumentException ( - "The key has to be a string"); - - JsonData data = ToJsonData (value); - - this[(string) key] = data; - } - } - #endregion - - - #region IOrderedDictionary Indexer - object IOrderedDictionary.this[int idx] { - get { - EnsureDictionary (); - return object_list[idx].Value; - } - - set { - EnsureDictionary (); - JsonData data = ToJsonData (value); - - KeyValuePair old_entry = object_list[idx]; - - inst_object[old_entry.Key] = data; - - KeyValuePair entry = - new KeyValuePair (old_entry.Key, data); - - object_list[idx] = entry; - } - } - #endregion - - - #region IList Indexer - object IList.this[int index] { - get { - return EnsureList ()[index]; - } - - set { - EnsureList (); - JsonData data = ToJsonData (value); - - this[index] = data; - } - } - #endregion - - - #region Public Indexers - public JsonData this[string prop_name] { - get { - EnsureDictionary (); - return inst_object[prop_name]; - } - - set { - EnsureDictionary (); - - KeyValuePair entry = - new KeyValuePair (prop_name, value); - - if (inst_object.ContainsKey (prop_name)) { - for (int i = 0; i < object_list.Count; i++) { - if (object_list[i].Key == prop_name) { - object_list[i] = entry; - break; - } - } - } else - object_list.Add (entry); - - inst_object[prop_name] = value; - - json = null; - } - } - - public JsonData this[int index] { - get { - EnsureCollection (); - - if (type == JsonType.Array) - return inst_array[index]; - - return object_list[index].Value; - } - - set { - EnsureCollection (); - - if (type == JsonType.Array) - inst_array[index] = value; - else { - KeyValuePair entry = object_list[index]; - KeyValuePair new_entry = - new KeyValuePair (entry.Key, value); - - object_list[index] = new_entry; - inst_object[entry.Key] = value; - } - - json = null; - } - } - #endregion - - - #region Constructors - public JsonData () - { - } - - public JsonData (bool boolean) - { - type = JsonType.Boolean; - inst_boolean = boolean; - } - - public JsonData (double number) - { - type = JsonType.Double; - inst_double = number; - } - - public JsonData (int number) - { - type = JsonType.Int; - inst_int = number; - } - - public JsonData (long number) - { - type = JsonType.Long; - inst_long = number; - } - - public JsonData (object obj) - { - if (obj is Boolean) { - type = JsonType.Boolean; - inst_boolean = (bool) obj; - return; - } - - if (obj is Double) { - type = JsonType.Double; - inst_double = (double) obj; - return; - } - - if (obj is Int32) { - type = JsonType.Int; - inst_int = (int) obj; - return; - } - - if (obj is Int64) { - type = JsonType.Long; - inst_long = (long) obj; - return; - } - - if (obj is String) { - type = JsonType.String; - inst_string = (string) obj; - return; - } - - throw new ArgumentException ( - "Unable to wrap the given object with JsonData"); - } - - public JsonData (string str) - { - type = JsonType.String; - inst_string = str; - } - #endregion - - - #region Implicit Conversions - public static implicit operator JsonData (Boolean data) - { - return new JsonData (data); - } - - public static implicit operator JsonData (Double data) - { - return new JsonData (data); - } - - public static implicit operator JsonData (Int32 data) - { - return new JsonData (data); - } - - public static implicit operator JsonData (Int64 data) - { - return new JsonData (data); - } - - public static implicit operator JsonData (String data) - { - return new JsonData (data); - } - #endregion - - - #region Explicit Conversions - public static explicit operator Boolean (JsonData data) - { - if (data.type != JsonType.Boolean) - throw new InvalidCastException ( - "Instance of JsonData doesn't hold a double"); - - return data.inst_boolean; - } - - public static explicit operator Double (JsonData data) - { - if (data.type != JsonType.Double) - throw new InvalidCastException ( - "Instance of JsonData doesn't hold a double"); - - return data.inst_double; - } - - public static explicit operator Int32(JsonData data) - { - if (data.type != JsonType.Int && data.type != JsonType.Long) - { - throw new InvalidCastException( - "Instance of JsonData doesn't hold an int"); - } - - // cast may truncate data... but that's up to the user to consider - return data.type == JsonType.Int ? data.inst_int : (int)data.inst_long; - } - - public static explicit operator Int64(JsonData data) - { - if (data.type != JsonType.Long && data.type != JsonType.Int) - { - throw new InvalidCastException( - "Instance of JsonData doesn't hold a long"); - } - - return data.type == JsonType.Long ? data.inst_long : data.inst_int; - } - - public static explicit operator String (JsonData data) - { - if (data.type != JsonType.String) - throw new InvalidCastException ( - "Instance of JsonData doesn't hold a string"); - - return data.inst_string; - } - #endregion - - - #region ICollection Methods - void ICollection.CopyTo (Array array, int index) - { - EnsureCollection ().CopyTo (array, index); - } - #endregion - - - #region IDictionary Methods - void IDictionary.Add (object key, object value) - { - JsonData data = ToJsonData (value); - - EnsureDictionary ().Add (key, data); - - KeyValuePair entry = - new KeyValuePair ((string) key, data); - object_list.Add (entry); - - json = null; - } - - void IDictionary.Clear () - { - EnsureDictionary ().Clear (); - object_list.Clear (); - json = null; - } - - bool IDictionary.Contains (object key) - { - return EnsureDictionary ().Contains (key); - } - - IDictionaryEnumerator IDictionary.GetEnumerator () - { - return ((IOrderedDictionary) this).GetEnumerator (); - } - - void IDictionary.Remove (object key) - { - EnsureDictionary ().Remove (key); - - for (int i = 0; i < object_list.Count; i++) { - if (object_list[i].Key == (string) key) { - object_list.RemoveAt (i); - break; - } - } - - json = null; - } - #endregion - - - #region IEnumerable Methods - IEnumerator IEnumerable.GetEnumerator () - { - return EnsureCollection ().GetEnumerator (); - } - #endregion - - - #region IJsonWrapper Methods - bool IJsonWrapper.GetBoolean () - { - if (type != JsonType.Boolean) - throw new InvalidOperationException ( - "JsonData instance doesn't hold a boolean"); - - return inst_boolean; - } - - double IJsonWrapper.GetDouble () - { - if (type != JsonType.Double) - throw new InvalidOperationException ( - "JsonData instance doesn't hold a double"); - - return inst_double; - } - - int IJsonWrapper.GetInt () - { - if (type != JsonType.Int) - throw new InvalidOperationException ( - "JsonData instance doesn't hold an int"); - - return inst_int; - } - - long IJsonWrapper.GetLong () - { - if (type != JsonType.Long) - throw new InvalidOperationException ( - "JsonData instance doesn't hold a long"); - - return inst_long; - } - - string IJsonWrapper.GetString () - { - if (type != JsonType.String) - throw new InvalidOperationException ( - "JsonData instance doesn't hold a string"); - - return inst_string; - } - - void IJsonWrapper.SetBoolean (bool val) - { - type = JsonType.Boolean; - inst_boolean = val; - json = null; - } - - void IJsonWrapper.SetDouble (double val) - { - type = JsonType.Double; - inst_double = val; - json = null; - } - - void IJsonWrapper.SetInt (int val) - { - type = JsonType.Int; - inst_int = val; - json = null; - } - - void IJsonWrapper.SetLong (long val) - { - type = JsonType.Long; - inst_long = val; - json = null; - } - - void IJsonWrapper.SetString (string val) - { - type = JsonType.String; - inst_string = val; - json = null; - } - - string IJsonWrapper.ToJson () - { - return ToJson (); - } - - void IJsonWrapper.ToJson (JsonWriter writer) - { - ToJson (writer); - } - #endregion - - - #region IList Methods - int IList.Add (object value) - { - return Add (value); - } - - void IList.Clear () - { - EnsureList ().Clear (); - json = null; - } - - bool IList.Contains (object value) - { - return EnsureList ().Contains (value); - } - - int IList.IndexOf (object value) - { - return EnsureList ().IndexOf (value); - } - - void IList.Insert (int index, object value) - { - EnsureList ().Insert (index, value); - json = null; - } - - void IList.Remove (object value) - { - EnsureList ().Remove (value); - json = null; - } - - void IList.RemoveAt (int index) - { - EnsureList ().RemoveAt (index); - json = null; - } - #endregion - - - #region IOrderedDictionary Methods - IDictionaryEnumerator IOrderedDictionary.GetEnumerator () - { - EnsureDictionary (); - - return new OrderedDictionaryEnumerator ( - object_list.GetEnumerator ()); - } - - void IOrderedDictionary.Insert (int idx, object key, object value) - { - string property = (string) key; - JsonData data = ToJsonData (value); - - this[property] = data; - - KeyValuePair entry = - new KeyValuePair (property, data); - - object_list.Insert (idx, entry); - } - - void IOrderedDictionary.RemoveAt (int idx) - { - EnsureDictionary (); - - inst_object.Remove (object_list[idx].Key); - object_list.RemoveAt (idx); - } - #endregion - - - #region Private Methods - private ICollection EnsureCollection () - { - if (type == JsonType.Array) - return (ICollection) inst_array; - - if (type == JsonType.Object) - return (ICollection) inst_object; - - throw new InvalidOperationException ( - "The JsonData instance has to be initialized first"); - } - - private IDictionary EnsureDictionary () - { - if (type == JsonType.Object) - return (IDictionary) inst_object; - - if (type != JsonType.None) - throw new InvalidOperationException ( - "Instance of JsonData is not a dictionary"); - - type = JsonType.Object; - inst_object = new Dictionary (); - object_list = new List> (); - - return (IDictionary) inst_object; - } - - private IList EnsureList () - { - if (type == JsonType.Array) - return (IList) inst_array; - - if (type != JsonType.None) - throw new InvalidOperationException ( - "Instance of JsonData is not a list"); - - type = JsonType.Array; - inst_array = new List (); - - return (IList) inst_array; - } - - private JsonData ToJsonData (object obj) - { - if (obj == null) - return null; - - if (obj is JsonData) - return (JsonData) obj; - - return new JsonData (obj); - } - - private static void WriteJson (IJsonWrapper obj, JsonWriter writer) - { - if (obj == null) { - writer.Write (null); - return; - } - - if (obj.IsString) { - writer.Write (obj.GetString ()); - return; - } - - if (obj.IsBoolean) { - writer.Write (obj.GetBoolean ()); - return; - } - - if (obj.IsDouble) { - writer.Write (obj.GetDouble ()); - return; - } - - if (obj.IsInt) { - writer.Write (obj.GetInt ()); - return; - } - - if (obj.IsLong) { - writer.Write (obj.GetLong ()); - return; - } - - if (obj.IsArray) { - writer.WriteArrayStart (); - foreach (object elem in (IList) obj) - WriteJson ((JsonData) elem, writer); - writer.WriteArrayEnd (); - - return; - } - - if (obj.IsObject) { - writer.WriteObjectStart (); - - foreach (DictionaryEntry entry in ((IDictionary) obj)) { - writer.WritePropertyName ((string) entry.Key); - WriteJson ((JsonData) entry.Value, writer); - } - writer.WriteObjectEnd (); - - return; - } - } - #endregion - - - public int Add (object value) - { - JsonData data = ToJsonData (value); - - json = null; - - return EnsureList ().Add (data); - } - - public bool Remove(object obj) - { - json = null; - if(IsObject) - { - JsonData value = null; - if (inst_object.TryGetValue((string)obj, out value)) - return inst_object.Remove((string)obj) && object_list.Remove(new KeyValuePair((string)obj, value)); - else - throw new KeyNotFoundException("The specified key was not found in the JsonData object."); - } - if(IsArray) - { - return inst_array.Remove(ToJsonData(obj)); - } - throw new InvalidOperationException ( - "Instance of JsonData is not an object or a list."); - } - - public void Clear () - { - if (IsObject) { - ((IDictionary) this).Clear (); - return; - } - - if (IsArray) { - ((IList) this).Clear (); - return; - } - } - - public bool Equals (JsonData x) - { - if (x == null) - return false; - - if (x.type != this.type) - { - // further check to see if this is a long to int comparison - if ((x.type != JsonType.Int && x.type != JsonType.Long) - || (this.type != JsonType.Int && this.type != JsonType.Long)) - { - return false; - } - } - - switch (this.type) { - case JsonType.None: - return true; - - case JsonType.Object: - return this.inst_object.Equals (x.inst_object); - - case JsonType.Array: - return this.inst_array.Equals (x.inst_array); - - case JsonType.String: - return this.inst_string.Equals (x.inst_string); - - case JsonType.Int: - { - if (x.IsLong) - { - if (x.inst_long < Int32.MinValue || x.inst_long > Int32.MaxValue) - return false; - return this.inst_int.Equals((int)x.inst_long); - } - return this.inst_int.Equals(x.inst_int); - } - - case JsonType.Long: - { - if (x.IsInt) - { - if (this.inst_long < Int32.MinValue || this.inst_long > Int32.MaxValue) - return false; - return x.inst_int.Equals((int)this.inst_long); - } - return this.inst_long.Equals(x.inst_long); - } - - case JsonType.Double: - return this.inst_double.Equals (x.inst_double); - - case JsonType.Boolean: - return this.inst_boolean.Equals (x.inst_boolean); - } - - return false; - } - - public JsonType GetJsonType () - { - return type; - } - - public void SetJsonType (JsonType type) - { - if (this.type == type) - return; - - switch (type) { - case JsonType.None: - break; - - case JsonType.Object: - inst_object = new Dictionary (); - object_list = new List> (); - break; - - case JsonType.Array: - inst_array = new List (); - break; - - case JsonType.String: - inst_string = default (String); - break; - - case JsonType.Int: - inst_int = default (Int32); - break; - - case JsonType.Long: - inst_long = default (Int64); - break; - - case JsonType.Double: - inst_double = default (Double); - break; - - case JsonType.Boolean: - inst_boolean = default (Boolean); - break; - } - - this.type = type; - } - - public string ToJson () - { - if (json != null) - return json; - - StringWriter sw = new StringWriter (); - JsonWriter writer = new JsonWriter (sw); - writer.Validate = false; - - WriteJson (this, writer); - json = sw.ToString (); - - return json; - } - - public void ToJson (JsonWriter writer) - { - bool old_validate = writer.Validate; - - writer.Validate = false; - - WriteJson (this, writer); - - writer.Validate = old_validate; - } - - public override string ToString () - { - switch (type) { - case JsonType.Array: - return "JsonData array"; - - case JsonType.Boolean: - return inst_boolean.ToString (); - - case JsonType.Double: - return inst_double.ToString (); - - case JsonType.Int: - return inst_int.ToString (); - - case JsonType.Long: - return inst_long.ToString (); - - case JsonType.Object: - return "JsonData object"; - - case JsonType.String: - return inst_string; - } - - return "Uninitialized JsonData"; - } - } - - - internal class OrderedDictionaryEnumerator : IDictionaryEnumerator - { - IEnumerator> list_enumerator; - - - public object Current { - get { return Entry; } - } - - public DictionaryEntry Entry { - get { - KeyValuePair curr = list_enumerator.Current; - return new DictionaryEntry (curr.Key, curr.Value); - } - } - - public object Key { - get { return list_enumerator.Current.Key; } - } - - public object Value { - get { return list_enumerator.Current.Value; } - } - - - public OrderedDictionaryEnumerator ( - IEnumerator> enumerator) - { - list_enumerator = enumerator; - } - - - public bool MoveNext () - { - return list_enumerator.MoveNext (); - } - - public void Reset () - { - list_enumerator.Reset (); - } - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs.meta deleted file mode 100644 index 0680c43..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d1978a8f8daac0947a97a36e63503d04 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs deleted file mode 100644 index 4efd890..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region Header -/** - * JsonException.cs - * Base class throwed by LitJSON when a parsing error occurs. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; - - -namespace LitJson -{ - public class JsonException : -#if NETSTANDARD1_5 - Exception -#else - ApplicationException -#endif - { - public JsonException () : base () - { - } - - internal JsonException (ParserToken token) : - base (String.Format ( - "Invalid token '{0}' in input string", token)) - { - } - - internal JsonException (ParserToken token, - Exception inner_exception) : - base (String.Format ( - "Invalid token '{0}' in input string", token), - inner_exception) - { - } - - internal JsonException (int c) : - base (String.Format ( - "Invalid character '{0}' in input string", (char) c)) - { - } - - internal JsonException (int c, Exception inner_exception) : - base (String.Format ( - "Invalid character '{0}' in input string", (char) c), - inner_exception) - { - } - - - public JsonException (string message) : base (message) - { - } - - public JsonException (string message, Exception inner_exception) : - base (message, inner_exception) - { - } - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs.meta deleted file mode 100644 index 07d569c..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonException.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fd6f014aae872a445b18f0bb155b8de2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs deleted file mode 100644 index 99946cf..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs +++ /dev/null @@ -1,987 +0,0 @@ -#region Header -/** - * JsonMapper.cs - * JSON to .Net object and object to JSON conversions. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Reflection; - - -namespace LitJson -{ - internal struct PropertyMetadata - { - public MemberInfo Info; - public bool IsField; - public Type Type; - } - - - internal struct ArrayMetadata - { - private Type element_type; - private bool is_array; - private bool is_list; - - - public Type ElementType { - get { - if (element_type == null) - return typeof (JsonData); - - return element_type; - } - - set { element_type = value; } - } - - public bool IsArray { - get { return is_array; } - set { is_array = value; } - } - - public bool IsList { - get { return is_list; } - set { is_list = value; } - } - } - - - internal struct ObjectMetadata - { - private Type element_type; - private bool is_dictionary; - - private IDictionary properties; - - - public Type ElementType { - get { - if (element_type == null) - return typeof (JsonData); - - return element_type; - } - - set { element_type = value; } - } - - public bool IsDictionary { - get { return is_dictionary; } - set { is_dictionary = value; } - } - - public IDictionary Properties { - get { return properties; } - set { properties = value; } - } - } - - - internal delegate void ExporterFunc (object obj, JsonWriter writer); - public delegate void ExporterFunc (T obj, JsonWriter writer); - - internal delegate object ImporterFunc (object input); - public delegate TValue ImporterFunc (TJson input); - - public delegate IJsonWrapper WrapperFactory (); - - - public class JsonMapper - { - #region Fields - private static readonly int max_nesting_depth; - - private static readonly IFormatProvider datetime_format; - - private static readonly IDictionary base_exporters_table; - private static readonly IDictionary custom_exporters_table; - - private static readonly IDictionary> base_importers_table; - private static readonly IDictionary> custom_importers_table; - - private static readonly IDictionary array_metadata; - private static readonly object array_metadata_lock = new Object (); - - private static readonly IDictionary> conv_ops; - private static readonly object conv_ops_lock = new Object (); - - private static readonly IDictionary object_metadata; - private static readonly object object_metadata_lock = new Object (); - - private static readonly IDictionary> type_properties; - private static readonly object type_properties_lock = new Object (); - - private static readonly JsonWriter static_writer; - private static readonly object static_writer_lock = new Object (); - #endregion - - - #region Constructors - static JsonMapper () - { - max_nesting_depth = 100; - - array_metadata = new Dictionary (); - conv_ops = new Dictionary> (); - object_metadata = new Dictionary (); - type_properties = new Dictionary> (); - - static_writer = new JsonWriter (); - - datetime_format = DateTimeFormatInfo.InvariantInfo; - - base_exporters_table = new Dictionary (); - custom_exporters_table = new Dictionary (); - - base_importers_table = new Dictionary> (); - custom_importers_table = new Dictionary> (); - - RegisterBaseExporters (); - RegisterBaseImporters (); - } - #endregion - - - #region Private Methods - private static void AddArrayMetadata (Type type) - { - if (array_metadata.ContainsKey (type)) - return; - - ArrayMetadata data = new ArrayMetadata (); - - data.IsArray = type.IsArray; - - if (type.GetInterface ("System.Collections.IList") != null) - data.IsList = true; - - foreach (PropertyInfo p_info in type.GetProperties ()) { - if (p_info.Name != "Item") - continue; - - ParameterInfo[] parameters = p_info.GetIndexParameters (); - - if (parameters.Length != 1) - continue; - - if (parameters[0].ParameterType == typeof (int)) - data.ElementType = p_info.PropertyType; - } - - lock (array_metadata_lock) { - try { - array_metadata.Add (type, data); - } catch (ArgumentException) { - return; - } - } - } - - private static void AddObjectMetadata (Type type) - { - if (object_metadata.ContainsKey (type)) - return; - - ObjectMetadata data = new ObjectMetadata (); - - if (type.GetInterface ("System.Collections.IDictionary") != null) - data.IsDictionary = true; - - data.Properties = new Dictionary (); - - foreach (PropertyInfo p_info in type.GetProperties ()) { - if (p_info.Name == "Item") { - ParameterInfo[] parameters = p_info.GetIndexParameters (); - - if (parameters.Length != 1) - continue; - - if (parameters[0].ParameterType == typeof (string)) - data.ElementType = p_info.PropertyType; - - continue; - } - - PropertyMetadata p_data = new PropertyMetadata (); - p_data.Info = p_info; - p_data.Type = p_info.PropertyType; - - data.Properties.Add (p_info.Name, p_data); - } - - foreach (FieldInfo f_info in type.GetFields ()) { - PropertyMetadata p_data = new PropertyMetadata (); - p_data.Info = f_info; - p_data.IsField = true; - p_data.Type = f_info.FieldType; - - data.Properties.Add (f_info.Name, p_data); - } - - lock (object_metadata_lock) { - try { - object_metadata.Add (type, data); - } catch (ArgumentException) { - return; - } - } - } - - private static void AddTypeProperties (Type type) - { - if (type_properties.ContainsKey (type)) - return; - - IList props = new List (); - - foreach (PropertyInfo p_info in type.GetProperties ()) { - if (p_info.Name == "Item") - continue; - - PropertyMetadata p_data = new PropertyMetadata (); - p_data.Info = p_info; - p_data.IsField = false; - props.Add (p_data); - } - - foreach (FieldInfo f_info in type.GetFields ()) { - PropertyMetadata p_data = new PropertyMetadata (); - p_data.Info = f_info; - p_data.IsField = true; - - props.Add (p_data); - } - - lock (type_properties_lock) { - try { - type_properties.Add (type, props); - } catch (ArgumentException) { - return; - } - } - } - - private static MethodInfo GetConvOp (Type t1, Type t2) - { - lock (conv_ops_lock) { - if (! conv_ops.ContainsKey (t1)) - conv_ops.Add (t1, new Dictionary ()); - } - - if (conv_ops[t1].ContainsKey (t2)) - return conv_ops[t1][t2]; - - MethodInfo op = t1.GetMethod ( - "op_Implicit", new Type[] { t2 }); - - lock (conv_ops_lock) { - try { - conv_ops[t1].Add (t2, op); - } catch (ArgumentException) { - return conv_ops[t1][t2]; - } - } - - return op; - } - - private static object ReadValue (Type inst_type, JsonReader reader) - { - reader.Read (); - - if (reader.Token == JsonToken.ArrayEnd) - return null; - - Type underlying_type = Nullable.GetUnderlyingType(inst_type); - Type value_type = underlying_type ?? inst_type; - - if (reader.Token == JsonToken.Null) { - #if NETSTANDARD1_5 - if (inst_type.IsClass() || underlying_type != null) { - return null; - } - #else - if (inst_type.IsClass || underlying_type != null) { - return null; - } - #endif - - throw new JsonException (String.Format ( - "Can't assign null to an instance of type {0}", - inst_type)); - } - - if (reader.Token == JsonToken.Double || - reader.Token == JsonToken.Int || - reader.Token == JsonToken.Long || - reader.Token == JsonToken.String || - reader.Token == JsonToken.Boolean) { - - Type json_type = reader.Value.GetType (); - - if (value_type.IsAssignableFrom (json_type)) - return reader.Value; - - // If there's a custom importer that fits, use it - if (custom_importers_table.ContainsKey (json_type) && - custom_importers_table[json_type].ContainsKey ( - value_type)) { - - ImporterFunc importer = - custom_importers_table[json_type][value_type]; - - return importer (reader.Value); - } - - // Maybe there's a base importer that works - if (base_importers_table.ContainsKey (json_type) && - base_importers_table[json_type].ContainsKey ( - value_type)) { - - ImporterFunc importer = - base_importers_table[json_type][value_type]; - - return importer (reader.Value); - } - - // Maybe it's an enum - #if NETSTANDARD1_5 - if (value_type.IsEnum()) - return Enum.ToObject (value_type, reader.Value); - #else - if (value_type.IsEnum) - return Enum.ToObject (value_type, reader.Value); - #endif - // Try using an implicit conversion operator - MethodInfo conv_op = GetConvOp (value_type, json_type); - - if (conv_op != null) - return conv_op.Invoke (null, - new object[] { reader.Value }); - - // No luck - throw new JsonException (String.Format ( - "Can't assign value '{0}' (type {1}) to type {2}", - reader.Value, json_type, inst_type)); - } - - object instance = null; - - if (reader.Token == JsonToken.ArrayStart) { - - AddArrayMetadata (inst_type); - ArrayMetadata t_data = array_metadata[inst_type]; - - if (! t_data.IsArray && ! t_data.IsList) - throw new JsonException (String.Format ( - "Type {0} can't act as an array", - inst_type)); - - IList list; - Type elem_type; - - if (! t_data.IsArray) { - list = (IList) Activator.CreateInstance (inst_type); - elem_type = t_data.ElementType; - } else { - list = new ArrayList (); - elem_type = inst_type.GetElementType (); - } - - list.Clear(); - - while (true) { - object item = ReadValue (elem_type, reader); - if (item == null && reader.Token == JsonToken.ArrayEnd) - break; - - list.Add (item); - } - - if (t_data.IsArray) { - int n = list.Count; - instance = Array.CreateInstance (elem_type, n); - - for (int i = 0; i < n; i++) - ((Array) instance).SetValue (list[i], i); - } else - instance = list; - - } else if (reader.Token == JsonToken.ObjectStart) { - AddObjectMetadata (value_type); - ObjectMetadata t_data = object_metadata[value_type]; - - instance = Activator.CreateInstance (value_type); - - while (true) { - reader.Read (); - - if (reader.Token == JsonToken.ObjectEnd) - break; - - string property = (string) reader.Value; - - if (t_data.Properties.ContainsKey (property)) { - PropertyMetadata prop_data = - t_data.Properties[property]; - - if (prop_data.IsField) { - ((FieldInfo) prop_data.Info).SetValue ( - instance, ReadValue (prop_data.Type, reader)); - } else { - PropertyInfo p_info = - (PropertyInfo) prop_data.Info; - - if (p_info.CanWrite) - p_info.SetValue ( - instance, - ReadValue (prop_data.Type, reader), - null); - else - ReadValue (prop_data.Type, reader); - } - - } else { - if (! t_data.IsDictionary) { - - if (! reader.SkipNonMembers) { - throw new JsonException (String.Format ( - "The type {0} doesn't have the " + - "property '{1}'", - inst_type, property)); - } else { - ReadSkip (reader); - continue; - } - } - - ((IDictionary) instance).Add ( - property, ReadValue ( - t_data.ElementType, reader)); - } - - } - - } - - return instance; - } - - private static IJsonWrapper ReadValue (WrapperFactory factory, - JsonReader reader) - { - reader.Read (); - - if (reader.Token == JsonToken.ArrayEnd || - reader.Token == JsonToken.Null) - return null; - - IJsonWrapper instance = factory (); - - if (reader.Token == JsonToken.String) { - instance.SetString ((string) reader.Value); - return instance; - } - - if (reader.Token == JsonToken.Double) { - instance.SetDouble ((double) reader.Value); - return instance; - } - - if (reader.Token == JsonToken.Int) { - instance.SetInt ((int) reader.Value); - return instance; - } - - if (reader.Token == JsonToken.Long) { - instance.SetLong ((long) reader.Value); - return instance; - } - - if (reader.Token == JsonToken.Boolean) { - instance.SetBoolean ((bool) reader.Value); - return instance; - } - - if (reader.Token == JsonToken.ArrayStart) { - instance.SetJsonType (JsonType.Array); - - while (true) { - IJsonWrapper item = ReadValue (factory, reader); - if (item == null && reader.Token == JsonToken.ArrayEnd) - break; - - ((IList) instance).Add (item); - } - } - else if (reader.Token == JsonToken.ObjectStart) { - instance.SetJsonType (JsonType.Object); - - while (true) { - reader.Read (); - - if (reader.Token == JsonToken.ObjectEnd) - break; - - string property = (string) reader.Value; - - ((IDictionary) instance)[property] = ReadValue ( - factory, reader); - } - - } - - return instance; - } - - private static void ReadSkip (JsonReader reader) - { - ToWrapper ( - delegate { return new JsonMockWrapper (); }, reader); - } - - private static void RegisterBaseExporters () - { - base_exporters_table[typeof (byte)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToInt32 ((byte) obj)); - }; - - base_exporters_table[typeof (char)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToString ((char) obj)); - }; - - base_exporters_table[typeof (DateTime)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToString ((DateTime) obj, - datetime_format)); - }; - - base_exporters_table[typeof (decimal)] = - delegate (object obj, JsonWriter writer) { - writer.Write ((decimal) obj); - }; - - base_exporters_table[typeof (sbyte)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToInt32 ((sbyte) obj)); - }; - - base_exporters_table[typeof (short)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToInt32 ((short) obj)); - }; - - base_exporters_table[typeof (ushort)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToInt32 ((ushort) obj)); - }; - - base_exporters_table[typeof (uint)] = - delegate (object obj, JsonWriter writer) { - writer.Write (Convert.ToUInt64 ((uint) obj)); - }; - - base_exporters_table[typeof (ulong)] = - delegate (object obj, JsonWriter writer) { - writer.Write ((ulong) obj); - }; - - base_exporters_table[typeof(DateTimeOffset)] = - delegate (object obj, JsonWriter writer) { - writer.Write(((DateTimeOffset)obj).ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz", datetime_format)); - }; - } - - private static void RegisterBaseImporters () - { - ImporterFunc importer; - - importer = delegate (object input) { - return Convert.ToByte ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (byte), importer); - - importer = delegate (object input) { - return Convert.ToUInt64 ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (ulong), importer); - - importer = delegate (object input) { - return Convert.ToInt64((int)input); - }; - RegisterImporter(base_importers_table, typeof(int), - typeof(long), importer); - - importer = delegate (object input) { - return Convert.ToSByte ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (sbyte), importer); - - importer = delegate (object input) { - return Convert.ToInt16 ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (short), importer); - - importer = delegate (object input) { - return Convert.ToUInt16 ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (ushort), importer); - - importer = delegate (object input) { - return Convert.ToUInt32 ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (uint), importer); - - importer = delegate (object input) { - return Convert.ToSingle ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (float), importer); - - importer = delegate (object input) { - return Convert.ToDouble ((int) input); - }; - RegisterImporter (base_importers_table, typeof (int), - typeof (double), importer); - - importer = delegate (object input) { - return Convert.ToDecimal ((double) input); - }; - RegisterImporter (base_importers_table, typeof (double), - typeof (decimal), importer); - - importer = delegate (object input) { - return Convert.ToSingle((double)input); - }; - RegisterImporter(base_importers_table, typeof(double), - typeof(float), importer); - - importer = delegate (object input) { - return Convert.ToUInt32 ((long) input); - }; - RegisterImporter (base_importers_table, typeof (long), - typeof (uint), importer); - - importer = delegate (object input) { - return Convert.ToChar ((string) input); - }; - RegisterImporter (base_importers_table, typeof (string), - typeof (char), importer); - - importer = delegate (object input) { - return Convert.ToDateTime ((string) input, datetime_format); - }; - RegisterImporter (base_importers_table, typeof (string), - typeof (DateTime), importer); - - importer = delegate (object input) { - return DateTimeOffset.Parse((string)input, datetime_format); - }; - RegisterImporter(base_importers_table, typeof(string), - typeof(DateTimeOffset), importer); - } - - private static void RegisterImporter ( - IDictionary> table, - Type json_type, Type value_type, ImporterFunc importer) - { - if (! table.ContainsKey (json_type)) - table.Add (json_type, new Dictionary ()); - - table[json_type][value_type] = importer; - } - - private static void WriteValue (object obj, JsonWriter writer, - bool writer_is_private, - int depth) - { - if (depth > max_nesting_depth) - throw new JsonException ( - String.Format ("Max allowed object depth reached while " + - "trying to export from type {0}", - obj.GetType ())); - - if (obj == null) { - writer.Write (null); - return; - } - - if (obj is IJsonWrapper) { - if (writer_is_private) - writer.TextWriter.Write (((IJsonWrapper) obj).ToJson ()); - else - ((IJsonWrapper) obj).ToJson (writer); - - return; - } - - if (obj is String) { - writer.Write ((string) obj); - return; - } - - if (obj is Double) { - writer.Write ((double) obj); - return; - } - - if (obj is Single) - { - writer.Write((float)obj); - return; - } - - if (obj is Int32) { - writer.Write ((int) obj); - return; - } - - if (obj is Boolean) { - writer.Write ((bool) obj); - return; - } - - if (obj is Int64) { - writer.Write ((long) obj); - return; - } - - if (obj is Array) { - writer.WriteArrayStart (); - - foreach (object elem in (Array) obj) - WriteValue (elem, writer, writer_is_private, depth + 1); - - writer.WriteArrayEnd (); - - return; - } - - if (obj is IList) { - writer.WriteArrayStart (); - foreach (object elem in (IList) obj) - WriteValue (elem, writer, writer_is_private, depth + 1); - writer.WriteArrayEnd (); - - return; - } - - if (obj is IDictionary dictionary) { - writer.WriteObjectStart (); - foreach (DictionaryEntry entry in dictionary) { - var propertyName = entry.Key is string key ? - key - : Convert.ToString(entry.Key, CultureInfo.InvariantCulture); - writer.WritePropertyName (propertyName); - WriteValue (entry.Value, writer, writer_is_private, - depth + 1); - } - writer.WriteObjectEnd (); - - return; - } - - Type obj_type = obj.GetType (); - - // See if there's a custom exporter for the object - if (custom_exporters_table.ContainsKey (obj_type)) { - ExporterFunc exporter = custom_exporters_table[obj_type]; - exporter (obj, writer); - - return; - } - - // If not, maybe there's a base exporter - if (base_exporters_table.ContainsKey (obj_type)) { - ExporterFunc exporter = base_exporters_table[obj_type]; - exporter (obj, writer); - - return; - } - - // Last option, let's see if it's an enum - if (obj is Enum) { - Type e_type = Enum.GetUnderlyingType (obj_type); - - if (e_type == typeof (long)) - writer.Write ((long) obj); - else if (e_type == typeof (uint)) - writer.Write ((uint) obj); - else if (e_type == typeof (ulong)) - writer.Write ((ulong) obj); - else if (e_type == typeof(ushort)) - writer.Write ((ushort)obj); - else if (e_type == typeof(short)) - writer.Write ((short)obj); - else if (e_type == typeof(byte)) - writer.Write ((byte)obj); - else if (e_type == typeof(sbyte)) - writer.Write ((sbyte)obj); - else - writer.Write ((int) obj); - - return; - } - - // Okay, so it looks like the input should be exported as an - // object - AddTypeProperties (obj_type); - IList props = type_properties[obj_type]; - - writer.WriteObjectStart (); - foreach (PropertyMetadata p_data in props) { - if (p_data.IsField) { - writer.WritePropertyName (p_data.Info.Name); - WriteValue (((FieldInfo) p_data.Info).GetValue (obj), - writer, writer_is_private, depth + 1); - } - else { - PropertyInfo p_info = (PropertyInfo) p_data.Info; - - if (p_info.CanRead) { - writer.WritePropertyName (p_data.Info.Name); - WriteValue (p_info.GetValue (obj, null), - writer, writer_is_private, depth + 1); - } - } - } - writer.WriteObjectEnd (); - } - #endregion - - - public static string ToJson (object obj) - { - lock (static_writer_lock) { - static_writer.Reset (); - - WriteValue (obj, static_writer, true, 0); - - return static_writer.ToString (); - } - } - - public static void ToJson (object obj, JsonWriter writer) - { - WriteValue (obj, writer, false, 0); - } - - public static JsonData ToObject (JsonReader reader) - { - return (JsonData) ToWrapper ( - delegate { return new JsonData (); }, reader); - } - - public static JsonData ToObject (TextReader reader) - { - JsonReader json_reader = new JsonReader (reader); - - return (JsonData) ToWrapper ( - delegate { return new JsonData (); }, json_reader); - } - - public static JsonData ToObject (string json) - { - return (JsonData) ToWrapper ( - delegate { return new JsonData (); }, json); - } - - public static T ToObject (JsonReader reader) - { - return (T) ReadValue (typeof (T), reader); - } - - public static T ToObject (TextReader reader) - { - JsonReader json_reader = new JsonReader (reader); - - return (T) ReadValue (typeof (T), json_reader); - } - - public static T ToObject (string json) - { - JsonReader reader = new JsonReader (json); - - return (T) ReadValue (typeof (T), reader); - } - - public static object ToObject(string json, Type ConvertType ) - { - JsonReader reader = new JsonReader(json); - - return ReadValue(ConvertType, reader); - } - - public static IJsonWrapper ToWrapper (WrapperFactory factory, - JsonReader reader) - { - return ReadValue (factory, reader); - } - - public static IJsonWrapper ToWrapper (WrapperFactory factory, - string json) - { - JsonReader reader = new JsonReader (json); - - return ReadValue (factory, reader); - } - - public static void RegisterExporter (ExporterFunc exporter) - { - ExporterFunc exporter_wrapper = - delegate (object obj, JsonWriter writer) { - exporter ((T) obj, writer); - }; - - custom_exporters_table[typeof (T)] = exporter_wrapper; - } - - public static void RegisterImporter ( - ImporterFunc importer) - { - ImporterFunc importer_wrapper = - delegate (object input) { - return importer ((TJson) input); - }; - - RegisterImporter (custom_importers_table, typeof (TJson), - typeof (TValue), importer_wrapper); - } - - public static void UnregisterExporters () - { - custom_exporters_table.Clear (); - } - - public static void UnregisterImporters () - { - custom_importers_table.Clear (); - } - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs.meta deleted file mode 100644 index b3aaf8c..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMapper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eee18851e387ee44eb4d6970153cb573 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs deleted file mode 100644 index dfe7adb..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs +++ /dev/null @@ -1,105 +0,0 @@ -#region Header -/** - * JsonMockWrapper.cs - * Mock object implementing IJsonWrapper, to facilitate actions like - * skipping data more efficiently. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; -using System.Collections; -using System.Collections.Specialized; - - -namespace LitJson -{ - public class JsonMockWrapper : IJsonWrapper - { - public bool IsArray { get { return false; } } - public bool IsBoolean { get { return false; } } - public bool IsDouble { get { return false; } } - public bool IsInt { get { return false; } } - public bool IsLong { get { return false; } } - public bool IsObject { get { return false; } } - public bool IsString { get { return false; } } - - public bool GetBoolean () { return false; } - public double GetDouble () { return 0.0; } - public int GetInt () { return 0; } - public JsonType GetJsonType () { return JsonType.None; } - public long GetLong () { return 0L; } - public string GetString () { return ""; } - - public void SetBoolean (bool val) {} - public void SetDouble (double val) {} - public void SetInt (int val) {} - public void SetJsonType (JsonType type) {} - public void SetLong (long val) {} - public void SetString (string val) {} - - public string ToJson () { return ""; } - public void ToJson (JsonWriter writer) {} - - - bool IList.IsFixedSize { get { return true; } } - bool IList.IsReadOnly { get { return true; } } - - object IList.this[int index] { - get { return null; } - set {} - } - - int IList.Add (object value) { return 0; } - void IList.Clear () {} - bool IList.Contains (object value) { return false; } - int IList.IndexOf (object value) { return -1; } - void IList.Insert (int i, object v) {} - void IList.Remove (object value) {} - void IList.RemoveAt (int index) {} - - - int ICollection.Count { get { return 0; } } - bool ICollection.IsSynchronized { get { return false; } } - object ICollection.SyncRoot { get { return null; } } - - void ICollection.CopyTo (Array array, int index) {} - - - IEnumerator IEnumerable.GetEnumerator () { return null; } - - - bool IDictionary.IsFixedSize { get { return true; } } - bool IDictionary.IsReadOnly { get { return true; } } - - ICollection IDictionary.Keys { get { return null; } } - ICollection IDictionary.Values { get { return null; } } - - object IDictionary.this[object key] { - get { return null; } - set {} - } - - void IDictionary.Add (object k, object v) {} - void IDictionary.Clear () {} - bool IDictionary.Contains (object key) { return false; } - void IDictionary.Remove (object key) {} - - IDictionaryEnumerator IDictionary.GetEnumerator () { return null; } - - - object IOrderedDictionary.this[int idx] { - get { return null; } - set {} - } - - IDictionaryEnumerator IOrderedDictionary.GetEnumerator () { - return null; - } - void IOrderedDictionary.Insert (int i, object k, object v) {} - void IOrderedDictionary.RemoveAt (int i) {} - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs.meta deleted file mode 100644 index 4c61ee5..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonMockWrapper.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 792be869f37582544adeef13fc998eed -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs deleted file mode 100644 index e47eabc..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs +++ /dev/null @@ -1,478 +0,0 @@ -#region Header -/** - * JsonReader.cs - * Stream-like access to JSON text. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Text; - - -namespace LitJson -{ - public enum JsonToken - { - None, - - ObjectStart, - PropertyName, - ObjectEnd, - - ArrayStart, - ArrayEnd, - - Int, - Long, - Double, - - String, - - Boolean, - Null - } - - - public class JsonReader - { - #region Fields - private static readonly IDictionary> parse_table; - - private Stack automaton_stack; - private int current_input; - private int current_symbol; - private bool end_of_json; - private bool end_of_input; - private Lexer lexer; - private bool parser_in_string; - private bool parser_return; - private bool read_started; - private TextReader reader; - private bool reader_is_owned; - private bool skip_non_members; - private object token_value; - private JsonToken token; - #endregion - - - #region Public Properties - public bool AllowComments { - get { return lexer.AllowComments; } - set { lexer.AllowComments = value; } - } - - public bool AllowSingleQuotedStrings { - get { return lexer.AllowSingleQuotedStrings; } - set { lexer.AllowSingleQuotedStrings = value; } - } - - public bool SkipNonMembers { - get { return skip_non_members; } - set { skip_non_members = value; } - } - - public bool EndOfInput { - get { return end_of_input; } - } - - public bool EndOfJson { - get { return end_of_json; } - } - - public JsonToken Token { - get { return token; } - } - - public object Value { - get { return token_value; } - } - #endregion - - - #region Constructors - static JsonReader () - { - parse_table = PopulateParseTable (); - } - - public JsonReader (string json_text) : - this (new StringReader (json_text), true) - { - } - - public JsonReader (TextReader reader) : - this (reader, false) - { - } - - private JsonReader (TextReader reader, bool owned) - { - if (reader == null) - throw new ArgumentNullException ("reader"); - - parser_in_string = false; - parser_return = false; - - read_started = false; - automaton_stack = new Stack (); - automaton_stack.Push ((int) ParserToken.End); - automaton_stack.Push ((int) ParserToken.Text); - - lexer = new Lexer (reader); - - end_of_input = false; - end_of_json = false; - - skip_non_members = true; - - this.reader = reader; - reader_is_owned = owned; - } - #endregion - - - #region Static Methods - private static IDictionary> PopulateParseTable () - { - // See section A.2. of the manual for details - IDictionary> parse_table = new Dictionary> (); - - TableAddRow (parse_table, ParserToken.Array); - TableAddCol (parse_table, ParserToken.Array, '[', - '[', - (int) ParserToken.ArrayPrime); - - TableAddRow (parse_table, ParserToken.ArrayPrime); - TableAddCol (parse_table, ParserToken.ArrayPrime, '"', - (int) ParserToken.Value, - - (int) ParserToken.ValueRest, - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, '[', - (int) ParserToken.Value, - (int) ParserToken.ValueRest, - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, ']', - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, '{', - (int) ParserToken.Value, - (int) ParserToken.ValueRest, - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.Number, - (int) ParserToken.Value, - (int) ParserToken.ValueRest, - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.True, - (int) ParserToken.Value, - (int) ParserToken.ValueRest, - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.False, - (int) ParserToken.Value, - (int) ParserToken.ValueRest, - ']'); - TableAddCol (parse_table, ParserToken.ArrayPrime, (int) ParserToken.Null, - (int) ParserToken.Value, - (int) ParserToken.ValueRest, - ']'); - - TableAddRow (parse_table, ParserToken.Object); - TableAddCol (parse_table, ParserToken.Object, '{', - '{', - (int) ParserToken.ObjectPrime); - - TableAddRow (parse_table, ParserToken.ObjectPrime); - TableAddCol (parse_table, ParserToken.ObjectPrime, '"', - (int) ParserToken.Pair, - (int) ParserToken.PairRest, - '}'); - TableAddCol (parse_table, ParserToken.ObjectPrime, '}', - '}'); - - TableAddRow (parse_table, ParserToken.Pair); - TableAddCol (parse_table, ParserToken.Pair, '"', - (int) ParserToken.String, - ':', - (int) ParserToken.Value); - - TableAddRow (parse_table, ParserToken.PairRest); - TableAddCol (parse_table, ParserToken.PairRest, ',', - ',', - (int) ParserToken.Pair, - (int) ParserToken.PairRest); - TableAddCol (parse_table, ParserToken.PairRest, '}', - (int) ParserToken.Epsilon); - - TableAddRow (parse_table, ParserToken.String); - TableAddCol (parse_table, ParserToken.String, '"', - '"', - (int) ParserToken.CharSeq, - '"'); - - TableAddRow (parse_table, ParserToken.Text); - TableAddCol (parse_table, ParserToken.Text, '[', - (int) ParserToken.Array); - TableAddCol (parse_table, ParserToken.Text, '{', - (int) ParserToken.Object); - - TableAddRow (parse_table, ParserToken.Value); - TableAddCol (parse_table, ParserToken.Value, '"', - (int) ParserToken.String); - TableAddCol (parse_table, ParserToken.Value, '[', - (int) ParserToken.Array); - TableAddCol (parse_table, ParserToken.Value, '{', - (int) ParserToken.Object); - TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.Number, - (int) ParserToken.Number); - TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.True, - (int) ParserToken.True); - TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.False, - (int) ParserToken.False); - TableAddCol (parse_table, ParserToken.Value, (int) ParserToken.Null, - (int) ParserToken.Null); - - TableAddRow (parse_table, ParserToken.ValueRest); - TableAddCol (parse_table, ParserToken.ValueRest, ',', - ',', - (int) ParserToken.Value, - (int) ParserToken.ValueRest); - TableAddCol (parse_table, ParserToken.ValueRest, ']', - (int) ParserToken.Epsilon); - - return parse_table; - } - - private static void TableAddCol (IDictionary> parse_table, ParserToken row, int col, - params int[] symbols) - { - parse_table[(int) row].Add (col, symbols); - } - - private static void TableAddRow (IDictionary> parse_table, ParserToken rule) - { - parse_table.Add ((int) rule, new Dictionary ()); - } - #endregion - - - #region Private Methods - private void ProcessNumber (string number) - { - if (number.IndexOf ('.') != -1 || - number.IndexOf ('e') != -1 || - number.IndexOf ('E') != -1) { - - double n_double; - if (double.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out n_double)) { - token = JsonToken.Double; - token_value = n_double; - - return; - } - } - - int n_int32; - if (int.TryParse (number, NumberStyles.Integer, CultureInfo.InvariantCulture, out n_int32)) { - token = JsonToken.Int; - token_value = n_int32; - - return; - } - - long n_int64; - if (long.TryParse (number, NumberStyles.Integer, CultureInfo.InvariantCulture, out n_int64)) { - token = JsonToken.Long; - token_value = n_int64; - - return; - } - - ulong n_uint64; - if (ulong.TryParse(number, NumberStyles.Integer, CultureInfo.InvariantCulture, out n_uint64)) - { - token = JsonToken.Long; - token_value = n_uint64; - - return; - } - - // Shouldn't happen, but just in case, return something - token = JsonToken.Int; - token_value = 0; - } - - private void ProcessSymbol () - { - if (current_symbol == '[') { - token = JsonToken.ArrayStart; - parser_return = true; - - } else if (current_symbol == ']') { - token = JsonToken.ArrayEnd; - parser_return = true; - - } else if (current_symbol == '{') { - token = JsonToken.ObjectStart; - parser_return = true; - - } else if (current_symbol == '}') { - token = JsonToken.ObjectEnd; - parser_return = true; - - } else if (current_symbol == '"') { - if (parser_in_string) { - parser_in_string = false; - - parser_return = true; - - } else { - if (token == JsonToken.None) - token = JsonToken.String; - - parser_in_string = true; - } - - } else if (current_symbol == (int) ParserToken.CharSeq) { - token_value = lexer.StringValue; - - } else if (current_symbol == (int) ParserToken.False) { - token = JsonToken.Boolean; - token_value = false; - parser_return = true; - - } else if (current_symbol == (int) ParserToken.Null) { - token = JsonToken.Null; - parser_return = true; - - } else if (current_symbol == (int) ParserToken.Number) { - ProcessNumber (lexer.StringValue); - - parser_return = true; - - } else if (current_symbol == (int) ParserToken.Pair) { - token = JsonToken.PropertyName; - - } else if (current_symbol == (int) ParserToken.True) { - token = JsonToken.Boolean; - token_value = true; - parser_return = true; - - } - } - - private bool ReadToken () - { - if (end_of_input) - return false; - - lexer.NextToken (); - - if (lexer.EndOfInput) { - Close (); - - return false; - } - - current_input = lexer.Token; - - return true; - } - #endregion - - - public void Close () - { - if (end_of_input) - return; - - end_of_input = true; - end_of_json = true; - - if (reader_is_owned) - { - using(reader){} - } - - reader = null; - } - - public bool Read () - { - if (end_of_input) - return false; - - if (end_of_json) { - end_of_json = false; - automaton_stack.Clear (); - automaton_stack.Push ((int) ParserToken.End); - automaton_stack.Push ((int) ParserToken.Text); - } - - parser_in_string = false; - parser_return = false; - - token = JsonToken.None; - token_value = null; - - if (! read_started) { - read_started = true; - - if (! ReadToken ()) - return false; - } - - - int[] entry_symbols; - - while (true) { - if (parser_return) { - if (automaton_stack.Peek () == (int) ParserToken.End) - end_of_json = true; - - return true; - } - - current_symbol = automaton_stack.Pop (); - - ProcessSymbol (); - - if (current_symbol == current_input) { - if (! ReadToken ()) { - if (automaton_stack.Peek () != (int) ParserToken.End) - throw new JsonException ( - "Input doesn't evaluate to proper JSON text"); - - if (parser_return) - return true; - - return false; - } - - continue; - } - - try { - - entry_symbols = - parse_table[current_symbol][current_input]; - - } catch (KeyNotFoundException e) { - throw new JsonException ((ParserToken) current_input, e); - } - - if (entry_symbols[0] == (int) ParserToken.Epsilon) - continue; - - for (int i = entry_symbols.Length - 1; i >= 0; i--) - automaton_stack.Push (entry_symbols[i]); - } - } - - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs.meta deleted file mode 100644 index 461265c..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonReader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8172348d84be41e43a9baa039c08bf7a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs deleted file mode 100644 index 4bfaaac..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs +++ /dev/null @@ -1,484 +0,0 @@ -#region Header -/** - * JsonWriter.cs - * Stream-like facility to output JSON text. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Text; - - -namespace LitJson -{ - internal enum Condition - { - InArray, - InObject, - NotAProperty, - Property, - Value - } - - internal class WriterContext - { - public int Count; - public bool InArray; - public bool InObject; - public bool ExpectingValue; - public int Padding; - } - - public class JsonWriter - { - #region Fields - private static readonly NumberFormatInfo number_format; - - private WriterContext context; - private Stack ctx_stack; - private bool has_reached_end; - private char[] hex_seq; - private int indentation; - private int indent_value; - private StringBuilder inst_string_builder; - private bool pretty_print; - private bool validate; - private bool lower_case_properties; - private TextWriter writer; - #endregion - - - #region Properties - public int IndentValue { - get { return indent_value; } - set { - indentation = (indentation / indent_value) * value; - indent_value = value; - } - } - - public bool PrettyPrint { - get { return pretty_print; } - set { pretty_print = value; } - } - - public TextWriter TextWriter { - get { return writer; } - } - - public bool Validate { - get { return validate; } - set { validate = value; } - } - - public bool LowerCaseProperties { - get { return lower_case_properties; } - set { lower_case_properties = value; } - } - #endregion - - - #region Constructors - static JsonWriter () - { - number_format = NumberFormatInfo.InvariantInfo; - } - - public JsonWriter () - { - inst_string_builder = new StringBuilder (); - writer = new StringWriter (inst_string_builder); - - Init (); - } - - public JsonWriter (StringBuilder sb) : - this (new StringWriter (sb)) - { - } - - public JsonWriter (TextWriter writer) - { - if (writer == null) - throw new ArgumentNullException ("writer"); - - this.writer = writer; - - Init (); - } - #endregion - - - #region Private Methods - private void DoValidation (Condition cond) - { - if (! context.ExpectingValue) - context.Count++; - - if (! validate) - return; - - if (has_reached_end) - throw new JsonException ( - "A complete JSON symbol has already been written"); - - switch (cond) { - case Condition.InArray: - if (! context.InArray) - throw new JsonException ( - "Can't close an array here"); - break; - - case Condition.InObject: - if (! context.InObject || context.ExpectingValue) - throw new JsonException ( - "Can't close an object here"); - break; - - case Condition.NotAProperty: - if (context.InObject && ! context.ExpectingValue) - throw new JsonException ( - "Expected a property"); - break; - - case Condition.Property: - if (! context.InObject || context.ExpectingValue) - throw new JsonException ( - "Can't add a property here"); - break; - - case Condition.Value: - if (! context.InArray && - (! context.InObject || ! context.ExpectingValue)) - throw new JsonException ( - "Can't add a value here"); - - break; - } - } - - private void Init () - { - has_reached_end = false; - hex_seq = new char[4]; - indentation = 0; - indent_value = 4; - pretty_print = false; - validate = true; - lower_case_properties = false; - - ctx_stack = new Stack (); - context = new WriterContext (); - ctx_stack.Push (context); - } - - private static void IntToHex (int n, char[] hex) - { - int num; - - for (int i = 0; i < 4; i++) { - num = n % 16; - - if (num < 10) - hex[3 - i] = (char) ('0' + num); - else - hex[3 - i] = (char) ('A' + (num - 10)); - - n >>= 4; - } - } - - private void Indent () - { - if (pretty_print) - indentation += indent_value; - } - - - private void Put (string str) - { - if (pretty_print && ! context.ExpectingValue) - for (int i = 0; i < indentation; i++) - writer.Write (' '); - - writer.Write (str); - } - - private void PutNewline () - { - PutNewline (true); - } - - private void PutNewline (bool add_comma) - { - if (add_comma && ! context.ExpectingValue && - context.Count > 1) - writer.Write (','); - - if (pretty_print && ! context.ExpectingValue) - writer.Write (Environment.NewLine); - } - - private void PutString (string str) - { - Put (String.Empty); - - writer.Write ('"'); - - int n = str.Length; - for (int i = 0; i < n; i++) { - switch (str[i]) { - case '\n': - writer.Write ("\\n"); - continue; - - case '\r': - writer.Write ("\\r"); - continue; - - case '\t': - writer.Write ("\\t"); - continue; - - case '"': - case '\\': - writer.Write ('\\'); - writer.Write (str[i]); - continue; - - case '\f': - writer.Write ("\\f"); - continue; - - case '\b': - writer.Write ("\\b"); - continue; - } - - if ((int) str[i] >= 32 && (int) str[i] <= 126) { - writer.Write (str[i]); - continue; - } - - // Default, turn into a \uXXXX sequence - IntToHex ((int) str[i], hex_seq); - writer.Write ("\\u"); - writer.Write (hex_seq); - } - - writer.Write ('"'); - } - - private void Unindent () - { - if (pretty_print) - indentation -= indent_value; - } - #endregion - - - public override string ToString () - { - if (inst_string_builder == null) - return String.Empty; - - return inst_string_builder.ToString (); - } - - public void Reset () - { - has_reached_end = false; - - ctx_stack.Clear (); - context = new WriterContext (); - ctx_stack.Push (context); - - if (inst_string_builder != null) - inst_string_builder.Remove (0, inst_string_builder.Length); - } - - public void Write (bool boolean) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (boolean ? "true" : "false"); - - context.ExpectingValue = false; - } - - public void Write (decimal number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void Write (double number) - { - DoValidation (Condition.Value); - PutNewline (); - - string str = Convert.ToString (number, number_format); - Put (str); - - if (str.IndexOf ('.') == -1 && - str.IndexOf ('E') == -1) - writer.Write (".0"); - - context.ExpectingValue = false; - } - - public void Write(float number) - { - DoValidation(Condition.Value); - PutNewline(); - - string str = Convert.ToString(number, number_format); - Put(str); - - context.ExpectingValue = false; - } - - public void Write (int number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void Write (long number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void Write (string str) - { - DoValidation (Condition.Value); - PutNewline (); - - if (str == null) - Put ("null"); - else - PutString (str); - - context.ExpectingValue = false; - } - - [CLSCompliant(false)] - public void Write (ulong number) - { - DoValidation (Condition.Value); - PutNewline (); - - Put (Convert.ToString (number, number_format)); - - context.ExpectingValue = false; - } - - public void WriteArrayEnd () - { - DoValidation (Condition.InArray); - PutNewline (false); - - ctx_stack.Pop (); - if (ctx_stack.Count == 1) - has_reached_end = true; - else { - context = ctx_stack.Peek (); - context.ExpectingValue = false; - } - - Unindent (); - Put ("]"); - } - - public void WriteArrayStart () - { - DoValidation (Condition.NotAProperty); - PutNewline (); - - Put ("["); - - context = new WriterContext (); - context.InArray = true; - ctx_stack.Push (context); - - Indent (); - } - - public void WriteObjectEnd () - { - DoValidation (Condition.InObject); - PutNewline (false); - - ctx_stack.Pop (); - if (ctx_stack.Count == 1) - has_reached_end = true; - else { - context = ctx_stack.Peek (); - context.ExpectingValue = false; - } - - Unindent (); - Put ("}"); - } - - public void WriteObjectStart () - { - DoValidation (Condition.NotAProperty); - PutNewline (); - - Put ("{"); - - context = new WriterContext (); - context.InObject = true; - ctx_stack.Push (context); - - Indent (); - } - - public void WritePropertyName (string property_name) - { - DoValidation (Condition.Property); - PutNewline (); - string propertyName = (property_name == null || !lower_case_properties) - ? property_name - : property_name.ToLowerInvariant(); - - PutString (propertyName); - - if (pretty_print) { - if (propertyName.Length > context.Padding) - context.Padding = propertyName.Length; - - for (int i = context.Padding - propertyName.Length; - i >= 0; i--) - writer.Write (' '); - - writer.Write (": "); - } else - writer.Write (':'); - - context.ExpectingValue = true; - } - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs.meta deleted file mode 100644 index 06e050d..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/JsonWriter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 57f2d5d9c46c3a24ca93e6bbcd66bab0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs deleted file mode 100644 index cb62d55..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs +++ /dev/null @@ -1,912 +0,0 @@ -#region Header -/** - * Lexer.cs - * JSON lexer implementation based on a finite state machine. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - - -namespace LitJson -{ - internal class FsmContext - { - public bool Return; - public int NextState; - public Lexer L; - public int StateStack; - } - - - internal class Lexer - { - #region Fields - private delegate bool StateHandler (FsmContext ctx); - - private static readonly int[] fsm_return_table; - private static readonly StateHandler[] fsm_handler_table; - - private bool allow_comments; - private bool allow_single_quoted_strings; - private bool end_of_input; - private FsmContext fsm_context; - private int input_buffer; - private int input_char; - private TextReader reader; - private int state; - private StringBuilder string_buffer; - private string string_value; - private int token; - private int unichar; - #endregion - - - #region Properties - public bool AllowComments { - get { return allow_comments; } - set { allow_comments = value; } - } - - public bool AllowSingleQuotedStrings { - get { return allow_single_quoted_strings; } - set { allow_single_quoted_strings = value; } - } - - public bool EndOfInput { - get { return end_of_input; } - } - - public int Token { - get { return token; } - } - - public string StringValue { - get { return string_value; } - } - #endregion - - - #region Constructors - static Lexer () - { - PopulateFsmTables (out fsm_handler_table, out fsm_return_table); - } - - public Lexer (TextReader reader) - { - allow_comments = true; - allow_single_quoted_strings = true; - - input_buffer = 0; - string_buffer = new StringBuilder (128); - state = 1; - end_of_input = false; - this.reader = reader; - - fsm_context = new FsmContext (); - fsm_context.L = this; - } - #endregion - - - #region Static Methods - private static int HexValue (int digit) - { - switch (digit) { - case 'a': - case 'A': - return 10; - - case 'b': - case 'B': - return 11; - - case 'c': - case 'C': - return 12; - - case 'd': - case 'D': - return 13; - - case 'e': - case 'E': - return 14; - - case 'f': - case 'F': - return 15; - - default: - return digit - '0'; - } - } - - private static void PopulateFsmTables (out StateHandler[] fsm_handler_table, out int[] fsm_return_table) - { - // See section A.1. of the manual for details of the finite - // state machine. - fsm_handler_table = new StateHandler[28] { - State1, - State2, - State3, - State4, - State5, - State6, - State7, - State8, - State9, - State10, - State11, - State12, - State13, - State14, - State15, - State16, - State17, - State18, - State19, - State20, - State21, - State22, - State23, - State24, - State25, - State26, - State27, - State28 - }; - - fsm_return_table = new int[28] { - (int) ParserToken.Char, - 0, - (int) ParserToken.Number, - (int) ParserToken.Number, - 0, - (int) ParserToken.Number, - 0, - (int) ParserToken.Number, - 0, - 0, - (int) ParserToken.True, - 0, - 0, - 0, - (int) ParserToken.False, - 0, - 0, - (int) ParserToken.Null, - (int) ParserToken.CharSeq, - (int) ParserToken.Char, - 0, - 0, - (int) ParserToken.CharSeq, - (int) ParserToken.Char, - 0, - 0, - 0, - 0 - }; - } - - private static char ProcessEscChar (int esc_char) - { - switch (esc_char) { - case '"': - case '\'': - case '\\': - case '/': - return Convert.ToChar (esc_char); - - case 'n': - return '\n'; - - case 't': - return '\t'; - - case 'r': - return '\r'; - - case 'b': - return '\b'; - - case 'f': - return '\f'; - - default: - // Unreachable - return '?'; - } - } - - private static bool State1 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char == ' ' || - ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') - continue; - - if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 3; - return true; - } - - switch (ctx.L.input_char) { - case '"': - ctx.NextState = 19; - ctx.Return = true; - return true; - - case ',': - case ':': - case '[': - case ']': - case '{': - case '}': - ctx.NextState = 1; - ctx.Return = true; - return true; - - case '-': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 2; - return true; - - case '0': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 4; - return true; - - case 'f': - ctx.NextState = 12; - return true; - - case 'n': - ctx.NextState = 16; - return true; - - case 't': - ctx.NextState = 9; - return true; - - case '\'': - if (! ctx.L.allow_single_quoted_strings) - return false; - - ctx.L.input_char = '"'; - ctx.NextState = 23; - ctx.Return = true; - return true; - - case '/': - if (! ctx.L.allow_comments) - return false; - - ctx.NextState = 25; - return true; - - default: - return false; - } - } - - return true; - } - - private static bool State2 (FsmContext ctx) - { - ctx.L.GetChar (); - - if (ctx.L.input_char >= '1' && ctx.L.input_char<= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 3; - return true; - } - - switch (ctx.L.input_char) { - case '0': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 4; - return true; - - default: - return false; - } - } - - private static bool State3 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - continue; - } - - if (ctx.L.input_char == ' ' || - ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { - ctx.Return = true; - ctx.NextState = 1; - return true; - } - - switch (ctx.L.input_char) { - case ',': - case ']': - case '}': - ctx.L.UngetChar (); - ctx.Return = true; - ctx.NextState = 1; - return true; - - case '.': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 5; - return true; - - case 'e': - case 'E': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 7; - return true; - - default: - return false; - } - } - return true; - } - - private static bool State4 (FsmContext ctx) - { - ctx.L.GetChar (); - - if (ctx.L.input_char == ' ' || - ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { - ctx.Return = true; - ctx.NextState = 1; - return true; - } - - switch (ctx.L.input_char) { - case ',': - case ']': - case '}': - ctx.L.UngetChar (); - ctx.Return = true; - ctx.NextState = 1; - return true; - - case '.': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 5; - return true; - - case 'e': - case 'E': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 7; - return true; - - default: - return false; - } - } - - private static bool State5 (FsmContext ctx) - { - ctx.L.GetChar (); - - if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 6; - return true; - } - - return false; - } - - private static bool State6 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - continue; - } - - if (ctx.L.input_char == ' ' || - ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { - ctx.Return = true; - ctx.NextState = 1; - return true; - } - - switch (ctx.L.input_char) { - case ',': - case ']': - case '}': - ctx.L.UngetChar (); - ctx.Return = true; - ctx.NextState = 1; - return true; - - case 'e': - case 'E': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 7; - return true; - - default: - return false; - } - } - - return true; - } - - private static bool State7 (FsmContext ctx) - { - ctx.L.GetChar (); - - if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 8; - return true; - } - - switch (ctx.L.input_char) { - case '+': - case '-': - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - ctx.NextState = 8; - return true; - - default: - return false; - } - } - - private static bool State8 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') { - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - continue; - } - - if (ctx.L.input_char == ' ' || - ctx.L.input_char >= '\t' && ctx.L.input_char<= '\r') { - ctx.Return = true; - ctx.NextState = 1; - return true; - } - - switch (ctx.L.input_char) { - case ',': - case ']': - case '}': - ctx.L.UngetChar (); - ctx.Return = true; - ctx.NextState = 1; - return true; - - default: - return false; - } - } - - return true; - } - - private static bool State9 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'r': - ctx.NextState = 10; - return true; - - default: - return false; - } - } - - private static bool State10 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'u': - ctx.NextState = 11; - return true; - - default: - return false; - } - } - - private static bool State11 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'e': - ctx.Return = true; - ctx.NextState = 1; - return true; - - default: - return false; - } - } - - private static bool State12 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'a': - ctx.NextState = 13; - return true; - - default: - return false; - } - } - - private static bool State13 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'l': - ctx.NextState = 14; - return true; - - default: - return false; - } - } - - private static bool State14 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 's': - ctx.NextState = 15; - return true; - - default: - return false; - } - } - - private static bool State15 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'e': - ctx.Return = true; - ctx.NextState = 1; - return true; - - default: - return false; - } - } - - private static bool State16 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'u': - ctx.NextState = 17; - return true; - - default: - return false; - } - } - - private static bool State17 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'l': - ctx.NextState = 18; - return true; - - default: - return false; - } - } - - private static bool State18 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'l': - ctx.Return = true; - ctx.NextState = 1; - return true; - - default: - return false; - } - } - - private static bool State19 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - switch (ctx.L.input_char) { - case '"': - ctx.L.UngetChar (); - ctx.Return = true; - ctx.NextState = 20; - return true; - - case '\\': - ctx.StateStack = 19; - ctx.NextState = 21; - return true; - - default: - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - continue; - } - } - - return true; - } - - private static bool State20 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case '"': - ctx.Return = true; - ctx.NextState = 1; - return true; - - default: - return false; - } - } - - private static bool State21 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case 'u': - ctx.NextState = 22; - return true; - - case '"': - case '\'': - case '/': - case '\\': - case 'b': - case 'f': - case 'n': - case 'r': - case 't': - ctx.L.string_buffer.Append ( - ProcessEscChar (ctx.L.input_char)); - ctx.NextState = ctx.StateStack; - return true; - - default: - return false; - } - } - - private static bool State22 (FsmContext ctx) - { - int counter = 0; - int mult = 4096; - - ctx.L.unichar = 0; - - while (ctx.L.GetChar ()) { - - if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' || - ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' || - ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') { - - ctx.L.unichar += HexValue (ctx.L.input_char) * mult; - - counter++; - mult /= 16; - - if (counter == 4) { - ctx.L.string_buffer.Append ( - Convert.ToChar (ctx.L.unichar)); - ctx.NextState = ctx.StateStack; - return true; - } - - continue; - } - - return false; - } - - return true; - } - - private static bool State23 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - switch (ctx.L.input_char) { - case '\'': - ctx.L.UngetChar (); - ctx.Return = true; - ctx.NextState = 24; - return true; - - case '\\': - ctx.StateStack = 23; - ctx.NextState = 21; - return true; - - default: - ctx.L.string_buffer.Append ((char) ctx.L.input_char); - continue; - } - } - - return true; - } - - private static bool State24 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case '\'': - ctx.L.input_char = '"'; - ctx.Return = true; - ctx.NextState = 1; - return true; - - default: - return false; - } - } - - private static bool State25 (FsmContext ctx) - { - ctx.L.GetChar (); - - switch (ctx.L.input_char) { - case '*': - ctx.NextState = 27; - return true; - - case '/': - ctx.NextState = 26; - return true; - - default: - return false; - } - } - - private static bool State26 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char == '\n') { - ctx.NextState = 1; - return true; - } - } - - return true; - } - - private static bool State27 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char == '*') { - ctx.NextState = 28; - return true; - } - } - - return true; - } - - private static bool State28 (FsmContext ctx) - { - while (ctx.L.GetChar ()) { - if (ctx.L.input_char == '*') - continue; - - if (ctx.L.input_char == '/') { - ctx.NextState = 1; - return true; - } - - ctx.NextState = 27; - return true; - } - - return true; - } - #endregion - - - private bool GetChar () - { - if ((input_char = NextChar ()) != -1) - return true; - - end_of_input = true; - return false; - } - - private int NextChar () - { - if (input_buffer != 0) { - int tmp = input_buffer; - input_buffer = 0; - - return tmp; - } - - return reader.Read (); - } - - public bool NextToken () - { - StateHandler handler; - fsm_context.Return = false; - - while (true) { - handler = fsm_handler_table[state - 1]; - - if (! handler (fsm_context)) - throw new JsonException (input_char); - - if (end_of_input) - return false; - - if (fsm_context.Return) { - string_value = string_buffer.ToString (); - string_buffer.Remove (0, string_buffer.Length); - token = fsm_return_table[state - 1]; - - if (token == (int) ParserToken.Char) - token = input_char; - - state = fsm_context.NextState; - - return true; - } - - state = fsm_context.NextState; - } - } - - private void UngetChar () - { - input_buffer = input_char; - } - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs.meta deleted file mode 100644 index 2ab619c..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/Lexer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bfa419e8f64767640a5dace002948765 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj b/WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj deleted file mode 100644 index 5840e20..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj +++ /dev/null @@ -1,82 +0,0 @@ - - - - netstandard2.1;netstandard2.0;net45;net48;netstandard1.5;net40;net35;net20;net6.0 - - - - false - embedded - true - true - true - - - - - - - - - - LitJson - A .NET library to handle conversions from and to JSON (JavaScript Object Notation) strings. Written in C#, and it’s intended to be small, fast and easy to use. -It's quick and lean, without external dependencies. - The authors disclaim copyright to this source code. - Leonardo Boshell, Mattias Karlsson and contributors - Leonardo Boshell, Mattias Karlsson and contributors - Unlicense - litjson.png - https://github.com/LitJSON/litjson - git - JSON;Serializer - true - - - - - - - - $(DefineConstants);LEGACY - - - - $(DefineConstants);LEGACY - - - - $(DefineConstants);LEGACY - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - all - runtime; build; native; contentfiles; analyzers - - - all - runtime; build; native; contentfiles; analyzers - - - all - runtime; build; native; contentfiles; analyzers - - - all - runtime; build; native; contentfiles; analyzers - - - - diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj.meta deleted file mode 100644 index 1892928..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/LitJSON.csproj.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f685021b13e261c4ab073d8315dd85fc -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs deleted file mode 100644 index 55b02a2..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs +++ /dev/null @@ -1,24 +0,0 @@ -#if NETSTANDARD1_5 -using System; -using System.Reflection; -namespace LitJson -{ - internal static class Netstandard15Polyfill - { - internal static Type GetInterface(this Type type, string name) - { - return type.GetTypeInfo().GetInterface(name); - } - - internal static bool IsClass(this Type type) - { - return type.GetTypeInfo().IsClass; - } - - internal static bool IsEnum(this Type type) - { - return type.GetTypeInfo().IsEnum; - } - } -} -#endif \ No newline at end of file diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs.meta deleted file mode 100644 index f87da4f..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/Netstandard15Polyfill.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7c453cdd2005fc241b26114aca0c98af -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs b/WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs deleted file mode 100644 index e23d477..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs +++ /dev/null @@ -1,44 +0,0 @@ -#region Header -/** - * ParserToken.cs - * Internal representation of the tokens used by the lexer and the parser. - * - * The authors disclaim copyright to this source code. For more details, see - * the COPYING file included with this distribution. - **/ -#endregion - - -namespace LitJson -{ - internal enum ParserToken - { - // Lexer tokens (see section A.1.1. of the manual) - None = System.Char.MaxValue + 1, - Number, - True, - False, - Null, - CharSeq, - // Single char - Char, - - // Parser Rules (see section A.2.1 of the manual) - Text, - Object, - ObjectPrime, - Pair, - PairRest, - Array, - ArrayPrime, - Value, - ValueRest, - String, - - // End of input - End, - - // The empty rule - Epsilon - } -} diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs.meta deleted file mode 100644 index a312ce8..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/ParserToken.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dad2aebdd150e9f47b4cf679ede86953 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png b/WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png deleted file mode 100644 index a4c15e5..0000000 Binary files a/WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png and /dev/null differ diff --git a/WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png.meta b/WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png.meta deleted file mode 100644 index 1331b28..0000000 --- a/WorldlineKeepers/Assets/Standard Assets/LitJson/litjson.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: 41507efea6a71044a9a6353ab9e7f770 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 8 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson.meta new file mode 100644 index 0000000..662dc44 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9ccf60bb6d211e43b32dcc579bc9c21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs new file mode 100644 index 0000000..db0963a --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs @@ -0,0 +1,60 @@ +#region Header +/** + * IJsonWrapper.cs + * Interface that represents a type capable of handling all kinds of JSON + * data. This is mainly used when mapping objects through JsonMapper, and + * it's implemented by JsonData. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System.Collections; +using System.Collections.Specialized; + + +namespace LitJson +{ + public enum JsonType + { + None, + + Object, + Array, + String, + Int, + Long, + Double, + Boolean + } + + public interface IJsonWrapper : IList, IOrderedDictionary + { + bool IsArray { get; } + bool IsBoolean { get; } + bool IsDouble { get; } + bool IsInt { get; } + bool IsLong { get; } + bool IsObject { get; } + bool IsString { get; } + + bool GetBoolean (); + double GetDouble (); + int GetInt (); + JsonType GetJsonType (); + long GetLong (); + string GetString (); + + void SetBoolean (bool val); + void SetDouble (double val); + void SetInt (int val); + void SetJsonType (JsonType type); + void SetLong (long val); + void SetString (string val); + + string ToJson (); + void ToJson (JsonWriter writer); + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs.meta new file mode 100644 index 0000000..14fc748 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/IJsonWrapper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: de017f99299ca2e45adc9613360567df +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs new file mode 100644 index 0000000..fd34425 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs @@ -0,0 +1,1032 @@ +#region Header +/** + * JsonData.cs + * Generic type to hold JSON data (objects, arrays, and so on). This is + * the default type returned by JsonMapper.ToObject(). + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.IO; + + +namespace LitJson +{ + public sealed class JsonData : IJsonWrapper, IEquatable + { + #region Fields + private IList inst_array; + private bool inst_boolean; + private double inst_double; + private int inst_int; + private long inst_long; + private IDictionary inst_object; + private string inst_string; + private string json; + private JsonType type; + + // Used to implement the IOrderedDictionary interface + private IList> object_list; + #endregion + + + #region Properties + public int Count { + get { return EnsureCollection ().Count; } + } + + public bool IsArray { + get { return type == JsonType.Array; } + } + + public bool IsBoolean { + get { return type == JsonType.Boolean; } + } + + public bool IsDouble { + get { return type == JsonType.Double; } + } + + public bool IsInt { + get { return type == JsonType.Int; } + } + + public bool IsLong { + get { return type == JsonType.Long; } + } + + public bool IsObject { + get { return type == JsonType.Object; } + } + + public bool IsString { + get { return type == JsonType.String; } + } + + public IDictionary Inst_Object + { + get { + if (type == JsonType.Object) + return inst_object; + else + return null; + } + } + #endregion + + + #region ICollection Properties + int ICollection.Count { + get { + return Count; + } + } + + bool ICollection.IsSynchronized { + get { + return EnsureCollection ().IsSynchronized; + } + } + + object ICollection.SyncRoot { + get { + return EnsureCollection ().SyncRoot; + } + } + #endregion + + + #region IDictionary Properties + bool IDictionary.IsFixedSize { + get { + return EnsureDictionary ().IsFixedSize; + } + } + + bool IDictionary.IsReadOnly { + get { + return EnsureDictionary ().IsReadOnly; + } + } + + ICollection IDictionary.Keys { + get { + EnsureDictionary (); + IList keys = new List (); + + foreach (KeyValuePair entry in + object_list) { + keys.Add (entry.Key); + } + + return (ICollection) keys; + } + } + + ICollection IDictionary.Values { + get { + EnsureDictionary (); + IList values = new List (); + + foreach (KeyValuePair entry in + object_list) { + values.Add (entry.Value); + } + + return (ICollection) values; + } + } + #endregion + + + + #region IJsonWrapper Properties + bool IJsonWrapper.IsArray { + get { return IsArray; } + } + + bool IJsonWrapper.IsBoolean { + get { return IsBoolean; } + } + + bool IJsonWrapper.IsDouble { + get { return IsDouble; } + } + + bool IJsonWrapper.IsInt { + get { return IsInt; } + } + + bool IJsonWrapper.IsLong { + get { return IsLong; } + } + + bool IJsonWrapper.IsObject { + get { return IsObject; } + } + + bool IJsonWrapper.IsString { + get { return IsString; } + } + #endregion + + + #region IList Properties + bool IList.IsFixedSize { + get { + return EnsureList ().IsFixedSize; + } + } + + bool IList.IsReadOnly { + get { + return EnsureList ().IsReadOnly; + } + } + #endregion + + + #region IDictionary Indexer + object IDictionary.this[object key] { + get { + return EnsureDictionary ()[key]; + } + + set { + if (! (key is String)) + throw new ArgumentException ( + "The key has to be a string"); + + JsonData data = ToJsonData (value); + + this[(string) key] = data; + } + } + #endregion + + + #region IOrderedDictionary Indexer + object IOrderedDictionary.this[int idx] { + get { + EnsureDictionary (); + return object_list[idx].Value; + } + + set { + EnsureDictionary (); + JsonData data = ToJsonData (value); + + KeyValuePair old_entry = object_list[idx]; + + inst_object[old_entry.Key] = data; + + KeyValuePair entry = + new KeyValuePair (old_entry.Key, data); + + object_list[idx] = entry; + } + } + #endregion + + + #region IList Indexer + object IList.this[int index] { + get { + return EnsureList ()[index]; + } + + set { + EnsureList (); + JsonData data = ToJsonData (value); + + this[index] = data; + } + } + #endregion + + + #region Public Indexers + public JsonData this[string prop_name] { + get { + EnsureDictionary (); + return inst_object[prop_name]; + } + + set { + EnsureDictionary (); + + KeyValuePair entry = + new KeyValuePair (prop_name, value); + + if (inst_object.ContainsKey (prop_name)) { + for (int i = 0; i < object_list.Count; i++) { + if (object_list[i].Key == prop_name) { + object_list[i] = entry; + break; + } + } + } else + object_list.Add (entry); + + inst_object[prop_name] = value; + + json = null; + } + } + + public JsonData this[int index] { + get { + EnsureCollection (); + + if (type == JsonType.Array) + return inst_array[index]; + + return object_list[index].Value; + } + + set { + EnsureCollection (); + + if (type == JsonType.Array) + inst_array[index] = value; + else { + KeyValuePair entry = object_list[index]; + KeyValuePair new_entry = + new KeyValuePair (entry.Key, value); + + object_list[index] = new_entry; + inst_object[entry.Key] = value; + } + + json = null; + } + } + #endregion + + + #region Constructors + public JsonData () + { + } + + public JsonData (bool boolean) + { + type = JsonType.Boolean; + inst_boolean = boolean; + } + + public JsonData (double number) + { + type = JsonType.Double; + inst_double = number; + } + + public JsonData (int number) + { + type = JsonType.Int; + inst_int = number; + } + + public JsonData (long number) + { + type = JsonType.Long; + inst_long = number; + } + + public JsonData (object obj) + { + if (obj is Boolean) { + type = JsonType.Boolean; + inst_boolean = (bool) obj; + return; + } + + if (obj is Double) { + type = JsonType.Double; + inst_double = (double) obj; + return; + } + + if (obj is Int32) { + type = JsonType.Int; + inst_int = (int) obj; + return; + } + + if (obj is Int64) { + type = JsonType.Long; + inst_long = (long) obj; + return; + } + + if (obj is String) { + type = JsonType.String; + inst_string = (string) obj; + return; + } + + throw new ArgumentException ( + "Unable to wrap the given object with JsonData"); + } + + public JsonData (string str) + { + type = JsonType.String; + inst_string = str; + } + #endregion + + + #region Implicit Conversions + public static implicit operator JsonData (Boolean data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (Double data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (Int32 data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (Int64 data) + { + return new JsonData (data); + } + + public static implicit operator JsonData (String data) + { + return new JsonData (data); + } + #endregion + + + #region Explicit Conversions + public static explicit operator Boolean (JsonData data) + { + if (data.type != JsonType.Boolean) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a boolean, type is " + data.type); + + return data.inst_boolean; + } + + public static explicit operator Double (JsonData data) + { + if (data.type != JsonType.Double) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a double, type is " + data.type); + + return data.inst_double; + } + + public static explicit operator Single (JsonData data) + { + if(data.type == JsonType.Double) + { + return (Single)data.inst_double; + } + + if(data.type == JsonType.Int) + { + return (Single)data.inst_int; + } + + throw new InvalidCastException( + "Instance of JsonData doesn't hold a Single, type is " + data.type); + } + + public static explicit operator Int32 (JsonData data) + { + if (data.type != JsonType.Int) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold an int, type is "+ data.type); + + return data.inst_int; + } + + public static explicit operator Int64 (JsonData data) + { + if (data.type != JsonType.Long) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold an int64, type is " + data.type); + + return data.inst_long; + } + + public static explicit operator String (JsonData data) + { + if (data.type != JsonType.String) + throw new InvalidCastException ( + "Instance of JsonData doesn't hold a string, type is " + data.type); + + return data.inst_string; + } + #endregion + + + #region ICollection Methods + void ICollection.CopyTo (Array array, int index) + { + EnsureCollection ().CopyTo (array, index); + } + #endregion + + + #region IDictionary Methods + void IDictionary.Add (object key, object value) + { + JsonData data = ToJsonData (value); + + EnsureDictionary ().Add (key, data); + + KeyValuePair entry = + new KeyValuePair ((string) key, data); + object_list.Add (entry); + + json = null; + } + + void IDictionary.Clear () + { + EnsureDictionary ().Clear (); + object_list.Clear (); + json = null; + } + + bool IDictionary.Contains (object key) + { + return EnsureDictionary ().Contains (key); + } + + IDictionaryEnumerator IDictionary.GetEnumerator () + { + return ((IOrderedDictionary) this).GetEnumerator (); + } + + void IDictionary.Remove (object key) + { + EnsureDictionary ().Remove (key); + + for (int i = 0; i < object_list.Count; i++) { + if (object_list[i].Key == (string) key) { + object_list.RemoveAt (i); + break; + } + } + + json = null; + } + #endregion + + + #region IEnumerable Methods + IEnumerator IEnumerable.GetEnumerator () + { + return EnsureCollection ().GetEnumerator (); + } + #endregion + + + #region IJsonWrapper Methods + bool IJsonWrapper.GetBoolean () + { + if (type != JsonType.Boolean) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a boolean, type is " + type); + + return inst_boolean; + } + + double IJsonWrapper.GetDouble () + { + if (type != JsonType.Double) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a double, type is " + type); + + return inst_double; + } + + int IJsonWrapper.GetInt () + { + if (type != JsonType.Int) + throw new InvalidOperationException ( + "JsonData instance doesn't hold an int, type is " + type); + + return inst_int; + } + + long IJsonWrapper.GetLong () + { + if (type != JsonType.Long) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a long, type is " + type); + + return inst_long; + } + + string IJsonWrapper.GetString () + { + if (type != JsonType.String) + throw new InvalidOperationException ( + "JsonData instance doesn't hold a string, type is " + type); + + return inst_string; + } + + void IJsonWrapper.SetBoolean (bool val) + { + type = JsonType.Boolean; + inst_boolean = val; + json = null; + } + + void IJsonWrapper.SetDouble (double val) + { + type = JsonType.Double; + inst_double = val; + json = null; + } + + void IJsonWrapper.SetInt (int val) + { + type = JsonType.Int; + inst_int = val; + json = null; + } + + void IJsonWrapper.SetLong (long val) + { + type = JsonType.Long; + inst_long = val; + json = null; + } + + void IJsonWrapper.SetString (string val) + { + type = JsonType.String; + inst_string = val; + json = null; + } + + string IJsonWrapper.ToJson () + { + return ToJson (); + } + + void IJsonWrapper.ToJson (JsonWriter writer) + { + ToJson (writer); + } + #endregion + + + #region IList Methods + int IList.Add (object value) + { + return Add (value); + } + + void IList.Clear () + { + EnsureList ().Clear (); + json = null; + } + + bool IList.Contains (object value) + { + return EnsureList ().Contains (value); + } + + int IList.IndexOf (object value) + { + return EnsureList ().IndexOf (value); + } + + void IList.Insert (int index, object value) + { + EnsureList ().Insert (index, value); + json = null; + } + + void IList.Remove (object value) + { + EnsureList ().Remove (value); + json = null; + } + + void IList.RemoveAt (int index) + { + EnsureList ().RemoveAt (index); + json = null; + } + #endregion + + + #region IOrderedDictionary Methods + IDictionaryEnumerator IOrderedDictionary.GetEnumerator () + { + EnsureDictionary (); + + return new OrderedDictionaryEnumerator ( + object_list.GetEnumerator ()); + } + + void IOrderedDictionary.Insert (int idx, object key, object value) + { + string property = (string) key; + JsonData data = ToJsonData (value); + + this[property] = data; + + KeyValuePair entry = + new KeyValuePair (property, data); + + object_list.Insert (idx, entry); + } + + void IOrderedDictionary.RemoveAt (int idx) + { + EnsureDictionary (); + + inst_object.Remove (object_list[idx].Key); + object_list.RemoveAt (idx); + } + #endregion + + + #region Private Methods + private ICollection EnsureCollection () + { + if (type == JsonType.Array) + return (ICollection) inst_array; + + if (type == JsonType.Object) + return (ICollection) inst_object; + + throw new InvalidOperationException ( + "The JsonData instance has to be initialized first"); + } + + private IDictionary EnsureDictionary () + { + if (type == JsonType.Object) + return (IDictionary) inst_object; + + if (type != JsonType.None) + throw new InvalidOperationException ( + "Instance of JsonData is not a dictionary"); + + type = JsonType.Object; + inst_object = new Dictionary (); + object_list = new List> (); + + return (IDictionary) inst_object; + } + + private IList EnsureList () + { + if (type == JsonType.Array) + return (IList) inst_array; + + if (type != JsonType.None) + throw new InvalidOperationException ( + "Instance of JsonData is not a list"); + + type = JsonType.Array; + inst_array = new List (); + + return (IList) inst_array; + } + + private JsonData ToJsonData (object obj) + { + if (obj == null) + return null; + + if (obj is JsonData) + return (JsonData) obj; + + return new JsonData (obj); + } + + private static void WriteJson (IJsonWrapper obj, JsonWriter writer) + { + if (null == obj) + { + writer.Write(null); + return; + } + + if (obj.IsString) { + writer.Write (obj.GetString ()); + return; + } + + if (obj.IsBoolean) { + writer.Write (obj.GetBoolean ()); + return; + } + + if (obj.IsDouble) { + writer.Write (obj.GetDouble ()); + return; + } + + if (obj.IsInt) { + writer.Write (obj.GetInt ()); + return; + } + + if (obj.IsLong) { + writer.Write (obj.GetLong ()); + return; + } + + if (obj.IsArray) { + writer.WriteArrayStart (); + foreach (object elem in (IList) obj) + WriteJson ((JsonData) elem, writer); + writer.WriteArrayEnd (); + + return; + } + + if (obj.IsObject) { + writer.WriteObjectStart (); + + foreach (DictionaryEntry entry in ((IDictionary) obj)) { + writer.WritePropertyName ((string) entry.Key); + WriteJson ((JsonData) entry.Value, writer); + } + writer.WriteObjectEnd (); + + return; + } + } + #endregion + + + public int Add (object value) + { + JsonData data = ToJsonData (value); + + json = null; + + return EnsureList ().Add (data); + } + + public void MakeArray() + { + EnsureList(); + } + + public void Clear () + { + if (IsObject) { + ((IDictionary) this).Clear (); + return; + } + + if (IsArray) { + ((IList) this).Clear (); + return; + } + } + + public bool Equals (JsonData x) + { + if (x == null) + return false; + + if (x.type != this.type) + return false; + + switch (this.type) { + case JsonType.None: + return true; + + case JsonType.Object: + return this.inst_object.Equals (x.inst_object); + + case JsonType.Array: + return this.inst_array.Equals (x.inst_array); + + case JsonType.String: + return this.inst_string.Equals (x.inst_string); + + case JsonType.Int: + return this.inst_int.Equals (x.inst_int); + + case JsonType.Long: + return this.inst_long.Equals (x.inst_long); + + case JsonType.Double: + return this.inst_double.Equals (x.inst_double); + + case JsonType.Boolean: + return this.inst_boolean.Equals (x.inst_boolean); + } + + return false; + } + + public JsonType GetJsonType () + { + return type; + } + + public void SetJsonType (JsonType type) + { + if (this.type == type) + return; + + switch (type) { + case JsonType.None: + break; + + case JsonType.Object: + inst_object = new Dictionary (); + object_list = new List> (); + break; + + case JsonType.Array: + inst_array = new List (); + break; + + case JsonType.String: + inst_string = default (String); + break; + + case JsonType.Int: + inst_int = default (Int32); + break; + + case JsonType.Long: + inst_long = default (Int64); + break; + + case JsonType.Double: + inst_double = default (Double); + break; + + case JsonType.Boolean: + inst_boolean = default (Boolean); + break; + } + + this.type = type; + } + + public string ToJson () + { + if (json != null) + return json; + + StringWriter sw = new StringWriter (); + JsonWriter writer = new JsonWriter(sw) + { + Validate = false + }; + + WriteJson (this, writer); + json = sw.ToString (); + + return json; + } + + public void ToJson (JsonWriter writer) + { + bool old_validate = writer.Validate; + + writer.Validate = false; + + WriteJson (this, writer); + + writer.Validate = old_validate; + } + + public override string ToString () + { + switch (type) { + case JsonType.Array: + return "JsonData array"; + + case JsonType.Boolean: + return inst_boolean.ToString (); + + case JsonType.Double: + return inst_double.ToString (); + + case JsonType.Int: + return inst_int.ToString (); + + case JsonType.Long: + return inst_long.ToString (); + + case JsonType.Object: + return "JsonData object"; + + case JsonType.String: + return inst_string; + } + + return "Uninitialized JsonData"; + } + } + + + internal class OrderedDictionaryEnumerator : IDictionaryEnumerator + { + IEnumerator> list_enumerator; + + + public object Current { + get { return Entry; } + } + + public DictionaryEntry Entry { + get { + KeyValuePair curr = list_enumerator.Current; + return new DictionaryEntry (curr.Key, curr.Value); + } + } + + public object Key { + get { return list_enumerator.Current.Key; } + } + + public object Value { + get { return list_enumerator.Current.Value; } + } + + + public OrderedDictionaryEnumerator ( + IEnumerator> enumerator) + { + list_enumerator = enumerator; + } + + + public bool MoveNext () + { + return list_enumerator.MoveNext (); + } + + public void Reset () + { + list_enumerator.Reset (); + } + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs.meta new file mode 100644 index 0000000..e9f4732 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f80de13689cd2ed4d921eea0e26c6d63 +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs new file mode 100644 index 0000000..cbf7ae3 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs @@ -0,0 +1,60 @@ +#region Header +/** + * JsonException.cs + * Base class throwed by LitJSON when a parsing error occurs. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; + + +namespace LitJson +{ + public class JsonException : ApplicationException + { + public JsonException () : base () + { + } + + internal JsonException (ParserToken token) : + base (String.Format ( + "Invalid token '{0}' in input string", token)) + { + } + + internal JsonException (ParserToken token, + Exception inner_exception) : + base (String.Format ( + "Invalid token '{0}' in input string", token), + inner_exception) + { + } + + internal JsonException (int c) : + base (String.Format ( + "Invalid character '{0}' in input string", (char) c)) + { + } + + internal JsonException (int c, Exception inner_exception) : + base (String.Format ( + "Invalid character '{0}' in input string", (char) c), + inner_exception) + { + } + + + public JsonException (string message) : base (message) + { + } + + public JsonException (string message, Exception inner_exception) : + base (message, inner_exception) + { + } + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs.meta new file mode 100644 index 0000000..b9c077f --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonException.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8c99017edfc479b44aafcc84674b178c +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs new file mode 100644 index 0000000..4d5f9c7 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs @@ -0,0 +1,144 @@ +using System.Text; +using System.Collections.Generic; + +public class JsonFormatter +{ + #region class members + const string Space = " "; + const int DefaultIndent = 0; + const string Indent = Space + Space + Space + Space; + static readonly string NewLine = "\n"; + #endregion + + static bool inDoubleString = false; + static bool inSingleString = false; + static bool inVariableAssignment = false; + static char prevChar = '\0'; + + static Stack context = new Stack(); + + private enum JsonContextType + { + Object, Array + } + + static void BuildIndents(int indents, StringBuilder output) + { + indents += DefaultIndent; + for (; indents > 0; indents--) + output.Append(Indent); + } + + static bool InString() + { + return inDoubleString || inSingleString; + } + + public static string PrettyPrint(string input) + { + // Clear all states + inDoubleString = false; + inSingleString = false; + inVariableAssignment = false; + prevChar = '\0'; + context.Clear(); + + var output = new StringBuilder(input.Length * 2); + char c; + + for (int i = 0; i < input.Length; i++) + { + c = input[i]; + + switch (c) + { + case '[': + case '{': + if (!InString()) + { + if (inVariableAssignment || (context.Count > 0 && context.Peek() != JsonContextType.Array)) + { + output.Append(NewLine); + BuildIndents(context.Count, output); + } + output.Append(c); + context.Push(JsonContextType.Object); + output.Append(NewLine); + BuildIndents(context.Count, output); + } + else + output.Append(c); + + break; + + case ']': + case '}': + if (!InString()) + { + output.Append(NewLine); + context.Pop(); + BuildIndents(context.Count, output); + output.Append(c); + } + else + output.Append(c); + + break; + case '=': + output.Append(c); + break; + + case ',': + output.Append(c); + + if (!InString()) + { + BuildIndents(context.Count, output); + output.Append(NewLine); + BuildIndents(context.Count, output); + inVariableAssignment = false; + } + + break; + + case '\'': + if (!inDoubleString && prevChar != '\\') + inSingleString = !inSingleString; + + output.Append(c); + break; + + case ':': + if (!InString()) + { + inVariableAssignment = true; + output.Append(Space); + output.Append(c); + output.Append(Space); + } + else + output.Append(c); + + break; + + case '"': + if (!inSingleString && prevChar != '\\') + inDoubleString = !inDoubleString; + + output.Append(c); + break; + case ' ': + if (InString()) + output.Append(c); + break; + + default: + output.Append(c); + break; + } + prevChar = c; + } + + return output.ToString(); + } +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs.meta new file mode 100644 index 0000000..02bdada --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonFormatter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cdcb71cedd669b947bd44cfa54439994 +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs new file mode 100644 index 0000000..3a09a87 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs @@ -0,0 +1,1091 @@ +#region Header +/** + * JsonMapper.cs + * JSON to .Net object and object to JSON conversions. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Reflection; + + +namespace LitJson +{ + internal struct PropertyMetadata + { + public MemberInfo Info; + public bool IsField; + public Type Type; + } + + + internal struct ArrayMetadata + { + private Type element_type; + private bool is_array; + private bool is_list; + + + public Type ElementType { + get { + if (element_type == null) + return typeof (JsonData); + + return element_type; + } + + set { element_type = value; } + } + + public bool IsArray { + get { return is_array; } + set { is_array = value; } + } + + public bool IsList { + get { return is_list; } + set { is_list = value; } + } + } + + + internal struct ObjectMetadata + { + private Type element_type; + private bool is_dictionary; + + private IDictionary properties; + + + public Type ElementType { + get { + if (element_type == null) + return typeof (JsonData); + + return element_type; + } + + set { element_type = value; } + } + + public bool IsDictionary { + get { return is_dictionary; } + set { is_dictionary = value; } + } + + public IDictionary Properties { + get { return properties; } + set { properties = value; } + } + + + private Type genericKeyType; + public Type GenericKeyType + { + get + { + return genericKeyType; + } + set + { + genericKeyType = value; + } + } + } + + + internal delegate void ExporterFunc (object obj, JsonWriter writer); + public delegate void ExporterFunc (T obj, JsonWriter writer); + + internal delegate object ImporterFunc (object input); + public delegate TValue ImporterFunc (TJson input); + + public delegate IJsonWrapper WrapperFactory (); + + + public class JsonMapper + { + #region Fields + private static int max_nesting_depth; + + private static IFormatProvider datetime_format; + + private static IDictionary base_exporters_table; + private static IDictionary custom_exporters_table; + + private static IDictionary> base_importers_table; + private static IDictionary> custom_importers_table; + + private static IDictionary array_metadata; + private static readonly object array_metadata_lock = new Object (); + + private static IDictionary> conv_ops; + private static readonly object conv_ops_lock = new Object (); + + private static IDictionary object_metadata; + private static readonly object object_metadata_lock = new Object (); + + private static IDictionary> type_properties; + private static readonly object type_properties_lock = new Object (); + + private static JsonWriter static_writer; + private static readonly object static_writer_lock = new Object (); + #endregion + + + #region Constructors + public static void ResetStatic() + { + max_nesting_depth = 100; + + array_metadata = new Dictionary(); + conv_ops = new Dictionary>(); + object_metadata = new Dictionary(); + type_properties = new Dictionary>(); + + static_writer = new JsonWriter(); + + datetime_format = DateTimeFormatInfo.InvariantInfo; + + base_exporters_table = new Dictionary(); + custom_exporters_table = new Dictionary(); + + base_importers_table = new Dictionary>(); + custom_importers_table = new Dictionary>(); + + RegisterBaseExporters(); + RegisterBaseImporters(); + } + static JsonMapper () + { + ResetStatic(); + } + #endregion + + + #region Private Methods + private static void AddArrayMetadata (Type type) + { + if (array_metadata.ContainsKey (type)) + return; + + ArrayMetadata data = new ArrayMetadata + { + IsArray = type.IsArray + }; + + if (type.GetInterface ("System.Collections.IList") != null) + data.IsList = true; + + foreach (PropertyInfo p_info in type.GetProperties ()) { + if (p_info.Name != "Item") + continue; + + ParameterInfo[] parameters = p_info.GetIndexParameters (); + + if (parameters.Length != 1) + continue; + + if (parameters[0].ParameterType == typeof (int)) + data.ElementType = p_info.PropertyType; + } + + lock (array_metadata_lock) { + try { + array_metadata.Add (type, data); + } catch (ArgumentException) { + return; + } + } + } + + private static void AddObjectMetadata (Type type) + { + if (object_metadata.ContainsKey (type)) + return; + + ObjectMetadata data = new ObjectMetadata (); + + if (type.GetInterface ("System.Collections.IDictionary") != null) + data.IsDictionary = true; + + data.Properties = new Dictionary (); + + foreach (PropertyInfo p_info in type.GetProperties ()) { + if (p_info.Name == "Item") { + ParameterInfo[] parameters = p_info.GetIndexParameters (); + + if (parameters.Length != 1) + continue; + + if (data.IsDictionary) + { + data.ElementType = p_info.PropertyType; + } + else + { + if (parameters[0].ParameterType == typeof(string)) + data.ElementType = p_info.PropertyType; + } + + continue; + } + + PropertyMetadata p_data = new PropertyMetadata + { + Info = p_info, + Type = p_info.PropertyType + }; + + data.Properties.Add (p_info.Name, p_data); + } + + foreach (FieldInfo f_info in type.GetFields ()) { + PropertyMetadata p_data = new PropertyMetadata + { + Info = f_info, + IsField = true, + Type = f_info.FieldType + }; + + data.Properties.Add (f_info.Name, p_data); + } + + if (type.IsGenericType) + { + data.GenericKeyType = type.GetGenericArguments()[0]; + } + + lock (object_metadata_lock) { + try { + object_metadata.Add (type, data); + } catch (ArgumentException) { + return; + } + } + } + + private static void AddTypeProperties (Type type) + { + if (type_properties.ContainsKey (type)) + return; + + IList props = new List (); + + foreach (PropertyInfo p_info in type.GetProperties ()) { + if (p_info.Name == "Item") + continue; + + PropertyMetadata p_data = new PropertyMetadata + { + Info = p_info, + IsField = false + }; + props.Add (p_data); + } + + foreach (FieldInfo f_info in type.GetFields ()) { + PropertyMetadata p_data = new PropertyMetadata + { + Info = f_info, + IsField = true + }; + + props.Add (p_data); + } + + lock (type_properties_lock) { + try { + type_properties.Add (type, props); + } catch (ArgumentException) { + return; + } + } + } + + private static MethodInfo GetConvOp (Type t1, Type t2) + { + lock (conv_ops_lock) { + if (! conv_ops.ContainsKey (t1)) + conv_ops.Add (t1, new Dictionary ()); + } + + if (conv_ops[t1].ContainsKey (t2)) + return conv_ops[t1][t2]; + + MethodInfo op = t1.GetMethod ( + "op_Implicit", new Type[] { t2 }); + + lock (conv_ops_lock) { + try { + conv_ops[t1].Add (t2, op); + } catch (ArgumentException) { + return conv_ops[t1][t2]; + } + } + + return op; + } + + private static object ReadValue (Type inst_type, JsonReader reader) + { + reader.Read (); + + if (reader.Token == JsonToken.ArrayEnd) + return null; + + if (reader.Token == JsonToken.Null) { + + if (! inst_type.IsClass) + throw new JsonException (String.Format ( + "Can't assign null to an instance of type {0}", + inst_type)); + + return null; + } + + if (reader.Token == JsonToken.Double || + reader.Token == JsonToken.Int || + reader.Token == JsonToken.Long || + reader.Token == JsonToken.String || + reader.Token == JsonToken.Boolean) { + + Type json_type = reader.Value.GetType (); + + if (inst_type.IsAssignableFrom (json_type)) + return reader.Value; + + // If there's a custom importer that fits, use it + if (custom_importers_table.ContainsKey (json_type) && + custom_importers_table[json_type].ContainsKey ( + inst_type)) { + + ImporterFunc importer = + custom_importers_table[json_type][inst_type]; + + return importer (reader.Value); + } + + // Maybe there's a base importer that works + if (base_importers_table.ContainsKey (json_type) && + base_importers_table[json_type].ContainsKey ( + inst_type)) { + + ImporterFunc importer = + base_importers_table[json_type][inst_type]; + + return importer (reader.Value); + } + + // Maybe it's an enum + if (inst_type.IsEnum) + return Enum.ToObject (inst_type, reader.Value); + + // Try using an implicit conversion operator + MethodInfo conv_op = GetConvOp (inst_type, json_type); + + if (conv_op != null) + return conv_op.Invoke (null, + new object[] { reader.Value }); + + //=====================扩展===================== + if (json_type == typeof(Double) && inst_type == typeof(System.Single)) + { + return Convert.ToSingle(reader.Value); + } + if (json_type == typeof(int) && inst_type == typeof(bool)) + { + return (int)reader.Value == 1; + } + if (inst_type == typeof(UnityEngine.Vector4)) + { + return DNA.CommonParse.ParseVector4(reader.Value.ToString()); + } + if (inst_type == typeof(UnityEngine.Vector3)) + { + return DNA.CommonParse.ParseVector3(reader.Value.ToString()); + } + if (inst_type == typeof(UnityEngine.Vector2)) + { + return DNA.CommonParse.ParseVector2(reader.Value.ToString()); + } + if (inst_type == typeof(DNA.IntVector4)) + { + return DNA.CommonParse.ParseIntVector4(reader.Value.ToString()); + } + if (inst_type == typeof(DNA.IntVector3)) + { + return DNA.CommonParse.ParseIntVector3(reader.Value.ToString()); + } + if (inst_type == typeof(DNA.IntVector2)) + { + return DNA.CommonParse.ParseIntVector2(reader.Value.ToString()); + } + if (inst_type == typeof(UnityEngine.Color)) + { + return DNA.CommonParse.ParseColor(reader.Value.ToString()); + } + if (inst_type == typeof(UnityEngine.Color32)) + { + return DNA.CommonParse.ParseColor32(reader.Value.ToString()); + } + //========================================== + + // No luck + throw new JsonException (String.Format ( + "Can't assign value '{0}' (type {1}) to type {2}", + reader.Value, json_type, inst_type)); + } + + object instance = null; + + if (reader.Token == JsonToken.ArrayStart) { + + AddArrayMetadata (inst_type); + ArrayMetadata t_data = array_metadata[inst_type]; + + if (! t_data.IsArray && ! t_data.IsList) + throw new JsonException (String.Format ( + "Type {0} can't act as an array", + inst_type)); + + IList list; + Type elem_type; + + if (! t_data.IsArray) { + list = (IList) Activator.CreateInstance (inst_type); + elem_type = t_data.ElementType; + } else { + list = new ArrayList (); + elem_type = inst_type.GetElementType (); + } + + while (true) { + object item = ReadValue (elem_type, reader); + if (reader.Token == JsonToken.ArrayEnd) + break; + + list.Add (item); + } + + if (t_data.IsArray) { + int n = list.Count; + instance = Array.CreateInstance (elem_type, n); + + for (int i = 0; i < n; i++) + ((Array) instance).SetValue (list[i], i); + } else + instance = list; + + } else if (reader.Token == JsonToken.ObjectStart) { + + AddObjectMetadata (inst_type); + ObjectMetadata t_data = object_metadata[inst_type]; + + instance = Activator.CreateInstance (inst_type); + + while (true) { + reader.Read (); + + if (reader.Token == JsonToken.ObjectEnd) + break; + + //====修改新增逻辑==== + if (reader.Token != JsonToken.PropertyName) + { + continue; + } + //====修改新增逻辑==== + + string property = (string) reader.Value; + + if (t_data.Properties.ContainsKey (property)) { + PropertyMetadata prop_data = + t_data.Properties[property]; + + if (prop_data.IsField) { + FieldInfo fi = (FieldInfo)prop_data.Info; + object obj = ReadValue(prop_data.Type, reader); + //过滤const标记 + if (!fi.IsLiteral) + { + fi.SetValue(instance, obj); + } + } else { + PropertyInfo p_info = + (PropertyInfo) prop_data.Info; + + if (p_info.CanWrite) + p_info.SetValue ( + instance, + ReadValue (prop_data.Type, reader), + null); + else + ReadValue (prop_data.Type, reader); + } + + } else { + if (!t_data.IsDictionary) + { + //====修改注释掉==== + //throw new JsonException(String.Format( + // "The type {0} doesn't have the " + + // "property '{1}'", inst_type, property)); + //====修改注释掉==== + + //====修改新增逻辑==== + //报错,并暂停编辑器UI + LogHelper.LogError(String.Format( + "The type {0} doesn't have the " + + "property '{1}'", inst_type, property)); + UnityEngine.Debug.Break(); + continue; + //====修改新增逻辑==== + } + object keyObj = property; + if (t_data.GenericKeyType == typeof(int)) + { + keyObj = DNA.CommonParse.ParseInt(property); + } + + ((IDictionary) instance).Add ( + keyObj, ReadValue ( + t_data.ElementType, reader)); + } + + } + + } + + return instance; + } + + private static IJsonWrapper ReadValue (WrapperFactory factory, + JsonReader reader) + { + reader.Read (); + + if (reader.Token == JsonToken.ArrayEnd || + reader.Token == JsonToken.Null) + return null; + + IJsonWrapper instance = factory (); + + if (reader.Token == JsonToken.String) { + instance.SetString ((string) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Double) { + instance.SetDouble ((double) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Int) { + instance.SetInt ((int) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Long) { + instance.SetLong ((long) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.Boolean) { + instance.SetBoolean ((bool) reader.Value); + return instance; + } + + if (reader.Token == JsonToken.ArrayStart) { + instance.SetJsonType (JsonType.Array); + + while (true) { + IJsonWrapper item = ReadValue (factory, reader); + if (reader.Token == JsonToken.ArrayEnd) + break; + + ((IList) instance).Add (item); + } + } + else if (reader.Token == JsonToken.ObjectStart) { + instance.SetJsonType (JsonType.Object); + + while (true) { + reader.Read (); + + if (reader.Token == JsonToken.ObjectEnd) + break; + + string property = (string) reader.Value; + + ((IDictionary) instance)[property] = ReadValue ( + factory, reader); + } + + } + + return instance; + } + + private static void RegisterBaseExporters () + { + base_exporters_table[typeof (byte)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((byte) obj)); + }; + + base_exporters_table[typeof (char)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToString ((char) obj)); + }; + + base_exporters_table[typeof (DateTime)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToString ((DateTime) obj, + datetime_format)); + }; + + base_exporters_table[typeof (decimal)] = + delegate (object obj, JsonWriter writer) { + writer.Write ((decimal) obj); + }; + + base_exporters_table[typeof (sbyte)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((sbyte) obj)); + }; + + base_exporters_table[typeof (short)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((short) obj)); + }; + + base_exporters_table[typeof (ushort)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToInt32 ((ushort) obj)); + }; + + base_exporters_table[typeof (uint)] = + delegate (object obj, JsonWriter writer) { + writer.Write (Convert.ToUInt64 ((uint) obj)); + }; + + base_exporters_table[typeof (ulong)] = + delegate (object obj, JsonWriter writer) { + writer.Write ((ulong) obj); + }; + } + + private static void RegisterBaseImporters () + { + ImporterFunc importer; + + importer = delegate (object input) { + return Convert.ToByte ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (byte), importer); + + importer = delegate (object input) { + return Convert.ToInt64 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (long), importer); + + importer = delegate (object input) { + return Convert.ToUInt64 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (ulong), importer); + + importer = delegate (object input) { + return Convert.ToSByte ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (sbyte), importer); + + importer = delegate (object input) { + return Convert.ToInt16 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (short), importer); + + importer = delegate (object input) { + return Convert.ToUInt16 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (ushort), importer); + + importer = delegate (object input) { + return Convert.ToUInt32 ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (uint), importer); + + importer = delegate (object input) { + return Convert.ToSingle ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (float), importer); + + importer = delegate (object input) { + return Convert.ToDouble ((int) input); + }; + RegisterImporter (base_importers_table, typeof (int), + typeof (double), importer); + + importer = delegate (object input) { + return Convert.ToDecimal ((double) input); + }; + RegisterImporter (base_importers_table, typeof (double), + typeof (decimal), importer); + + + importer = delegate (object input) { + return Convert.ToUInt32 ((long) input); + }; + RegisterImporter (base_importers_table, typeof (long), + typeof (uint), importer); + + importer = delegate (object input) { + return Convert.ToChar ((string) input); + }; + RegisterImporter (base_importers_table, typeof (string), + typeof (char), importer); + + importer = delegate (object input) { + return Convert.ToDateTime ((string) input, datetime_format); + }; + RegisterImporter (base_importers_table, typeof (string), + typeof (DateTime), importer); + } + + private static void RegisterImporter ( + IDictionary> table, + Type json_type, Type value_type, ImporterFunc importer) + { + if (! table.ContainsKey (json_type)) + table.Add (json_type, new Dictionary ()); + + table[json_type][value_type] = importer; + } + + private static void WriteValue (object obj, JsonWriter writer, + bool writer_is_private, + int depth) + { + if (depth > max_nesting_depth) + throw new JsonException ( + String.Format ("Max allowed object depth reached while " + + "trying to export from type {0}", + null != obj ? obj.GetType ().ToString() : "null")); + + if (obj == null) { + writer.Write (null); + return; + } + + if (obj is IJsonWrapper) { + if (writer_is_private) + writer.TextWriter.Write (((IJsonWrapper) obj).ToJson ()); + else + ((IJsonWrapper) obj).ToJson (writer); + + return; + } + + //=====================扩展开始===================== + if (obj is UnityEngine.Vector4) + { + writer.Write((UnityEngine.Vector4)obj); + return; + } + + if (obj is UnityEngine.Vector3) + { + writer.Write((UnityEngine.Vector3)obj); + return; + } + + if (obj is UnityEngine.Vector2) + { + writer.Write((UnityEngine.Vector2)obj); + return; + } + if (obj is DNA.IntVector4) + { + writer.Write((DNA.IntVector4)obj); + return; + } + + if (obj is DNA.IntVector3) + { + writer.Write((DNA.IntVector3)obj); + return; + } + + if (obj is DNA.IntVector2) + { + writer.Write((DNA.IntVector2)obj); + return; + } + + if (obj is System.Single) //float + { + writer.Write((System.Single)obj); + return; + } + + if (obj is String) { + writer.Write ((string) obj); + return; + } + + if (obj is UnityEngine.Color) + { + writer.Write((UnityEngine.Color)obj); + return; + } + + if (obj is UnityEngine.Color32) + { + writer.Write((UnityEngine.Color32)obj); + return; + } + //=====================扩展结束===================== + + if (obj is Double) { + writer.Write ((double) obj); + return; + } + + if (obj is Int32) { + writer.Write ((int) obj); + return; + } + + if (obj is Boolean) { + writer.Write ((bool) obj); + return; + } + + if (obj is Int64) { + writer.Write ((long) obj); + return; + } + + if (obj is Array) { + writer.WriteArrayStart (); + + foreach (object elem in (Array) obj) + WriteValue (elem, writer, writer_is_private, depth + 1); + + writer.WriteArrayEnd (); + + return; + } + + if (obj is IList) { + writer.WriteArrayStart (); + foreach (object elem in (IList) obj) + WriteValue (elem, writer, writer_is_private, depth + 1); + writer.WriteArrayEnd (); + + return; + } + + if (obj is IDictionary) { + writer.WriteObjectStart (); + foreach (DictionaryEntry entry in (IDictionary) obj) { + writer.WritePropertyName (entry.Key.ToString()); + WriteValue (entry.Value, writer, writer_is_private, + depth + 1); + } + writer.WriteObjectEnd (); + + return; + } + + Type obj_type = obj.GetType (); + + // See if there's a custom exporter for the object + if (custom_exporters_table.ContainsKey (obj_type)) { + ExporterFunc exporter = custom_exporters_table[obj_type]; + exporter (obj, writer); + + return; + } + + // If not, maybe there's a base exporter + if (base_exporters_table.ContainsKey (obj_type)) { + ExporterFunc exporter = base_exporters_table[obj_type]; + exporter (obj, writer); + + return; + } + + // Last option, let's see if it's an enum + if (obj is Enum) { + Type e_type = Enum.GetUnderlyingType (obj_type); + + if (e_type == typeof (long) + || e_type == typeof (uint) + || e_type == typeof (ulong)) + writer.Write ((ulong) obj); + else + writer.Write ((int) obj); + + return; + } + + // Okay, so it looks like the input should be exported as an + // object + AddTypeProperties (obj_type); + IList props = type_properties[obj_type]; + + writer.WriteObjectStart (); + foreach (PropertyMetadata p_data in props) { + if (p_data.IsField) { + writer.WritePropertyName (p_data.Info.Name); + WriteValue (((FieldInfo) p_data.Info).GetValue (obj), + writer, writer_is_private, depth + 1); + } + else { + PropertyInfo p_info = (PropertyInfo) p_data.Info; + + if (p_info.CanRead) { + writer.WritePropertyName (p_data.Info.Name); + WriteValue (p_info.GetValue (obj, null), + writer, writer_is_private, depth + 1); + } + } + } + writer.WriteObjectEnd (); + } + #endregion + + + public static string ToJson (object obj) + { + lock (static_writer_lock) { + static_writer.Reset (); + + WriteValue (obj, static_writer, true, 0); + + return static_writer.ToString (); + } + } + + public static void ToJson (object obj, JsonWriter writer) + { + WriteValue (obj, writer, false, 0); + } + + public static JsonData ToObject (JsonReader reader) + { + return (JsonData) ToWrapper ( + delegate { return new JsonData (); }, reader); + } + + public static JsonData ToObject (TextReader reader) + { + JsonReader json_reader = new JsonReader (reader); + + return (JsonData) ToWrapper ( + delegate { return new JsonData (); }, json_reader); + } + + public static JsonData ToObject (string json) + { + return (JsonData) ToWrapper ( + delegate { return new JsonData (); }, json); + } + + public static T ToObject (JsonReader reader) + { + return (T) ReadValue (typeof (T), reader); + } + + public static T ToObject (TextReader reader) + { + JsonReader json_reader = new JsonReader (reader); + + return (T) ReadValue (typeof (T), json_reader); + } + + public static T ToObject (string json) + { + JsonReader reader = new JsonReader (json); + + return (T) ReadValue (typeof (T), reader); + } + + public static object ToObject(Type t, string json) + { + JsonReader reader = new JsonReader(json); + + return ReadValue(t, reader); + } + + public static IJsonWrapper ToWrapper (WrapperFactory factory, + JsonReader reader) + { + return ReadValue (factory, reader); + } + + public static IJsonWrapper ToWrapper (WrapperFactory factory, + string json) + { + JsonReader reader = new JsonReader (json); + + return ReadValue (factory, reader); + } + + public static void RegisterExporter (ExporterFunc exporter) + { + ExporterFunc exporter_wrapper = + delegate (object obj, JsonWriter writer) { + exporter ((T) obj, writer); + }; + + custom_exporters_table[typeof (T)] = exporter_wrapper; + } + + public static void RegisterImporter ( + ImporterFunc importer) + { + ImporterFunc importer_wrapper = + delegate (object input) { + return importer ((TJson) input); + }; + + RegisterImporter (custom_importers_table, typeof (TJson), + typeof (TValue), importer_wrapper); + } + + public static void UnregisterExporters () + { + custom_exporters_table.Clear (); + } + + public static void UnregisterImporters () + { + custom_importers_table.Clear (); + } + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs.meta new file mode 100644 index 0000000..1f88d0a --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonMapper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0d00865104600c7449d358a6cbb3d9e7 +timeCreated: 1474349754 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs new file mode 100644 index 0000000..4616864 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs @@ -0,0 +1,455 @@ +#region Header +/** + * JsonReader.cs + * Stream-like access to JSON text. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + + +namespace LitJson +{ + public enum JsonToken + { + None, + + ObjectStart, + PropertyName, + ObjectEnd, + + ArrayStart, + ArrayEnd, + + Int, + Long, + Double, + + String, + + Boolean, + Null + } + + + public class JsonReader + { + #region Fields + private static IDictionary> parse_table; + + private Stack automaton_stack; + private int current_input; + private int current_symbol; + private bool end_of_json; + private bool end_of_input; + private Lexer lexer; + private bool parser_in_string; + private bool parser_return; + private bool read_started; + private TextReader reader; + private bool reader_is_owned; + private object token_value; + private JsonToken token; + #endregion + + + #region Public Properties + public bool AllowComments { + get { return lexer.AllowComments; } + set { lexer.AllowComments = value; } + } + + public bool AllowSingleQuotedStrings { + get { return lexer.AllowSingleQuotedStrings; } + set { lexer.AllowSingleQuotedStrings = value; } + } + + public bool EndOfInput { + get { return end_of_input; } + } + + public bool EndOfJson { + get { return end_of_json; } + } + + public JsonToken Token { + get { return token; } + } + + public object Value { + get { return token_value; } + } + #endregion + + + #region Constructors + static JsonReader () + { + PopulateParseTable (); + } + + public JsonReader (string json_text) : + this (new StringReader (json_text), true) + { + } + + public JsonReader (TextReader reader) : + this (reader, false) + { + } + + private JsonReader (TextReader reader, bool owned) + { + if (reader == null) + throw new ArgumentNullException ("reader"); + + parser_in_string = false; + parser_return = false; + + read_started = false; + automaton_stack = new Stack (); + automaton_stack.Push ((int) ParserToken.End); + automaton_stack.Push ((int) ParserToken.Text); + + lexer = new Lexer (reader); + + end_of_input = false; + end_of_json = false; + + this.reader = reader; + reader_is_owned = owned; + } + #endregion + + + #region Static Methods + private static void PopulateParseTable () + { + parse_table = new Dictionary> (); + + TableAddRow (ParserToken.Array); + TableAddCol (ParserToken.Array, '[', + '[', + (int) ParserToken.ArrayPrime); + + TableAddRow (ParserToken.ArrayPrime); + TableAddCol (ParserToken.ArrayPrime, '"', + (int) ParserToken.Value, + + (int) ParserToken.ValueRest, + ']'); + TableAddCol (ParserToken.ArrayPrime, '[', + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (ParserToken.ArrayPrime, ']', + ']'); + TableAddCol (ParserToken.ArrayPrime, '{', + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Number, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.True, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.False, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + TableAddCol (ParserToken.ArrayPrime, (int) ParserToken.Null, + (int) ParserToken.Value, + (int) ParserToken.ValueRest, + ']'); + + TableAddRow (ParserToken.Object); + TableAddCol (ParserToken.Object, '{', + '{', + (int) ParserToken.ObjectPrime); + + TableAddRow (ParserToken.ObjectPrime); + TableAddCol (ParserToken.ObjectPrime, '"', + (int) ParserToken.Pair, + (int) ParserToken.PairRest, + '}'); + TableAddCol (ParserToken.ObjectPrime, '}', + '}'); + + TableAddRow (ParserToken.Pair); + TableAddCol (ParserToken.Pair, '"', + (int) ParserToken.String, + ':', + (int) ParserToken.Value); + + TableAddRow (ParserToken.PairRest); + TableAddCol (ParserToken.PairRest, ',', + ',', + (int) ParserToken.Pair, + (int) ParserToken.PairRest); + TableAddCol (ParserToken.PairRest, '}', + (int) ParserToken.Epsilon); + + TableAddRow (ParserToken.String); + TableAddCol (ParserToken.String, '"', + '"', + (int) ParserToken.CharSeq, + '"'); + + TableAddRow (ParserToken.Text); + TableAddCol (ParserToken.Text, '[', + (int) ParserToken.Array); + TableAddCol (ParserToken.Text, '{', + (int) ParserToken.Object); + + TableAddRow (ParserToken.Value); + TableAddCol (ParserToken.Value, '"', + (int) ParserToken.String); + TableAddCol (ParserToken.Value, '[', + (int) ParserToken.Array); + TableAddCol (ParserToken.Value, '{', + (int) ParserToken.Object); + TableAddCol (ParserToken.Value, (int) ParserToken.Number, + (int) ParserToken.Number); + TableAddCol (ParserToken.Value, (int) ParserToken.True, + (int) ParserToken.True); + TableAddCol (ParserToken.Value, (int) ParserToken.False, + (int) ParserToken.False); + TableAddCol (ParserToken.Value, (int) ParserToken.Null, + (int) ParserToken.Null); + + TableAddRow (ParserToken.ValueRest); + TableAddCol (ParserToken.ValueRest, ',', + ',', + (int) ParserToken.Value, + (int) ParserToken.ValueRest); + TableAddCol (ParserToken.ValueRest, ']', + (int) ParserToken.Epsilon); + } + + private static void TableAddCol (ParserToken row, int col, + params int[] symbols) + { + parse_table[(int) row].Add (col, symbols); + } + + private static void TableAddRow (ParserToken rule) + { + parse_table.Add ((int) rule, new Dictionary ()); + } + #endregion + + + #region Private Methods + private void ProcessNumber (string number) + { + if (number.IndexOf ('.') != -1 || + number.IndexOf ('e') != -1 || + number.IndexOf ('E') != -1) { + + double n_double; + if (Double.TryParse (number, out n_double)) { + token = JsonToken.Double; + token_value = n_double; + + return; + } + } + + int n_int32; + if (Int32.TryParse (number, out n_int32)) { + token = JsonToken.Int; + token_value = n_int32; + + return; + } + + long n_int64; + if (Int64.TryParse (number, out n_int64)) { + token = JsonToken.Long; + token_value = n_int64; + + return; + } + + // Shouldn't happen, but just in case, return something + token = JsonToken.Int; + token_value = 0; + } + + private void ProcessSymbol () + { + if (current_symbol == '[') { + token = JsonToken.ArrayStart; + parser_return = true; + + } else if (current_symbol == ']') { + token = JsonToken.ArrayEnd; + parser_return = true; + + } else if (current_symbol == '{') { + token = JsonToken.ObjectStart; + parser_return = true; + + } else if (current_symbol == '}') { + token = JsonToken.ObjectEnd; + parser_return = true; + + } else if (current_symbol == '"') { + if (parser_in_string) { + parser_in_string = false; + + parser_return = true; + + } else { + if (token == JsonToken.None) + token = JsonToken.String; + + parser_in_string = true; + } + + } else if (current_symbol == (int) ParserToken.CharSeq) { + token_value = lexer.StringValue; + + } else if (current_symbol == (int) ParserToken.False) { + token = JsonToken.Boolean; + token_value = false; + parser_return = true; + + } else if (current_symbol == (int) ParserToken.Null) { + token = JsonToken.Null; + parser_return = true; + + } else if (current_symbol == (int) ParserToken.Number) { + ProcessNumber (lexer.StringValue); + + parser_return = true; + + } else if (current_symbol == (int) ParserToken.Pair) { + token = JsonToken.PropertyName; + + } else if (current_symbol == (int) ParserToken.True) { + token = JsonToken.Boolean; + token_value = true; + parser_return = true; + + } + } + + private bool ReadToken () + { + if (end_of_input) + return false; + + lexer.NextToken (); + + if (lexer.EndOfInput) { + Close (); + + return false; + } + + current_input = lexer.Token; + + return true; + } + #endregion + + + public void Close () + { + if (end_of_input) + return; + + end_of_input = true; + end_of_json = true; + + if (reader_is_owned) + reader.Close (); + + reader = null; + } + + public bool Read () + { + if (end_of_input) + return false; + + if (end_of_json) { + end_of_json = false; + automaton_stack.Clear (); + automaton_stack.Push ((int) ParserToken.End); + automaton_stack.Push ((int) ParserToken.Text); + } + + parser_in_string = false; + parser_return = false; + + token = JsonToken.None; + token_value = null; + + if (! read_started) { + read_started = true; + + if (! ReadToken ()) + return false; + } + + + int[] entry_symbols; + + while (true) { + if (parser_return) { + if (automaton_stack.Peek () == (int) ParserToken.End) + end_of_json = true; + + return true; + } + + current_symbol = automaton_stack.Pop (); + + ProcessSymbol (); + + if (current_symbol == current_input) { + if (! ReadToken ()) { + if (automaton_stack.Peek () != (int) ParserToken.End) + throw new JsonException ( + "Input doesn't evaluate to proper JSON text"); + + if (parser_return) + return true; + + return false; + } + + continue; + } + + try { + + entry_symbols = + parse_table[current_symbol][current_input]; + + } catch (KeyNotFoundException e) { + throw new JsonException ((ParserToken) current_input, e); + } + + if (entry_symbols[0] == (int) ParserToken.Epsilon) + continue; + + for (int i = entry_symbols.Length - 1; i >= 0; i--) + automaton_stack.Push (entry_symbols[i]); + } + } + + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs.meta new file mode 100644 index 0000000..2090450 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonReader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8d4fad23f0c1df8488cd1ce850b1b88e +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs new file mode 100644 index 0000000..40324e9 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs @@ -0,0 +1,595 @@ +#region Header +/** + * JsonWriter.cs + * Stream-like facility to output JSON text. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + + +namespace LitJson +{ + internal enum Condition + { + InArray, + InObject, + NotAProperty, + Property, + Value + } + + internal class WriterContext + { + public int Count; + public bool InArray; + public bool InObject; + public bool ExpectingValue; + public int Padding; + } + + public class JsonWriter + { + #region Fields + private static NumberFormatInfo number_format; + + private WriterContext context; + private Stack ctx_stack; + private bool has_reached_end; + private char[] hex_seq; + private int indentation; + private int indent_value; + private StringBuilder inst_string_builder; + private bool pretty_print; + private bool validate; + private TextWriter writer; + #endregion + + + #region Properties + public int IndentValue { + get { return indent_value; } + set { + indentation = (indentation / indent_value) * value; + indent_value = value; + } + } + + public bool PrettyPrint { + get { return pretty_print; } + set { pretty_print = value; } + } + + public TextWriter TextWriter { + get { return writer; } + } + + public bool Validate { + get { return validate; } + set { validate = value; } + } + #endregion + + + #region Constructors + static JsonWriter () + { + number_format = NumberFormatInfo.InvariantInfo; + } + + public JsonWriter () + { + inst_string_builder = new StringBuilder (); + writer = new StringWriter (inst_string_builder); + + Init (); + } + + public JsonWriter (StringBuilder sb) : + this (new StringWriter (sb)) + { + } + + public JsonWriter (TextWriter writer) + { + if (writer == null) + throw new ArgumentNullException ("writer"); + + this.writer = writer; + + Init (); + } + #endregion + + + #region Private Methods + private void DoValidation (Condition cond) + { + if (! context.ExpectingValue) + context.Count++; + + if (! validate) + return; + + if (has_reached_end) + throw new JsonException ( + "A complete JSON symbol has already been written"); + + switch (cond) { + case Condition.InArray: + if (! context.InArray) + throw new JsonException ( + "Can't close an array here"); + break; + + case Condition.InObject: + if (! context.InObject || context.ExpectingValue) + throw new JsonException ( + "Can't close an object here"); + break; + + case Condition.NotAProperty: + if (context.InObject && ! context.ExpectingValue) + throw new JsonException ( + "Expected a property"); + break; + + case Condition.Property: + if (! context.InObject || context.ExpectingValue) + throw new JsonException ( + "Can't add a property here"); + break; + + case Condition.Value: + if (! context.InArray && + (! context.InObject || ! context.ExpectingValue)) + throw new JsonException ( + "Can't add a value here"); + + break; + } + } + + private void Init () + { + has_reached_end = false; + hex_seq = new char[4]; + indentation = 0; + indent_value = 4; + pretty_print = false; + validate = true; + + ctx_stack = new Stack (); + context = new WriterContext (); + ctx_stack.Push (context); + } + + private static void IntToHex (int n, char[] hex) + { + int num; + + for (int i = 0; i < 4; i++) { + num = n % 16; + + if (num < 10) + hex[3 - i] = (char) ('0' + num); + else + hex[3 - i] = (char) ('A' + (num - 10)); + + n >>= 4; + } + } + + private void Indent () + { + if (pretty_print) + indentation += indent_value; + } + + + private void Put (string str) + { + if (pretty_print && ! context.ExpectingValue) + for (int i = 0; i < indentation; i++) + writer.Write (' '); + + writer.Write (str); + } + + private void PutNewline () + { + PutNewline (true); + } + + private void PutNewline (bool add_comma) + { + if (add_comma && ! context.ExpectingValue && + context.Count > 1) + writer.Write (','); + + if (pretty_print && ! context.ExpectingValue) + writer.Write ('\n'); + } + + private void PutString (string str) + { + Put (String.Empty); + + writer.Write ('"'); + + int n = str.Length; + for (int i = 0; i < n; i++) { + switch (str[i]) { + case '\n': + writer.Write ("\\n"); + continue; + + case '\r': + writer.Write ("\\r"); + continue; + + case '\t': + writer.Write ("\\t"); + continue; + + case '"': + case '\\': + writer.Write ('\\'); + writer.Write (str[i]); + continue; + + case '\f': + writer.Write ("\\f"); + continue; + + case '\b': + writer.Write ("\\b"); + continue; + } + + if ((int) str[i] >= 32 && (int) str[i] <= 126) { + writer.Write (str[i]); + continue; + } + + // Default, turn into a \uXXXX sequence + IntToHex ((int) str[i], hex_seq); + writer.Write ("\\u"); + writer.Write (hex_seq); + } + + writer.Write ('"'); + } + + private void Unindent () + { + if (pretty_print) + indentation -= indent_value; + } + #endregion + + + public override string ToString () + { + if (inst_string_builder == null) + return String.Empty; + + return inst_string_builder.ToString (); + } + + public void Reset () + { + has_reached_end = false; + + ctx_stack.Clear (); + context = new WriterContext (); + ctx_stack.Push (context); + + if (inst_string_builder != null) + inst_string_builder.Remove (0, inst_string_builder.Length); + } + + //=====================扩展开始===================== + public void Write(UnityEngine.Vector4 v4) + { + DoValidation(Condition.Value); + PutNewline(); + + Put("\""); + Put(v4.x.ToString()); Put(","); + Put(v4.y.ToString()); Put(","); + Put(v4.z.ToString()); Put(","); + Put(v4.w.ToString()); + Put("\""); + + context.ExpectingValue = false; + } + + public void Write(UnityEngine.Vector3 v3) + { + DoValidation(Condition.Value); + PutNewline(); + + Put("\""); + Put(v3.x.ToString()); Put(","); + Put(v3.y.ToString()); Put(","); + Put(v3.z.ToString()); + Put("\""); + + context.ExpectingValue = false; + } + + public void Write(UnityEngine.Vector2 v2) + { + DoValidation(Condition.Value); + PutNewline(); + + Put("\""); + Put(v2.x.ToString()); Put(","); + Put(v2.y.ToString()); + Put("\""); + + context.ExpectingValue = false; + } + + //public void Write(DNA.IntVector4 v4) + //{ + // DoValidation(Condition.Value); + // PutNewline(); + + // context.ExpectingValue = false; + // Put("\""); + // Put(v4.ToString()); + // Put("\""); + + // context.ExpectingValue = false; + //} + + //public void Write(DNA.IntVector3 v3) + //{ + // DoValidation(Condition.Value); + // PutNewline(); + + // context.ExpectingValue = false; + // Put("\""); + // Put(v3.ToString()); + // Put("\""); + + // context.ExpectingValue = false; + //} + + //public void Write(DNA.IntVector2 v2) + //{ + // DoValidation(Condition.Value); + // PutNewline(); + + // context.ExpectingValue = false; + // Put("\""); + // Put(v2.ToString()); + // Put("\""); + + // context.ExpectingValue = false; + //} + + public void Write(UnityEngine.Color color) + { + DoValidation(Condition.Value); + PutNewline(); + + Put("\""); + Put(color.r.ToString()); Put(","); + Put(color.g.ToString()); Put(","); + Put(color.b.ToString()); Put(","); + Put(color.a.ToString()); + Put("\""); + + context.ExpectingValue = false; + } + + public void Write(UnityEngine.Color32 color) + { + DoValidation(Condition.Value); + PutNewline(); + + Put("\""); + Put(color.r.ToString()); Put(","); + Put(color.g.ToString()); Put(","); + Put(color.b.ToString()); Put(","); + Put(color.a.ToString()); + Put("\""); + + context.ExpectingValue = false; + } + + //=====================扩展结束===================== + + public void Write (bool boolean) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (boolean ? "true" : "false"); + + context.ExpectingValue = false; + } + + public void Write (decimal number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void Write(float number) + { + DoValidation(Condition.Value); + PutNewline(); + + string str = Convert.ToString(number, number_format); + Put(str); + + if (str.IndexOf('.') == -1 && + str.IndexOf('E') == -1) + writer.Write(".0"); + + context.ExpectingValue = false; + } + + public void Write (double number) + { + DoValidation (Condition.Value); + PutNewline (); + + string str = Convert.ToString (number, number_format); + Put (str); + + if (str.IndexOf ('.') == -1 && + str.IndexOf ('E') == -1) + writer.Write (".0"); + + context.ExpectingValue = false; + } + + public void Write (int number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void Write (long number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + context.ExpectingValue = false; + } + + public void Write (string str) + { + DoValidation (Condition.Value); + PutNewline (); + + if (str == null) + Put ("null"); + else + PutString (str); + + context.ExpectingValue = false; + } + + //[CLSCompliant(false)] Todisable warring CS3021 + public void Write (ulong number) + { + DoValidation (Condition.Value); + PutNewline (); + + Put (Convert.ToString (number, number_format)); + + context.ExpectingValue = false; + } + + public void WriteArrayEnd () + { + DoValidation (Condition.InArray); + PutNewline (false); + + ctx_stack.Pop (); + if (ctx_stack.Count == 1) + has_reached_end = true; + else { + context = ctx_stack.Peek (); + context.ExpectingValue = false; + } + + Unindent (); + Put ("]"); + } + + public void WriteArrayStart () + { + DoValidation (Condition.NotAProperty); + PutNewline (); + + Put ("["); + + context = new WriterContext + { + InArray = true + }; + ctx_stack.Push (context); + + Indent (); + } + + public void WriteObjectEnd () + { + DoValidation (Condition.InObject); + PutNewline (false); + + ctx_stack.Pop (); + if (ctx_stack.Count == 1) + has_reached_end = true; + else { + context = ctx_stack.Peek (); + context.ExpectingValue = false; + } + + Unindent (); + Put ("}"); + } + + public void WriteObjectStart () + { + DoValidation (Condition.NotAProperty); + PutNewline (); + + Put ("{"); + + context = new WriterContext + { + InObject = true + }; + ctx_stack.Push (context); + + Indent (); + } + + public void WritePropertyName (string property_name) + { + DoValidation (Condition.Property); + PutNewline (); + + PutString (property_name); + + if (pretty_print) { + if (property_name.Length > context.Padding) + context.Padding = property_name.Length; + + for (int i = context.Padding - property_name.Length; + i >= 0; i--) + writer.Write (' '); + + writer.Write (": "); + } else + writer.Write (':'); + + context.ExpectingValue = true; + } + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs.meta new file mode 100644 index 0000000..ad597f9 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/JsonWriter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b8439c843e82dfe48b235906797bcda7 +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs new file mode 100644 index 0000000..37534bb --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs @@ -0,0 +1,912 @@ +#region Header +/** + * Lexer.cs + * JSON lexer implementation based on a finite state machine. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + + +namespace LitJson +{ + internal class FsmContext + { + public bool Return; + public int NextState; + public Lexer L; + public int StateStack; + } + + + internal class Lexer + { + #region Fields + private delegate bool StateHandler (FsmContext ctx); + + private static int[] fsm_return_table; + private static StateHandler[] fsm_handler_table; + + private bool allow_comments; + private bool allow_single_quoted_strings; + private bool end_of_input; + private FsmContext fsm_context; + private int input_buffer; + private int input_char; + private TextReader reader; + private int state; + private StringBuilder string_buffer; + private string string_value; + private int token; + private int unichar; + #endregion + + + #region Properties + public bool AllowComments { + get { return allow_comments; } + set { allow_comments = value; } + } + + public bool AllowSingleQuotedStrings { + get { return allow_single_quoted_strings; } + set { allow_single_quoted_strings = value; } + } + + public bool EndOfInput { + get { return end_of_input; } + } + + public int Token { + get { return token; } + } + + public string StringValue { + get { return string_value; } + } + #endregion + + + #region Constructors + static Lexer () + { + PopulateFsmTables (); + } + + public Lexer (TextReader reader) + { + allow_comments = true; + allow_single_quoted_strings = true; + + input_buffer = 0; + string_buffer = new StringBuilder (128); + state = 1; + end_of_input = false; + this.reader = reader; + + fsm_context = new FsmContext + { + L = this + }; + } + #endregion + + + #region Static Methods + private static int HexValue (int digit) + { + switch (digit) { + case 'a': + case 'A': + return 10; + + case 'b': + case 'B': + return 11; + + case 'c': + case 'C': + return 12; + + case 'd': + case 'D': + return 13; + + case 'e': + case 'E': + return 14; + + case 'f': + case 'F': + return 15; + + default: + return digit - '0'; + } + } + + private static void PopulateFsmTables () + { + fsm_handler_table = new StateHandler[28] { + State1, + State2, + State3, + State4, + State5, + State6, + State7, + State8, + State9, + State10, + State11, + State12, + State13, + State14, + State15, + State16, + State17, + State18, + State19, + State20, + State21, + State22, + State23, + State24, + State25, + State26, + State27, + State28 + }; + + fsm_return_table = new int[28] { + (int) ParserToken.Char, + 0, + (int) ParserToken.Number, + (int) ParserToken.Number, + 0, + (int) ParserToken.Number, + 0, + (int) ParserToken.Number, + 0, + 0, + (int) ParserToken.True, + 0, + 0, + 0, + (int) ParserToken.False, + 0, + 0, + (int) ParserToken.Null, + (int) ParserToken.CharSeq, + (int) ParserToken.Char, + 0, + 0, + (int) ParserToken.CharSeq, + (int) ParserToken.Char, + 0, + 0, + 0, + 0 + }; + } + + private static char ProcessEscChar (int esc_char) + { + switch (esc_char) { + case '"': + case '\'': + case '\\': + case '/': + return Convert.ToChar (esc_char); + + case 'n': + return '\n'; + + case 't': + return '\t'; + + case 'r': + return '\r'; + + case 'b': + return '\b'; + + case 'f': + return '\f'; + + default: + // Unreachable + return '?'; + } + } + + private static bool State1 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') + continue; + + if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 3; + return true; + } + + switch (ctx.L.input_char) { + case '"': + ctx.NextState = 19; + ctx.Return = true; + return true; + + case ',': + case ':': + case '[': + case ']': + case '{': + case '}': + ctx.NextState = 1; + ctx.Return = true; + return true; + + case '-': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 2; + return true; + + case '0': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 4; + return true; + + case 'f': + ctx.NextState = 12; + return true; + + case 'n': + ctx.NextState = 16; + return true; + + case 't': + ctx.NextState = 9; + return true; + + case '\'': + if (! ctx.L.allow_single_quoted_strings) + return false; + + ctx.L.input_char = '"'; + ctx.NextState = 23; + ctx.Return = true; + return true; + + case '/': + if (! ctx.L.allow_comments) + return false; + + ctx.NextState = 25; + return true; + + default: + return false; + } + } + + return true; + } + + private static bool State2 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char >= '1' && ctx.L.input_char<= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 3; + return true; + } + + switch (ctx.L.input_char) { + case '0': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 4; + return true; + + default: + return false; + } + } + + private static bool State3 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + case '.': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 5; + return true; + + case 'e': + case 'E': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 7; + return true; + + default: + return false; + } + } + return true; + } + + private static bool State4 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + case '.': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 5; + return true; + + case 'e': + case 'E': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 7; + return true; + + default: + return false; + } + } + + private static bool State5 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 6; + return true; + } + + return false; + } + + private static bool State6 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + case 'e': + case 'E': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 7; + return true; + + default: + return false; + } + } + + return true; + } + + private static bool State7 (FsmContext ctx) + { + ctx.L.GetChar (); + + if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 8; + return true; + } + + switch (ctx.L.input_char) { + case '+': + case '-': + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + ctx.NextState = 8; + return true; + + default: + return false; + } + } + + private static bool State8 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char >= '0' && ctx.L.input_char<= '9') { + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + + if (ctx.L.input_char == ' ' || + ctx.L.input_char >= '\t' && ctx.L.input_char<= '\r') { + ctx.Return = true; + ctx.NextState = 1; + return true; + } + + switch (ctx.L.input_char) { + case ',': + case ']': + case '}': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + return true; + } + + private static bool State9 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'r': + ctx.NextState = 10; + return true; + + default: + return false; + } + } + + private static bool State10 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'u': + ctx.NextState = 11; + return true; + + default: + return false; + } + } + + private static bool State11 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'e': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State12 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'a': + ctx.NextState = 13; + return true; + + default: + return false; + } + } + + private static bool State13 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'l': + ctx.NextState = 14; + return true; + + default: + return false; + } + } + + private static bool State14 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 's': + ctx.NextState = 15; + return true; + + default: + return false; + } + } + + private static bool State15 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'e': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State16 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'u': + ctx.NextState = 17; + return true; + + default: + return false; + } + } + + private static bool State17 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'l': + ctx.NextState = 18; + return true; + + default: + return false; + } + } + + private static bool State18 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'l': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State19 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + switch (ctx.L.input_char) { + case '"': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 20; + return true; + + case '\\': + ctx.StateStack = 19; + ctx.NextState = 21; + return true; + + default: + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + } + + return true; + } + + private static bool State20 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case '"': + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State21 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case 'u': + ctx.NextState = 22; + return true; + + case '"': + case '\'': + case '/': + case '\\': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + ctx.L.string_buffer.Append ( + ProcessEscChar (ctx.L.input_char)); + ctx.NextState = ctx.StateStack; + return true; + + default: + return false; + } + } + + private static bool State22 (FsmContext ctx) + { + int counter = 0; + int mult = 4096; + + ctx.L.unichar = 0; + + while (ctx.L.GetChar ()) { + + if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' || + ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' || + ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') { + + ctx.L.unichar += HexValue (ctx.L.input_char) * mult; + + counter++; + mult /= 16; + + if (counter == 4) { + ctx.L.string_buffer.Append ( + Convert.ToChar (ctx.L.unichar)); + ctx.NextState = ctx.StateStack; + return true; + } + + continue; + } + + return false; + } + + return true; + } + + private static bool State23 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + switch (ctx.L.input_char) { + case '\'': + ctx.L.UngetChar (); + ctx.Return = true; + ctx.NextState = 24; + return true; + + case '\\': + ctx.StateStack = 23; + ctx.NextState = 21; + return true; + + default: + ctx.L.string_buffer.Append ((char) ctx.L.input_char); + continue; + } + } + + return true; + } + + private static bool State24 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case '\'': + ctx.L.input_char = '"'; + ctx.Return = true; + ctx.NextState = 1; + return true; + + default: + return false; + } + } + + private static bool State25 (FsmContext ctx) + { + ctx.L.GetChar (); + + switch (ctx.L.input_char) { + case '*': + ctx.NextState = 27; + return true; + + case '/': + ctx.NextState = 26; + return true; + + default: + return false; + } + } + + private static bool State26 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == '\n') { + ctx.NextState = 1; + return true; + } + } + + return true; + } + + private static bool State27 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == '*') { + ctx.NextState = 28; + return true; + } + } + + return true; + } + + private static bool State28 (FsmContext ctx) + { + while (ctx.L.GetChar ()) { + if (ctx.L.input_char == '*') + continue; + + if (ctx.L.input_char == '/') { + ctx.NextState = 1; + return true; + } + + ctx.NextState = 27; + return true; + } + + return true; + } + #endregion + + + private bool GetChar () + { + if ((input_char = NextChar ()) != -1) + return true; + + end_of_input = true; + return false; + } + + private int NextChar () + { + if (input_buffer != 0) { + int tmp = input_buffer; + input_buffer = 0; + + return tmp; + } + + return reader.Read (); + } + + public bool NextToken () + { + StateHandler handler; + fsm_context.Return = false; + + while (true) { + handler = fsm_handler_table[state - 1]; + + if (! handler (fsm_context)) + throw new JsonException (input_char); + + if (end_of_input) + return false; + + if (fsm_context.Return) { + string_value = string_buffer.ToString (); + string_buffer.Remove (0, string_buffer.Length); + token = fsm_return_table[state - 1]; + + if (token == (int) ParserToken.Char) + token = input_char; + + state = fsm_context.NextState; + + return true; + } + + state = fsm_context.NextState; + } + } + + private void UngetChar () + { + input_buffer = input_char; + } + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs.meta new file mode 100644 index 0000000..5468201 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/Lexer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c044d0a258f8a014f9c13b83ed68d346 +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs b/WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs new file mode 100644 index 0000000..01174df --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs @@ -0,0 +1,44 @@ +#region Header +/** + * ParserToken.cs + * Internal representation of the tokens used by the lexer and the parser. + * + * The authors disclaim copyright to this source code. For more details, see + * the COPYING file included with this distribution. + **/ +#endregion + + +namespace LitJson +{ + internal enum ParserToken + { + // Lexer tokens + None = System.Char.MaxValue + 1, + Number, + True, + False, + Null, + CharSeq, + // Single char + Char, + + // Parser Rules + Text, + Object, + ObjectPrime, + Pair, + PairRest, + Array, + ArrayPrime, + Value, + ValueRest, + String, + + // End of input + End, + + // The empty rule + Epsilon + } +} diff --git a/WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs.meta b/WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs.meta new file mode 100644 index 0000000..3766b80 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/LitJson/ParserToken.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 712024c872ac84c4a99a7e6479b8cb99 +timeCreated: 1474349755 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil.meta new file mode 100644 index 0000000..878753e --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f5ab78f3fb911749afba18449589ba4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs new file mode 100644 index 0000000..5d9c6e8 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +/// +/// 给UI.Text使用的double buffer string +/// +public class DoubleVString +{ + private int index; + private VString stringA; + private VString stringB; + + public DoubleVString(int maxCount) + { + stringA = new VString(maxCount); + stringB = new VString(maxCount); + } + + public VString GetCurrentVString() + { + return (index % 2) == 0 ? stringA : stringB; + } + + public VString GetNextVString() + { + return (index % 2) == 0 ? stringB : stringA; + } + + + //交换current 和Next string对象 + public void SwapVString() + { + index = (index + 1) % 2; + } +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs.meta new file mode 100644 index 0000000..5e79416 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/DoubleVString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9a865a66c8bd9444f9b481e3a62e500e +timeCreated: 1526353967 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs new file mode 100644 index 0000000..1b885bd --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs @@ -0,0 +1,750 @@ +using UnityEngine; +using System.Collections; +using System.Text; +using System; +using System.Collections.Generic; + +public partial class StringUtil +{ + //自定义字符串函数公用的StringBuilder + static StringBuilder _customSB = new StringBuilder(); + //共享的StringBuilder + static StringBuilder shareSB = new StringBuilder(); + + #region Concat + /// + /// 拼接字符串(2个) + /// + /// + /// + /// + public static string Concat(string a1, string a2) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + return _customSB.ToString(); + } + /// + /// 拼接字符串(3个) + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + return _customSB.ToString(); + } + /// + /// 拼接字符串(4个) + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + return _customSB.ToString(); + } + /// + /// 拼接字符串(5个) + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + return _customSB.ToString(); + } + /// + /// 拼接字符串(6个) + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + return _customSB.ToString(); + } + /// + /// 拼接字符串(7个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + return _customSB.ToString(); + } + /// + /// 拼接字符串(8个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + return _customSB.ToString(); + } + /// + /// 拼接字符串(9个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + return _customSB.ToString(); + } + /// + /// 拼接字符串(10个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + return _customSB.ToString(); + } + /// + /// 拼接字符串(11个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + return _customSB.ToString(); + } + /// + /// 拼接字符串(12个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + return _customSB.ToString(); + } + /// + /// 拼接字符串(13个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + return _customSB.ToString(); + } + + /// + /// 拼接字符串(14个) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + return _customSB.ToString(); + } + /// + /// 拼接字符串(15个) + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14, string a15) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + _customSB.Append(a15); + return _customSB.ToString(); + } + /// + /// 拼接字符串(16个) + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14, string a15, + string a16) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + _customSB.Append(a15); + _customSB.Append(a16); + return _customSB.ToString(); + } + /// + /// 拼接字符串(17个) + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14, string a15, + string a16, string a17) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + _customSB.Append(a15); + _customSB.Append(a16); + _customSB.Append(a17); + return _customSB.ToString(); + } + + /// + /// 拼接字符串(18个) + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14, string a15, + string a16, string a17, string a18) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + _customSB.Append(a15); + _customSB.Append(a16); + _customSB.Append(a17); + _customSB.Append(a18); + return _customSB.ToString(); + } + /// + /// 拼接字符串(19个) + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14, string a15, + string a16, string a17, string a18, string a19) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + _customSB.Append(a15); + _customSB.Append(a16); + _customSB.Append(a17); + _customSB.Append(a18); + _customSB.Append(a19); + return _customSB.ToString(); + } + /// + /// 拼接字符串(20个) + /// + public static string Concat(string a1, string a2, string a3, string a4, string a5, + string a6, string a7, string a8, string a9, string a10, + string a11, string a12, string a13, string a14, string a15, + string a16, string a17, string a18, string a19, string a20) + { + _customSB.Remove(0, _customSB.Length); + _customSB.Append(a1); + _customSB.Append(a2); + _customSB.Append(a3); + _customSB.Append(a4); + _customSB.Append(a5); + _customSB.Append(a6); + _customSB.Append(a7); + _customSB.Append(a8); + _customSB.Append(a9); + _customSB.Append(a10); + _customSB.Append(a11); + _customSB.Append(a12); + _customSB.Append(a13); + _customSB.Append(a14); + _customSB.Append(a15); + _customSB.Append(a16); + _customSB.Append(a17); + _customSB.Append(a18); + _customSB.Append(a19); + _customSB.Append(a20); + return _customSB.ToString(); + } + #endregion + + /// + /// 获得公用的StringBuilder + /// + /// + public static StringBuilder GetShareStringBuilder(bool bReset = true) + { + if (bReset) + { + shareSB.Remove(0, shareSB.Length); + } + return shareSB; + } + + /// + /// 格式化字符串 + /// + /// + /// + /// + public static string Format(string format, params object[] args) + { + try + { + _customSB.Remove(0, _customSB.Length); + _customSB.AppendFormat(format, args); + return _customSB.ToString(); + } + catch (Exception e) + { + LogHelper.LogError(e.Message); + return format; + } + } + + /// + /// 替换\\n 为\n + /// + /// + /// + public static string ReplaceNewLineChar(string baseStr) + { + //if (!baseStr.Contains("\\n")) + //{ + // return baseStr; + //} + return baseStr.Replace("\\n", "\n"); + } + + /// + /// 替换转义字符 + /// + /// + /// + public static string ReplaceTranslateChar(string baseStr) + { + baseStr = baseStr.Replace("\\n", "\n"); + baseStr = baseStr.Replace("\\t", "\t"); + baseStr = baseStr.Replace("\\b", " "); + return baseStr; + } + + /// + /// 替换\\s 为(全角)空格 + /// + /// + /// + public static string ReplaceNewBlankSpaceChar(string baseStr) + { + //if (!baseStr.Contains("\\s")) + //{ + // return baseStr; + //} + return baseStr.Replace("\\s", " "); + } + + // 正则匹配空格规则 + static System.Text.RegularExpressions.Regex SpaceRgx = null; + private static string GetSpacePattern() + { + return "\\s(?![a-z]|\\s)"; + } + + public static System.Text.RegularExpressions.Regex GetSpaceRgx() + { + if(SpaceRgx == null) + { + SpaceRgx = new System.Text.RegularExpressions.Regex(GetSpacePattern(), System.Text.RegularExpressions.RegexOptions.IgnoreCase); + } + return SpaceRgx; + } + // 处理英文混排时空格换行的问题 + public static string ProSpace(string value) + { + if (string.IsNullOrEmpty(value)) + return value; + return ProSpaceSp(value); + } + private static string ProSpaceSp(string value) + { + return value.Replace("{sp}", "\u00A0"); + } + private static string ProSpaceNormal(string value) + { + return GetSpaceRgx().Replace(value, "\u00A0"); + } + + + /// + /// 文本加持颜色 + /// + /// + /// + /// + public static string UITextColor(string color, string text) + { + return StringUtil.Format("{1}", color, text); + } + + /// + /// 文本加持颜色 + /// + /// + /// + /// + public static string UITextColor(Color color, string text) + { + return UITextColor(ColorUtility.ToHtmlStringRGBA(color), text); + } + + /// + /// 整数转字符串 + /// + /// + /// + /// + /// + public static string Int2StringLimit(int num, int limit, string param = "") + { + if (num < limit) + { + return num.ToString(param); + } + else + { + return limit.ToString(param); + } + } + + /// + /// 替换为linux的斜杠 + /// + /// + /// + public static string StringSlashOfLinux(string str) + { + return str.Replace('\\', '/'); ; + } + + /// + /// 替换为win的斜杠 + /// + /// + /// + public static string StringSlashOfWin(string str) + { + return str.Replace('/', '\\'); ; + } + + /// + /// 服务器接收的字符串不可有竖线 + /// + /// + /// + public static string ToServerSafeString(string str) + { + return str.Replace("|", "/"); + } + + public static string DictionaryConvertString(Dictionary dic) + { + _customSB.Remove(0, _customSB.Length); + if(dic != null) + { + Dictionary.Enumerator itor = dic.GetEnumerator(); + while(itor.MoveNext()) + { + _customSB.Append(itor.Current.Key); + _customSB.Append(","); + _customSB.Append(itor.Current.Value); + _customSB.Append(";"); + } + } + return _customSB.ToString(); + } + #region 数字转美式字符串 +#if VERSION_OVERSEA_GAIYA && !(GAIYA_BURNING_GAME ||GAIYA_MYCARD_GAME) + public static string Num2US(float num) + { + return num.ToString("n2"); + } + public static string Num2US(int num) + { + return num.ToString("n0"); + } + public static string Num2US(long num) + { + return num.ToString("n0"); + } +#else + public static string Num2US(float num) + { + return num.ToString("n2").Replace(',',' '); + } + public static string Num2US(int num) + { + return num.ToString("n0").Replace(',', ' '); + } + public static string Num2US(long num) + { + return num.ToString("n0").Replace(',', ' '); + } +#endif + #endregion +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs.meta new file mode 100644 index 0000000..ad52d51 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 657e94996dc5d074a9944a0c4f8df3c9 +timeCreated: 1493006408 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs new file mode 100644 index 0000000..d9d0616 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs @@ -0,0 +1,300 @@ +using UnityEngine; +using System.Collections; +using System.Text; +using System; + +public partial class StringUtil +{ + /// + /// 计算字符串的长度(包含处理中文字符) + /// + /// + /// + public static int CalcStringLetterNum(string input) + { + int counter = 0; + for (int i = 0, imax = input.Length; i < imax; ++i) + { + if (IsChineseLetter(input, i)) + { + counter += 2; + } + else + { + counter += 1; + } + } + + return counter; + } + + /// + /// 截断字符串(包含处理中文字符) + /// + /// + /// + /// + public static string TrancString(string input, int maxEnglishLength) + { + int counter = 0; + for (int i = 0, imax = input.Length; i < imax; ++i) + { + if (IsChineseLetter(input, i)) + { + if (counter <= maxEnglishLength && maxEnglishLength < (counter + 2)) + return input.Substring(0, i); + counter += 2; + } + else + { + if (counter <= maxEnglishLength && maxEnglishLength < (counter + 1)) + return input.Substring(0, i); + counter += 1; + } + } + + return input; + } + + /// + /// 是不是中文字符 + /// + /// + /// + /// + public static bool IsChineseLetter(string input, int index) + { + int code = 0; + int chfrom = System.Convert.ToInt32("4e00", 16); + int chend = System.Convert.ToInt32("9fff", 16); + if (input != "") + { + code = System.Char.ConvertToUtf32(input, index); + + if (code >= chfrom && code <= chend) + { + return true; + } + else + { + return false; + } + } + return false; + } + + /// + /// 缩减字符串 + /// + /// + /// + public static string ShrinkString(string str) + { + StringBuilder sb = new StringBuilder(); + for (int i = 0, imax = str.Length; i < imax; i++) + { + if (str[i] == '\0') + break; + sb.Append(str[i]); + } + + return sb.ToString(); + } + + /// + /// 自定义的字符串比较 + /// + /// + /// + /// + public static bool IsStringEqual(string left, string right) + { + if (System.Object.ReferenceEquals(left, right)) + { + return true; + } + + if (left == null && right == null) + return true; + if (left == null) + return false; + if (right == null) + return false; + + int leftLen = left.Length; + int rightLen = right.Length; + int count = Mathf.Min(leftLen, rightLen); + for (int index = 0; index < count; ++index) + { + char leftChar = left[index]; + char rightChar = right[index]; + if (leftChar != rightChar) + return false; + } + + if (leftLen > count && left[count] == '\0') + return true; + if (rightLen > count && right[count] == '\0') + return true; + if (leftLen == rightLen) + return true; + + return false; + } + + /// + /// Bytes数组转utf8字符串 + /// + /// + /// + /// + /// + /// + public static string GetUtf8StringFromByteBuffer(ref byte[] buffer, int fromIndex, int count, int bufferSize) + { + if (buffer == null) + return string.Empty; + if (fromIndex < bufferSize) + { + int maxCount = bufferSize - fromIndex; + count = Mathf.Min(maxCount, count); + + string str = ShrinkString(System.Text.Encoding.UTF8.GetString(buffer, fromIndex, count)); + return str; + } + + LogHelper.LogError("fromIndex over flow."); + return ""; + } + + /// + /// Bytes数组转utf8字符串 + /// + /// + /// + public static string GetUtf8StringFromByteBuffer(ref byte[] buffer) + { + return GetUtf8StringFromByteBuffer(ref buffer, 0, buffer.Length, buffer.Length); + } + + /// + /// Utf8字符串转Byte数组 + /// + /// + /// + /// + /// + /// + public static void CopyByteBufferFromUtf8String(string srcStr, int srcOffset, ref byte[] dstBuffer, int dstOffset, int dstBufferSize) + { + int copyCount; + CopyByteBufferFromUtf8String(srcStr, srcOffset, ref dstBuffer, dstOffset, dstBufferSize, out copyCount); + } + + /// + /// Utf8字符串转Byte数组 + /// + /// + /// + /// + /// + /// + /// + public static void CopyByteBufferFromUtf8String(string srcStr, int srcOffset, ref byte[] dstBuffer, int dstOffset, int dstBufferSize, out int copyCount) + { + byte[] srcBuffer = System.Text.Encoding.UTF8.GetBytes(srcStr); + int srcLen = srcBuffer.Length; + srcLen = Mathf.Max(srcLen - srcOffset, 0); + int dstMaxCopyCount = dstBufferSize - dstOffset; + dstMaxCopyCount = Mathf.Max(dstMaxCopyCount, 0); + dstMaxCopyCount = Mathf.Min(dstMaxCopyCount, srcLen); + System.Buffer.BlockCopy(srcBuffer, srcOffset, dstBuffer, dstOffset, dstMaxCopyCount); + + copyCount = dstMaxCopyCount; + } + + /// + /// Byte数组复制 + /// + /// + /// + /// + /// + /// + public static void CopyByteBuffer(ref byte[] srcBuffer, int srcOffset, ref byte[] dstBuffer, int dstOffset, int dstBufferSize) + { + int copyCount; + CopyByteBuffer(ref srcBuffer, srcOffset, ref dstBuffer, dstOffset, dstBufferSize, out copyCount); + } + + /// + /// Byte数组复制 + /// + /// + /// + /// + /// + /// + /// + public static void CopyByteBuffer(ref byte[] srcBuffer, int srcOffset, ref byte[] dstBuffer, int dstOffset, int dstBufferSize, out int copyCount) + { + int srcLen = srcBuffer.Length; + srcLen = Mathf.Max(srcLen - srcOffset, 0); + int dstMaxCopyCount = dstBufferSize - dstOffset; + dstMaxCopyCount = Mathf.Max(dstMaxCopyCount, 0); + dstMaxCopyCount = Mathf.Min(dstMaxCopyCount, srcLen); + System.Buffer.BlockCopy(srcBuffer, srcOffset, dstBuffer, dstOffset, dstMaxCopyCount); + + copyCount = dstMaxCopyCount; + } + + /// + /// Byte数组转十六进制字符串 + /// + /// + /// + public static string BytesToHex(byte[] bytes) + { + char[] c = new char[bytes.Length * 2]; + + byte b; + + for (int bx = 0, cx = 0; bx < bytes.Length; ++bx, ++cx) + { + b = ((byte)(bytes[bx] >> 4)); + c[cx] = (char)(b > 9 ? b + 0x37 + 0x20 : b + 0x30); + + b = ((byte)(bytes[bx] & 0x0F)); + c[++cx] = (char)(b > 9 ? b + 0x37 + 0x20 : b + 0x30); + } + + return new string(c); + } + + /// + /// 十六进制字符串转Byte数组 + /// + /// + /// + public static byte[] HexToBytes(string str) + { + if (str.Length == 0 || str.Length % 2 != 0) + return new byte[0]; + + byte[] buffer = new byte[str.Length / 2]; + char c; + for (int bx = 0, sx = 0; bx < buffer.Length; ++bx, ++sx) + { + // Convert first half of byte + c = str[sx]; + buffer[bx] = (byte)((c > '9' ? (c > 'Z' ? (c - 'a' + 10) : (c - 'A' + 10)) : (c - '0')) << 4); + + // Convert second half of byte + c = str[++sx]; + buffer[bx] |= (byte)(c > '9' ? (c > 'Z' ? (c - 'a' + 10) : (c - 'A' + 10)) : (c - '0')); + } + + return buffer; + } + +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs.meta new file mode 100644 index 0000000..6db4c41 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/StringUtil_Other.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5ae4f16a2f4c7254da9d834963922b33 +timeCreated: 1493352224 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs new file mode 100644 index 0000000..9563280 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs @@ -0,0 +1,618 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + + +public static class StringExtend +{ + private static volatile object lockThis = new object(); + + public static string ToTempString(this int i) + { + lock (lockThis) + { + return VString.IntToString(i); + } + } + + public static string ToTempString(this float f, int digits = 2) + { + lock (lockThis) + { + return VString.FloatToString(f, digits); + } + } + + public static string ToTempString(this long l) + { + lock (lockThis) + { + return VString.LongToString(l); + } + } + + public static string ToTempStringLower(this string str) + { + lock (lockThis) + { + return VString.ToLower(str); + } + } + + public static string ToTempStringUpper(this string str) + { + lock (lockThis) + { + return VString.ToUpper(str); + } + } + + public static string ToTempSubString(this string str, int index, int count) + { + lock (lockThis) + { + return VString.ToTempSubString(str, index, count); + } + } + + + + #region 转美式数字 + public static string ToStringUS(this float f) + { + return StringUtil.Num2US(f); + } + public static string ToStringUS(this int i) + { + return StringUtil.Num2US(i); + } + public static string ToStringUS(this long i) + { + return StringUtil.Num2US(i); + } + #endregion + +} + + + + + + +/// +/// 内容可变的字符串 +/// !!!只能作为临时变量使用,绝对不可以在逻辑中存储引用,包含VString和返回的string对象 +/// +public class VString +{ + private string _data; + private int maxCount; + + private static int _internalVsIndex; + private static VString[] _internalVSArray = new VString[] + { + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64), + new VString(64) + }; + private static string[] digitalNumberArray = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + + + public VString(int maxCount = 1024) + { + this.maxCount = maxCount + 1; //多加一个,用于留1个给字符串结束符 + _data = new string('\0', this.maxCount); + Clear(); + } + + public string GetString() + { + return _data; + } + + + + /// + /// int转string,无GC,注意生成的string一定不能进行存贮 + /// + /// + /// + public static string IntToString(int val) + { + return LongToString(val); + } + + /// + /// long转string,无GC,注意生成的string一定不能进行存贮 + /// + /// + /// + public static string LongToString(long val) + { + if (val == 0) + { + return "0"; + } + + VString tempVS = GetInternalVString(); + bool isNegative = false; + if (val < 0) + { + val = -val; + isNegative = true; + } + + while (val != 0) + { + long mod = val % 10; + val = val / 10; + tempVS.Push(digitalNumberArray[mod]); + } + + if (isNegative) + { + tempVS.Push("-"); + } + + tempVS.ReverseString(); + return tempVS.GetString(); + } + + /// + /// float转string,无GC,注意生成的string一定不能进行存贮 + /// + /// + /// 小数的位数 + /// + public static string FloatToString(float f, int digits = 2) + { + bool isNegative = false; + if (f < 0) + { + f = -f; + isNegative = true; + } + + int iPart = Mathf.FloorToInt(f); + float fPart = f - iPart; + + VString tempVS0 = GetInternalVString(); + + + if (iPart != 0) + { + while (iPart != 0) + { + long mod = iPart % 10; + iPart = iPart / 10; + tempVS0.Push(digitalNumberArray[mod]); + } + } + else + { + tempVS0.Push("0"); + } + + if (isNegative) + { + tempVS0.Push("-"); + } + tempVS0.ReverseString(); + + + if (digits != 0) + { + VString tempVS1 = GetInternalVString(); + fPart = fPart * Mathf.Pow(10, digits); + int iPart2 = Mathf.RoundToInt(fPart); + + int i = 0; + while (iPart2 != 0 && i < digits) + { + long mod = iPart2 % 10; + iPart2 = iPart2 / 10; + i++; + tempVS1.Push(digitalNumberArray[mod]); + } + tempVS1.ReverseString(); + + tempVS0.Push("."); + tempVS0.Push(tempVS1.GetString()); + while (i < digits) + { + i++; + tempVS0.Push("0"); + } + } + else + { + tempVS0.Push("."); + for (int i = 0; i < digits; ++i) + { + tempVS0.Push("0"); + } + } + + return tempVS0.GetString(); + } + + + /// + /// 把一个字符串拷贝后,转换为lower case,,注意生成的string一定不能进行存贮 + /// + /// + /// + public static string ToLower(string str) + { + if (!string.IsNullOrEmpty(str)) + { + VString tempVS = VStringShareObject.GetShareVString(); + tempVS.Push(str); + tempVS.ToLower(); + return tempVS.GetString(); + } + return str; + } + + /// + /// 把一个字符串拷贝后,转换为upper case,,注意生成的string一定不能进行存贮 + /// + /// + /// + public static string ToUpper(string str) + { + if (!string.IsNullOrEmpty(str)) + { + VString tempVS = VStringShareObject.GetShareVString(); + tempVS.Push(str); + tempVS.ToUpper(); + return tempVS.GetString(); + } + return str; + } + + public static string ToTempSubString(string str, int index, int count) + { + if (string.IsNullOrEmpty(str) || count <= 0 || index < 0) + { + LogHelper.LogError(VStringUtil.Concat("ToTempSubString IsNullOrEmpty ", index.ToTempString(), "/", count.ToTempString())); + return str; + } + + if (index + count > str.Length) + { + LogHelper.LogError(VStringUtil.Concat("ToTempSubString ", str, index.ToTempString(), "/", count.ToTempString())); + return str; + } + + VString tempVS1 = VStringShareObject.GetShareVString(); + tempVS1.Push(str); + VString tempVS2 = VStringShareObject.GetShareVString(); + tempVS2.CopyFrom(tempVS1, index, count); + return tempVS2.GetString(); + } + + + /// + /// 拼接两个字符串 + /// + /// + /// + /// + /// + public string Concat(string a, string b, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + return _data; + } + + + + public string Concat(string a, string b, string c, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + return _data; + } + public string Concat(string a, string b, string c, string d, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + return _data; + } + public string Concat(string a, string b, string c, string d, string e, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + Push(e); + return _data; + } + public string Concat(string a, string b, string c, string d, string e, string f, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + Push(e); + Push(f); + return _data; + } + public string Concat(string a, string b, string c, string d, string e, string f, string g, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + Push(e); + Push(f); + Push(g); + return _data; + } + public string Concat(string a, string b, string c, string d, string e, string f, string g, string h, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + Push(e); + Push(f); + Push(g); + Push(h); + return _data; + } + public string Concat(string a, string b, string c, string d, string e, string f, string g, string h, string i, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + Push(e); + Push(f); + Push(g); + Push(h); + Push(i); + return _data; + } + public string Concat(string a, string b, string c, string d, string e, string f, string g, string h, string i, string j, bool clear = true) + { + if (clear) + { + Clear(); + } + + Push(a); + Push(b); + Push(c); + Push(d); + Push(e); + Push(f); + Push(g); + Push(h); + Push(i); + Push(j); + return _data; + } + + + public static bool UseShareObject(string str) + { + for (int i = 0; i < _internalVSArray.Length; ++i) + { + if (string.ReferenceEquals(str, _internalVSArray[i].GetString())) + { + return true; + } + } + return false; + } + + + //往当前的字符串中添加字符串 + public unsafe void Push(string newStr) + { + if (string.IsNullOrEmpty(newStr)) + { + return; + } + + int copyLen = newStr.Length; + int newLen = _data.Length + copyLen; + if ((newLen + 1) > maxCount) //留1个给字符串结束符 + { + int len = newLen; + copyLen = maxCount - _data.Length - 1; + newLen = maxCount - 1; //设置新的长度 + //这个地方不使用VstringUtil.Concat避免死循环 + LogHelper.LogEditorError(StringUtil.Concat("超过了最大添加长度 ", maxCount.ToTempString(), " ", len.ToTempString())); + } + + if (copyLen <= 0) + { + return; + } + + fixed (char* src = newStr) + { + fixed (char* dst = _data) + { + UnsafeFunction.memcpyimpl((byte*)src, (byte*)(dst + _data.Length), copyLen * 2); //system.string的存储每个元素两个字节 + + int* iDst = (int*)dst; + iDst = iDst - 1; //字符串的长度在第一个元素的前面4个字节 + *iDst = newLen; + + char* iEnd = (char*)(dst + newLen); + *iEnd = (char)0;//设置字符串结束符 + } + } + } + + + public unsafe void Clear() + { + fixed (char* p = _data) + { + int* pSize = (int*)p; + pSize = pSize - 1; + *pSize = 0; + } + } + + public unsafe void CopyFrom(VString srcVstring, int startIndex, int count) + { + if ((count + 1) > maxCount) //留1个给字符串结束符 + { + throw new ArgumentException(VStringUtil.Concat("copy count is larger then maxCount ", + count.ToTempString(), " ", maxCount.ToTempString())); + } + + string srcStr = srcVstring.GetString(); + if (startIndex + count > srcStr.Length) + { + throw new ArgumentException(VStringUtil.Concat("copy count is larger then srcString len ", + count.ToTempString(), " ", srcStr.Length.ToTempString(), " ", startIndex.ToTempString())); + } + + Clear(); + + fixed (char* src = srcStr) + { + fixed (char* dst = _data) + { + UnsafeFunction.memcpyimpl((byte*)(src + startIndex), (byte*)dst, count * 2); //system.string的存储每个元素两个字节 + + int* iDst = (int*)dst; + iDst = iDst - 1; //字符串的长度在第一个元素的前面4个字节 + *iDst = count; + + char* iEnd = (char*)(dst + _data.Length); + *iEnd = (char)0;//设置字符串结束符 + } + } + } + + public unsafe void ToLower() + { + int index = 0; + int len = _data.Length; + fixed (char* dst = _data) + { + while (index < len) + { + char tempChar = *(dst + index); + *(dst + index) = char.ToLower(tempChar); + ++index; + } + } + } + + public unsafe void ToUpper() + { + int index = 0; + int len = _data.Length; + fixed (char* dst = _data) + { + while (index < len) + { + char tempChar = *(dst + index); + *(dst + index) = char.ToUpper(tempChar); + ++index; + } + } + } + + //反转字符串的内容 + private unsafe string ReverseString() + { + int len = _data.Length; + if (len > 0) + { + fixed (char* pHead = _data) + { + int count = len / 2; + for (int i = 0; i < count; ++i) + { + char temp = pHead[i]; + pHead[i] = pHead[len - 1 - i]; + pHead[len - 1 - i] = temp; + } + } + } + return _data; + } + + + private static VString GetInternalVString() + { + _internalVsIndex = (_internalVsIndex + 1) % _internalVSArray.Length; + VString vString = _internalVSArray[_internalVsIndex]; + vString.Clear(); + return vString; + } + +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs.meta new file mode 100644 index 0000000..1a0afa7 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 070edb2882bc15d49917028ddea695e2 +timeCreated: 1525942883 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs new file mode 100644 index 0000000..0cd147d --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + + +public static class VStringShareObject +{ + + private static volatile object lockThis = new object(); + private static int _internalVsIndex; + private static VString[] _internalVSArray = new VString[] + { + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048), + new VString(2048) + }; + + + public static VString GetShareVString() + { + lock(lockThis) + { + _internalVsIndex = (_internalVsIndex + 1) % _internalVSArray.Length; + VString vString = _internalVSArray[_internalVsIndex]; + vString.Clear(); + return vString; + } + } + + public static bool UseShareObject(string str) + { + for (int i = 0; i < _internalVSArray.Length; ++i) + { + if (string.ReferenceEquals(str, _internalVSArray[i].GetString())) + { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs.meta new file mode 100644 index 0000000..b40aa4a --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringShareObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c6d08c5051585094fb4d23fdf6fe4b7b +timeCreated: 1552276176 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs new file mode 100644 index 0000000..d8d717c --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs @@ -0,0 +1,107 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +/// +/// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 +/// +public class VStringUtil +{ + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d, string e) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, e, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d, string e, string f) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, e, f, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d, string e, string f, string g) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, e, f, g, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d, string e, string f, string g, string h) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, e, f, g, h, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d, string e, string f, string g, string h, string i) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, e, f, g, h, i, true); + return vString.GetString(); + } + /// + /// 只能作为临时字符串使用,代码任何地方使用只能赋值给临时变量,不可保存 + /// + public static string Concat(string a, string b, string c, string d, string e, string f, string g, string h, string i, string j) + { + VString vString = VStringShareObject.GetShareVString(); + vString.Concat(a, b, c, d, e, f, g, h, i, j, true); + return vString.GetString(); + } + + /// + /// 如果不是共享string,则返回str,如果是共享string则返回copy str + /// + /// + /// + public static string ConvertToNormalString(string str) + { + if(VStringShareObject.UseShareObject(str) || VString.UseShareObject(str)) + { + return string.Copy(str); + } + return str; + } + +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs.meta new file mode 100644 index 0000000..721f40c --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VStringUtil.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1816e678bcdfdb646b247fb5419f1279 +timeCreated: 1525954142 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs new file mode 100644 index 0000000..50b63e6 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +/// +/// 优化打字功能的字符串 +/// +public class VTypingString +{ + enum Tags + { + Color = 0, + Size, + B, + I + } + + + private VString allContentString; + private DoubleVString partialDisplayString; + private VString willShowString; + + private int _timerMS; + private int _factor; + private int _miniSecondPerWord; + + private static readonly string[] endTags = new string[] { "", "", "", "" }; + private static readonly string[] startTags = new string[] { " endTagCaches = new List(); + + + /// + /// + /// + /// + /// 出一个字符需要的毫秒时间 + public VTypingString(string text, int miniSecondPerWord = 240) + { + if(string.IsNullOrEmpty(text)) + { + throw new ArgumentException("text is null or empty"); + } + + _miniSecondPerWord = Mathf.Max(miniSecondPerWord, 10); + allContentString = new VString(text.Length); + allContentString.Push(text); + partialDisplayString = new DoubleVString(text.Length); + willShowString = new VString(text.Length); + JumpToBegin(); + } + + public bool IsEnd() + { + return _factor > allContentString.GetString().Length; + } + + public string GetString() + { + return partialDisplayString.GetCurrentVString().GetString(); + } + + /// + /// + /// + /// + /// true表示触发了一次打字变化 + public bool OnUpdate(int deltaTimeMS) + { + _timerMS += deltaTimeMS; + if(_timerMS >= _miniSecondPerWord) + { + _timerMS = 0; + OnTyping(); + return true; + } + return false; + } + + private void OnTyping() + { + if (CheckStart(Tags.Color)) { } + else if (CheckStart(Tags.Size)) { } + else if (CheckStart(Tags.B)) { } + else if (CheckStart(Tags.I)) { } + else + { + partialDisplayString.GetCurrentVString().Clear(); + partialDisplayString.SwapVString(); + partialDisplayString.GetCurrentVString().CopyFrom(allContentString, 0, Mathf.Min(_factor, allContentString.GetString().Length)); + for (int i = endTagCaches.Count - 1; i >= 0; --i) + { + partialDisplayString.GetCurrentVString().Push(endTags[endTagCaches[i]]); + } + _factor++; + } + } + + public void JumpToBegin() + { + _factor = 0; + _timerMS = -_miniSecondPerWord; + endTagCaches.Clear(); + partialDisplayString.GetCurrentVString().Clear(); + partialDisplayString.GetNextVString().Clear(); + } + + public void JumpToEnd() + { + _factor = allContentString.GetString().Length; + endTagCaches.Clear(); + OnTyping(); + } + + + bool CheckStart(Tags tag) + { + if (_factor >= allContentString.GetString().Length) + { + return false; + } + + int iTag = (int)tag; + willShowString.CopyFrom(allContentString, _factor, allContentString.GetString().Length - _factor); + string willShow = willShowString.GetString(); + string endTag = endTags[iTag]; + if (willShow.StartsWith(startTags[iTag])) + { + int tagLeng = willShow.IndexOf(">") + 1; + _factor += tagLeng; + endTagCaches.Add(iTag);//倒叙 + + if (CheckStart(Tags.Color)) { } + else if (CheckStart(Tags.Size)) { } + else if (CheckStart(Tags.B)) { } + else if (CheckStart(Tags.I)) { } + else + { + return false; + } + return true; + } + else if (willShow.StartsWith(endTag)) + { + int endleng = endTag.Length;//""的长度 + _factor += endleng; + for (int i = endTagCaches.Count - 1; i >= 0; --i) + { + if(iTag == endTagCaches[i]) + { + endTagCaches.RemoveAt(i); + } + } + + if (CheckStart(Tags.Color)) { } + else if (CheckStart(Tags.Size)) { } + else if (CheckStart(Tags.B)) { } + else if (CheckStart(Tags.I)) { } + else + { + return false; + } + return true; + } + return false; + } + + +} diff --git a/WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs.meta b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs.meta new file mode 100644 index 0000000..6f7b5ae --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/StringUtil/VTypingString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 49843f8b3aca65e4ca985d3226e77ad0 +timeCreated: 1542200708 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs b/WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs new file mode 100644 index 0000000..3362626 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + + +public class UnsafeFunction +{ + + public unsafe static void memcpyimpl(byte* src, byte* dest, int len) + { + if (len >= 16) + { + do + { + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + *(int*)(dest + 8) = *(int*)(src + 8); + *(int*)(dest + 12) = *(int*)(src + 12); + dest += 16; + src += 16; + } + while ((len -= 16) >= 16); + } + if (len > 0) + { + if ((len & 8) != 0) + { + *(int*)dest = *(int*)src; + *(int*)(dest + 4) = *(int*)(src + 4); + dest += 8; + src += 8; + } + if ((len & 4) != 0) + { + *(int*)dest = *(int*)src; + dest += 4; + src += 4; + } + if ((len & 2) != 0) + { + *(short*)dest = *(short*)src; + dest += 2; + src += 2; + } + if ((len & 1) != 0) + { + *(dest++) = *(src++); + } + } + } + +} \ No newline at end of file diff --git a/WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs.meta b/WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs.meta new file mode 100644 index 0000000..f8daf55 --- /dev/null +++ b/WorldlineKeepers/Assets/ThirdParty/UnsafeFunction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e441a31642a642f40a94673eadc379dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/ProjectSettings/ProjectSettings.asset b/WorldlineKeepers/ProjectSettings/ProjectSettings.asset index d551e40..80c7d4e 100644 --- a/WorldlineKeepers/ProjectSettings/ProjectSettings.asset +++ b/WorldlineKeepers/ProjectSettings/ProjectSettings.asset @@ -732,7 +732,7 @@ PlayerSettings: managedStrippingLevel: {} incrementalIl2cppBuild: {} suppressCommonWarnings: 1 - allowUnsafeCode: 0 + allowUnsafeCode: 1 useDeterministicCompilation: 1 enableRoslynAnalyzers: 1 additionalIl2CppArgs: -- cgit v1.1-26-g67d0