diff --git a/Scripts/Editor/Tests/EnumUtilTest.cs b/Scripts/Editor/Tests/EnumUtilTest.cs new file mode 100644 index 000000000..d446a17d0 --- /dev/null +++ b/Scripts/Editor/Tests/EnumUtilTest.cs @@ -0,0 +1,21 @@ +using NUnit.Framework; +using UnityEngine; + + +namespace VRM +{ + public class EnumUtilTest + { + [Test] + public void EnumUtilTestSimplePasses() + { + Assert.AreEqual(default(HumanBodyBones), EnumUtil.TryParseOrDefault("xxx")); + +#if UNITY_5_6_OR_NEWER + Assert.AreEqual(HumanBodyBones.UpperChest, EnumUtil.TryParseOrDefault("upperchest")); +#else + Assert.AreEqual(default(HumanBodyBones), EnumUtil.TryParseOrDefault("upperchest")); +#endif + } + } +} diff --git a/Scripts/Editor/Tests/EnumUtilTest.cs.meta b/Scripts/Editor/Tests/EnumUtilTest.cs.meta new file mode 100644 index 000000000..7082ee76d --- /dev/null +++ b/Scripts/Editor/Tests/EnumUtilTest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d4a5f44a23cb4884b9667b622f262497 +timeCreated: 1523088686 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Editor/Tests/VRMBlendShapeKeyTest.cs b/Scripts/Editor/Tests/VRMBlendShapeKeyTest.cs index cb40941a9..eb0486aec 100644 --- a/Scripts/Editor/Tests/VRMBlendShapeKeyTest.cs +++ b/Scripts/Editor/Tests/VRMBlendShapeKeyTest.cs @@ -3,22 +3,25 @@ using System.Collections.Generic; using VRM; -public class VRMBlendShapeKeyTest +namespace VRM { - [Test] - public void KeyTest() + public class VRMBlendShapeKeyTest { - var key = new BlendShapeKey("Blink", BlendShapePreset.Blink); + [Test] + public void KeyTest() + { + var key = new BlendShapeKey("Blink", BlendShapePreset.Blink); - Assert.AreEqual(key, new BlendShapeKey("blink")); - Assert.AreEqual(key, new BlendShapeKey(BlendShapePreset.Blink)); - Assert.AreEqual(key, new BlendShapeKey("xxx", BlendShapePreset.Blink)); + Assert.AreEqual(key, new BlendShapeKey("blink")); + Assert.AreEqual(key, new BlendShapeKey(BlendShapePreset.Blink)); + Assert.AreEqual(key, new BlendShapeKey("xxx", BlendShapePreset.Blink)); - var dict = new Dictionary(); - dict[new BlendShapeKey("xxx", BlendShapePreset.Blink)] = 1.0f; + var dict = new Dictionary(); + dict[new BlendShapeKey("xxx", BlendShapePreset.Blink)] = 1.0f; - Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("blink"))); - Assert.IsTrue(dict.ContainsKey(new BlendShapeKey(BlendShapePreset.Blink))); - Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("xxx", BlendShapePreset.Blink))); + Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("blink"))); + Assert.IsTrue(dict.ContainsKey(new BlendShapeKey(BlendShapePreset.Blink))); + Assert.IsTrue(dict.ContainsKey(new BlendShapeKey("xxx", BlendShapePreset.Blink))); + } } } diff --git a/Scripts/EnumUtil.cs b/Scripts/EnumUtil.cs new file mode 100644 index 000000000..ce8e95b3f --- /dev/null +++ b/Scripts/EnumUtil.cs @@ -0,0 +1,20 @@ +using System; + + +namespace VRM +{ + public static class EnumUtil + { + public static T TryParseOrDefault(string src)where T: struct + { + try + { + return (T)Enum.Parse(typeof(T), src, true); + } + catch(Exception) + { + return default(T); + } + } + } +} diff --git a/Scripts/EnumUtil.cs.meta b/Scripts/EnumUtil.cs.meta new file mode 100644 index 000000000..cc497ab3c --- /dev/null +++ b/Scripts/EnumUtil.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: da515e03d4b6ec244839077b79aad26a +timeCreated: 1523088440 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/FirstPerson/VRMFirstPerson.cs b/Scripts/FirstPerson/VRMFirstPerson.cs index cc985bb19..2deaa5724 100644 --- a/Scripts/FirstPerson/VRMFirstPerson.cs +++ b/Scripts/FirstPerson/VRMFirstPerson.cs @@ -125,7 +125,7 @@ namespace VRM { if (x.mesh == index) { - return (FirstPersonFlag)Enum.Parse(typeof(FirstPersonFlag), x.firstPersonFlag, true); + return EnumUtil.TryParseOrDefault(x.firstPersonFlag); } } diff --git a/Scripts/Format/VRMImporter.cs b/Scripts/Format/VRMImporter.cs index 6747c32f5..bdcebb688 100644 --- a/Scripts/Format/VRMImporter.cs +++ b/Scripts/Format/VRMImporter.cs @@ -305,11 +305,11 @@ namespace VRM if (group != null) { asset.BlendShapeName = groupName; - asset.Preset = group.presetName.ToBlendShapePreset(); + asset.Preset = EnumUtil.TryParseOrDefault(group.presetName); if (asset.Preset == BlendShapePreset.Unknown) { // fallback - asset.Preset = group.name.ToBlendShapePreset(); + asset.Preset = EnumUtil.TryParseOrDefault(group.name); } asset.Values = group.binds.Select(x => { @@ -367,7 +367,7 @@ namespace VRM .Where(x => x.Index != -1) .Select(x => { - var humanBone = (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), x.Key.ToUpperCamelCase()); + var humanBone = EnumUtil.TryParseOrDefault(x.Key); var hb = new HumanBone { boneName = context.Nodes[x.Index].name, diff --git a/Scripts/Format/VRMVersion.cs b/Scripts/Format/VRMVersion.cs index 5058c25f6..5fbf33b70 100644 --- a/Scripts/Format/VRMVersion.cs +++ b/Scripts/Format/VRMVersion.cs @@ -4,11 +4,11 @@ namespace VRM public static class VRMVersion { public const int MAJOR = 0; - public const int MINOR = 18; + public const int MINOR = 19; - public const string VERSION = "0.18"; + public const string VERSION = "0.19"; - public const string DecrementMenuName = "VRM/Version(0.18) Decrement"; - public const string IncrementMenuName = "VRM/Version(0.18) Increment"; + public const string DecrementMenuName = "VRM/Version(0.19) Decrement"; + public const string IncrementMenuName = "VRM/Version(0.19) Increment"; } } diff --git a/Scripts/Format/glTF_VRM_BlendShape.cs b/Scripts/Format/glTF_VRM_BlendShape.cs index 4af7fe14f..7949a6ff8 100644 --- a/Scripts/Format/glTF_VRM_BlendShape.cs +++ b/Scripts/Format/glTF_VRM_BlendShape.cs @@ -70,29 +70,6 @@ namespace VRM Blink_R, } - public static class BlendShpaePresetExtensions - { - /* - static string ToCamel(this string src) - { - if (string.IsNullOrEmpty(src)) return string.Empty; - return src.Substring(0, 1).ToUpper() + src.Substring(1); - } - */ - - public static BlendShapePreset ToBlendShapePreset(this string preset) - { - try - { - return (BlendShapePreset)Enum.Parse(typeof(BlendShapePreset), preset, true); - } - catch (Exception) - { - return default(BlendShapePreset); - } - } - } - [Serializable] public class glTF_VRM_BlendShapeGroup : UniGLTF.JsonSerializableBase { diff --git a/Scripts/Format/glTF_VRM_FirstPerson.cs b/Scripts/Format/glTF_VRM_FirstPerson.cs index 1b07b839c..6ce2e017d 100644 --- a/Scripts/Format/glTF_VRM_FirstPerson.cs +++ b/Scripts/Format/glTF_VRM_FirstPerson.cs @@ -76,12 +76,7 @@ namespace VRM public LookAtType lookAtType { get { - if (string.IsNullOrEmpty(lookAtTypeName)) - { - // fallback - return LookAtType.Bone; - } - return (LookAtType)Enum.Parse(typeof(LookAtType), lookAtTypeName, true); + return EnumUtil.TryParseOrDefault(lookAtTypeName); } set { lookAtTypeName = value.ToString(); } } diff --git a/Scripts/Format/glTF_VRM_Humanoid.cs b/Scripts/Format/glTF_VRM_Humanoid.cs index d1bcdfd99..f73bf1b38 100644 --- a/Scripts/Format/glTF_VRM_Humanoid.cs +++ b/Scripts/Format/glTF_VRM_Humanoid.cs @@ -71,11 +71,11 @@ namespace VRM { public static VRMBone FromHumanBodyBone(this HumanBodyBones human) { - return (VRMBone)Enum.Parse(typeof(VRMBone), human.ToString(), true); + return EnumUtil.TryParseOrDefault(human.ToString()); } public static HumanBodyBones ToHumanBodyBone(this VRMBone bone) { - return (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), bone.ToString(), true); + return EnumUtil.TryParseOrDefault(bone.ToString()); } } @@ -91,7 +91,7 @@ namespace VRM } get { - return (VRMBone)Enum.Parse(typeof(VRMBone), bone, true); + return EnumUtil.TryParseOrDefault(bone); } } public int node = -1; diff --git a/Scripts/Format/glTF_VRM_Meta.cs b/Scripts/Format/glTF_VRM_Meta.cs index 9b2daafe1..00fc79eb4 100644 --- a/Scripts/Format/glTF_VRM_Meta.cs +++ b/Scripts/Format/glTF_VRM_Meta.cs @@ -35,14 +35,7 @@ namespace VRM { static UssageLicense FromString(string src) { - try - { - return (UssageLicense)Enum.Parse(typeof(UssageLicense), src, true); - } - catch (Exception) - { - return UssageLicense.Disallow; - } + return EnumUtil.TryParseOrDefault(src); } public string title; public string version; @@ -57,14 +50,7 @@ namespace VRM { get { - try - { - return (AllowedUser)Enum.Parse(typeof(AllowedUser), allowedUserName, true); - } - catch (Exception) - { - return AllowedUser.OnlyAuthor; - } + return EnumUtil.TryParseOrDefault(allowedUserName); } set { @@ -102,14 +88,7 @@ namespace VRM { get { - try - { - return (LicenseType)Enum.Parse(typeof(LicenseType), licenseName, true); - } - catch (Exception) - { - return default(LicenseType); - } + return EnumUtil.TryParseOrDefault(licenseName); } set {