diff --git a/spine-csharp/src/Json.cs b/spine-csharp/src/Json.cs index 89b3c8c12..85dc9cd91 100644 --- a/spine-csharp/src/Json.cs +++ b/spine-csharp/src/Json.cs @@ -1,533 +1,17 @@ -/* - * Copyright (c) 2012 Calvin Rien - * - * Based on the JSON parser by Patrick van Bergen - * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html - * - * Simplified it so that it doesn't throw exceptions - * and can be used in Unity iPhone with maximum code stripping. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -using System; -using System.Collections; -using System.Collections.Generic; using System.IO; -using System.Text; -using System.Globalization; namespace Spine { - // Example usage: - // - // using UnityEngine; - // using System.Collections; - // using System.Collections.Generic; - // using MiniJSON; - // - // public class MiniJSONTest : MonoBehaviour { - // void Start () { - // var jsonString = "{ \"array\": [1.44,2,3], " + - // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + - // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + - // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + - // "\"int\": 65536, " + - // "\"float\": 3.1415926, " + - // "\"bool\": true, " + - // "\"null\": null }"; - // - // var dict = Json.Deserialize(jsonString) as Dictionary; - // - // Debug.Log("deserialized: " + dict.GetType()); - // Debug.Log("dict['array'][0]: " + ((List) dict["array"])[0]); - // Debug.Log("dict['string']: " + (string) dict["string"]); - // Debug.Log("dict['float']: " + (float) dict["float"]); - // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs - // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); - // - // var str = Json.Serialize(dict); - // - // Debug.Log("serialized: " + str); - // } - // } - - /// - /// This class encodes and decodes JSON strings. - /// Spec. details, see http://www.json.org/ - /// - /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. - /// All numbers are parsed to floats. - /// public static class Json { - /// - /// Parses the string json into a value - /// - /// A JSON string. - /// An List<object>, a Dictionary<string, object>, a float, an integer,a string, null, true, or false - public static object Deserialize (TextReader json) { - if (json == null) { - return null; - } - return Parser.Parse(json); + + static readonly SharpJson.JsonDecoder parser; + + static Json () { + parser = new SharpJson.JsonDecoder(); + parser.parseNumbersAsFloat = true; } - sealed class Parser : IDisposable { - const string WHITE_SPACE = " \t\n\r"; - const string WORD_BREAK = " \t\n\r{}[],:\""; - - enum TOKEN { - NONE, - CURLY_OPEN, - CURLY_CLOSE, - SQUARED_OPEN, - SQUARED_CLOSE, - COLON, - COMMA, - STRING, - NUMBER, - TRUE, - FALSE, - NULL - }; - - TextReader json; - - Parser (TextReader reader) { - json = reader; - } - - public static object Parse (TextReader reader) { - using (var instance = new Parser(reader)) { - return instance.ParseValue(); - } - } - - public void Dispose () { - json.Dispose(); - json = null; - } - - Dictionary ParseObject () { - Dictionary table = new Dictionary(); - - // ditch opening brace - json.Read(); - - // { - while (true) { - switch (NextToken) { - case TOKEN.NONE: - return null; - case TOKEN.COMMA: - continue; - case TOKEN.CURLY_CLOSE: - return table; - default: - // name - string name = ParseString(); - if (name == null) { - return null; - } - - // : - if (NextToken != TOKEN.COLON) { - return null; - } - // ditch the colon - json.Read(); - - // value - table[name] = ParseValue(); - break; - } - } - } - - List ParseArray () { - List array = new List(); - - // ditch opening bracket - json.Read(); - - // [ - var parsing = true; - while (parsing) { - TOKEN nextToken = NextToken; - - switch (nextToken) { - case TOKEN.NONE: - return null; - case TOKEN.COMMA: - continue; - case TOKEN.SQUARED_CLOSE: - parsing = false; - break; - default: - object value = ParseByToken(nextToken); - - array.Add(value); - break; - } - } - - return array; - } - - object ParseValue () { - TOKEN nextToken = NextToken; - return ParseByToken(nextToken); - } - - object ParseByToken (TOKEN token) { - switch (token) { - case TOKEN.STRING: - return ParseString(); - case TOKEN.NUMBER: - return ParseNumber(); - case TOKEN.CURLY_OPEN: - return ParseObject(); - case TOKEN.SQUARED_OPEN: - return ParseArray(); - case TOKEN.TRUE: - return true; - case TOKEN.FALSE: - return false; - case TOKEN.NULL: - return null; - default: - return null; - } - } - - string ParseString () { - StringBuilder s = new StringBuilder(); - char c; - - // ditch opening quote - json.Read(); - - bool parsing = true; - while (parsing) { - - if (json.Peek() == -1) { - parsing = false; - break; - } - - c = NextChar; - switch (c) { - case '"': - parsing = false; - break; - case '\\': - if (json.Peek() == -1) { - parsing = false; - break; - } - - c = NextChar; - switch (c) { - case '"': - case '\\': - case '/': - s.Append(c); - break; - case 'b': - s.Append('\b'); - break; - case 'f': - s.Append('\f'); - break; - case 'n': - s.Append('\n'); - break; - case 'r': - s.Append('\r'); - break; - case 't': - s.Append('\t'); - break; - case 'u': - var hex = new StringBuilder(); - - for (int i = 0; i < 4; i++) { - hex.Append(NextChar); - } - - s.Append((char)Convert.ToInt32(hex.ToString(), 16)); - break; - } - break; - default: - s.Append(c); - break; - } - } - - return s.ToString(); - } - - object ParseNumber () { - string number = NextWord; - float parsedFloat; - float.TryParse(number, NumberStyles.Float, CultureInfo.InvariantCulture, out parsedFloat); - return parsedFloat; - } - - void EatWhitespace () { - while (WHITE_SPACE.IndexOf(PeekChar) != -1) { - json.Read(); - - if (json.Peek() == -1) { - break; - } - } - } - - char PeekChar { - get { - return Convert.ToChar(json.Peek()); - } - } - - char NextChar { - get { - return Convert.ToChar(json.Read()); - } - } - - string NextWord { - get { - StringBuilder word = new StringBuilder(); - - while (WORD_BREAK.IndexOf(PeekChar) == -1) { - word.Append(NextChar); - - if (json.Peek() == -1) { - break; - } - } - - return word.ToString(); - } - } - - TOKEN NextToken { - get { - EatWhitespace(); - - if (json.Peek() == -1) { - return TOKEN.NONE; - } - - char c = PeekChar; - switch (c) { - case '{': - return TOKEN.CURLY_OPEN; - case '}': - json.Read(); - return TOKEN.CURLY_CLOSE; - case '[': - return TOKEN.SQUARED_OPEN; - case ']': - json.Read(); - return TOKEN.SQUARED_CLOSE; - case ',': - json.Read(); - return TOKEN.COMMA; - case '"': - return TOKEN.STRING; - case ':': - return TOKEN.COLON; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - return TOKEN.NUMBER; - } - - string word = NextWord; - - switch (word) { - case "false": - return TOKEN.FALSE; - case "true": - return TOKEN.TRUE; - case "null": - return TOKEN.NULL; - } - - return TOKEN.NONE; - } - } - } - - /// - /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string - /// - /// A Dictionary<string, object> / List<object> - /// A JSON encoded string, or null if object 'json' is not serializable - public static string Serialize (object obj) { - return Serializer.Serialize(obj); - } - - sealed class Serializer { - StringBuilder builder; - - Serializer () { - builder = new StringBuilder(); - } - - public static string Serialize (object obj) { - var instance = new Serializer(); - - instance.SerializeValue(obj); - - return instance.builder.ToString(); - } - - void SerializeValue (object value) { - IList asList; - IDictionary asDict; - string asStr; - - if (value == null) { - builder.Append("null"); - } else if ((asStr = value as string) != null) { - SerializeString(asStr); - } else if (value is bool) { - builder.Append(value.ToString().ToLower()); - } else if ((asList = value as IList) != null) { - SerializeArray(asList); - } else if ((asDict = value as IDictionary) != null) { - SerializeObject(asDict); - } else if (value is char) { - SerializeString(value.ToString()); - } else { - SerializeOther(value); - } - } - - void SerializeObject (IDictionary obj) { - bool first = true; - - builder.Append('{'); - - foreach (object e in obj.Keys) { - if (!first) { - builder.Append(','); - } - - SerializeString(e.ToString()); - builder.Append(':'); - - SerializeValue(obj[e]); - - first = false; - } - - builder.Append('}'); - } - - void SerializeArray (IList anArray) { - builder.Append('['); - - bool first = true; - - foreach (object obj in anArray) { - if (!first) { - builder.Append(','); - } - - SerializeValue(obj); - - first = false; - } - - builder.Append(']'); - } - - void SerializeString (string str) { - builder.Append('\"'); - - char[] charArray = str.ToCharArray(); - foreach (var c in charArray) { - switch (c) { - case '"': - builder.Append("\\\""); - break; - case '\\': - builder.Append("\\\\"); - break; - case '\b': - builder.Append("\\b"); - break; - case '\f': - builder.Append("\\f"); - break; - case '\n': - builder.Append("\\n"); - break; - case '\r': - builder.Append("\\r"); - break; - case '\t': - builder.Append("\\t"); - break; - default: - int codepoint = Convert.ToInt32(c); - if ((codepoint >= 32) && (codepoint <= 126)) { - builder.Append(c); - } else { - builder.Append("\\u" + Convert.ToString(codepoint, 16).PadLeft(4, '0')); - } - break; - } - } - - builder.Append('\"'); - } - - void SerializeOther (object value) { - if (value is float - || value is int - || value is uint - || value is long - || value is float - || value is sbyte - || value is byte - || value is short - || value is ushort - || value is ulong - || value is decimal) { - builder.Append(value.ToString()); - } else { - SerializeString(value.ToString()); - } - } + public static object Deserialize (TextReader text) { + return parser.Decode(text.ReadToEnd()); } } } \ No newline at end of file diff --git a/spine-csharp/src/MathUtils.cs b/spine-csharp/src/MathUtils.cs index 58d3606a5..2ed1ba539 100644 --- a/spine-csharp/src/MathUtils.cs +++ b/spine-csharp/src/MathUtils.cs @@ -32,18 +32,18 @@ using System; namespace Spine { - public class MathUtils { - static public float PI = 3.1415927f; - static public float radDeg = 180f / PI; - static public float degRad = PI / 180; + public static class MathUtils { + public const float PI = 3.1415927f; + public const float radDeg = 180f / PI; + public const float degRad = PI / 180; - static private int SIN_BITS = 14; // 16KB. Adjust for accuracy. - static private int SIN_MASK = ~(-1 << SIN_BITS); - static private int SIN_COUNT = SIN_MASK + 1; - static private float radFull = PI * 2; - static private float degFull = 360; - static private float radToIndex = SIN_COUNT / radFull; - static private float degToIndex = SIN_COUNT / degFull; + const int SIN_BITS = 14; // 16KB. Adjust for accuracy. + const int SIN_MASK = ~(-1 << SIN_BITS); + const int SIN_COUNT = SIN_MASK + 1; + const float radFull = PI * 2; + const float degFull = 360; + const float radToIndex = SIN_COUNT / radFull; + const float degToIndex = SIN_COUNT / degFull; static float[] sin = new float[SIN_COUNT]; static MathUtils () { diff --git a/spine-csharp/src/SharpJson.cs b/spine-csharp/src/SharpJson.cs new file mode 100644 index 000000000..4c9a1d09c --- /dev/null +++ b/spine-csharp/src/SharpJson.cs @@ -0,0 +1,495 @@ +/** + * + * Copyright (c) 2016 Adriano Tinoco d'Oliveira Rezende + * + * Based on the JSON parser by Patrick van Bergen + * http://techblog.procurios.nl/k/news/view/14605/14863/how-do-i-write-my-own-parser-(for-json).html + * + * Changes made: + * + * - Optimized parser speed (deserialize roughly near 3x faster than original) + * - Added support to handle lexer/parser error messages with line numbers + * - Added more fine grained control over type conversions during the parsing + * - Refactory API (Separate Lexer code from Parser code and the Encoder from Decoder) + * + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT + * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +using System; +using System.Text; +using System.Collections; +using System.Globalization; +using System.Collections.Generic; + +namespace SharpJson +{ + class Lexer + { + public enum Token { + None, + Null, + True, + False, + Colon, + Comma, + String, + Number, + CurlyOpen, + CurlyClose, + SquaredOpen, + SquaredClose, + }; + + public bool hasError { + get { + return !success; + } + } + + public int lineNumber { + get; + private set; + } + + public bool parseNumbersAsFloat { + get; + set; + } + + char[] json; + int index = 0; + bool success = true; + char[] stringBuffer = new char[4096]; + + public Lexer(string text) + { + Reset(); + + json = text.ToCharArray(); + parseNumbersAsFloat = false; + } + + public void Reset() + { + index = 0; + lineNumber = 1; + success = true; + } + + public string ParseString() + { + int idx = 0; + StringBuilder builder = null; + + SkipWhiteSpaces(); + + // " + char c = json[index++]; + + bool failed = false; + bool complete = false; + + while (!complete && !failed) { + if (index == json.Length) + break; + + c = json[index++]; + if (c == '"') { + complete = true; + break; + } else if (c == '\\') { + if (index == json.Length) + break; + + c = json[index++]; + + switch (c) { + case '"': + stringBuffer[idx++] = '"'; + break; + case '\\': + stringBuffer[idx++] = '\\'; + break; + case '/': + stringBuffer[idx++] = '/'; + break; + case 'b': + stringBuffer[idx++] = '\b'; + break; + case'f': + stringBuffer[idx++] = '\f'; + break; + case 'n': + stringBuffer[idx++] = '\n'; + break; + case 'r': + stringBuffer[idx++] = '\r'; + break; + case 't': + stringBuffer[idx++] = '\t'; + break; + case 'u': + int remainingLength = json.Length - index; + if (remainingLength >= 4) { + var hex = new string(json, index, 4); + + // XXX: handle UTF + stringBuffer[idx++] = (char) Convert.ToInt32(hex, 16); + + // skip 4 chars + index += 4; + } else { + failed = true; + } + break; + } + } else { + stringBuffer[idx++] = c; + } + + if (idx >= stringBuffer.Length) { + if (builder == null) + builder = new StringBuilder(); + + builder.Append(stringBuffer, 0, idx); + idx = 0; + } + } + + if (!complete) { + success = false; + return null; + } + + if (builder != null) + return builder.ToString (); + else + return new string (stringBuffer, 0, idx); + } + + string GetNumberString() + { + SkipWhiteSpaces(); + + int lastIndex = GetLastIndexOfNumber(index); + int charLength = (lastIndex - index) + 1; + + var result = new string (json, index, charLength); + + index = lastIndex + 1; + + return result; + } + + public float ParseFloatNumber() + { + float number; + var str = GetNumberString (); + + if (!float.TryParse (str, NumberStyles.Float, CultureInfo.InvariantCulture, out number)) + return 0; + + return number; + } + + public double ParseDoubleNumber() + { + double number; + var str = GetNumberString (); + + if (!double.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out number)) + return 0; + + return number; + } + + int GetLastIndexOfNumber(int index) + { + int lastIndex; + + for (lastIndex = index; lastIndex < json.Length; lastIndex++) { + char ch = json[lastIndex]; + + if ((ch < '0' || ch > '9') && ch != '+' && ch != '-' + && ch != '.' && ch != 'e' && ch != 'E') + break; + } + + return lastIndex - 1; + } + + void SkipWhiteSpaces() + { + for (; index < json.Length; index++) { + char ch = json[index]; + + if (ch == '\n') + lineNumber++; + + if (!char.IsWhiteSpace(json[index])) + break; + } + } + + public Token LookAhead() + { + SkipWhiteSpaces(); + + int savedIndex = index; + return NextToken(json, ref savedIndex); + } + + public Token NextToken() + { + SkipWhiteSpaces(); + return NextToken(json, ref index); + } + + static Token NextToken(char[] json, ref int index) + { + if (index == json.Length) + return Token.None; + + char c = json[index++]; + + switch (c) { + case '{': + return Token.CurlyOpen; + case '}': + return Token.CurlyClose; + case '[': + return Token.SquaredOpen; + case ']': + return Token.SquaredClose; + case ',': + return Token.Comma; + case '"': + return Token.String; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '-': + return Token.Number; + case ':': + return Token.Colon; + } + + index--; + + int remainingLength = json.Length - index; + + // false + if (remainingLength >= 5) { + if (json[index] == 'f' && + json[index + 1] == 'a' && + json[index + 2] == 'l' && + json[index + 3] == 's' && + json[index + 4] == 'e') { + index += 5; + return Token.False; + } + } + + // true + if (remainingLength >= 4) { + if (json[index] == 't' && + json[index + 1] == 'r' && + json[index + 2] == 'u' && + json[index + 3] == 'e') { + index += 4; + return Token.True; + } + } + + // null + if (remainingLength >= 4) { + if (json[index] == 'n' && + json[index + 1] == 'u' && + json[index + 2] == 'l' && + json[index + 3] == 'l') { + index += 4; + return Token.Null; + } + } + + return Token.None; + } + } + + public class JsonDecoder + { + public string errorMessage { + get; + private set; + } + + public bool parseNumbersAsFloat { + get; + set; + } + + Lexer lexer; + + public JsonDecoder() + { + errorMessage = null; + parseNumbersAsFloat = false; + } + + public object Decode(string text) + { + errorMessage = null; + + lexer = new Lexer(text); + lexer.parseNumbersAsFloat = parseNumbersAsFloat; + + return ParseValue(); + } + + public static object DecodeText(string text) + { + var builder = new JsonDecoder(); + return builder.Decode(text); + } + + IDictionary ParseObject() + { + var table = new Dictionary(); + + // { + lexer.NextToken(); + + while (true) { + var token = lexer.LookAhead(); + + switch (token) { + case Lexer.Token.None: + TriggerError("Invalid token"); + return null; + case Lexer.Token.Comma: + lexer.NextToken(); + break; + case Lexer.Token.CurlyClose: + lexer.NextToken(); + return table; + default: + // name + string name = EvalLexer(lexer.ParseString()); + + if (errorMessage != null) + return null; + + // : + token = lexer.NextToken(); + + if (token != Lexer.Token.Colon) { + TriggerError("Invalid token; expected ':'"); + return null; + } + + // value + object value = ParseValue(); + + if (errorMessage != null) + return null; + + table[name] = value; + break; + } + } + + //return null; // Unreachable code + } + + IList ParseArray() + { + var array = new List(); + + // [ + lexer.NextToken(); + + while (true) { + var token = lexer.LookAhead(); + + switch (token) { + case Lexer.Token.None: + TriggerError("Invalid token"); + return null; + case Lexer.Token.Comma: + lexer.NextToken(); + break; + case Lexer.Token.SquaredClose: + lexer.NextToken(); + return array; + default: + object value = ParseValue(); + + if (errorMessage != null) + return null; + + array.Add(value); + break; + } + } + + //return null; // Unreachable code + } + + object ParseValue() + { + switch (lexer.LookAhead()) { + case Lexer.Token.String: + return EvalLexer(lexer.ParseString()); + case Lexer.Token.Number: + if (parseNumbersAsFloat) + return EvalLexer(lexer.ParseFloatNumber()); + else + return EvalLexer(lexer.ParseDoubleNumber()); + case Lexer.Token.CurlyOpen: + return ParseObject(); + case Lexer.Token.SquaredOpen: + return ParseArray(); + case Lexer.Token.True: + lexer.NextToken(); + return true; + case Lexer.Token.False: + lexer.NextToken(); + return false; + case Lexer.Token.Null: + lexer.NextToken(); + return null; + case Lexer.Token.None: + break; + } + + TriggerError("Unable to parse value"); + return null; + } + + void TriggerError(string message) + { + errorMessage = string.Format("Error: '{0}' at line {1}", + message, lexer.lineNumber); + } + + T EvalLexer(T value) + { + if (lexer.hasError) + TriggerError("Lexical error ocurred"); + + return value; + } + } +} diff --git a/spine-unity/Assets/Examples/Getting Started.meta b/spine-unity/Assets/Examples/Getting Started.meta new file mode 100644 index 000000000..a27af06b7 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fb68fe44ae68d834b8be5d854b2b402e +folderAsset: yes +timeCreated: 1452591237 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity b/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity new file mode 100644 index 000000000..4f5c68049 Binary files /dev/null and b/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity.meta b/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity.meta new file mode 100644 index 000000000..f44a624ee --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/1 The Spine GameObject.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fff6e9ad77d93024a9a87f6f2c0a6b3e +timeCreated: 1452591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity b/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity new file mode 100644 index 000000000..eab6bc9bf Binary files /dev/null and b/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity.meta b/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity.meta new file mode 100644 index 000000000..b2f914486 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/2 Controlling Animation.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c66a9c1bbf922d4ab082694f19536c7 +timeCreated: 1452592098 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity b/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity new file mode 100644 index 000000000..6d032562f Binary files /dev/null and b/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Raptor.unity.meta b/spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Raptor.unity.meta rename to spine-unity/Assets/Examples/Getting Started/3 Controlling Animation Continued.unity.meta diff --git a/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity b/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity new file mode 100644 index 000000000..0b3172c32 Binary files /dev/null and b/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity.meta b/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity.meta new file mode 100644 index 000000000..4b90d3c59 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/4 Object Oriented Sample.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47344a855c1c167499dbb9bf28d1368b +timeCreated: 1452594655 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity b/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity new file mode 100644 index 000000000..e2bfd67c3 Binary files /dev/null and b/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer.unity.meta b/spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Basic Platformer.unity.meta rename to spine-unity/Assets/Examples/Getting Started/5 Basic Platformer.unity.meta diff --git a/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity b/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity new file mode 100644 index 000000000..62e6fde23 Binary files /dev/null and b/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity differ diff --git a/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity.meta b/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity.meta new file mode 100644 index 000000000..de3ed4a6e --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/6 SkeletonGraphic.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa77f7a2c74add54eb0eb29f88e080dc +timeCreated: 1455501626 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts.meta b/spine-unity/Assets/Examples/Getting Started/Scripts.meta new file mode 100644 index 000000000..d2dd952d1 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a34eef132f2b4da45aa8023dbe5934e7 +folderAsset: yes +timeCreated: 1452593684 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/BasicPlatformerController.cs similarity index 95% rename from spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs rename to spine-unity/Assets/Examples/Getting Started/Scripts/BasicPlatformerController.cs index a50c1949f..ec4ce4a89 100644 --- a/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/BasicPlatformerController.cs @@ -86,6 +86,7 @@ public class BasicPlatformerController : MonoBehaviour { //play some sound if footstep event fired if (e.Data.Name == footstepEventName) { footstepAudioSource.Stop(); + footstepAudioSource.pitch = GetRandomPitch(0.2f); footstepAudioSource.Play(); } } @@ -107,8 +108,8 @@ public class BasicPlatformerController : MonoBehaviour { velocity.y = jumpSpeed; jumpEndTime = Time.time + jumpDuration; } else if (Time.time < jumpEndTime && Input.GetButtonUp(JumpButton)) { - jumpInterrupt = true; - } + jumpInterrupt = true; + } if (x != 0) { @@ -182,4 +183,10 @@ public class BasicPlatformerController : MonoBehaviour { lastVelocity = velocity; lastGrounded = controller.isGrounded; } + + #region Utility + static float GetRandomPitch (float maxOffset) { + return 1f + Random.Range(-maxOffset, maxOffset); + } + #endregion } \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/BasicPlatformerController.cs.meta similarity index 100% rename from spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs.meta rename to spine-unity/Assets/Examples/Getting Started/Scripts/BasicPlatformerController.cs.meta diff --git a/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/ConstrainedCamera.cs similarity index 93% rename from spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs rename to spine-unity/Assets/Examples/Getting Started/Scripts/ConstrainedCamera.cs index 30a063fe0..e28d96aba 100644 --- a/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/ConstrainedCamera.cs @@ -14,12 +14,7 @@ public class ConstrainedCamera : MonoBehaviour { public Vector3 min; public Vector3 max; public float smoothing = 5f; - - // Use this for initialization - void Start () { - - } - + // Update is called once per frame void LateUpdate () { Vector3 goalPoint = target.position + offset; diff --git a/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/ConstrainedCamera.cs.meta similarity index 100% rename from spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs.meta rename to spine-unity/Assets/Examples/Getting Started/Scripts/ConstrainedCamera.cs.meta diff --git a/spine-unity/Assets/Examples/Scripts/Raptor.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/Raptor.cs similarity index 62% rename from spine-unity/Assets/Examples/Scripts/Raptor.cs rename to spine-unity/Assets/Examples/Getting Started/Scripts/Raptor.cs index bb09dab37..f38df810a 100644 --- a/spine-unity/Assets/Examples/Scripts/Raptor.cs +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/Raptor.cs @@ -33,12 +33,53 @@ using UnityEngine; using System.Collections; public class Raptor : MonoBehaviour { - public void Start () { - // Get the SkeletonAnimation component for the GameObject this script is attached to. - SkeletonAnimation skeletonAnimation = GetComponent(); - // Set an animation on track 1 that does nothing to be played first. - skeletonAnimation.state.SetAnimation(1, "empty", false); - // Queue gun grab to be played on track 1 two seconds later. - skeletonAnimation.state.AddAnimation(1, "gungrab", false, 2); + + #region Inspector + [SpineAnimation] + public string walk = "walk"; + + [SpineAnimation] + public string gungrab = "gungrab"; + + [SpineAnimation] + public string gunkeep = "gunkeep"; + + [SpineEvent] + public string footstepEvent = "footstep"; + + public AudioSource footstepAudioSource; + #endregion + + SkeletonAnimation skeletonAnimation; + + void Start () { + skeletonAnimation = GetComponent(); + skeletonAnimation.state.Event += HandleEvent; + StartCoroutine(GunGrabRoutine()); } + + void HandleEvent (Spine.AnimationState state, int trackIndex, Spine.Event e) { + if (e.Data.Name == footstepEvent) { + footstepAudioSource.pitch = 0.5f + Random.Range(-0.2f, 0.2f); + footstepAudioSource.Play(); + } + } + + IEnumerator GunGrabRoutine () { + // Play the walk animation on track 0. + skeletonAnimation.state.SetAnimation(0, walk, true); + + // Repeatedly play the gungrab and gunkeep animation on track 1. + while (true) { + + yield return new WaitForSeconds(Random.Range(0.5f, 3f)); + skeletonAnimation.state.SetAnimation(1, gungrab, false); + + yield return new WaitForSeconds(Random.Range(0.5f, 3f)); + skeletonAnimation.state.SetAnimation(1, gunkeep, false); + + } + + } + } diff --git a/spine-unity/Assets/Examples/Scripts/Raptor.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/Raptor.cs.meta similarity index 100% rename from spine-unity/Assets/Examples/Scripts/Raptor.cs.meta rename to spine-unity/Assets/Examples/Getting Started/Scripts/Raptor.cs.meta diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineBeginnerTwo.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineBeginnerTwo.cs new file mode 100644 index 000000000..84b3ab7b1 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineBeginnerTwo.cs @@ -0,0 +1,61 @@ +using UnityEngine; +using System.Collections; + +public class SpineBeginnerTwo : MonoBehaviour { + + #region Inspector + // [SpineAnimation] attribute allows an Inspector dropdown of Spine animation names coming form SkeletonAnimation. + [SpineAnimation] + public string runAnimationName; + + [SpineAnimation] + public string idleAnimationName; + + [SpineAnimation] + public string walkAnimationName; + + [SpineAnimation] + public string shootAnimationName; + #endregion + + SkeletonAnimation skeletonAnimation; + + // Spine.AnimationState and Spine.Skeleton are not Unity-serialized objects. You will not see them as fields in the inspector. + public Spine.AnimationState spineAnimationState; + public Spine.Skeleton skeleton; + + void Start () { + // Make sure you get these AnimationState and Skeleton references in Start or Later. Getting and using them in Awake is not guaranteed by default execution order. + skeletonAnimation = GetComponent(); + spineAnimationState = skeletonAnimation.state; + skeleton = skeletonAnimation.skeleton; + + StartCoroutine(DoDemoRoutine()); + } + + /// This is an infinitely repeating Unity Coroutine. Read the Unity documentation on Coroutines to learn more. + IEnumerator DoDemoRoutine () { + + while (true) { + // SetAnimation is the basic way to set an animation. + // SetAnimation sets the animation and starts playing it from the beginning. + // Common Mistake: If you keep calling it in Update, it will keep showing the first pose of the animation, do don't do that. + + spineAnimationState.SetAnimation(0, walkAnimationName, true); + yield return new WaitForSeconds(1.5f); + + // skeletonAnimation.AnimationName = runAnimationName; // this line also works for quick testing/simple uses. + spineAnimationState.SetAnimation(0, runAnimationName, true); + yield return new WaitForSeconds(1.5f); + + spineAnimationState.SetAnimation(0, idleAnimationName, true); + yield return new WaitForSeconds(1f); + + skeleton.FlipX = true; // skeleton allows you to flip the skeleton. + yield return new WaitForSeconds(0.5f); + skeleton.FlipX = false; + yield return new WaitForSeconds(0.5f); + + } + } +} diff --git a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineBeginnerTwo.cs.meta similarity index 69% rename from spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta rename to spine-unity/Assets/Examples/Getting Started/Scripts/SpineBeginnerTwo.cs.meta index 6ab4c9a3b..ce950ba91 100644 --- a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineBeginnerTwo.cs.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: ef0903d879ea9ca49a1fd44d707beb9d +guid: a57fe3aaf2b1f964182d90c5546754d1 +timeCreated: 1452593662 +licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerInput.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerInput.cs new file mode 100644 index 000000000..a14777d10 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerInput.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using System.Collections; + +public class SpineboyBeginnerInput : MonoBehaviour { + + #region Inspector + public string horizontalAxis = "Horizontal"; + public string attackButton = "Fire1"; + public string jumpButton = "Jump"; + + public SpineboyBeginnerModel model; + + void OnValidate () { + if (model == null) + model = GetComponent(); + } + #endregion + + void Update () { + if (model == null) return; + + float currentHorizontal = Input.GetAxisRaw(horizontalAxis); + model.TryMove(currentHorizontal); + + if (Input.GetButton(attackButton)) + model.TryShoot(); + + if (Input.GetButtonDown(jumpButton)) + model.TryJump(); + + } + + +} diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerInput.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerInput.cs.meta new file mode 100644 index 000000000..6d077a911 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerInput.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8f685123e0610c347a7b2c03c8a19535 +timeCreated: 1452595430 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs new file mode 100644 index 000000000..20fd265c0 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using System.Collections; + +[SelectionBase] +public class SpineboyBeginnerModel : MonoBehaviour { + + #region Inspector + [Header("Current State")] + public SpineBeginnerBodyState state; + public bool facingLeft; + [Range(-1f, 1f)] + public float currentSpeed; + + [Header("Balance")] + public float shootInterval = 0.12f; + #endregion + + float lastShootTime; + public event System.Action ShootEvent; // Lets other scripts know when Spineboy is shooting. Check C# Documentation to learn more about events and delegates. + + #region API + public void TryJump () { + StartCoroutine(JumpRoutine()); + } + + public void TryShoot () { + float currentTime = Time.time; + + if (currentTime - lastShootTime > shootInterval) { + lastShootTime = currentTime; + if (ShootEvent != null) ShootEvent(); // Fire the "ShootEvent" event. + } + } + + public void TryMove (float speed) { + currentSpeed = speed; // show the "speed" in the Inspector. + + if (speed != 0) { + bool speedIsNegative = (speed < 0f); + facingLeft = speedIsNegative; // Change facing direction whenever speed is not 0. + } + + if (state != SpineBeginnerBodyState.Jumping) { + state = (speed == 0) ? SpineBeginnerBodyState.Idle : SpineBeginnerBodyState.Running; + } + + } + #endregion + + IEnumerator JumpRoutine () { + if (state == SpineBeginnerBodyState.Jumping) yield break; // Don't jump when already jumping. + + // Fake jumping. + state = SpineBeginnerBodyState.Jumping; + yield return new WaitForSeconds(1.2f); + state = SpineBeginnerBodyState.Idle; + } + +} + +public enum SpineBeginnerBodyState { + Idle, + Running, + Jumping +} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs.meta new file mode 100644 index 000000000..dccfc8789 --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerModel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f999dde27e9711a45b0ee1b0d25217ec +timeCreated: 1452594812 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerView.cs b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerView.cs new file mode 100644 index 000000000..0308a16ee --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerView.cs @@ -0,0 +1,105 @@ +using UnityEngine; +using System.Collections; + +public class SpineboyBeginnerView : MonoBehaviour { + + #region Inspector + [Header("Components")] + public SpineboyBeginnerModel model; + public SkeletonAnimation skeletonAnimation; + //public ParticleSystem gunParticles; + + [SpineAnimation] public string run, idle, shoot, jump; + [SpineEvent] public string footstepEventName; + + [Header("Audio")] + public float footstepPitchOffset = 0.2f; + public float gunsoundPitchOffset = 0.13f; + public AudioSource footstepSource, gunSource, jumpSource; + + [Header("Effects")] + public ParticleSystem gunParticles; + #endregion + + SpineBeginnerBodyState previousViewState; + + void Start () { + if (skeletonAnimation == null) return; + model.ShootEvent += PlayShoot; + skeletonAnimation.state.Event += HandleEvent; + } + + void HandleEvent (Spine.AnimationState state, int trackIndex, Spine.Event e) { + if (e.Data.Name == footstepEventName) { + PlayFootstepSound(); + } + } + + void Update () { + if (skeletonAnimation == null) return; + if (model == null) return; + + if (skeletonAnimation.skeleton.FlipX != model.facingLeft) { // Detect changes in model.facingLeft + Turn(model.facingLeft); + } + + // Detect changes in model.state + var currentModelState = model.state; + + if (previousViewState != currentModelState) { + PlayNewStableAnimation(); + } + + previousViewState = currentModelState; + } + + void PlayNewStableAnimation () { + var newModelState = model.state; + string nextAnimation; + + // Add conditionals to not interrupt transient animations. + + if (previousViewState == SpineBeginnerBodyState.Jumping && newModelState != SpineBeginnerBodyState.Jumping) { + PlayFootstepSound(); + } + + if (newModelState == SpineBeginnerBodyState.Jumping) { + jumpSource.Play(); + nextAnimation = jump; + } else { + if (newModelState == SpineBeginnerBodyState.Running) { + nextAnimation = run; + } else { + nextAnimation = idle; + } + } + + skeletonAnimation.state.SetAnimation(0, nextAnimation, true); + } + + void PlayFootstepSound () { + footstepSource.Play(); + footstepSource.pitch = GetRandomPitch(footstepPitchOffset); + } + + #region Transient Actions + public void PlayShoot () { + // Play the shoot animation on track 1. + skeletonAnimation.state.SetAnimation(1, shoot, false); + gunSource.pitch = GetRandomPitch(gunsoundPitchOffset); + gunSource.Play(); + gunParticles.Play(); + } + + public void Turn (bool facingLeft) { + skeletonAnimation.skeleton.FlipX = facingLeft; + // Maybe play a transient turning animation too, then call ChangeStableAnimation. + } + #endregion + + #region Utility + public float GetRandomPitch (float maxPitchOffset) { + return 1f + Random.Range(-maxPitchOffset, maxPitchOffset); + } + #endregion +} diff --git a/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerView.cs.meta b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerView.cs.meta new file mode 100644 index 000000000..f992429cb --- /dev/null +++ b/spine-unity/Assets/Examples/Getting Started/Scripts/SpineboyBeginnerView.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b59f510ae90fd1a419f19ed805e6e229 +timeCreated: 1452594730 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scenes.meta b/spine-unity/Assets/Examples/Other Examples.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes.meta rename to spine-unity/Assets/Examples/Other Examples.meta diff --git a/spine-unity/Assets/Examples/Scenes/Attributes and AtlasRegions.unity b/spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Attributes and AtlasRegions.unity rename to spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity diff --git a/spine-unity/Assets/Examples/Scenes/Attributes and AtlasRegions.unity.meta b/spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Attributes and AtlasRegions.unity.meta rename to spine-unity/Assets/Examples/Other Examples/AtlasRegionAttacher.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/Dragon.unity b/spine-unity/Assets/Examples/Other Examples/Dragon.unity new file mode 100644 index 000000000..afa2abb5b Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/Dragon.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Dragon.unity.meta b/spine-unity/Assets/Examples/Other Examples/Dragon.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Dragon.unity.meta rename to spine-unity/Assets/Examples/Other Examples/Dragon.unity.meta diff --git a/spine-unity/Assets/Examples/Scenes/Goblins.unity b/spine-unity/Assets/Examples/Other Examples/Goblins.unity similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Goblins.unity rename to spine-unity/Assets/Examples/Other Examples/Goblins.unity diff --git a/spine-unity/Assets/Examples/Scenes/Goblins.unity.meta b/spine-unity/Assets/Examples/Other Examples/Goblins.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Goblins.unity.meta rename to spine-unity/Assets/Examples/Other Examples/Goblins.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity b/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity new file mode 100644 index 000000000..c81130b6a Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Mix and Match.unity.meta b/spine-unity/Assets/Examples/Other Examples/Mix and Match.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Mix and Match.unity.meta rename to spine-unity/Assets/Examples/Other Examples/Mix and Match.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity new file mode 100644 index 000000000..584910f51 Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Raptor Animated Physics.unity.meta b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Raptor Animated Physics.unity.meta rename to spine-unity/Assets/Examples/Other Examples/SkeletonUtility Animated Physics.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity new file mode 100644 index 000000000..dda286dbb Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Eyes.unity.meta b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Eyes.unity.meta rename to spine-unity/Assets/Examples/Other Examples/SkeletonUtility Eyes.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity new file mode 100644 index 000000000..86c0e0eff Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Raptor GroundConstraint.unity.meta b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Raptor GroundConstraint.unity.meta rename to spine-unity/Assets/Examples/Other Examples/SkeletonUtility GroundConstraint.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity new file mode 100644 index 000000000..bdc1d5d0b Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/Ragdoll.unity.meta b/spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/Ragdoll.unity.meta rename to spine-unity/Assets/Examples/Other Examples/SkeletonUtility Ragdoll.unity.meta diff --git a/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity b/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity new file mode 100644 index 000000000..6741cb6b9 Binary files /dev/null and b/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity differ diff --git a/spine-unity/Assets/Examples/Scenes/SpineGauge.unity.meta b/spine-unity/Assets/Examples/Other Examples/SpineGauge.unity.meta similarity index 100% rename from spine-unity/Assets/Examples/Scenes/SpineGauge.unity.meta rename to spine-unity/Assets/Examples/Other Examples/SpineGauge.unity.meta diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer.meta b/spine-unity/Assets/Examples/Scenes/Basic Platformer.meta deleted file mode 100644 index b1ccb4267..000000000 --- a/spine-unity/Assets/Examples/Scenes/Basic Platformer.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 2a88cb6ea6a9bd94e8513bd8b866934b -folderAsset: yes -DefaultImporter: - userData: diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer.unity b/spine-unity/Assets/Examples/Scenes/Basic Platformer.unity deleted file mode 100644 index 016ad6b0e..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Basic Platformer.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapFar-0.exr b/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapFar-0.exr deleted file mode 100644 index b8563e097..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapFar-0.exr and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapFar-0.exr.meta b/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapFar-0.exr.meta deleted file mode 100644 index 01594292f..000000000 --- a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapFar-0.exr.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: fadfb38fe9b3ecc4db70956f425e4720 -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 1 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - filterMode: 1 - aniso: 3 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 1 - compressionQuality: 100 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: .5, y: .5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaIsTransparency: 0 - textureType: 6 - buildTargetSettings: [] - spriteSheet: - sprites: [] - spritePackingTag: - userData: diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapNear-0.exr b/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapNear-0.exr deleted file mode 100644 index eca555faa..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapNear-0.exr and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Dragon.unity b/spine-unity/Assets/Examples/Scenes/Dragon.unity deleted file mode 100644 index b081ed2b4..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Dragon.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Eyes.unity b/spine-unity/Assets/Examples/Scenes/Eyes.unity deleted file mode 100644 index 131a173a4..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Eyes.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Mix and Match.unity b/spine-unity/Assets/Examples/Scenes/Mix and Match.unity deleted file mode 100644 index 775cb6bf7..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Mix and Match.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Ragdoll.unity b/spine-unity/Assets/Examples/Scenes/Ragdoll.unity deleted file mode 100644 index 2403edf40..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Ragdoll.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Raptor Animated Physics.unity b/spine-unity/Assets/Examples/Scenes/Raptor Animated Physics.unity deleted file mode 100644 index d13511343..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Raptor Animated Physics.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Raptor GroundConstraint.unity b/spine-unity/Assets/Examples/Scenes/Raptor GroundConstraint.unity deleted file mode 100644 index 7cadb2576..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Raptor GroundConstraint.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Raptor.unity b/spine-unity/Assets/Examples/Scenes/Raptor.unity deleted file mode 100644 index f4336077f..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Raptor.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/SpineGauge.unity b/spine-unity/Assets/Examples/Scenes/SpineGauge.unity deleted file mode 100644 index 5a8f1c3d8..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/SpineGauge.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Spineboy Movement.unity b/spine-unity/Assets/Examples/Scenes/Spineboy Movement.unity deleted file mode 100644 index bea46f183..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Spineboy Movement.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Spineboy Movement.unity.meta b/spine-unity/Assets/Examples/Scenes/Spineboy Movement.unity.meta deleted file mode 100644 index 21423f392..000000000 --- a/spine-unity/Assets/Examples/Scenes/Spineboy Movement.unity.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 624423be326fb1047bb3fc6624faec9e -DefaultImporter: - userData: diff --git a/spine-unity/Assets/Examples/Scenes/Spineboy.unity b/spine-unity/Assets/Examples/Scenes/Spineboy.unity deleted file mode 100644 index dd855352c..000000000 Binary files a/spine-unity/Assets/Examples/Scenes/Spineboy.unity and /dev/null differ diff --git a/spine-unity/Assets/Examples/Scenes/Spineboy.unity.meta b/spine-unity/Assets/Examples/Scenes/Spineboy.unity.meta deleted file mode 100644 index 850f20a5e..000000000 --- a/spine-unity/Assets/Examples/Scenes/Spineboy.unity.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 561b2daf45857734dbad43f0b809d884 -DefaultImporter: - userData: diff --git a/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs b/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs index e7de0aba7..3b6217445 100644 --- a/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs +++ b/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs @@ -29,13 +29,17 @@ public class FootSoldierExample : MonoBehaviour { [Range(0, 0.2f)] public float blinkDuration = 0.05f; + public KeyCode attackKey = KeyCode.Mouse0; + public KeyCode rightKey = KeyCode.D; + public KeyCode leftKey = KeyCode.A; + public float moveSpeed = 3; private SkeletonAnimation skeletonAnimation; void Awake() { skeletonAnimation = GetComponent(); - skeletonAnimation.OnReset += Apply; + skeletonAnimation.OnRebuild += Apply; } void Apply(SkeletonRenderer skeletonRenderer) { @@ -43,14 +47,14 @@ public class FootSoldierExample : MonoBehaviour { } void Update() { - if (Input.GetKey(KeyCode.Space)) { + if (Input.GetKey(attackKey)) { skeletonAnimation.AnimationName = attackAnimation; } else { - if (Input.GetKey(KeyCode.RightArrow)) { + if (Input.GetKey(rightKey)) { skeletonAnimation.AnimationName = moveAnimation; skeletonAnimation.skeleton.FlipX = false; transform.Translate(moveSpeed * Time.deltaTime, 0, 0); - } else if(Input.GetKey(KeyCode.LeftArrow)) { + } else if(Input.GetKey(leftKey)) { skeletonAnimation.AnimationName = moveAnimation; skeletonAnimation.skeleton.FlipX = true; transform.Translate(-moveSpeed * Time.deltaTime, 0, 0); diff --git a/spine-unity/Assets/Examples/Scripts/Goblins.cs b/spine-unity/Assets/Examples/Scripts/Goblins.cs index 926ebbab8..971313745 100644 --- a/spine-unity/Assets/Examples/Scripts/Goblins.cs +++ b/spine-unity/Assets/Examples/Scripts/Goblins.cs @@ -45,7 +45,7 @@ public class Goblins : MonoBehaviour { } // This is called after the animation is applied to the skeleton and can be used to adjust the bones dynamically. - public void UpdateLocal (SkeletonRenderer skeletonRenderer) { + public void UpdateLocal (ISkeletonAnimation skeletonRenderer) { headBone.Rotation += 15; } diff --git a/spine-unity/Assets/Examples/Scripts/SpineGauge.cs b/spine-unity/Assets/Examples/Scripts/SpineGauge.cs index 7aedb3c35..406b94012 100644 --- a/spine-unity/Assets/Examples/Scripts/SpineGauge.cs +++ b/spine-unity/Assets/Examples/Scripts/SpineGauge.cs @@ -3,35 +3,40 @@ using System.Collections; [ExecuteInEditMode] [RequireComponent(typeof(SkeletonRenderer))] -public class SpineGauge : MonoBehaviour{ +public class SpineGauge : MonoBehaviour { + #region Inspector [Range(0,1)] - public float fill = 0; + public float fillPercent = 0; [SpineAnimation] public string fillAnimationName; - Spine.Animation fillAnimation; + #endregion SkeletonRenderer skeletonRenderer; + Spine.Animation fillAnimation; - void Start () { + void Awake () { skeletonRenderer = GetComponent(); + } void Update () { - - var skeleton = skeletonRenderer.skeleton; + SetGaugePercent(fillPercent); + } - if (skeleton == null) - return; + public void SetGaugePercent (float x) { + if (skeletonRenderer == null) return; + var skeleton = skeletonRenderer.skeleton; if (skeleton == null) return; + // Make super-sure that fillAnimation isn't null. Early exit if it is. if (fillAnimation == null) { fillAnimation = skeleton.Data.FindAnimation(fillAnimationName); - if (fillAnimation == null) - return; + if (fillAnimation == null) return; } + + fillAnimation.Apply(skeleton, 0, x, false, null); - fillAnimation.Apply(skeleton, 0, fill, false, null); skeleton.Update(Time.deltaTime); skeleton.UpdateWorldTransform(); } diff --git a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs b/spine-unity/Assets/Examples/Scripts/SpineboyController.cs deleted file mode 100644 index d548bf34b..000000000 --- a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs +++ /dev/null @@ -1,82 +0,0 @@ - - -/***************************************************************************** - * SpineboyController created by Mitch Thompson - * Full irrevocable rights and permissions granted to Esoteric Software -*****************************************************************************/ -using UnityEngine; -using System.Collections; - -[RequireComponent(typeof(SkeletonAnimation), typeof(Rigidbody2D))] -public class SpineboyController : MonoBehaviour { - - SkeletonAnimation skeletonAnimation; - [SpineAnimation] public string idleAnimation = "idle"; - [SpineAnimation] public string walkAnimation = "walk"; - [SpineAnimation] public string runAnimation = "run"; - [SpineAnimation] public string hitAnimation = "hit"; - [SpineAnimation] public string deathAnimation = "death"; - public float walkVelocity = 1; - public float runVelocity = 3; - public int hp = 10; - string currentAnimation = ""; - bool hit = false; - bool dead = false; - - void Start () { - skeletonAnimation = GetComponent(); - } - - void Update () { - if (!dead) { - float x = Input.GetAxis("Horizontal"); - float absX = Mathf.Abs(x); - - if (!hit) { - if (x > 0) - skeletonAnimation.skeleton.FlipX = false; - else if (x < 0) - skeletonAnimation.skeleton.FlipX = true; - - if (absX > 0.7f) { - SetAnimation(runAnimation, true); - GetComponent().velocity = new Vector2(runVelocity * Mathf.Sign(x), GetComponent().velocity.y); - } else if (absX > 0) { - SetAnimation(walkAnimation, true); - GetComponent().velocity = new Vector2(walkVelocity * Mathf.Sign(x), GetComponent().velocity.y); - } else { - SetAnimation(idleAnimation, true); - GetComponent().velocity = new Vector2(0, GetComponent().velocity.y); - } - } else { - if (skeletonAnimation.state.GetCurrent(0).Animation.Name != hitAnimation) - hit = false; - } - } - } - - void SetAnimation (string anim, bool loop) { - if (currentAnimation != anim) { - skeletonAnimation.state.SetAnimation(0, anim, loop); - currentAnimation = anim; - } - } - - void OnMouseUp () { - - if (hp > 0) { - hp--; - - if (hp == 0) { - SetAnimation(deathAnimation, false); - dead = true; - } else { - skeletonAnimation.state.SetAnimation(0, hitAnimation, false); - skeletonAnimation.state.AddAnimation(0, currentAnimation, true, 0); - GetComponent().velocity = new Vector2(0, GetComponent().velocity.y); - hit = true; - } - - } - } -} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Sound/Footstep.ogg b/spine-unity/Assets/Examples/Sound/Footstep.ogg new file mode 100644 index 000000000..0e1468d8c Binary files /dev/null and b/spine-unity/Assets/Examples/Sound/Footstep.ogg differ diff --git a/spine-unity/Assets/Examples/Sound/Footstep.ogg.meta b/spine-unity/Assets/Examples/Sound/Footstep.ogg.meta new file mode 100644 index 000000000..b403bc1ed --- /dev/null +++ b/spine-unity/Assets/Examples/Sound/Footstep.ogg.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: e885484e1bc99fb47a0ac3f6bfa586b1 +timeCreated: 1452628222 +licenseType: Free +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 0.9 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Sound/Footstep.wav b/spine-unity/Assets/Examples/Sound/Footstep.wav deleted file mode 100644 index 5e38e4f06..000000000 Binary files a/spine-unity/Assets/Examples/Sound/Footstep.wav and /dev/null differ diff --git a/spine-unity/Assets/Examples/Sound/Footstep.wav.meta b/spine-unity/Assets/Examples/Sound/Footstep.wav.meta deleted file mode 100644 index 55324487e..000000000 --- a/spine-unity/Assets/Examples/Sound/Footstep.wav.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c34d92bb58dd1a14db9e89d6188087ea -AudioImporter: - serializedVersion: 4 - format: -1 - quality: .5 - stream: 1 - 3D: 0 - forceToMono: 0 - useHardware: 0 - loopable: 0 - userData: diff --git a/spine-unity/Assets/Examples/Sound/Hardfall.ogg b/spine-unity/Assets/Examples/Sound/Hardfall.ogg new file mode 100644 index 000000000..d74882e1f Binary files /dev/null and b/spine-unity/Assets/Examples/Sound/Hardfall.ogg differ diff --git a/spine-unity/Assets/Examples/Sound/Hardfall.ogg.meta b/spine-unity/Assets/Examples/Sound/Hardfall.ogg.meta new file mode 100644 index 000000000..95e782256 --- /dev/null +++ b/spine-unity/Assets/Examples/Sound/Hardfall.ogg.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 532e417ffa3f95747908419a00be3780 +timeCreated: 1452621190 +licenseType: Free +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Sound/Hardfall.wav b/spine-unity/Assets/Examples/Sound/Hardfall.wav deleted file mode 100644 index 952d0f137..000000000 Binary files a/spine-unity/Assets/Examples/Sound/Hardfall.wav and /dev/null differ diff --git a/spine-unity/Assets/Examples/Sound/Hardfall.wav.meta b/spine-unity/Assets/Examples/Sound/Hardfall.wav.meta deleted file mode 100644 index 7bb73c6de..000000000 --- a/spine-unity/Assets/Examples/Sound/Hardfall.wav.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: cf832d4a857c27545bff51681de106c0 -AudioImporter: - serializedVersion: 4 - format: -1 - quality: .5 - stream: 1 - 3D: 0 - forceToMono: 0 - useHardware: 0 - loopable: 0 - userData: diff --git a/spine-unity/Assets/Examples/Sound/Jump.ogg b/spine-unity/Assets/Examples/Sound/Jump.ogg new file mode 100644 index 000000000..2f3487a08 Binary files /dev/null and b/spine-unity/Assets/Examples/Sound/Jump.ogg differ diff --git a/spine-unity/Assets/Examples/Sound/Jump.ogg.meta b/spine-unity/Assets/Examples/Sound/Jump.ogg.meta new file mode 100644 index 000000000..802a8ec54 --- /dev/null +++ b/spine-unity/Assets/Examples/Sound/Jump.ogg.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 51f0c54706b53c14c9c24bbd63bb18a6 +timeCreated: 1452620503 +licenseType: Free +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Sound/Jump.wav b/spine-unity/Assets/Examples/Sound/Jump.wav deleted file mode 100644 index a82f96a3f..000000000 Binary files a/spine-unity/Assets/Examples/Sound/Jump.wav and /dev/null differ diff --git a/spine-unity/Assets/Examples/Sound/Jump.wav.meta b/spine-unity/Assets/Examples/Sound/Jump.wav.meta deleted file mode 100644 index eaaad224b..000000000 --- a/spine-unity/Assets/Examples/Sound/Jump.wav.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9afdb740ae0deb74a8906a353b597a03 -AudioImporter: - serializedVersion: 4 - format: -1 - quality: .5 - stream: 1 - 3D: 0 - forceToMono: 0 - useHardware: 0 - loopable: 0 - userData: diff --git a/spine-unity/Assets/Examples/Sound/Spineboygun.ogg b/spine-unity/Assets/Examples/Sound/Spineboygun.ogg new file mode 100644 index 000000000..4bf959886 Binary files /dev/null and b/spine-unity/Assets/Examples/Sound/Spineboygun.ogg differ diff --git a/spine-unity/Assets/Examples/Sound/Spineboygun.ogg.meta b/spine-unity/Assets/Examples/Sound/Spineboygun.ogg.meta new file mode 100644 index 000000000..32ac6c44a --- /dev/null +++ b/spine-unity/Assets/Examples/Sound/Spineboygun.ogg.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: e986056f914f4974896a49527ca80041 +timeCreated: 1452601827 +licenseType: Free +AudioImporter: + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta b/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta index 795bddb21..f9cb265ad 100644 --- a/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta +++ b/spine-unity/Assets/Examples/Spine/Dragon/dragon.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 6bc52290ef03f2846ba38d67e2823598 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta b/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta index 9f683ac4f..dc6b74a26 100644 --- a/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta +++ b/spine-unity/Assets/Examples/Spine/Dragon/dragon2.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 12c126994123f12468cf4c5a2684078a +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset b/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset index de8ead202..b069c892c 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat index 34533af56..2c6ce3a58 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat index b4b020cfc..a72a50d45 100644 Binary files a/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat and b/spine-unity/Assets/Examples/Spine/Dragon/dragon_dragon2.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta b/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta index 4f182e243..fe8202451 100644 --- a/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta +++ b/spine-unity/Assets/Examples/Spine/Eyes/eyes.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 49441e5a1682e564694545bd9b509785 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset index 52b0a616f..c8af918f3 100644 Binary files a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat index 9331c1f35..171e3d9c2 100644 Binary files a/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat and b/spine-unity/Assets/Examples/Spine/Eyes/eyes_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta index 1f7655474..b004dc955 100644 --- a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta +++ b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: ddb89f63d0296cf4f8572b0448bb6b30 +timeCreated: 1455501337 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset index 365c78c1f..349de63b3 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset and b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat index b3e55407f..f7c147560 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat and b/spine-unity/Assets/Examples/Spine/FootSoldier/Equipment/Equipment_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta index 460f78c1f..1790b7c3a 100644 --- a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta +++ b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 57b57f94df266f94ea0981915a4472e1 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset index d39d422a0..63f6b3838 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset and b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat index facc2bd81..cf035f168 100644 Binary files a/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat and b/spine-unity/Assets/Examples/Spine/FootSoldier/FS_White_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta b/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta index ad72c705a..e11ad370e 100644 --- a/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta +++ b/spine-unity/Assets/Examples/Spine/Gauge/Gauge.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: a11301aad15ed6b4995485a02a81b132 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,12 +35,14 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 @@ -43,5 +50,8 @@ TextureImporter: buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset index 8459768c9..ae5d3ceab 100644 Binary files a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat index ca7165be3..ed5295511 100644 Binary files a/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat and b/spine-unity/Assets/Examples/Spine/Gauge/Gauge_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta index 6f596db37..300122cab 100644 --- a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta +++ b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 803c2e614a63081439fde6276d110661 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset index 8c49c8438..cc334ce8e 100644 Binary files a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat index e98d762ed..c623d8ae6 100644 Binary files a/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat and b/spine-unity/Assets/Examples/Spine/Goblins/goblins-mesh_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json index c410ba2f8..1f36470ef 100644 --- a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json +++ b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.json @@ -1,37 +1,37 @@ { -"skeleton": { "hash": "sLectEdYW+yr4heE5DG180o7KDg", "spine": "2.1.27", "width": 318.74, "height": 333.7, "images": "./images/" }, +"skeleton": { "hash": "3UtVZW/AAMHoaYnvByba3GW2T4U", "spine": "3.0.10", "width": 318.7, "height": 333.72, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "Hip", "parent": "root", "y": 94.88 }, - { "name": "L_Ground", "parent": "root", "x": -31.28, "y": 0.26, "color": "00ff00ff" }, - { "name": "LookTarget", "parent": "root", "x": 112.83, "y": 218.2, "color": "8a009bff" }, { "name": "R_Ground", "parent": "root", "x": 28.11, "y": 0.26, "color": "ff0000ff" }, - { "name": "L_Ankle", "parent": "L_Ground", "x": 0.26, "y": 33.05, "color": "ff3f00ff" }, - { "name": "LookConstraintGoal", "parent": "LookTarget", "y": -43.82, "color": "ff3f00ff" }, { "name": "R_Ankle", "parent": "R_Ground", "y": 31.79, "color": "ff3f00ff" }, + { "name": "LookTarget", "parent": "root", "x": 112.83, "y": 218.2, "color": "8a009bff" }, + { "name": "LookConstraintGoal", "parent": "LookTarget", "y": -43.82, "color": "ff3f00ff" }, + { "name": "L_Ground", "parent": "root", "x": -31.28, "y": 0.26, "color": "00ff00ff" }, + { "name": "L_Ankle", "parent": "L_Ground", "x": 0.26, "y": 33.05, "color": "ff3f00ff" }, + { "name": "Hip", "parent": "root", "y": 94.88 }, { "name": "body", "parent": "Hip", "length": 60.79, "x": 4.09, "y": 3.17, "rotation": 96.39 }, - { "name": "thigh1", "parent": "Hip", "length": 23.94, "x": -17.51, "y": -5.22, "rotation": -107.07 }, - { "name": "thigh2", "parent": "Hip", "length": 23.65, "x": 21.85, "y": -5.86, "rotation": -85.46 }, - { "name": "head", "parent": "body", "length": 24.35, "x": 74.55, "y": -4.84, "rotation": -92.69 }, { "name": "mantles", "parent": "body", "x": 48.47, "y": -9, "rotation": -2.25 }, - { "name": "shin1", "parent": "thigh1", "length": 28.23, "x": 29.76, "y": -0.91, "rotation": 10.26 }, - { "name": "shin2", "parent": "thigh2", "length": 25.35, "x": 31.99, "y": 2.96, "rotation": -2.25 }, - { "name": "upperarm1", "parent": "body", "length": 19.35, "x": 52.49, "y": 41.84, "rotation": 130.11 }, - { "name": "upperarm2", "parent": "body", "length": 25.98, "x": 57.94, "y": -38.93, "rotation": -178.95 }, - { "name": "bone2", "parent": "head", "x": 12.91, "y": 110.65 }, { "name": "capeRoot", "parent": "mantles", "x": 19.61, "y": 14.01, "rotation": -90.45 }, - { "name": "foot1", "parent": "shin1", "length": 27.07, "x": 28.17, "y": -0.48, "rotation": -90.96, "inheritRotation": false }, - { "name": "foot2", "parent": "shin2", "length": 22.28, "x": 25.54, "y": 0.27, "rotation": -90.42, "inheritRotation": false }, - { "name": "forearm1", "parent": "upperarm1", "length": 22.06, "x": 23.97, "y": 5.16, "rotation": 30.56 }, - { "name": "forearm2", "parent": "upperarm2", "length": 15.3, "x": 28.74, "y": -0.9, "rotation": 6.79 }, - { "name": "hair01", "parent": "head", "x": 60.52, "y": 86.71 }, { "name": "cape1", "parent": "capeRoot", "length": 29.18, "x": -2.88, "y": -14.83, "rotation": -102.96 }, - { "name": "hand1", "parent": "forearm1", "length": 28.01, "x": 27.54, "y": 0.44, "rotation": 16.24 }, - { "name": "hand2", "parent": "forearm2", "length": 23.76, "x": 22.8, "y": -0.21, "rotation": 1.35 }, { "name": "cape2", "parent": "cape1", "length": 30.14, "x": 29.18, "y": -0.06, "rotation": 2.27 }, - { "name": "weapon", "parent": "hand2", "length": 157.4, "x": 15.97, "y": 1.43, "rotation": 77.9 }, { "name": "cape3", "parent": "cape2", "length": 32.51, "x": 30.14, "y": 0.22, "rotation": 1.8 }, - { "name": "cape4", "parent": "cape3", "length": 33.02, "x": 32.51, "y": 0.06, "rotation": 4.95 } + { "name": "cape4", "parent": "cape3", "length": 33.02, "x": 32.51, "y": 0.06, "rotation": 4.95 }, + { "name": "head", "parent": "body", "length": 24.35, "x": 74.55, "y": -4.84, "rotation": -92.69 }, + { "name": "hair01", "parent": "head", "x": 60.52, "y": 86.71 }, + { "name": "bone2", "parent": "head", "x": 12.91, "y": 110.65 }, + { "name": "thigh1", "parent": "Hip", "length": 23.94, "x": -17.51, "y": -5.22, "rotation": -107.07 }, + { "name": "shin1", "parent": "thigh1", "length": 28.23, "x": 29.76, "y": -0.91, "rotation": 10.26 }, + { "name": "foot1", "parent": "shin1", "length": 27.07, "x": 28.17, "y": -0.48, "rotation": -90.96, "inheritRotation": false }, + { "name": "thigh2", "parent": "Hip", "length": 23.65, "x": 21.85, "y": -5.86, "rotation": -85.46 }, + { "name": "shin2", "parent": "thigh2", "length": 25.35, "x": 31.99, "y": 2.96, "rotation": -2.25 }, + { "name": "foot2", "parent": "shin2", "length": 22.28, "x": 25.54, "y": 0.27, "rotation": -90.42, "inheritRotation": false }, + { "name": "upperarm1", "parent": "body", "length": 19.35, "x": 52.49, "y": 41.84, "rotation": 130.11 }, + { "name": "forearm1", "parent": "upperarm1", "length": 22.06, "x": 23.97, "y": 5.16, "rotation": 30.56 }, + { "name": "hand1", "parent": "forearm1", "length": 28.01, "x": 27.54, "y": 0.44, "rotation": 16.24 }, + { "name": "upperarm2", "parent": "body", "length": 25.98, "x": 57.94, "y": -38.93, "rotation": -178.95 }, + { "name": "forearm2", "parent": "upperarm2", "length": 15.3, "x": 28.74, "y": -0.9, "rotation": 6.79 }, + { "name": "hand2", "parent": "forearm2", "length": 23.76, "x": 22.8, "y": -0.21, "rotation": 1.35 }, + { "name": "weapon", "parent": "hand2", "length": 157.4, "x": 15.97, "y": 1.43, "rotation": 77.9 } ], "ik": [ { @@ -95,7 +95,7 @@ "type": "skinnedmesh", "uvs": [ 0.1298, 0.04145, 0.25, 0, 0.5, 0, 0.75, 0, 1, 0, 0.94074, 0.25, 0.90405, 0.5, 0.90969, 0.75259, 0.82336, 1, 0.55643, 1, 0.28104, 1, 0, 1, 0, 0.75518, 0.02821, 0.5, 0.05926, 0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.75, 0.5, 0.25, 0.5, 0.5, 0.5, 0.75, 0.75, 0.25, 0.75, 0.5, 0.75, 0.75 ], "triangles": [ 20, 22, 23, 23, 6, 7, 12, 13, 17, 11, 12, 17, 10, 17, 20, 11, 17, 10, 9, 20, 23, 10, 20, 9, 8, 23, 7, 9, 23, 8, 13, 16, 17, 17, 19, 20, 14, 15, 16, 13, 14, 16, 16, 18, 19, 19, 21, 22, 17, 16, 19, 20, 19, 22, 23, 22, 6, 0, 1, 15, 14, 0, 15, 15, 2, 18, 18, 3, 21, 16, 15, 18, 19, 18, 21, 6, 22, 21, 5, 6, 21, 15, 1, 2, 18, 2, 3, 5, 21, 3, 4, 5, 3 ], - "vertices": [ 2, 18, -71.4, 10.27, 0.46604, 24, -9.13, -72.39, 0.53394, 2, 18, -47.49, 12.58, 0.68358, 24, -16.73, -49.61, 0.31641, 1, 18, -10.99, 12.58, 1, 1, 18, 25.5, 12.58, 1, 1, 18, 62, 12.58, 1, 5, 18, 62, -27.16, 0.46827, 24, -2.49, 66, 0.34919, 27, -29.04, 67.26, 0.138, 29, -57.05, 68.86, 0.03802, 30, -83.3, 76.26, 0.0065, 5, 18, 62, -66.91, 0.10393, 24, 36.24, 74.89, 0.24994, 27, 10.01, 74.62, 0.32221, 29, -17.77, 74.99, 0.22166, 30, -43.64, 78.98, 0.10223, 5, 18, 62, -106.66, 0.00721, 24, 74.98, 83.79, 0.07037, 27, 49.07, 81.98, 0.23464, 29, 21.49, 81.11, 0.35566, 30, -3.99, 81.69, 0.3321, 4, 24, 121.89, 57.11, 6.8E-4, 27, 94.89, 53.47, 0.03735, 29, 66.39, 51.18, 0.18593, 30, 38.16, 48, 0.77602, 3, 27, 101.65, 17.6, 1.8E-4, 29, 72.01999, 15.11, 0.0066, 30, 40.65, 11.58, 0.9932, 2, 29, 77.64, -20.94, 0.05302, 30, 43.15, -24.82, 0.94697, 3, 27, 115.16, -54.13, 0.00351, 29, 83.26999, -57, 0.13964, 30, 45.65, -61.23, 0.85684, 4, 24, 107.65, -58.5, 0.02404, 27, 76.1, -61.49, 0.08882, 29, 43.99, -63.13, 0.31703, 30, 5.99, -63.95, 0.57009, 5, 18, -83.99, -66.91, 0.00248, 24, 68.91, -67.39, 0.18233, 27, 37.04, -68.85, 0.31987, 29, 4.71999, -69.26, 0.35134, 30, -33.66, -66.67, 0.14396, 5, 18, -80.23, -27.03, 0.05345, 24, 29.2, -72.66, 0.47788, 27, -2.84, -72.54, 0.33484, 29, -35.25999, -71.69, 0.12468, 30, -73.69999, -65.65, 0.00913, 5, 18, -47.49, -27.16, 0.04861, 24, 22, -40.71, 0.52446, 27, -8.77, -40.34, 0.34709, 29, -40.16999, -39.32, 0.07735, 30, -75.81, -32.98, 0.00247, 4, 24, 60.74, -31.82, 0.12714, 27, 30.28, -32.98, 0.45018, 29, -0.9, -33.18999, 0.37754, 30, -36.15, -30.26, 0.04511, 4, 24, 99.48, -22.92, 0.00851, 27, 69.33999, -25.62, 0.04332, 29, 38.37, -27.07, 0.37472, 30, 3.49, -27.54, 0.57342, 1, 24, 13.83, -5.14, 1, 2, 27, 23.52, 2.88, 0.74116, 29, -6.52, 2.86, 0.25883, 3, 27, 62.59, 10.24, 0.01792, 29, 32.74, 8.99, 0.48072, 30, 1, 8.87, 0.50133, 5, 18, 25.5, -27.16, 0.37653, 24, 5.66, 30.42, 0.49807, 27, -22.29, 31.39, 0.10748, 29, -51.42, 32.8, 0.01629, 30, -80.8, 39.84, 0.0016, 5, 18, 25.5, -66.91, 0.05159, 24, 44.41, 39.32, 0.2736, 27, 16.77, 38.75, 0.45121, 29, -12.15, 38.91999, 0.18086, 30, -41.15, 42.56, 0.0427, 5, 18, 25.5, -106.66, 1.7E-4, 24, 83.15, 48.21, 0.01708, 27, 55.83, 46.11, 0.12238, 29, 27.12, 45.05, 0.35747, 30, -1.49, 45.28, 0.50287 ], + "vertices": [ 2, 10, -71.4, 10.27, 0.46604, 11, -9.13, -72.39, 0.53394, 2, 10, -47.49, 12.58, 0.68358, 11, -16.73, -49.61, 0.31641, 1, 10, -10.99, 12.58, 1, 1, 10, 25.5, 12.58, 1, 1, 10, 62, 12.58, 1, 5, 10, 62, -27.16, 0.46827, 11, -2.49, 66, 0.34919, 12, -29.04, 67.26, 0.138, 13, -57.05, 68.86, 0.03802, 14, -83.3, 76.26, 0.0065, 5, 10, 62, -66.91, 0.10393, 11, 36.24, 74.89, 0.24994, 12, 10.01, 74.62, 0.32221, 13, -17.77, 74.99, 0.22166, 14, -43.64, 78.98, 0.10223, 5, 10, 62, -106.66, 0.00721, 11, 74.98, 83.79, 0.07037, 12, 49.07, 81.98, 0.23464, 13, 21.49, 81.11, 0.35566, 14, -3.99, 81.69, 0.3321, 4, 11, 121.89, 57.11, 6.8E-4, 12, 94.89, 53.47, 0.03735, 13, 66.39, 51.18, 0.18593, 14, 38.16, 48, 0.77602, 3, 12, 101.65, 17.6, 1.8E-4, 13, 72.01999, 15.11, 0.0066, 14, 40.65, 11.58, 0.9932, 2, 13, 77.64, -20.94, 0.05302, 14, 43.15, -24.82, 0.94697, 3, 12, 115.16, -54.13, 0.00351, 13, 83.26999, -57, 0.13964, 14, 45.65, -61.23, 0.85684, 4, 11, 107.65, -58.5, 0.02404, 12, 76.1, -61.49, 0.08882, 13, 43.99, -63.13, 0.31703, 14, 5.99, -63.95, 0.57009, 5, 10, -83.99, -66.91, 0.00248, 11, 68.91, -67.39, 0.18233, 12, 37.04, -68.85, 0.31987, 13, 4.71999, -69.26, 0.35134, 14, -33.66, -66.67, 0.14396, 5, 10, -80.23, -27.03, 0.05345, 11, 29.2, -72.66, 0.47788, 12, -2.84, -72.54, 0.33484, 13, -35.25999, -71.69, 0.12468, 14, -73.69999, -65.65, 0.00913, 5, 10, -47.49, -27.16, 0.04861, 11, 22, -40.71, 0.52446, 12, -8.77, -40.34, 0.34709, 13, -40.16999, -39.32, 0.07735, 14, -75.81, -32.98, 0.00247, 4, 11, 60.74, -31.82, 0.12714, 12, 30.28, -32.98, 0.45018, 13, -0.9, -33.18999, 0.37754, 14, -36.15, -30.26, 0.04511, 4, 11, 99.48, -22.92, 0.00851, 12, 69.33999, -25.62, 0.04332, 13, 38.37, -27.07, 0.37472, 14, 3.49, -27.54, 0.57342, 1, 11, 13.83, -5.14, 1, 2, 12, 23.52, 2.88, 0.74116, 13, -6.52, 2.86, 0.25883, 3, 12, 62.59, 10.24, 0.01792, 13, 32.74, 8.99, 0.48072, 14, 1, 8.87, 0.50133, 5, 10, 25.5, -27.16, 0.37653, 11, 5.66, 30.42, 0.49807, 12, -22.29, 31.39, 0.10748, 13, -51.42, 32.8, 0.01629, 14, -80.8, 39.84, 0.0016, 5, 10, 25.5, -66.91, 0.05159, 11, 44.41, 39.32, 0.2736, 12, 16.77, 38.75, 0.45121, 13, -12.15, 38.91999, 0.18086, 14, -41.15, 42.56, 0.0427, 5, 10, 25.5, -106.66, 1.7E-4, 11, 83.15, 48.21, 0.01708, 12, 55.83, 46.11, 0.12238, 13, 27.12, 45.05, 0.35747, 14, -1.49, 45.28, 0.50287 ], "hull": 15, "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 0, 14, 16 ], "width": 146, @@ -140,7 +140,7 @@ "type": "skinnedmesh", "uvs": [ 0.89191, 0.07464, 1, 0.36671, 0.86524, 0.47125, 0.75952, 0.55326, 0.76614, 0.75424, 0.77423, 1, 0.52641, 1, 0.25139, 1, 0, 0.57054, 0.10296, 0.27407, 0.22999, 0.14511, 0.45598, 0.0454, 0.71272, 0, 0.6472, 0.42961, 0.39447, 0.39904, 0.22598, 0.42696, 0.75608, 0.33283, 0.60098, 0.22733, 0.43093, 0.21786, 0.52274, 0.41456, 0.52466, 0.72063, 0.24463, 0.56616, 0.28184, 0.73041, 0.67863, 0.75066 ], "triangles": [ 18, 10, 11, 17, 11, 12, 18, 11, 17, 9, 10, 18, 0, 17, 12, 18, 15, 9, 19, 18, 17, 16, 13, 17, 16, 17, 0, 16, 0, 1, 2, 16, 1, 2, 3, 16, 13, 19, 17, 14, 18, 19, 14, 15, 18, 3, 13, 16, 21, 15, 14, 8, 9, 15, 8, 15, 21, 20, 19, 13, 20, 13, 3, 21, 20, 22, 14, 20, 21, 19, 20, 14, 23, 20, 3, 23, 3, 4, 22, 8, 21, 7, 8, 22, 6, 20, 23, 22, 20, 6, 7, 22, 6, 5, 6, 23, 5, 23, 4 ], - "vertices": [ 2, 23, 16.16, 58.77, 0.65472, 17, 63.77, 34.83, 0.34527, 2, 23, 36.03, 1.92, 1.00135, 17, 83.64, -22.01, -0.00135, 2, 11, 72.24, 76.12, 0.00643, 23, 11.72, -10.58, 0.99356, 1, 11, 54.09, 62.63, 1, 1, 11, 55.3, 27.87, 1, 1, 11, 56.78, -14.64, 1, 1, 11, 14.16, -14.73, 1, 1, 11, -33.14, -14.83, 1, 1, 11, -76.53, 59.37, 1, 2, 11, -58.93, 110.69, 0.14022, 17, -71.83999, 0.04, 0.85977, 2, 11, -37.13, 133.05, 0.05322, 17, -50.04, 22.4, 0.94677, 3, 11, 1.69, 150.38, 0, 23, -58.82, 63.67, 0.03085, 17, -11.21, 39.73, 0.96913, 2, 23, -14.68, 71.62, 0.38932, 17, 32.93, 47.68, 0.61066, 1, 11, 34.72, 83.98, 1, 1, 11, -8.75, 89.18, 1, 1, 11, -37.72, 84.29, 1, 3, 11, 53.42, 100.64, 0.00656, 23, -7.1, 13.93, 0.75552, 17, 40.50999, -10, 0.23791, 2, 23, -33.81, 32.21, 0.17777, 17, 13.79, 8.27, 0.82222, 2, 11, -2.54, 120.54, 0.02356, 17, -15.45, 9.89, 0.97643, 1, 11, 13.31, 86.54, 1, 1, 11, 13.75, 33.59, 1, 1, 11, -34.46, 60.21, 1, 1, 11, -28, 31.81, 1, 1, 11, 40.25, 28.45, 1 ], + "vertices": [ 2, 16, 16.16, 58.77, 0.65472, 17, 63.77, 34.83, 0.34527, 2, 16, 36.03, 1.92, 1.00135, 17, 83.64, -22.01, -0.00135, 2, 15, 72.24, 76.12, 0.00643, 16, 11.72, -10.58, 0.99356, 1, 15, 54.09, 62.63, 1, 1, 15, 55.3, 27.87, 1, 1, 15, 56.78, -14.64, 1, 1, 15, 14.16, -14.73, 1, 1, 15, -33.14, -14.83, 1, 1, 15, -76.53, 59.37, 1, 2, 15, -58.93, 110.69, 0.14022, 17, -71.83999, 0.04, 0.85977, 2, 15, -37.13, 133.05, 0.05322, 17, -50.04, 22.4, 0.94677, 3, 15, 1.69, 150.38, 0, 16, -58.82, 63.67, 0.03085, 17, -11.21, 39.73, 0.96913, 2, 16, -14.68, 71.62, 0.38932, 17, 32.93, 47.68, 0.61066, 1, 15, 34.72, 83.98, 1, 1, 15, -8.75, 89.18, 1, 1, 15, -37.72, 84.29, 1, 3, 15, 53.42, 100.64, 0.00656, 16, -7.1, 13.93, 0.75552, 17, 40.50999, -10, 0.23791, 2, 16, -33.81, 32.21, 0.17777, 17, 13.79, 8.27, 0.82222, 2, 15, -2.54, 120.54, 0.02356, 17, -15.45, 9.89, 0.97643, 1, 15, 13.31, 86.54, 1, 1, 15, 13.75, 33.59, 1, 1, 15, -34.46, 60.21, 1, 1, 15, -28, 31.81, 1, 1, 15, 40.25, 28.45, 1 ], "hull": 13, "edges": [ 0, 24, 24, 22, 22, 20, 20, 18, 16, 18, 16, 14, 6, 26, 28, 30, 30, 16, 0, 2, 2, 4, 4, 6, 4, 32, 32, 34, 34, 36, 36, 18, 10, 12, 12, 14, 26, 38, 38, 28, 38, 34, 34, 24, 12, 40, 40, 38, 6, 8, 8, 10 ], "width": 172, @@ -1394,9 +1394,9 @@ }, { "time": 2, "x": -1.06, "y": 0 } ], - "flipX": [ - { "time": 0.1, "x": true }, - { "time": 1.1 } + "scale": [ + { "time": 0.1, "x": -1, "y": 1, "curve": "stepped" }, + { "time": 1.1, "x": 1, "y": 1 } ] }, "Hip": { diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta index 171050e85..f03267cea 100644 --- a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta +++ b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 8d970daea81f33648ae2d84ab59c88d4 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset index 9d82fa71f..185ea4c70 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat index a4b4b8ec2..b344b46dd 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat and b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset index 98307d644..eb82e98aa 100644 Binary files a/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Hero/hero-mesh_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta index 3f00c1513..34eb2f4ab 100644 --- a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta +++ b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: b29bbacbc2368c94a9c942d176ac6f59 +timeCreated: 1455501337 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset index 6f99b08ed..336bb6976 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat index 48ee5e073..a544beb03 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat and b/spine-unity/Assets/Examples/Spine/Raggedy Spineboy/Raggedy Spineboy_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor.json b/spine-unity/Assets/Examples/Spine/Raptor/raptor.json index df9892de6..cf761a65a 100644 --- a/spine-unity/Assets/Examples/Spine/Raptor/raptor.json +++ b/spine-unity/Assets/Examples/Spine/Raptor/raptor.json @@ -1,59 +1,39 @@ { -"skeleton": { "hash": "r3IJRaLbaxgEoW1YBAOrYT69jB4", "spine": "Dev", "width": 1224.2, "height": 1052.38 }, +"skeleton": { "hash": "qxmcEk0SYRCDt0lM83+xmNjO6rA", "spine": "3.0.01", "width": 1223.71, "height": 1052.13, "images": "./images/" }, "bones": [ { "name": "root" }, - { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94 }, - { "name": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15 }, - { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81 }, - { "name": "front_leg1", "parent": "hip", "length": 251.74, "x": 27.36, "y": -28.27, "rotation": -51.5 }, - { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58 }, - { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76 }, - { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99 }, - { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92 }, - { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97 }, - { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93 }, - { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25 }, - { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8 }, - { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3 }, - { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84 }, - { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54 }, - { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46 }, - { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37 }, - { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71 }, - { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81 }, - { "name": "saddle_strap_front1", "parent": "saddle", "length": 97.27, "x": -27.36, "y": -73.38, "rotation": -148.11 }, - { "name": "saddle_strap_rear1", "parent": "saddle", "length": 38.62, "x": -33.34, "y": 87.32, "rotation": 151.13 }, - { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93 }, - { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01 }, - { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08 }, - { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85 }, - { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135 }, - { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88 }, - { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75 }, - { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23 }, - { "name": "front_foot1", "parent": "front_leg3", "length": 57.79, "x": 118.19, "y": -0.79, "scaleX": 1.126, "rotation": 54.46 }, - { "name": "front_thigh", "parent": "spineboy_hip", "length": 77.79, "x": 15.51, "y": 17.01, "rotation": 163.34 }, + { "name": "rear_foot_goal", "parent": "root", "x": 33.43, "y": 30.81, "color": "ff0000ff" }, + { "name": "rear_leg_goal", "parent": "rear_foot_goal", "x": -127.51, "y": 75.99, "color": "ff0000ff" }, + { "name": "hip", "parent": "root", "x": -136.78, "y": 415.47, "rotation": 3.15, "color": "fbff00ff" }, + { "name": "rear_leg1", "parent": "hip", "length": 226.27, "x": 55.19, "y": -71.25, "rotation": -54.76, "color": "e07800ff" }, + { "name": "rear_leg2", "parent": "rear_leg1", "length": 172.58, "x": 226.32, "y": 0.23, "rotation": -92.25, "color": "e07800ff" }, + { "name": "rear_leg3", "parent": "rear_leg2", "length": 103.05, "x": 172.31, "y": 2.21, "rotation": 82.81, "color": "e07800ff" }, + { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43, "color": "e07800ff" }, { - "name": "gun", - "parent": "spineboy_hip", - "length": 181.35, - "x": 16.86, - "y": -7.89, - "scaleX": 0.816, - "scaleY": 0.816, - "rotation": 107.11 + "name": "rear_foot2", + "parent": "rear_foot1", + "length": 102.31, + "x": 84.49, + "y": -0.34, + "rotation": -6.13, + "inheritRotation": false, + "color": "e07800ff" + }, + { "name": "front_foot_goal", "parent": "root", "x": -45.79, "y": -28.67, "rotation": -0.94, "color": "ff0000ff" }, + { "name": "front_leg_goal", "parent": "front_foot_goal", "x": -106.06, "y": 115.58, "color": "ff0000ff" }, + { "name": "front_leg1", "parent": "hip", "length": 251.74, "x": 27.36, "y": -28.27, "rotation": -51.5, "color": "15ff00ff" }, + { "name": "front_leg2", "parent": "front_leg1", "length": 208.54, "x": 251.03, "y": 0.16, "rotation": 261.93, "color": "15ff00ff" }, + { "name": "front_leg3", "parent": "front_leg2", "length": 118.18, "x": 208.5, "y": -1.63, "rotation": 85.46, "color": "15ff00ff" }, + { + "name": "front_foot1", + "parent": "front_leg3", + "length": 57.79, + "x": 118.19, + "y": -0.79, + "scaleX": 1.126, + "rotation": 54.46, + "color": "15ff00ff" }, - { "name": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82 }, - { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56 }, - { "name": "rear_foot1", "parent": "rear_leg3", "length": 84.51, "x": 102.37, "y": -0.02, "rotation": 75.43 }, - { "name": "saddle_strap_front2", "parent": "saddle_strap_front1", "length": 102.74, "x": 97.29, "y": 0.3, "rotation": -11.13 }, - { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02 }, - { "name": "spineboy_torso", "parent": "spineboy_hip", "length": 122.45, "x": 1.05, "y": -2.1, "rotation": -75.85 }, - { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38 }, - { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86 }, - { "name": "back_arm", "parent": "spineboy_torso", "length": 67.21, "x": 96.33, "y": -38.46, "rotation": -120.89 }, - { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97 }, - { "name": "front_arm", "parent": "spineboy_torso", "length": 74.51, "x": 101.37, "y": 9.78, "rotation": -118.16 }, { "name": "front_foot2", "parent": "front_foot1", @@ -63,31 +43,9 @@ "scaleX": 0.73, "scaleY": 0.823, "rotation": -0.46, - "inheritRotation": false + "inheritRotation": false, + "color": "15ff00ff" }, - { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83 }, - { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36 }, - { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31 }, - { "name": "jaw", "parent": "head", "length": 203.76, "x": 29.36, "y": -40.15, "rotation": -140.14, "inheritScale": false }, - { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62 }, - { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22 }, - { - "name": "rear_foot2", - "parent": "rear_foot1", - "length": 102.31, - "x": 84.49, - "y": -0.34, - "rotation": -6.13, - "inheritRotation": false - }, - { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28 }, - { "name": "saddle_strap_rear3", "parent": "saddle_strap_rear2", "length": 44.04, "x": 54.86, "y": 0.19, "rotation": 3.63 }, - { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34 }, - { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04 }, - { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48 }, - { "name": "bone", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59 }, - { "name": "bone2", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55 }, - { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3 }, { "name": "front_foot3", "parent": "front_foot2", @@ -96,21 +54,159 @@ "y": 20.65, "scaleX": 1.154, "rotation": -3.16, - "inheritRotation": false + "inheritRotation": false, + "color": "15ff00ff" }, - { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65 }, - { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93 }, - { "name": "back_hand", "parent": "back_bracer", "length": 41.97, "x": 43.68, "y": 0.06, "rotation": 9.2, "inheritRotation": false }, + { "name": "tail1", "parent": "hip", "length": 162.53, "x": -20.86, "y": 6.87, "rotation": 162.92, "color": "eaff00ff" }, + { "name": "tail2", "parent": "tail1", "length": 130.02, "x": 162.53, "y": -0.82, "rotation": 30.3, "color": "eaff00ff" }, + { "name": "tail3", "parent": "tail2", "length": 141.06, "x": 130.02, "y": 0.1, "rotation": 6.88, "color": "eaff00ff" }, + { "name": "tail4", "parent": "tail3", "length": 126.25, "x": 141.05, "y": 0.64, "rotation": -18.86, "color": "eaff00ff" }, + { "name": "tail5", "parent": "tail4", "length": 91.06, "x": 126.25, "y": -0.47, "rotation": -22.34, "color": "eaff00ff" }, + { "name": "torso1", "parent": "hip", "length": 126.25, "x": 30.03, "y": -0.4, "rotation": -4.97, "color": "eaff00ff" }, + { "name": "saddle", "parent": "torso1", "length": 50.91, "x": 4.56, "y": 71.86, "rotation": 91.8, "color": "ff7300ff" }, + { "name": "stirrup", "parent": "saddle", "length": 78.17, "x": -81.94, "y": -103.38, "rotation": -68.85, "color": "ff7300ff" }, + { "name": "stirrup_strap1", "parent": "saddle", "length": 43.69, "x": -20.38, "y": -29.37, "rotation": -135, "color": "ff7300ff" }, + { "name": "stirrup_strap2", "parent": "stirrup_strap1", "length": 51.62, "x": 43.7, "rotation": 9.38, "color": "ff7300ff" }, + { "name": "spineboy_rear_arm_goal", "parent": "saddle", "x": -30.43, "y": -100.08, "color": "ff0001ff" }, + { "name": "spineboy_hip", "parent": "saddle", "length": 0.52, "x": 81.88, "y": 2.68, "rotation": 90.01, "color": "ffffffff" }, + { + "name": "spineboy_torso", + "parent": "spineboy_hip", + "length": 122.45, + "x": 1.05, + "y": -2.1, + "rotation": -75.85, + "color": "ffffffff" + }, + { "name": "neck2", "parent": "spineboy_torso", "length": 32.04, "x": 113.44, "y": -15.21, "rotation": -45.22, "color": "ffffffff" }, + { "name": "head2", "parent": "neck2", "length": 249.64, "x": 23.01, "y": 3.47, "rotation": 11.65, "color": "ffffffff" }, + { + "name": "gun", + "parent": "spineboy_hip", + "length": 181.35, + "x": 16.86, + "y": -7.89, + "scaleX": 0.816, + "scaleY": 0.816, + "rotation": 107.11, + "color": "ffffffff" + }, + { "name": "back_thigh", "parent": "spineboy_hip", "length": 71.15, "x": -9.57, "y": 2.31, "rotation": 160.75, "color": "ffffffff" }, + { "name": "back_knee", "parent": "back_thigh", "length": 97.17, "x": 71.15, "y": -0.28, "rotation": -54.97, "color": "ffffffff" }, + { "name": "spineboy_front_arm_goal", "parent": "saddle", "x": -50.7, "y": -96.93, "color": "ff0004ff" }, + { + "name": "front_thigh", + "parent": "spineboy_hip", + "length": 77.79, + "x": 15.51, + "y": 17.01, + "rotation": 163.34, + "color": "ffffffff" + }, + { "name": "lower_leg", "parent": "front_thigh", "length": 111.5, "x": 77.92, "y": -0.1, "rotation": -49.62, "color": "ffffffff" }, + { + "name": "saddle_strap_rear1", + "parent": "saddle", + "length": 38.62, + "x": -33.34, + "y": 87.32, + "rotation": 151.13, + "color": "ff7300ff" + }, + { "name": "saddle_strap_rear2", "parent": "saddle_strap_rear1", "length": 54.36, "x": 38.63, "y": -0.02, "color": "ff7300ff" }, + { + "name": "saddle_strap_rear3", + "parent": "saddle_strap_rear2", + "length": 44.04, + "x": 54.86, + "y": 0.19, + "rotation": 3.63, + "color": "ff7300ff" + }, + { + "name": "saddle_strap_front1", + "parent": "saddle", + "length": 97.27, + "x": -27.36, + "y": -73.38, + "rotation": -148.11, + "color": "ff7300ff" + }, + { + "name": "saddle_strap_front2", + "parent": "saddle_strap_front1", + "length": 102.74, + "x": 97.29, + "y": 0.3, + "rotation": -11.13, + "color": "ff7300ff" + }, + { "name": "torso2", "parent": "torso1", "length": 121.2, "x": 126.25, "y": -0.37, "rotation": 39.84, "color": "eaff00ff" }, + { "name": "rear_arm1", "parent": "torso2", "length": 109.56, "x": 57.05, "y": -95.38, "rotation": -124.71, "color": "e07800ff" }, + { "name": "rear_arm2", "parent": "rear_arm1", "length": 85.8, "x": 109.56, "rotation": 123.56, "color": "e07800ff" }, + { "name": "rear_hand", "parent": "rear_arm2", "length": 45.8, "x": 85.8, "y": 0.1, "rotation": -76.28, "color": "e07800ff" }, + { "name": "neck", "parent": "torso2", "length": 70.59, "x": 121.19, "y": 0.34, "rotation": 41.37, "color": "eaff00ff" }, + { "name": "head", "parent": "neck", "length": 105.5, "x": 70.59, "y": 0.03, "rotation": 9.82, "color": "eaff00ff" }, + { "name": "tongue1", "parent": "head", "length": 55.11, "x": 20.81, "y": -104.75, "rotation": -129.04, "color": "ffff00ff" }, + { "name": "tongue2", "parent": "tongue1", "length": 44.66, "x": 55.59, "y": 0.93, "rotation": 8.93, "color": "fff200ff" }, + { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86, "color": "fff200ff" }, + { + "name": "jaw", + "parent": "head", + "length": 203.76, + "x": 29.36, + "y": -40.15, + "rotation": -140.14, + "inheritScale": false, + "color": "ffff00ff" + }, + { "name": "horn_rear", "parent": "head", "length": 73.78, "x": 99.27, "y": -226.79, "rotation": 44.31, "color": "e07800ff" }, + { "name": "rear_arm_target", "parent": "horn_rear", "x": 232.68, "y": 245.84, "rotation": -133.55, "color": "e07800ff" }, + { + "name": "back_arm", + "parent": "spineboy_torso", + "length": 67.21, + "x": 96.33, + "y": -38.46, + "rotation": -120.89, + "color": "ffffffff" + }, + { "name": "back_bracer", "parent": "back_arm", "length": 43.68, "x": 67.21, "y": -0.31, "rotation": 17.48, "color": "ffffffff" }, + { + "name": "back_hand", + "parent": "back_bracer", + "length": 41.97, + "x": 43.68, + "y": 0.06, + "rotation": 9.2, + "inheritRotation": false, + "color": "ffffffff" + }, + { "name": "horn_front", "parent": "head", "length": 87.48, "x": 82.09, "y": -221.36, "rotation": 49.36, "color": "15ff00ff" }, + { "name": "front_arm_target", "parent": "horn_front", "x": 294.58, "y": 234.17, "rotation": -138.59, "color": "15ff00ff" }, + { + "name": "front_arm", + "parent": "spineboy_torso", + "length": 74.51, + "x": 101.37, + "y": 9.78, + "rotation": -118.16, + "color": "ffffffff" + }, + { "name": "front_bracer", "parent": "front_arm", "length": 39.85, "x": 74.52, "y": -0.41, "rotation": 20.3, "color": "ffffffff" }, { "name": "front_hand2", "parent": "front_bracer", "length": 58.18, "x": 39.98, "y": -0.89, - "rotation": 13.9, - "inheritRotation": false + "rotation": 13.89, + "inheritRotation": false, + "color": "ffffffff" }, - { "name": "tongue3", "parent": "tongue2", "length": 43.64, "x": 44.26, "y": -0.2, "rotation": 12.86 } + { "name": "front_arm1", "parent": "torso2", "length": 109.99, "x": 46.37, "y": -84.61, "rotation": 224.54, "color": "15ff00ff" }, + { "name": "front_arm2", "parent": "front_arm1", "length": 86.33, "x": 109.99, "y": 0.2, "rotation": 105.23, "color": "15ff00ff" }, + { "name": "front_hand", "parent": "front_arm2", "length": 47.55, "x": 86.33, "y": 0.06, "rotation": -56.83, "color": "15ff00ff" } ], "ik": [ { @@ -140,12 +236,6 @@ "bones": [ "stirrup_strap1", "stirrup_strap2" ], "target": "stirrup" }, - { - "name": "spineboy_rear_leg_goal", - "bones": [ "back_thigh", "back_knee" ], - "target": "spineboy_rear_arm_goal", - "bendPositive": false - }, { "name": "spineboy_front_leg_goal", "bones": [ "front_thigh", "lower_leg" ], @@ -153,14 +243,20 @@ "bendPositive": false }, { - "name": "rear_arm_goal", - "bones": [ "back_arm", "back_bracer" ], - "target": "bone2" + "name": "spineboy_rear_leg_goal", + "bones": [ "back_thigh", "back_knee" ], + "target": "spineboy_rear_arm_goal", + "bendPositive": false }, { "name": "front_arm_goal", "bones": [ "front_arm", "front_bracer" ], - "target": "bone" + "target": "front_arm_target" + }, + { + "name": "rear_arm_goal", + "bones": [ "back_arm", "back_bracer" ], + "target": "rear_arm_target" } ], "slots": [ @@ -236,9 +332,12 @@ "gun_nohand": { "type": "mesh", "uvs": [ 0.71081, 0.16149, 0.85807, 0.41784, 1, 0.6649, 1, 1, 0.71457, 1, 0.49802, 0.6905, 0.30182, 0.41009, 0, 0.58226, 0, 0.1174, 0.27187, 0.12429, 0.24857, 0, 0.36658, 0, 0.61804, 0, 0.70575, 0.53546, 0.53668, 0.26855 ], - "triangles": [ 9, 10, 11, 14, 11, 12, 14, 12, 0, 9, 11, 14, 6, 9, 14, 14, 0, 1, 13, 14, 1, 6, 7, 8, 6, 8, 9, 13, 1, 2, 13, 5, 6, 13, 6, 14, 3, 4, 13, 5, 13, 4, 3, 13, 2 ], + "triangles": [ 3, 13, 2, 5, 13, 4, 3, 4, 13, 13, 6, 14, 13, 5, 6, 13, 1, 2, 6, 8, 9, 6, 7, 8, 13, 14, 1, 14, 0, 1, 6, 9, 14, 9, 11, 14, 14, 12, 0, 14, 11, 12, 9, 10, 11 ], "vertices": [ 23.48, 50.63, 83.86, 46.32, 142.05, 42.17, 197.91, 3.34, 163.7, -45.86, 86.15, -47.34, 15.9, -48.68, 8.42, -120.68, -69.06, -66.81, -35.32, -20.73, -58.83, -10.35, -44.69, 9.99, -14.55, 53.35, 85.21, 6.43, 20.45, 8.2 ], - "hull": 13 + "hull": 13, + "edges": [ 14, 12, 6, 8, 6, 4, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 8, 10, 10, 12, 6, 26, 10, 26, 4, 2, 26, 2, 22, 28, 28, 26, 12, 28, 2, 0, 0, 24, 28, 0, 18, 12 ], + "width": 210, + "height": 203 } }, "head": { @@ -256,19 +355,25 @@ "raptor_arm_back": { "raptor_arm_back": { "type": "skinnedmesh", - "uvs": [ 0.38711, 0.29362, 0.31382, 0.46513, 0.29242, 0.51521, 0.32475, 0.4931, 0.57587, 0.32138, 0.63254, 0.28263, 0.71632, 0.34507, 0.94948, 0.51888, 1, 0.65257, 1, 0.90624, 0.95462, 0.99934, 0.88957, 0.83204, 0.80294, 0.99998, 0.75236, 0.75696, 0.6654, 0.713, 0.62288, 0.63242, 0.58194, 0.65031, 0.22478, 0.80641, 0.07791, 0.73315, 0.07825, 0.66549, 0.07984, 0.34306, 0, 0.29728, 0, 0, 0.32334, 0, 0.94947, 0.60129 ], - "triangles": [ 6, 14, 15, 5, 6, 15, 5, 15, 4, 6, 7, 14, 24, 7, 8, 24, 14, 7, 13, 14, 24, 11, 13, 24, 11, 24, 8, 11, 8, 9, 10, 11, 9, 12, 13, 11, 15, 16, 4, 18, 19, 2, 16, 3, 4, 17, 18, 2, 17, 2, 3, 17, 3, 16, 20, 21, 22, 23, 20, 22, 0, 20, 23, 1, 20, 0, 1, 19, 20, 2, 19, 1 ], - "vertices": [ 2, 18, 36.95, 33.31, 0.91666, 34, 68.53, 41.05, 0.08333, 2, 18, 66.02, 20.35, 0.76813, 34, 41.41, 24.39, 0.23186, 2, 18, 74.51, 16.57, 0.64468, 34, 33.49, 19.53, 0.35531, 3, 18, 70.89, 21.97, 0.27669, 34, 39.99, 19.46, 0.67508, 52, -29.67, -39.91, 0.04822, 3, 18, 42.77, 63.89, 0.11483, 34, 90.47, 18.95, 0.60854, 52, -17.2, 9, 0.27661, 2, 34, 101.86, 18.83, 0.45955, 52, -14.38, 20.04, 0.54044, 2, 34, 106.47, 2.08, 0.0625, 52, 2.98, 20.56, 0.9375, 1, 52, 51.32, 21.98, 1, 1, 52, 72.39, 9.61, 1, 1, 52, 100.37, -23.87, 1, 1, 52, 104.96, -40.9, 1, 1, 52, 78.37, -25.61, 1, 1, 52, 86.05, -56.84, 1, 1, 52, 52.92, -30.04, 1, 2, 34, 62.24, -43.92, 0.0625, 52, 37.19, -33.33, 0.9375, 2, 34, 64.89, -28.65, 0.3125, 52, 22.98, -27.14, 0.6875, 2, 34, 57.69, -27.17, 0.30612, 52, 19.83, -33.78, 0.69387, 2, 18, 124.19, 3.83, 0.19395, 34, -5.09, -14.23, 0.80604, 2, 18, 110.77, -19.65, 0.3125, 34, -16.88, 10.1, 0.6875, 2, 18, 99.14, -19.2, 0.51613, 34, -9.93, 19.44, 0.48386, 2, 18, 43.73, -17.03, 0.9375, 34, 23.17, 63.92, 0.0625, 1, 18, 35.41, -29.77, 1, 1, 18, -15.68, -28.02, 1, 1, 18, -13.87, 24.65, 1, 1, 52, 60.41, 11.1, 1 ], - "hull": 24 + "uvs": [ 0.38711, 0.29362, 0.31382, 0.46513, 0.29242, 0.51521, 0.32475, 0.4931, 0.57587, 0.32138, 0.63254, 0.28263, 0.71632, 0.34507, 0.94948, 0.51888, 0.94947, 0.60129, 1, 0.65257, 1, 0.90624, 0.95462, 0.99934, 0.88957, 0.83204, 0.80294, 0.99998, 0.75236, 0.75696, 0.6654, 0.713, 0.62288, 0.63242, 0.58194, 0.65031, 0.22478, 0.80641, 0.07791, 0.73315, 0.07825, 0.66549, 0.07984, 0.34306, 0, 0.29728, 0, 0, 0.32334, 0 ], + "triangles": [ 6, 15, 16, 5, 6, 16, 5, 16, 4, 6, 7, 15, 16, 17, 4, 8, 15, 7, 14, 15, 8, 12, 14, 8, 12, 8, 9, 12, 9, 10, 11, 12, 10, 13, 14, 12, 17, 3, 4, 19, 20, 2, 18, 19, 2, 18, 2, 3, 18, 3, 17, 21, 22, 23, 24, 21, 23, 0, 21, 24, 1, 21, 0, 1, 20, 21, 2, 20, 1 ], + "vertices": [ 2, 44, 36.95, 33.31, 0.91666, 45, 68.53, 41.05, 0.08333, 2, 44, 66.01999, 20.35, 0.76813, 45, 41.41, 24.39, 0.23186, 2, 44, 74.51, 16.57, 0.64468, 45, 33.49, 19.53, 0.35531, 3, 44, 70.89, 21.97, 0.27669, 45, 39.99, 19.45999, 0.67508, 46, -29.67, -39.91, 0.04822, 3, 44, 42.77, 63.89, 0.11483, 45, 90.47, 18.95, 0.60854, 46, -17.2, 9, 0.2766, 2, 45, 101.86, 18.83, 0.45955, 46, -14.38, 20.04, 0.54044, 2, 45, 106.47, 2.08, 0.0625, 46, 2.98, 20.56, 0.9375, 1, 46, 51.32, 21.98, 1, 1, 46, 60.41, 11.1, 1, 1, 46, 72.39, 9.60999, 1, 1, 46, 100.37, -23.87, 1, 1, 46, 104.96, -40.9, 1, 1, 46, 78.37, -25.61, 1, 1, 46, 86.05, -56.84, 1, 1, 46, 52.92, -30.04, 1, 2, 45, 62.24, -43.92, 0.0625, 46, 37.18999, -33.33, 0.9375, 2, 45, 64.89, -28.65, 0.3125, 46, 22.98, -27.14, 0.6875, 2, 45, 57.69, -27.17, 0.30612, 46, 19.83, -33.78, 0.69387, 2, 44, 124.19, 3.83, 0.19395, 45, -5.09, -14.23, 0.80604, 2, 44, 110.77, -19.65, 0.3125, 45, -16.87999, 10.1, 0.6875, 2, 44, 99.14, -19.2, 0.51612, 45, -9.93, 19.44, 0.48386, 2, 44, 43.73, -17.03, 0.9375, 45, 23.17, 63.92, 0.0625, 1, 44, 35.41, -29.77, 1, 1, 44, -15.68, -28.02, 1, 1, 44, -13.87, 24.65, 1 ], + "hull": 25, + "edges": [ 44, 46, 44, 42, 38, 36, 32, 30, 30, 28, 28, 26, 24, 22, 18, 16, 16, 14, 46, 48, 38, 4, 6, 4, 6, 36, 42, 40, 40, 38, 4, 2, 2, 0, 40, 2, 10, 32, 36, 34, 34, 32, 10, 8, 8, 6, 34, 8, 14, 12, 12, 10, 12, 30, 18, 20, 22, 20, 26, 24, 48, 0 ], + "width": 163, + "height": 172 } }, "raptor_body": { "raptor_body": { "type": "skinnedmesh", - "uvs": [ 0.89014, 0.11136, 1, 0.22194, 1, 0.42847, 0.88179, 0.38589, 0.874, 0.47986, 0.84783, 0.51728, 0.82504, 0.54984, 0.82403, 0.61606, 0.82305, 0.67972, 0.74042, 0.86709, 0.61596, 0.93097, 0.49649, 0.90968, 0.41186, 0.71379, 0.36955, 0.70086, 0.32823, 0.68824, 0.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 0.19092, 0.7164, 0.15952, 0.70337, 0.1301, 0.69116, 0.09227, 0.67546, 0.06029, 0.63165, 0.02855, 0.58817, 0, 0.49874, 0.05045, 0.53494, 0.08267, 0.54507, 0.11815, 0.55623, 0.14733, 0.54161, 0.17913, 0.52568, 0.20324, 0.5136, 0.22867, 0.50087, 0.24871, 0.47664, 0.27523, 0.44458, 0.32026, 0.39015, 0.37517, 0.35747, 0.43476, 0.32201, 0.4893, 0.35534, 0.56021, 0.39867, 0.61587, 0.40674, 0.67769, 0.4157, 0.69094, 0.31314, 0.69362, 0.14742, 0.79219, 0.08354, 0.51541, 0.74573, 0.62393, 0.75425, 0.70856, 0.7287, 0.76132, 0.63288, 0.7566, 0.49454, 0.80613, 0.27517, 0.65885, 0.59037, 0.53929, 0.54937, 0.42632, 0.52207, 0.3246, 0.55241, 0.22715, 0.618, 0.10574, 0.61341, 0.03969, 0.56109, 0.77916, 0.39461, 0.37556, 0.53721, 0.27743, 0.58416, 0.16958, 0.61582, 0.07259, 0.58715, 0.87545, 0.31683, 0.85488, 0.21417, 0.81012, 0.17403, 0.83214, 0.25662, 0.83823, 0.32214, 0.84622, 0.41719, 0.59954, 0.57003, 0.49074, 0.53763, 0.76917, 0.43888, 0.75912, 0.56845, 0.871, 0.3701, 0.85431, 0.43545, 0.89558, 0.32412, 0.90105, 0.22877, 0.91523, 0.20564, 0.93086, 0.219, 0.93446, 0.25858, 0.91956, 0.2776, 0.9061, 0.26423, 0.9415, 0.25929, 0.93589, 0.21545, 0.91669, 0.19192, 0.89297, 0.22201, 0.90245, 0.28513, 0.92006, 0.281, 0.92143, 0.29619, 0.94856, 0.2643, 0.19894, 0.61694, 0.13973, 0.61469, 0.25158, 0.60156 ], - "triangles": [ 10, 11, 45, 45, 11, 44, 11, 12, 44, 44, 68, 45, 12, 69, 44, 12, 58, 52, 21, 22, 55, 22, 61, 55, 22, 23, 61, 55, 61, 27, 23, 56, 61, 23, 24, 56, 61, 56, 26, 61, 26, 27, 26, 56, 25, 56, 24, 25, 19, 60, 89, 19, 20, 60, 60, 20, 90, 20, 21, 90, 90, 21, 55, 89, 60, 29, 90, 28, 60, 60, 28, 29, 55, 27, 90, 90, 27, 28, 16, 17, 54, 91, 15, 16, 18, 54, 17, 54, 18, 89, 16, 54, 91, 18, 19, 89, 15, 91, 59, 31, 91, 54, 89, 30, 54, 89, 29, 30, 32, 59, 91, 30, 31, 54, 32, 91, 31, 33, 59, 32, 14, 15, 59, 33, 53, 59, 13, 58, 12, 58, 13, 53, 59, 53, 14, 13, 14, 53, 34, 58, 53, 35, 52, 58, 34, 53, 33, 58, 34, 35, 44, 69, 51, 12, 52, 69, 51, 38, 39, 51, 69, 38, 38, 69, 37, 69, 52, 37, 36, 52, 35, 36, 37, 52, 4, 5, 70, 4, 57, 73, 73, 57, 67, 4, 73, 3, 3, 73, 72, 3, 74, 2, 74, 87, 2, 87, 88, 2, 88, 1, 2, 73, 67, 72, 72, 67, 66, 67, 57, 66, 57, 49, 66, 57, 41, 49, 3, 72, 74, 72, 62, 74, 72, 66, 62, 74, 85, 87, 85, 74, 84, 49, 65, 66, 66, 65, 62, 84, 74, 62, 63, 62, 65, 84, 62, 63, 41, 42, 49, 85, 86, 87, 88, 86, 81, 88, 87, 86, 85, 84, 80, 85, 80, 79, 80, 84, 75, 79, 80, 78, 49, 64, 65, 64, 49, 43, 1, 88, 82, 80, 75, 78, 82, 88, 81, 75, 77, 78, 82, 81, 77, 81, 78, 77, 65, 64, 63, 75, 76, 77, 75, 84, 76, 76, 84, 83, 76, 83, 82, 83, 0, 1, 0, 83, 84, 63, 0, 84, 63, 64, 0, 1, 82, 83, 49, 42, 43, 64, 43, 0, 57, 4, 70, 45, 50, 46, 46, 47, 8, 46, 50, 47, 8, 47, 7, 50, 71, 47, 47, 71, 7, 7, 71, 6, 71, 50, 48, 48, 50, 40, 50, 68, 40, 71, 48, 6, 6, 48, 5, 5, 48, 70, 48, 40, 70, 70, 40, 57, 57, 40, 41, 10, 45, 9, 45, 46, 9, 9, 46, 8, 45, 68, 50, 44, 51, 68, 68, 39, 40, 68, 51, 39 ], - "vertices": [ 1, 33, 147.48, -145.48, 1, 1, 33, 89.4, -281.62, 1, 1, 33, -28.24, -285.93, 1, 1, 33, -14.58, -194.68, 1, 5, 9, 363.21, 87.73, 0.02179, 14, 238.39, -84.13, 0.20397, 17, 32.1, -140.85, 0.18915, 33, -61.96, -132.26, 0.41197, 48, 129.57, 6.39, 0.1731, 5, 9, 332.7, 63.71, 0.06905, 14, 199.57, -83.03, 0.29424, 17, 3.69, -114.37, 0.2194, 33, -85.43, -101.32, 0.30859, 48, 127.34, -26.64, 0.1087, 5, 9, 307.08, 43.5, 0.11018, 14, 166.95, -82.13, 0.37282, 17, -20.18, -92.14, 0.24572, 33, -105.18, -75.34, 0.21862, 48, 123.08, -64.79, 0.05264, 5, 9, 307.75, 5.7, 0.18146, 14, 143.25, -111.59, 0.56512, 17, -57.43, -98.57, 0.12044, 33, -142.98, -75.33, 0.10715, 48, 154.85, -83.49, 0.0258, 2, 9, 308.7, -30.55, 0.25, 14, 120.75, -140.04, 0.75, 2, 9, 213.94, -142.7, 0.75, 14, -23.83, -165.45, 0.25, 3, 9, 64.45, -187.34, 0.31139, 8, -158.45, 158.33, 0.10379, 2, 84.16, -190.98, 0.5848, 1, 2, -61.47, -178.84, 1, 1, 2, -166.91, -67.95, 1, 6, 9, -246.26, -74, 0.04136, 8, 170.4, 123.13, 0.2858, 13, 66.71, 104.77, 0.57052, 27, -53.08, 110.21, 0.10163, 40, -220.11, 35.3, 5.1E-4, 54, -331.4, -106.89, 1.5E-4, 6, 9, -297.45, -69.74, 0.01855, 8, 221.11, 131.31, 0.14592, 13, 115.07, 87.47, 0.47026, 27, -6.58, 88.39, 0.30085, 40, -168.92, 31, 0.06162, 54, -282.82, -90.19, 0.00276, 6, 9, -359.24, -85.1, 0.00915, 8, 277.38, 161.09, 0.07914, 13, 178.73, 86.41, 0.35008, 27, 56.68, 81.29, 0.38638, 40, -107.13, 46.31, 0.15555, 54, -232.44, -51.26, 0.01966, 6, 9, -376.16, -107.83, 0.0043, 8, 294.31, 176.47, 0.03904, 13, 203.26, 86.51, 0.25323, 27, 83.06, 77.02, 0.42283, 40, -79.56, 53.53, 0.23684, 54, -210.89, -28.3, 0.04374, 6, 9, -416.83, -99.41, 0.00211, 8, 329.83, 188.85, 0.0196, 13, 238.06, 85.41, 0.18217, 27, 115.65, 74.66, 0.41374, 40, -49.53, 60.58, 0.30031, 54, -185.49, -14.98, 0.08205, 6, 9, -449.42, -116.23, 0.00122, 8, 364.17, 200.07, 0.01106, 13, 275.48, 71.62, 0.13243, 27, 152.97, 53.58, 0.37336, 40, -5.82, 53.94, 0.34144, 54, -142.85, 0.11, 0.14047, 6, 9, -498.22, -88.19, 7.8E-4, 8, 411.52, 197.55, 0.00669, 13, 313.81, 53.61, 0.09623, 27, 188.04, 35.82, 0.32105, 40, 31.84, 49.3, 0.36432, 54, -106.46, 7.49, 0.21089, 6, 9, -524.31, -113.4, 5.8E-4, 8, 437.98, 213.03, 0.00423, 13, 345.74, 45.54, 0.06864, 27, 219.6, 19.28, 0.26387, 40, 68.31, 43.02, 0.36996, 54, -70.13, 18.19, 0.2927, 6, 9, -580.94, -76.79, 4.7E-4, 8, 494.56, 206.4, 0.00237, 13, 390.81, 21.3, 0.0452, 27, 261.62, -3.66, 0.20066, 40, 114.55, 37.83, 0.35931, 54, -26.15, 30.34, 0.39196, 6, 9, -621.23, -53.98, 4.4E-4, 8, 539.16, 193.96, 0.00115, 13, 423.87, -11.11, 0.02629, 27, 291.46, -39.06, 0.13478, 40, 154.83, 14.99, 0.33453, 54, 19.91, 25.67, 0.50278, 6, 9, -661.22, -31.34, 4.6E-4, 8, 583.41, 181.62, 5.6E-4, 13, 456.68, -43.27, 0.01512, 27, 321.06, -74.2, 0.08778, 40, 194.79, -7.66, 0.31014, 54, 65.62, 21.04, 0.58591, 6, 9, -698.76, 17.64, 4.7E-4, 8, 631.64, 143.1, 4.0E-4, 13, 480.34, -100.28, 0.01183, 27, 339.2, -133.2, 0.07247, 40, 232.3, -56.69, 0.30126, 54, 119.7, -8.69, 0.61353, 6, 9, -636.21, 0.4, 4.5E-4, 8, 566.79, 144.78, 5.5E-4, 13, 424.34, -67.52, 0.01513, 27, 286.57, -95.27, 0.08778, 40, 169.77, -39.4, 0.31045, 54, 55.51, -18.08, 0.5856, 6, 9, -596.68, -3.21, 4.2E-4, 8, 527.55, 138.78, 0.00111, 13, 387.08, -53.84, 0.02607, 27, 250.77, -78.11, 0.13421, 40, 130.24, -35.75, 0.33502, 54, 17.87, -30.67, 0.50314, 6, 9, -553.14, -7.2, 4.2E-4, 8, 484.33, 132.17, 0.00229, 13, 346.04, -38.78, 0.04477, 27, 211.34, -59.22, 0.19954, 40, 86.7, -31.72, 0.3598, 54, -23.59, -44.54, 0.39316, 6, 9, -516.96, -25.93, 4.7E-4, 8, 449.17, 125.97, 0.00408, 13, 311.45, -35.25, 0.06808, 27, 175.89, -56.83, 0.26228, 40, 51.53, -43.14, 0.37032, 54, -52.88, -67.87, 0.29473, 6, 9, -479.88, 14.24, 6.0E-4, 8, 418.38, 93.72, 0.00651, 13, 269.72, -40.64, 0.09608, 27, 135.19, -53.82, 0.32015, 40, 13.42, -53.11, 0.36453, 54, -82.03, -93.66, 0.21211, 6, 9, -451.64, 0.32, 8.3E-4, 8, 390.82, 86.58, 0.01046, 13, 241.19, -39.8, 0.13162, 27, 105.59, -52.93, 0.37317, 40, -16.25, -62.16, 0.34265, 54, -108.34, -111.24, 0.14123, 6, 9, -420.35, 31.66, 0.00137, 8, 364.8, 62.48, 0.01849, 13, 207.71, -42.14, 0.18078, 27, 73.33, -49.43, 0.41415, 40, -46.11, -70.49, 0.30264, 54, -129.51, -133.56, 0.08254, 6, 9, -399.11, 28.98, 0.00258, 8, 345.49, 47.53, 0.03705, 13, 182.34, -50.62, 0.25183, 27, 45.87, -56.62, 0.4234, 40, -71.57, -84.96, 0.24035, 54, -150.85, -153.35, 0.04477, 6, 9, -365.43, 66.79, 0.00485, 8, 319.95, 15.15, 0.07594, 13, 145.6, -61.95, 0.35325, 27, 9.61, -63.26, 0.38742, 40, -101.06, -105.58, 0.15807, 54, -165.65, -187.83, 0.02044, 6, 9, -312.31, 100.78, 0.00731, 8, 276.58, -30.61, 0.13928, 13, 85.52, -81.11, 0.48508, 27, -52.01, -76.62, 0.30338, 40, -154.2, -139.52, 0.06214, 54, -200.6, -240.31, 0.00279, 6, 9, -242.48, 124.41, 0.00974, 8, 214.5, -70.36, 0.27055, 13, 11.97, -85.98, 0.61489, 27, -125.69, -74.48, 0.10409, 40, -224.04, -163.1, 5.4E-4, 54, -255.01, -290.05, 1.5E-4, 6, 9, -166.71, 150.07, 0.02469, 8, 147.14, -113.5, 0.57033, 13, -67.84, -91.26, 0.38714, 27, -205.65, -72.16, 0.01755, 40, -299.83, -188.7, 2.0E-4, 54, -314.05, -344.03, 5.0E-5, 2, 9, -113.14, 135.84, 0.24192, 8, 91.72, -112.59, 0.75807, 2, 9, -42.12, 116.77, 0.14515, 8, 18.2, -111.17, 0.85484, 1, 9, 44.2, 107.1, 1, 2, 9, 140.09, 96.35, 0.22579, 14, 72.59, 65.41, 0.7742, 4, 9, 137.69, 169.35, 0.05644, 14, 117.5, 123, 0.24355, 17, 78.3, 94.48, 0.2125, 33, 23.7, 91.74, 0.4875, 2, 17, 171.15, 111.98, 0.25, 33, 118.17, 93.15, 0.75, 1, 33, 158.96, -25.58, 1, 1, 2, -40.63, -86.01, 1, 3, 9, 67.34, -86.66, 0.33215, 8, -137.02, 59.92, 0.08303, 2, 92.54, -90.61, 0.5848, 2, 9, 170.13, -66.29, 0.75, 14, -8.53, -78.72, 0.25, 2, 9, 231.74, -8.12, 0.4, 14, 76.03, -73.52, 0.6, 5, 9, 222.04, 70.41, 0.16894, 14, 118.9, -7, 0.5373, 17, -6.58, -3.99, 0.17075, 33, -76.73, 9.18, 0.08551, 48, 45.05, -108.02, 0.03748, 1, 33, 50.43, -46.56, 1, 1, 14, -9.88, 20.65, 1, 2, 9, -53.22, 20.53, 0.2, 8, 5.8, -15.09, 0.8, 6, 9, -180.71, 32.22, 0.0849, 8, 132.35, 4.24, 0.55723, 13, -23.98, 19.01, 0.34911, 27, -151.51, 33.44, 0.0085, 40, -285.75, -70.86, 1.8E-4, 54, -348.66, -230.51, 5.0E-5, 6, 9, -304.22, 7.95, 0.01243, 8, 246.39, 57.53, 0.13635, 13, 101.61, 10.65, 0.48532, 27, -27.28, 13.2, 0.30559, 40, -162.22, -46.69, 0.05823, 54, -245.36, -158.59, 0.00205, 6, 9, -418.56, -35.1, 0.00168, 8, 346.99, 126.85, 0.01839, 13, 223.17, 22.83, 0.18014, 27, 94.88, 13.77, 0.41602, 40, -47.85, -3.72, 0.30281, 54, -158.02, -73.16, 0.08093, 6, 9, -566.47, -40.57, 4.4E-4, 8, 489.24, 167.77, 0.00225, 13, 367.51, -9.96, 0.04446, 27, 235.45, -32.57, 0.20024, 40, 100.06, 1.62, 0.36103, 54, -24.81, -8.63, 0.39156, 6, 9, -648.5, -15.19, 4.5E-4, 8, 574.96, 162.88, 5.5E-4, 13, 440.24, -55.6, 0.01566, 27, 303.52, -84.91, 0.09149, 40, 182.07, -23.8, 0.3135, 54, 60.48, 1.14, 0.57832, 3, 14, 174.99, 22.22, 0.2, 17, 54.82, -19.14, 0.6, 33, -18.8, -16.2, 0.2, 6, 9, -242.34, 20.11, 0.02478, 8, 189.25, 30.83, 0.26443, 13, 38.68, 14.84, 0.61556, 27, -89.52, 23.34, 0.09454, 40, -224.1, -58.8, 5.1E-4, 54, -297.11, -194.62, 1.4E-4, 6, 9, -359.57, -12.88, 0.00674, 8, 295.08, 91.08, 0.07453, 13, 160.45, 16.54, 0.35139, 27, 31.85, 13.48, 0.39116, 40, -106.86, -25.89, 0.15674, 54, -203.08, -117.24, 0.01941, 6, 9, -488.69, -37.69, 6.7E-4, 8, 414.43, 146.25, 0.00642, 13, 291.61, 7.27, 0.09534, 27, 161.53, -8.2, 0.32068, 40, 22.27, -1.18, 0.36568, 54, -94.86, -42.56, 0.21117, 6, 9, -607.64, -27.83, 4.3E-4, 8, 532.26, 165.32, 0.00108, 13, 404.01, -32.87, 0.02584, 27, 269.61, -58.84, 0.13469, 40, 141.21, -11.13, 0.33582, 54, 17.98, -3.72, 0.50211, 1, 33, 26.4, -166.06, 1, 1, 33, 87.21, -106.12, 1, 1, 33, 108.19, -49.62, 1, 2, 33, 61.73, -82.13, 0.50021, 48, 4.42, 52.83, 0.49978, 2, 33, 22.84, -109.4, 0.50021, 48, 51.52, 46.73, 0.49978, 5, 9, 348.39, 119.13, 0.00694, 14, 247.12, -50.52, 0.065, 17, 60.86, -121.4, 0.06027, 33, -30.3, -118, 0.48738, 48, 96.58, 17.22, 0.38039, 1, 9, 26.73, 14.8, 1, 2, 9, -107.97, 25.67, 0.24192, 8, 60.17, -6.91, 0.75807, 5, 9, 235.53, 102.96, 0.07484, 14, 150.1, 9.35, 0.34943, 17, 27.64, -12.34, 0.40983, 33, -44.43, -4.87, 0.14928, 48, 34.03, -74.39, 0.0166, 5, 9, 227.15, 28.49, 0.29239, 14, 95.96, -42.46, 0.5708, 17, -47.23, -15.44, 0.07952, 33, -118.74, 4.84, 0.03982, 48, 84.85, -129.5, 0.01745, 2, 33, 5.19, -153.1, 0.87618, 48, 90.96, 71.21, 0.12381, 5, 9, 351.78, 108.85, 0.01127, 14, 243.13, -60.59, 0.10548, 17, 51.21, -126.33, 0.09782, 33, -40.65, -121.21, 0.46541, 48, 105.71, 17.33, 0.32, 1, 33, 23.69, -185.21, 1, 1, 33, 79.64, -175.94, 1, 1, 33, 93.96, -187.56, 1, 1, 33, 87.07, -206.55, 1, 1, 33, 64.2, -216.74, 1, 1, 33, 52.23, -203.68, 1, 1, 33, 59.24, -187.03, 1, 1, 33, 64.26, -223.8, 1, 1, 33, 89.44, -211.41, 1, 1, 33, 102.04, -186.95, 1, 1, 33, 83.1, -166.14, 1, 1, 33, 46.84, -186.41, 1, 1, 33, 50.32, -204.36, 1, 1, 33, 41.7, -206.59, 1, 1, 33, 61.87, -230.97, 1, 6, 9, -448.12, -58.75, 9.7E-4, 8, 374.97, 143.6, 0.01016, 13, 256.29, 17.42, 0.13074, 27, 127.43, 2.07, 0.37548, 40, -13.35, -3.05, 0.34387, 54, -128.14, -55.46, 0.13875, 6, 9, -519.55, -68.54, 5.1E-4, 8, 442.75, 168.18, 0.00402, 13, 327.21, 4.42, 0.06791, 27, 196.28, -19.32, 0.26429, 40, 58.71, -1.05, 0.3719, 54, -62.24, -26.21, 0.29134, 6, 9, -386.43, -41.35, 0.00321, 8, 318.32, 113.62, 0.03567, 13, 192.26, 20.14, 0.25008, 27, 64.19, 12.44, 0.42824, 40, -76.55, -13.67, 0.24036, 54, -182.56, -89.31, 0.0424 ], - "hull": 44 + "uvs": [ 0.89014, 0.11136, 1, 0.22194, 1, 0.42847, 0.88179, 0.38589, 0.874, 0.47986, 0.84783, 0.51728, 0.82504, 0.54984, 0.82403, 0.61606, 0.82305, 0.67972, 0.74042, 0.86709, 0.61596, 0.93097, 0.49649, 0.90968, 0.41186, 0.71379, 0.36955, 0.70086, 0.32823, 0.68824, 0.30082, 0.69962, 0.27515, 0.71028, 0.25301, 0.71948, 0.22568, 0.73082, 0.20832, 0.72362, 0.19092, 0.7164, 0.15952, 0.70337, 0.1301, 0.69116, 0.09227, 0.67546, 0.06029, 0.63165, 0.02855, 0.58817, 0, 0.49874, 0.05045, 0.53494, 0.08267, 0.54507, 0.11815, 0.55623, 0.14733, 0.54161, 0.17913, 0.52568, 0.20324, 0.5136, 0.22867, 0.50087, 0.24871, 0.47664, 0.27523, 0.44458, 0.32026, 0.39015, 0.37517, 0.35747, 0.43476, 0.32201, 0.4893, 0.35534, 0.56021, 0.39867, 0.61587, 0.40674, 0.67769, 0.4157, 0.69094, 0.31314, 0.69362, 0.14742, 0.79219, 0.08354, 0.51541, 0.74573, 0.62393, 0.75425, 0.70856, 0.7287, 0.76132, 0.63288, 0.7566, 0.49454, 0.80613, 0.27517, 0.65885, 0.59037, 0.53929, 0.54937, 0.42632, 0.52207, 0.3246, 0.55241, 0.22715, 0.618, 0.10574, 0.61341, 0.03969, 0.56109, 0.77916, 0.39461, 0.37556, 0.53721, 0.27743, 0.58416, 0.16958, 0.61582, 0.07259, 0.58715, 0.87545, 0.31683, 0.85488, 0.21417, 0.81012, 0.17403, 0.83214, 0.25662, 0.83823, 0.32214, 0.84622, 0.41719, 0.59954, 0.57003, 0.49074, 0.53763, 0.76917, 0.43888, 0.75912, 0.56845, 0.871, 0.3701, 0.85431, 0.43545, 0.89558, 0.32412, 0.90105, 0.22877, 0.91523, 0.20564, 0.93086, 0.219, 0.93446, 0.25858, 0.91956, 0.2776, 0.9061, 0.26423, 0.9415, 0.25929, 0.93589, 0.21545, 0.91669, 0.19192, 0.89297, 0.22201, 0.90245, 0.28513, 0.92006, 0.281, 0.92143, 0.29619, 0.94856, 0.2643, 0.19894, 0.61694, 0.13973, 0.61469, 0.25158, 0.60156, 0.88779, 0.26675 ], + "triangles": [ 13, 60, 12, 12, 71, 46, 46, 70, 47, 11, 12, 46, 47, 11, 46, 10, 11, 47, 13, 14, 55, 15, 93, 14, 58, 26, 27, 28, 58, 27, 63, 28, 29, 63, 58, 28, 25, 26, 58, 25, 58, 63, 57, 63, 29, 92, 29, 30, 57, 29, 92, 24, 25, 63, 24, 63, 57, 23, 24, 57, 92, 23, 57, 22, 23, 92, 62, 22, 92, 21, 22, 62, 20, 21, 91, 92, 30, 62, 91, 21, 62, 62, 30, 31, 91, 62, 31, 31, 32, 93, 93, 91, 31, 20, 91, 56, 56, 19, 20, 17, 19, 56, 18, 19, 17, 55, 34, 35, 33, 34, 55, 61, 33, 55, 61, 32, 33, 93, 32, 61, 56, 91, 93, 56, 93, 15, 16, 56, 15, 16, 17, 56, 36, 37, 54, 60, 35, 36, 54, 60, 36, 60, 55, 35, 61, 55, 14, 93, 61, 14, 60, 13, 55, 12, 60, 54, 39, 54, 37, 39, 37, 38, 71, 54, 39, 40, 71, 39, 53, 71, 40, 53, 40, 41, 12, 54, 71, 46, 71, 53, 66, 45, 0, 44, 45, 66, 1, 84, 85, 65, 66, 0, 0, 85, 65, 85, 86, 65, 85, 0, 1, 78, 85, 84, 79, 78, 84, 78, 86, 85, 77, 86, 78, 77, 78, 79, 67, 66, 65, 83, 80, 79, 84, 83, 79, 77, 79, 80, 84, 90, 83, 82, 77, 80, 1, 90, 84, 94, 65, 86, 94, 86, 77, 94, 77, 82, 67, 65, 94, 51, 44, 66, 51, 66, 67, 81, 82, 80, 83, 88, 81, 87, 94, 82, 87, 82, 81, 87, 81, 88, 88, 90, 89, 87, 88, 89, 80, 83, 81, 90, 88, 83, 43, 44, 51, 64, 67, 94, 64, 94, 87, 68, 67, 64, 51, 67, 68, 76, 64, 87, 76, 87, 89, 74, 68, 64, 74, 64, 76, 3, 74, 76, 59, 43, 51, 59, 51, 68, 69, 59, 68, 74, 69, 68, 69, 74, 3, 90, 1, 2, 89, 90, 2, 76, 89, 2, 3, 76, 2, 75, 69, 3, 4, 75, 3, 75, 72, 69, 5, 75, 4, 5, 72, 75, 72, 59, 69, 59, 42, 43, 72, 42, 59, 50, 42, 72, 50, 72, 5, 6, 50, 5, 73, 50, 6, 52, 70, 42, 50, 52, 42, 73, 52, 50, 7, 73, 6, 49, 73, 7, 52, 73, 49, 8, 49, 7, 48, 52, 49, 48, 49, 8, 47, 52, 48, 70, 53, 41, 70, 41, 42, 46, 53, 70, 47, 70, 52, 9, 48, 8, 47, 48, 9, 10, 47, 9 ], + "vertices": [ 1, 48, 147.48, -145.48, 1, 1, 48, 89.4, -281.62, 1, 1, 48, -28.24, -285.93, 1, 1, 48, -14.58, -194.68, 1, 5, 22, 363.21, 87.73, 0.02179, 43, 238.39, -84.13, 0.20397, 47, 32.09999, -140.85, 0.18915, 48, -61.96, -132.26, 0.41197, 52, 129.57, 6.39, 0.1731, 5, 22, 332.7, 63.71, 0.06905, 43, 199.57, -83.03, 0.29424, 47, 3.69, -114.37, 0.2194, 48, -85.43, -101.32, 0.30859, 52, 127.34, -26.64, 0.1087, 5, 22, 307.08, 43.5, 0.11018, 43, 166.95, -82.12999, 0.37282, 47, -20.18, -92.14, 0.24572, 48, -105.18, -75.33999, 0.21862, 52, 123.08, -64.79, 0.05264, 5, 22, 307.75, 5.7, 0.18146, 43, 143.25, -111.59, 0.56512, 47, -57.43, -98.57, 0.12044, 48, -142.98, -75.33, 0.10715, 52, 154.85, -83.49, 0.0258, 2, 22, 308.7, -30.55, 0.25, 43, 120.75, -140.04, 0.75, 2, 22, 213.94, -142.7, 0.75, 43, -23.83, -165.45, 0.25, 3, 22, 64.44999, -187.34, 0.31139, 17, -158.45, 158.33, 0.10379, 3, 84.16, -190.98, 0.5848, 1, 3, -61.47, -178.84, 1, 7, 22, -193.84, -78.37, 0.01006, 17, 118.47, 114.74, 0.07207, 18, 17.17, 122.49, 0.17087, 19, -100.71, 132.55, 0.06655, 20, -272.53, 39.71, 0.0127, 21, -381.15, -123.99, 0.00106, 3, -166.91, -67.94999, 0.66666, 7, 22, -246.26, -74, 0.00847, 17, 170.4, 123.13, 0.06072, 18, 66.71, 104.77, 0.19505, 19, -53.08, 110.21, 0.11161, 20, -220.11, 35.3, 0.03559, 21, -331.4, -106.89, 0.02705, 3, -217.69, -61.33, 0.56148, 7, 22, -297.45, -69.74, 0.007, 17, 221.11, 131.31, 0.05019, 18, 115.07, 87.47, 0.2135, 19, -6.58, 88.39, 0.15181, 20, -168.92, 31, 0.05913, 21, -282.82, -90.19, 0.05445, 3, -267.66, -55.14, 0.46388, 7, 22, -322.38, -89.71, 0.00572, 17, 245.53, 147.45, 0.04099, 18, 146.51, 86.08, 0.22288, 19, 26.66, 83.39, 0.18428, 20, -134.99, 41.34, 0.0837, 21, -257.52, -60.65, 0.08408, 3, -298.87, -61.99, 0.37832, 7, 22, -359.24, -85.1, 0.00461, 17, 277.38, 161.09, 0.03306, 18, 178.73, 86.41, 0.22347, 19, 56.68, 81.29, 0.20919, 20, -107.13, 46.31, 0.10923, 21, -232.44, -51.26, 0.11589, 3, -328.68, -69.24, 0.30452, 7, 22, -376.16, -107.83, 0.00361, 17, 294.31, 176.47, 0.02591, 18, 203.26, 86.51, 0.21876, 19, 83.06, 77.01999, 0.2295, 20, -79.56, 53.53, 0.13534, 21, -210.89, -28.3, 0.14902, 3, -354.01, -75.41, 0.23783, 7, 22, -416.83, -99.41, 0.00301, 17, 329.83, 188.85, 0.02165, 18, 238.06, 85.41, 0.19918, 19, 115.65, 74.66, 0.23165, 20, -49.53, 60.58, 0.16135, 21, -185.49, -14.98, 0.18638, 3, -385.33, -83.15, 0.19674, 7, 22, -428.02, -116.81, 0.0025, 17, 343.12, 196.14, 0.01806, 18, 255.33, 78.85, 0.17874, 19, 133.83, 63.18, 0.23028, 20, -27.04, 56.84, 0.18642, 21, -163.58, -5.26, 0.22335, 3, -406.45, -79.89, 0.16063, 7, 22, -449.42, -116.23, 0.00209, 17, 364.17, 200.07, 0.01519, 18, 275.48, 71.62, 0.15813, 19, 152.97, 53.58, 0.22594, 20, -5.82, 53.94, 0.21024, 21, -142.85, 0.11, 0.25891, 3, -427.72, -77.47, 0.12944, 7, 22, -498.22, -88.19, 0.00178, 17, 411.52, 197.55, 0.0131, 18, 313.81, 53.61, 0.13839, 19, 188.04, 35.82, 0.21975, 20, 31.84, 49.3, 0.23251, 21, -106.46, 7.49, 0.2917, 3, -465.96, -72.58999, 0.10272, 7, 22, -524.31, -113.4, 0.00157, 17, 437.98, 213.03, 0.01186, 18, 345.74, 45.54, 0.12065, 19, 219.6, 19.28, 0.2131, 20, 68.31, 43.02, 0.25281, 21, -70.12999, 18.19, 0.32013, 3, -502.09, -68.19, 0.07983, 7, 22, -580.94, -76.79, 0.00148, 17, 494.56, 206.4, 0.01161, 18, 390.81, 21.3, 0.10603, 19, 261.62, -3.66, 0.20745, 20, 114.55, 37.83, 0.27063, 21, -26.15, 30.34, 0.34248, 3, -548.33, -63.22, 0.06027, 7, 22, -621.23, -53.98, 0.00153, 17, 539.16, 193.96, 0.01255, 18, 423.87, -11.11, 0.09566, 19, 291.46, -39.06, 0.20413, 20, 154.83, 14.99, 0.28529, 21, 19.91, 25.67, 0.35721, 3, -589.02, -42.19, 0.0436, 7, 22, -661.22, -31.34, 0.00173, 17, 583.41, 181.62, 0.01498, 18, 456.68, -43.27, 0.09054, 19, 321.06, -74.19999, 0.20422, 20, 194.79, -7.66, 0.29602, 21, 65.62, 21.04, 0.36309, 3, -629.78, -21.51, 0.02938, 7, 22, -698.76, 17.64, 0.00212, 17, 631.64, 143.1, 0.01928, 18, 480.34, -100.28, 0.09165, 19, 339.2, -133.2, 0.20843, 20, 232.3, -56.69, 0.30195, 21, 119.7, -8.68999, 0.35936, 3, -669.35, 25.71, 0.01717, 7, 22, -636.21, 0.4, 0.00186, 17, 566.79, 144.78, 0.02216, 18, 424.34, -67.51999, 0.09478, 19, 286.57, -95.27, 0.21971, 20, 169.77, -39.4, 0.30022, 21, 55.51, -18.08, 0.34915, 3, -606.08, 11.21, 0.01208, 7, 22, -596.68, -3.21, 0.00182, 17, 527.55, 138.78, 0.02791, 18, 387.08, -53.84, 0.10537, 19, 250.77, -78.11, 0.23429, 20, 130.24, -35.75, 0.29251, 21, 17.87, -30.67, 0.32978, 3, -566.25, 9.38, 0.00828, 7, 22, -553.14, -7.2, 0.00202, 17, 484.33, 132.17, 0.03718, 18, 346.04, -38.78, 0.12359, 19, 211.34, -59.22, 0.25059, 20, 86.7, -31.72, 0.27864, 21, -23.59, -44.54, 0.3024, 3, -522.33, 7.03, 0.00553, 7, 22, -516.96, -25.93, 0.00246, 17, 449.17, 125.97, 0.05073, 18, 311.45, -35.25, 0.14934, 19, 175.89, -56.83, 0.26648, 20, 51.53, -43.14, 0.2587, 21, -52.88, -67.87, 0.26867, 3, -487.23, 18.31, 0.00359, 7, 22, -479.88, 14.24, 0.00317, 17, 418.38, 93.72, 0.06938, 18, 269.72, -40.64, 0.18219, 19, 135.19, -53.82, 0.27948, 20, 13.42, -53.11, 0.23298, 21, -82.03, -93.66, 0.2305, 3, -449.1, 30.06, 0.00226, 7, 22, -451.64, 0.32, 0.00417, 17, 390.82, 86.58, 0.09392, 18, 241.19, -39.8, 0.22144, 19, 105.59, -52.93, 0.28715, 20, -16.25, -62.16, 0.20207, 21, -108.34, -111.24, 0.18983, 3, -419.88, 38.84, 0.00138, 7, 22, -420.35, 31.66, 0.00546, 17, 364.8, 62.48, 0.12486, 18, 207.71, -42.14, 0.26611, 19, 73.33, -49.43, 0.28757, 20, -46.11, -70.49, 0.16677, 21, -129.51, -133.56, 0.14836, 3, -389.13, 47.88, 8.1E-4, 7, 22, -399.11, 28.98, 0.00747, 17, 345.49, 47.53, 0.17173, 18, 182.34, -50.62, 0.31858, 19, 45.87, -56.62, 0.26575, 20, -71.57, -84.96, 0.1256, 21, -150.85, -153.35, 0.11024, 3, -365.08, 62.86, 5.8E-4, 7, 22, -365.43, 66.79, 0.00956, 17, 319.95, 15.15, 0.2203, 18, 145.6, -61.95, 0.37151, 19, 9.60999, -63.26, 0.24136, 20, -101.06, -105.58, 0.08415, 21, -165.65, -187.83, 0.07272, 3, -333.3, 82.65, 3.7E-4, 7, 22, -312.31, 100.78, 0.01175, 17, 276.58, -30.61, 0.27125, 18, 85.52, -81.11, 0.42509, 19, -52.01, -76.62, 0.21336, 20, -154.2, -139.52, 0.04227, 21, -200.6, -240.31, 0.03607, 3, -278.65, 115.6, 1.7E-4, 6, 22, -242.48, 124.41, 0.01402, 17, 214.5, -70.36, 0.32389, 18, 11.97, -85.98, 0.47912, 19, -125.69, -74.48, 0.18281, 20, -224.04, -163.1, 1.1E-4, 21, -255.01, -290.05, 3.0E-5, 6, 22, -166.71, 150.07, 0.02469, 17, 147.14, -113.5, 0.57033, 18, -67.83999, -91.26, 0.38714, 19, -205.65, -72.16, 0.01755, 20, -299.83, -188.7, 2.0E-4, 21, -314.05, -344.03, 5.0E-5, 2, 22, -113.14, 135.84, 0.24192, 17, 91.72, -112.59, 0.75807, 2, 22, -42.12, 116.77, 0.14515, 17, 18.2, -111.17, 0.85484, 1, 22, 44.2, 107.1, 1, 2, 22, 140.09, 96.35, 0.22579, 43, 72.58999, 65.41, 0.7742, 4, 22, 137.69, 169.35, 0.05644, 43, 117.5, 123, 0.24355, 47, 78.3, 94.48, 0.2125, 48, 23.7, 91.74, 0.4875, 2, 47, 171.15, 111.98, 0.25, 48, 118.17, 93.15, 0.75, 1, 48, 158.96, -25.58, 1, 1, 3, -40.63, -86.01, 1, 3, 22, 67.33999, -86.66, 0.33215, 17, -137.02, 59.92, 0.08303, 3, 92.54, -90.61, 0.5848, 2, 22, 170.13, -66.29, 0.75, 43, -8.53, -78.72, 0.25, 2, 22, 231.74, -8.12, 0.4, 43, 76.03, -73.51999, 0.6, 5, 22, 222.04, 70.41, 0.16894, 43, 118.9, -7, 0.5373, 47, -6.58, -3.99, 0.17075, 48, -76.73, 9.18, 0.08551, 52, 45.05, -108.02, 0.03748, 1, 48, 50.43, -46.56, 1, 1, 43, -9.88, 20.65, 1, 2, 22, -53.22, 20.53, 0.2, 17, 5.8, -15.09, 0.8, 6, 22, -180.71, 32.22, 0.0849, 17, 132.35, 4.23999, 0.55723, 18, -23.98, 19.01, 0.34911, 19, -151.51, 33.43999, 0.0085, 20, -285.75, -70.86, 1.8E-4, 21, -348.66, -230.51, 5.0E-5, 7, 22, -304.22, 7.95, 0.0403, 17, 246.39, 57.53, 0.26453, 18, 101.61, 10.65, 0.41136, 19, -27.28, 13.2, 0.19982, 20, -162.22, -46.69, 0.04444, 21, -245.36, -158.59, 0.03938, 3, -272.64, 22.61, 1.4E-4, 7, 22, -418.56, -35.09999, 0.01926, 17, 346.99, 126.85, 0.12662, 18, 223.17, 22.83, 0.27476, 19, 94.88, 13.77, 0.24466, 20, -47.85, -3.72, 0.1726, 21, -158.02, -73.16, 0.16124, 3, -387.18, -18.91, 8.0E-4, 7, 22, -566.47, -40.57, 0.00611, 17, 489.24, 167.77, 0.04146, 18, 367.51, -9.96, 0.13446, 19, 235.45, -32.57, 0.21638, 20, 100.06, 1.62, 0.28346, 21, -24.81, -8.63, 0.31257, 3, -534.79, -26.69, 0.00552, 7, 22, -648.5, -15.19, 0.00311, 17, 574.96, 162.88, 0.02391, 18, 440.24, -55.6, 0.09894, 19, 303.52, -84.91, 0.20698, 20, 182.07, -23.8, 0.30202, 21, 60.48, 1.14, 0.35292, 3, -617.72, -4.84, 0.01208, 3, 43, 174.99, 22.22, 0.2, 47, 54.82, -19.14, 0.6, 48, -18.79999, -16.2, 0.2, 6, 22, -242.34, 20.11, 0.04821, 17, 189.25, 30.83, 0.31645, 18, 38.68, 14.84, 0.45752, 19, -89.52, 23.34, 0.17767, 20, -224.1, -58.8, 1.0E-4, 21, -297.11, -194.62, 3.0E-5, 7, 22, -359.57, -12.88, 0.03247, 17, 295.08, 91.08, 0.21317, 18, 160.45, 16.54, 0.3652, 19, 31.85, 13.48, 0.22126, 20, -106.86, -25.89, 0.08869, 21, -203.08, -117.24, 0.07889, 3, -328.24, 2.88, 2.8E-4, 7, 22, -488.69, -37.68999, 0.01113, 17, 414.43, 146.25, 0.07357, 18, 291.61, 7.27, 0.19521, 19, 161.53, -8.2, 0.2345, 20, 22.27, -1.17999, 0.23931, 21, -94.86, -42.56, 0.24398, 3, -457.15, -22.02, 0.00224, 7, 22, -607.64, -27.83, 0.00441, 17, 532.26, 165.32, 0.03117, 18, 404.01, -32.87, 0.11328, 19, 269.61, -58.84, 0.20984, 20, 141.21, -11.13, 0.29595, 21, 17.98, -3.72, 0.33702, 3, -576.34, -15.62, 0.00828, 1, 48, 26.4, -166.06, 1, 1, 48, 87.21, -106.12, 1, 1, 48, 108.19, -49.62, 1, 2, 48, 61.73, -82.12999, 0.50021, 52, 4.42, 52.83, 0.49978, 2, 48, 22.84, -109.4, 0.50021, 52, 51.52, 46.73, 0.49978, 5, 22, 348.39, 119.13, 0.00694, 43, 247.12, -50.52, 0.065, 47, 60.86, -121.4, 0.06027, 48, -30.3, -118, 0.48738, 52, 96.58, 17.21999, 0.38039, 1, 22, 26.73, 14.8, 1, 2, 22, -107.97, 25.67, 0.24192, 17, 60.17, -6.91, 0.75807, 5, 22, 235.53, 102.96, 0.07484, 43, 150.1, 9.35, 0.34943, 47, 27.64, -12.34, 0.40983, 48, -44.43, -4.87, 0.14928, 52, 34.03, -74.39, 0.0166, 5, 22, 227.15, 28.49, 0.29238, 43, 95.96, -42.46, 0.5708, 47, -47.23, -15.44, 0.07952, 48, -118.74, 4.84, 0.03982, 52, 84.85, -129.5, 0.01744, 2, 48, 5.19, -153.1, 0.87618, 52, 90.96, 71.21, 0.12381, 5, 22, 351.78, 108.85, 0.01127, 43, 243.13, -60.59, 0.10548, 47, 51.21, -126.33, 0.09782, 48, -40.65, -121.21, 0.46541, 52, 105.71, 17.33, 0.32, 1, 48, 23.69, -185.21, 1, 1, 48, 79.64, -175.94, 1, 1, 48, 93.96, -187.56, 1, 1, 48, 87.07, -206.55, 1, 1, 48, 64.19999, -216.74, 1, 1, 48, 52.23, -203.68, 1, 1, 48, 59.24, -187.03, 1, 1, 48, 64.26, -223.8, 1, 1, 48, 89.44, -211.41, 1, 1, 48, 102.04, -186.95, 1, 1, 48, 83.1, -166.14, 1, 1, 48, 46.84, -186.41, 1, 1, 48, 50.32, -204.36, 1, 1, 48, 41.7, -206.59, 1, 1, 48, 61.87, -230.97, 1, 7, 22, -448.12, -58.75, 0.01475, 17, 374.97, 143.6, 0.09709, 18, 256.29, 17.42, 0.23314, 19, 127.43, 2.07, 0.24171, 20, -13.35, -3.05, 0.20842, 21, -128.14, -55.46, 0.20349, 3, -421.47, -20.31, 0.00137, 7, 22, -519.55, -68.54, 0.0083, 17, 442.75, 168.18, 0.05534, 18, 327.21, 4.42, 0.16201, 19, 196.28, -19.32, 0.22526, 20, 58.71, -1.04999, 0.2645, 21, -62.24, -26.21, 0.28097, 3, -493.48, -23.91, 0.00358, 7, 22, -386.43, -41.34999, 0.02472, 17, 318.32, 113.62, 0.16236, 18, 192.26, 20.14, 0.31904, 19, 64.19, 12.44, 0.24198, 20, -76.55, -13.67, 0.13287, 21, -182.56, -89.31, 0.11857, 3, -358.52, -8.29, 4.3E-4, 2, 48, 56.98, -162.99, 0.89259, 52, 57.54, 112, 0.1074 ], + "hull": 46, + "edges": [ 22, 20, 20, 18, 18, 16, 6, 4, 4, 2, 90, 88, 54, 52, 52, 50, 24, 22, 88, 86, 86, 84, 8, 6, 24, 26, 26, 28, 72, 74, 74, 76, 70, 72, 46, 48, 48, 50, 54, 56, 56, 58, 80, 82, 82, 84, 76, 78, 78, 80, 8, 10, 10, 12, 12, 14, 14, 16, 0, 90, 0, 2, 62, 64, 64, 66, 40, 42, 58, 60, 60, 62, 42, 44, 44, 46, 66, 68, 68, 70, 32, 34, 34, 36, 52, 116, 116, 126, 126, 114, 114, 184, 184, 124, 124, 182, 182, 112, 112, 186, 186, 122, 122, 110, 110, 120, 120, 108, 108, 142, 142, 106, 106, 140, 140, 104, 92, 94, 94, 96, 96, 98, 98, 146, 146, 100, 100, 144, 144, 118, 118, 102, 8, 150, 150, 138, 138, 136, 136, 134, 134, 132, 156, 154, 154, 164, 164, 162, 162, 160, 160, 158, 158, 156, 180, 178, 178, 174, 174, 188, 188, 172, 170, 168, 28, 30, 30, 32, 36, 38, 38, 40 ], + "width": 1219, + "height": 570 } }, "raptor_front_arm": { @@ -276,26 +381,35 @@ "type": "skinnedmesh", "uvs": [ 0.39562, 0.1396, 0.3877, 0.30212, 0.3123, 0.41784, 0.27287, 0.47835, 0.33388, 0.4507, 0.54879, 0.35328, 0.64092, 0.31152, 0.73024, 0.36529, 1, 0.5277, 1, 0.86606, 0.93242, 1, 0.86176, 0.80967, 0.75576, 0.99765, 0.71748, 1, 0.70276, 0.77442, 0.62031, 0.73448, 0.58792, 0.64519, 0.53561, 0.6582, 0.13448, 0.75798, 0, 0.69218, 0.01846, 0.56357, 0.05498, 0.30917, 0, 0.27863, 0, 0.12423, 0, 0, 0.19596, 0, 0.40242, 0, 0.24536, 0.1924, 0.21678, 0.0811 ], "triangles": [ 0, 28, 26, 23, 25, 28, 28, 25, 26, 23, 24, 25, 6, 7, 16, 6, 16, 5, 15, 16, 7, 7, 14, 15, 8, 14, 7, 11, 14, 8, 11, 8, 9, 12, 14, 11, 13, 14, 12, 10, 11, 9, 17, 4, 5, 16, 17, 5, 18, 19, 3, 18, 3, 4, 18, 4, 17, 27, 28, 0, 27, 22, 23, 27, 23, 28, 1, 27, 0, 21, 22, 27, 21, 27, 1, 2, 21, 1, 2, 20, 21, 3, 20, 2, 19, 20, 3 ], - "vertices": [ 2, 15, 3.06, 31.88, 0.51075, 14, 66.56, -109.48, 0.48924, 1, 15, 35.87, 35.62, 1, 2, 15, 60.94, 27.12, 0.8464, 29, 46.49, 31.12, 0.15359, 3, 15, 74.05, 22.67, 0.34375, 29, 36.5, 21.53, 0.64062, 45, -45.25, -29.96, 0.01562, 3, 15, 67, 31.58, 0.10937, 29, 47.66, 23.68, 0.78125, 45, -40.93, -19.44, 0.10937, 3, 15, 42.17, 62.99, 0.01562, 29, 86.98, 31.24, 0.64062, 45, -25.75, 17.61, 0.34375, 2, 29, 103.83, 34.49, 0.34375, 45, -19.24, 33.49, 0.65625, 2, 29, 114.04, 19.51, 0.10937, 45, -1.11, 33.84, 0.89062, 2, 29, 144.85, -25.73, 0.02083, 45, 53.62, 34.88, 0.97916, 1, 45, 96.03, -19.16, 1, 1, 45, 104.2, -47.31, 1, 1, 45, 71.34, -23.98, 1, 1, 45, 81.39, -64.61, 1, 1, 45, 76.8, -68.81, 1, 2, 29, 83.18, -57.72, 0.02083, 45, 46.65, -34.25, 0.97916, 2, 29, 73.13, -45.76, 0.10937, 45, 31.14, -36.12, 0.89062, 2, 29, 73.98, -26.9, 0.34375, 45, 15.82, -25.09, 0.65625, 3, 15, 103.67, 70.28, 0.01562, 29, 65.1, -26.69, 0.64062, 45, 10.78, -32.41, 0.34375, 3, 15, 133.56, 9.13, 0.10937, 29, -2.94, -25.03, 0.78125, 45, -27.84, -88.47, 0.10937, 3, 15, 123.67, -14.42, 0.34375, 29, -19.29, -5.39, 0.64062, 45, -53.23, -91.41, 0.01562, 2, 15, 97.41, -15.43, 0.8464, 29, -8.08, 18.37, 0.15359, 1, 15, 45.46, -17.43, 1, 2, 15, 40.69, -27.17, 0.45035, 14, -1.69, -93.8, 0.54964, 2, 15, -2.74, -29.63, 0.44352, 14, 18.99, -72.93, 0.55647, 1, 14, 32.11, -48.45, 1, 1, 14, 57.56, -67.43, 1, 1, 14, 84.38, -87.42, 1, 2, 15, 16.44, 5.21, 0.7182, 14, 46.31, -101.86, 0.28179, 2, 15, -4.51, 5.32, 0.48851, 14, 52.82, -81.94, 0.51148 ], - "hull": 27 + "vertices": [ 2, 63, 3.06, 31.88, 0.51075, 43, 66.56, -109.48, 0.48924, 1, 63, 35.87, 35.62, 1, 2, 63, 60.94, 27.12, 0.8464, 64, 46.49, 31.12, 0.15358, 3, 63, 74.05, 22.67, 0.34375, 64, 36.5, 21.53, 0.64062, 65, -45.25, -29.96, 0.01562, 3, 63, 67, 31.58, 0.10937, 64, 47.66, 23.68, 0.78125, 65, -40.93, -19.44, 0.10937, 3, 63, 42.17, 62.99, 0.01562, 64, 86.98, 31.24, 0.64062, 65, -25.75, 17.61, 0.34375, 2, 64, 103.83, 34.49, 0.34375, 65, -19.24, 33.49, 0.65625, 2, 64, 114.04, 19.51, 0.10937, 65, -1.11, 33.84, 0.89062, 2, 64, 144.85, -25.73, 0.02083, 65, 53.62, 34.88, 0.97916, 1, 65, 96.03, -19.16, 1, 1, 65, 104.2, -47.31, 1, 1, 65, 71.33999, -23.98, 1, 1, 65, 81.39, -64.61, 1, 1, 65, 76.8, -68.81, 1, 2, 64, 83.18, -57.72, 0.02083, 65, 46.65, -34.25, 0.97916, 2, 64, 73.12999, -45.76, 0.10937, 65, 31.14, -36.12, 0.89062, 2, 64, 73.98, -26.9, 0.34375, 65, 15.82, -25.09, 0.65625, 3, 63, 103.67, 70.28, 0.01562, 64, 65.1, -26.69, 0.64062, 65, 10.78, -32.41, 0.34375, 3, 63, 133.56, 9.13, 0.10937, 64, -2.94, -25.03, 0.78125, 65, -27.84, -88.47, 0.10937, 3, 63, 123.67, -14.42, 0.34375, 64, -19.29, -5.39, 0.64062, 65, -53.23, -91.41, 0.01562, 2, 63, 97.41, -15.43, 0.8464, 64, -8.08, 18.37, 0.15358, 1, 63, 45.46, -17.43, 1, 2, 63, 40.68999, -27.17, 0.45035, 43, -1.69, -93.8, 0.54964, 2, 63, -2.74, -29.63, 0.44352, 43, 18.99, -72.93, 0.55646, 1, 43, 32.11, -48.45, 1, 1, 43, 57.56, -67.43, 1, 1, 43, 84.38, -87.42, 1, 2, 63, 16.44, 5.21, 0.7182, 43, 46.31, -101.86, 0.28178, 2, 63, -4.51, 5.32, 0.48851, 43, 52.82, -81.94, 0.51147 ], + "hull": 27, + "edges": [ 38, 36, 32, 30, 30, 28, 28, 26, 24, 26, 24, 22, 22, 20, 20, 18, 18, 16, 44, 42, 38, 6, 38, 40, 40, 42, 6, 4, 4, 2, 40, 4, 8, 6, 36, 8, 32, 12, 42, 2, 52, 0, 0, 2, 16, 14, 14, 12, 30, 14, 36, 34, 34, 32, 12, 10, 10, 8, 34, 10, 48, 50, 50, 52, 44, 46, 46, 48, 50, 56, 56, 54 ], + "width": 162, + "height": 203 } }, "raptor_front_leg": { "raptor_front_leg": { "type": "skinnedmesh", "uvs": [ 0.55116, 0.17817, 0.6279, 0.36027, 0.6671, 0.4533, 0.64879, 0.51527, 0.53553, 0.56893, 0.32335, 0.66946, 0.28674, 0.72086, 0.32538, 0.804, 0.36258, 0.80144, 0.42056, 0.79744, 0.61015, 0.78435, 0.84813, 0.84028, 1, 0.93854, 0.62439, 0.91738, 0.72812, 1, 0.58574, 1, 0.36707, 0.96667, 0.26306, 0.95082, 0.16266, 0.93552, 0.03859, 0.72237, 0, 0.66946, 0.0374, 0.62999, 0.1647, 0.49562, 0.23731, 0.4568, 0.27019, 0.43923, 0.28063, 0.43364, 0.223, 0.4057, 0.12565, 0.35851, 0, 0.29759, 0, 0.1524, 0, 0, 0.32132, 0, 0.32222, 0.22778, 0.4493, 0.38031, 0.47664, 0.44361, 0.4615, 0.47375, 0.35106, 0.53247, 0.20091, 0.65256, 0.18527, 0.72148, 0.25222, 0.86314, 0.30941, 0.88124, 0.55694, 0.89613, 0.55857, 0.89207, 0.47493, 0.85339, 0.6059, 0.91526, 0.39705, 0.89129, 0.13229, 0.09352, 0.36997, 0.45345, 0.37163, 0.43827, 0.32515, 0.39424, 0.23759, 0.34425, 0.34065, 0.47414 ], - "triangles": [ 46, 30, 31, 43, 9, 10, 42, 43, 10, 41, 43, 42, 13, 44, 42, 10, 13, 42, 11, 13, 10, 13, 11, 12, 45, 8, 9, 45, 9, 43, 40, 8, 45, 41, 42, 44, 45, 43, 41, 45, 41, 44, 16, 40, 45, 17, 40, 16, 15, 45, 44, 16, 45, 15, 14, 15, 44, 13, 14, 44, 19, 21, 38, 20, 21, 19, 39, 38, 6, 39, 6, 7, 40, 39, 7, 40, 7, 8, 18, 19, 38, 18, 38, 39, 17, 39, 40, 18, 39, 17, 47, 25, 48, 24, 25, 47, 35, 48, 34, 47, 48, 35, 51, 24, 47, 23, 24, 51, 3, 34, 2, 35, 34, 3, 36, 51, 47, 23, 51, 36, 22, 23, 36, 36, 47, 35, 4, 35, 3, 36, 35, 4, 37, 22, 36, 21, 22, 37, 5, 37, 36, 5, 36, 4, 6, 37, 5, 38, 21, 37, 38, 37, 6, 29, 30, 46, 32, 31, 0, 46, 31, 32, 28, 29, 46, 28, 46, 32, 32, 27, 28, 50, 27, 32, 33, 32, 0, 33, 0, 1, 49, 50, 32, 33, 49, 32, 26, 27, 50, 26, 50, 49, 25, 26, 49, 48, 49, 33, 25, 49, 48, 34, 33, 1, 48, 33, 34, 34, 1, 2 ], - "vertices": [ 3, 4, 128.03, 88.47, 0.83908, 10, -70.2, -134.13, 0.01331, 2, 158.83, -71.91, 0.1476, 2, 4, 219.55, 53.15, 0.77988, 10, -48.04, -38.58, 0.22011, 3, 4, 266.3, 35.1, 0.53531, 10, -36.73, 10.22, 0.46443, 30, 127.25, 245.46, 2.4E-4, 4, 4, 286.89, 9.79, 0.35076, 10, -14.56, 34.14, 0.64667, 30, 125.69, 212.88, 0.0023, 44, 101.39, 199.13, 2.5E-4, 4, 4, 281.54, -41.24, 0.09169, 10, 36.71, 36, 0.90196, 30, 87.64, 178.44, 0.00513, 44, 58.29, 171.29, 0.00119, 5, 4, 271.53, -136.86, 0.05608, 10, 132.77, 39.48, 0.69232, 16, 34.99, 78.76, 0.22087, 30, 16.38, 113.93, 0.0224, 44, -22.45, 119.13, 0.0083, 5, 4, 283.51, -164.25, 0.01987, 10, 158.21, 55.17, 0.50334, 16, 52.65, 54.63, 0.3617, 30, 7.01, 85.54, 0.08322, 44, -36.28, 92.63, 0.03184, 6, 4, 326.15, -179.3, 0.00798, 10, 167.14, 99.49, 0.21327, 16, 97.55, 49.25, 0.35075, 30, 28.72, 45.87, 0.14107, 44, -21.26, 49.99, 0.22311, 60, -72.29, 25.96, 0.0638, 6, 4, 333.96, -167.35, 0.00242, 10, 154.22, 105.55, 0.07519, 16, 102.57, 62.6, 0.22995, 30, 42.51, 49.55, 0.2831, 44, -7.06, 51.39, 0.2694, 60, -58.17, 28.03, 0.13992, 6, 4, 344.19, -149.68, 4.9E-4, 10, 134.24, 114.44, 0.0176, 16, 109.72, 83.39, 0.11397, 30, 64.09, 55.23, 0.07976, 44, 15.12, 53.51, 0.36292, 60, -36.09, 31.19, 0.42523, 1, 60, 35.8, 41.81, 1, 1, 60, 128.11, 17.93, 1, 1, 60, 188.72, -29.42, 1, 1, 60, 44.86, -26.17, 1, 1, 44, 133.17, -49.83, 1, 1, 44, 78.78, -50.15, 1, 5, 4, 399.32, -220.02, 2.2E-4, 10, 195.56, 179.43, 0.01703, 16, 179.46, 27.52, 0.2372, 30, 58.34, -33.93, 0.2023, 44, -4.91, -33.55, 0.54324, 5, 4, 370.41, -244.91, 3.2E-4, 10, 225.9, 152.49, 0.02513, 16, 155.04, -5.13, 0.35003, 30, 17.88, -32.5, 0.29852, 44, -44.62, -25.61, 0.32598, 5, 4, 340.37, -270.04, 0.00251, 10, 254.98, 126.27, 0.10129, 16, 131.21, -36.2, 0.54075, 30, -21.24, -31.17, 0.2082, 44, -83.02, -17.97, 0.14723, 5, 4, 225.1, -238.94, 0.01529, 10, 240.33, 7.81, 0.24036, 16, 11.94, -30.98, 0.57881, 30, -86.31, 68.9, 0.12023, 44, -131.06, 91.29, 0.04528, 5, 4, 194.64, -233.55, 0.04819, 10, 239.26, -23.1, 0.40427, 16, -18.96, -32.37, 0.48451, 30, -105.4, 93.25, 0.04604, 44, -145.97, 118.4, 0.01697, 5, 4, 187.65, -209.73, 0.09565, 10, 216.66, -33.35, 0.57617, 16, -30.97, -10.65, 0.30651, 30, -94.71, 115.65, 0.01788, 44, -131.8, 138.78, 0.00376, 4, 4, 163.85, -128.67, 0.19533, 10, 139.75, -68.26, 0.8011, 30, -58.32, 191.88, 0.00327, 44, -83.58, 208.13, 2.9E-4, 4, 4, 165.74, -94.49, 0.31921, 10, 105.59, -71.26, 0.6795, 30, -5.04, 220.72, 0.00117, 44, -56.32, 275.96, 1.0E-4, 4, 4, 166.39, -79.07, 0.46205, 10, 90.23, -72.76, 0.53752, 30, 5.55, 230.48, 3.9E-4, 44, -40.61, 286.16, 2.0E-5, 3, 4, 166.49, -74.17, 0.53779, 10, 85.42, -73.28, 0.46208, 30, -19.99, 230.7, 1.2E-4, 2, 4, 141.54, -82.46, 0.73138, 10, 97.13, -96.82, 0.26861, 3, 4, 99.76, -97.08, 0.81379, 10, 117.34, -136.23, 0.13997, 2, -2.56, -164.19, 0.04623, 3, 4, 45.01, -114.56, 0.8186, 10, 142.41, -187.89, 0.02098, 2, -51.09, -135.29, 0.1604, 3, 4, -16.2, -74.76, 0.62389, 10, 113.82, -253.08, 0.00952, 2, -42.95, -58.38, 0.36658, 2, 4, -74.73, -19.33, 0.31468, 2, -52.66, 17.55, 0.68531, 2, 4, 1.67, 76.75, 0.25576, 2, 70.07, 18.78, 0.74423, 1, 4, 93.54, 4.13, 1, 2, 4, 185.14, -6.66, 0.75461, 10, 15.98, -64.27, 0.24538, 2, 4, 217.11, -18.75, 0.50845, 10, 23.47, -30.93, 0.49154, 3, 4, 225.63, -32.92, 0.32512, 10, 36.3, -20.5, 0.6744, 30, 51.57, 221.95, 4.7E-4, 4, 4, 223, -84.73, 0.20061, 10, 87.96, -15.86, 0.79287, 30, 15.03, 185.13, 0.00581, 44, -12.28, 189.61, 6.9E-4, 5, 4, 235.61, -168.06, 0.07777, 10, 168.69, 8.29, 0.54931, 16, 6.74, 40.47, 0.33413, 30, -31.18, 114.66, 0.0321, 44, -69.27, 127.55, 0.00667, 5, 4, 259.63, -194.79, 0.01921, 10, 191.79, 35.8, 0.30498, 16, 36, 19.62, 0.53642, 30, -31.14, 78.74, 0.09568, 44, -75.03, 92.09, 0.04369, 5, 4, 332.55, -220.1, 0.00292, 10, 206.64, 111.53, 0.10776, 16, 112.69, 10.82, 0.51915, 30, 6.25, 11.23, 0.23449, 44, -49.03, 19.43, 0.13566, 4, 10, 192.51, 130.62, 0.03213, 16, 130.6, 26.41, 0.33941, 30, 29.35, 5.71, 0.27333, 44, -27.12, 10.25, 0.35511, 1, 44, 67.46, 3.16, 1, 1, 60, 19.07, -14.51, 1, 6, 4, 381.55, -150.4, 3.0E-4, 10, 130.71, 150.34, 0.00811, 16, 145.36, 89.53, 0.04102, 30, 89.29, 30.41, 0.02558, 44, 36, 24.95, 0.37636, 60, -13.89, 3.64, 0.54861, 1, 44, 86.23, -6.55, 1, 4, 10, 164.9, 153.55, 0.02263, 16, 151.18, 56, 0.23908, 30, 65.44, 5.55, 0.19254, 44, 8.45, 4.27, 0.54574, 2, 4, -9.28, -17.5, 0.59606, 2, 7.72, -30.85, 0.40393, 3, 4, 195.9, -53.81, 0.42356, 10, 61.11, -47.06, 0.57613, 30, 39.7, 225.21, 2.9E-4, 3, 4, 190.1, -48.45, 0.53227, 10, 56.61, -53.56, 0.46765, 30, 39.83, 233.12, 6.0E-5, 2, 4, 161.26, -48.26, 0.79873, 10, 60.44, -82.13, 0.20126, 3, 4, 120.37, -58.54, 0.8485, 10, 76.31, -121.18, 0.14441, 2, 41.04, -161.4, 0.00707, 4, 4, 197.37, -69.23, 0.33487, 10, 76.17, -43.46, 0.66324, 30, 30.34, 213.88, 0.0017, 44, -9.09, 262.42, 1.8E-4 ], - "hull": 32 + "triangles": [ 46, 30, 31, 15, 44, 13, 13, 11, 12, 11, 13, 10, 10, 13, 42, 13, 44, 42, 41, 43, 42, 42, 43, 10, 43, 9, 10, 41, 42, 44, 45, 41, 44, 45, 43, 41, 14, 15, 13, 16, 45, 15, 15, 45, 44, 17, 40, 16, 16, 40, 45, 45, 40, 8, 45, 9, 43, 45, 8, 9, 18, 39, 17, 17, 39, 40, 18, 38, 39, 18, 19, 38, 40, 7, 8, 40, 39, 7, 39, 6, 7, 39, 38, 6, 20, 21, 19, 19, 21, 38, 38, 37, 6, 38, 21, 37, 6, 37, 5, 5, 36, 4, 5, 37, 36, 36, 23, 51, 36, 37, 23, 21, 22, 37, 37, 22, 23, 36, 35, 4, 4, 35, 3, 36, 47, 35, 36, 51, 47, 35, 34, 3, 3, 34, 2, 23, 24, 51, 51, 24, 47, 47, 48, 35, 35, 48, 34, 24, 25, 47, 47, 25, 48, 34, 1, 2, 48, 33, 34, 34, 33, 1, 25, 49, 48, 48, 49, 33, 25, 26, 49, 26, 50, 49, 26, 27, 50, 33, 49, 32, 49, 50, 32, 33, 0, 1, 33, 32, 0, 50, 27, 46, 32, 50, 46, 46, 27, 28, 28, 29, 46, 46, 31, 32, 32, 31, 0, 29, 30, 46 ], + "vertices": [ 3, 11, 128.03, 88.47, 0.83908, 12, -70.19999, -134.13, 0.01331, 3, 158.83, -71.91, 0.1476, 2, 11, 219.55, 53.15, 0.77988, 12, -48.04, -38.58, 0.22011, 3, 11, 266.3, 35.09999, 0.5353, 12, -36.73, 10.22, 0.46443, 14, 127.25, 245.46, 2.4E-4, 4, 11, 286.89, 9.79, 0.35076, 12, -14.56, 34.14, 0.64667, 14, 125.69, 212.88, 0.0023, 15, 101.39, 199.13, 2.5E-4, 4, 11, 281.54, -41.24, 0.09169, 12, 36.71, 36, 0.90196, 14, 87.64, 178.44, 0.00513, 15, 58.29, 171.29, 0.00119, 5, 11, 271.53, -136.86, 0.05608, 12, 132.77, 39.48, 0.69232, 13, 34.99, 78.76, 0.22087, 14, 16.37999, 113.93, 0.0224, 15, -22.45, 119.13, 0.0083, 5, 11, 283.51, -164.25, 0.01987, 12, 158.21, 55.17, 0.50334, 13, 52.65, 54.63, 0.3617, 14, 7.01, 85.54, 0.08322, 15, -36.28, 92.63, 0.03184, 6, 11, 326.15, -179.3, 0.00798, 12, 167.14, 99.49, 0.21327, 13, 97.55, 49.25, 0.35075, 14, 28.72, 45.87, 0.14106, 15, -21.26, 49.99, 0.22311, 16, -72.29, 25.96, 0.0638, 6, 11, 333.96, -167.35, 0.00242, 12, 154.22, 105.55, 0.07519, 13, 102.57, 62.6, 0.22995, 14, 42.51, 49.55, 0.2831, 15, -7.06, 51.39, 0.2694, 16, -58.17, 28.03, 0.13992, 6, 11, 344.19, -149.68, 4.9E-4, 12, 134.24, 114.44, 0.0176, 13, 109.72, 83.39, 0.11397, 14, 64.08999, 55.23, 0.07976, 15, 15.12, 53.51, 0.36292, 16, -36.09, 31.19, 0.42523, 1, 16, 35.8, 41.81, 1, 1, 16, 128.11, 17.93, 1, 1, 16, 188.72, -29.42, 1, 1, 16, 44.86, -26.17, 1, 1, 15, 133.17, -49.83, 1, 1, 15, 78.78, -50.15, 1, 5, 11, 399.32, -220.02, 2.2E-4, 12, 195.56, 179.43, 0.01703, 13, 179.46, 27.52, 0.2372, 14, 58.34, -33.93, 0.2023, 15, -4.91, -33.55, 0.54324, 5, 11, 370.41, -244.91, 3.2E-4, 12, 225.9, 152.49, 0.02513, 13, 155.04, -5.13, 0.35003, 14, 17.87999, -32.5, 0.29852, 15, -44.62, -25.61, 0.32598, 5, 11, 340.37, -270.04, 0.00251, 12, 254.98, 126.27, 0.10129, 13, 131.21, -36.2, 0.54075, 14, -21.24, -31.17, 0.2082, 15, -83.01999, -17.96999, 0.14723, 5, 11, 225.1, -238.94, 0.01529, 12, 240.33, 7.81, 0.24036, 13, 11.94, -30.98, 0.5788, 14, -86.31, 68.9, 0.12023, 15, -131.06, 91.29, 0.04528, 5, 11, 194.64, -233.55, 0.04819, 12, 239.26, -23.1, 0.40427, 13, -18.95999, -32.37, 0.48451, 14, -105.4, 93.25, 0.04604, 15, -145.97, 118.4, 0.01696, 5, 11, 187.65, -209.73, 0.09565, 12, 216.66, -33.34999, 0.57617, 13, -30.97, -10.65, 0.30651, 14, -94.71, 115.65, 0.01788, 15, -131.8, 138.78, 0.00376, 4, 11, 163.85, -128.67, 0.19533, 12, 139.75, -68.26, 0.8011, 14, -58.32, 191.88, 0.00327, 15, -83.58, 208.13, 2.9E-4, 4, 11, 165.74, -94.49, 0.31921, 12, 105.59, -71.26, 0.6795, 14, -5.04, 220.72, 0.00116, 15, -56.32, 275.96, 1.0E-4, 4, 11, 166.39, -79.07, 0.46205, 12, 90.23, -72.76, 0.53752, 14, 5.55, 230.48, 3.9E-4, 15, -40.61, 286.16, 2.0E-5, 3, 11, 166.49, -74.17, 0.53779, 12, 85.42, -73.28, 0.46208, 14, -19.99, 230.7, 1.2E-4, 2, 11, 141.54, -82.46, 0.73138, 12, 97.13, -96.82, 0.26861, 3, 11, 99.76, -97.08, 0.81379, 12, 117.34, -136.23, 0.13997, 3, -2.56, -164.19, 0.04623, 3, 11, 45.01, -114.56, 0.8186, 12, 142.41, -187.89, 0.02098, 3, -51.09, -135.29, 0.1604, 3, 11, -16.2, -74.76, 0.62389, 12, 113.82, -253.08, 0.00952, 3, -42.95, -58.38, 0.36658, 2, 11, -74.73, -19.33, 0.31468, 3, -52.66, 17.54999, 0.68531, 2, 11, 1.67, 76.75, 0.25576, 3, 70.07, 18.78, 0.74423, 1, 11, 93.54, 4.13, 1, 2, 11, 185.14, -6.66, 0.75461, 12, 15.98, -64.26999, 0.24538, 2, 11, 217.11, -18.75, 0.50844, 12, 23.47, -30.93, 0.49154, 3, 11, 225.63, -32.91999, 0.32512, 12, 36.3, -20.5, 0.6744, 14, 51.57, 221.95, 4.7E-4, 4, 11, 223, -84.73, 0.20061, 12, 87.96, -15.86, 0.79287, 14, 15.03, 185.13, 0.00581, 15, -12.28, 189.61, 6.9E-4, 5, 11, 235.61, -168.06, 0.07777, 12, 168.69, 8.29, 0.54931, 13, 6.74, 40.47, 0.33413, 14, -31.18, 114.66, 0.0321, 15, -69.26999, 127.55, 0.00667, 5, 11, 259.63, -194.79, 0.01921, 12, 191.79, 35.8, 0.30498, 13, 36, 19.62, 0.53642, 14, -31.14, 78.74, 0.09568, 15, -75.03, 92.09, 0.04369, 5, 11, 332.55, -220.1, 0.00292, 12, 206.64, 111.53, 0.10776, 13, 112.69, 10.82, 0.51915, 14, 6.25, 11.23, 0.23449, 15, -49.03, 19.43, 0.13565, 4, 12, 192.51, 130.62, 0.03213, 13, 130.6, 26.41, 0.33941, 14, 29.35, 5.71, 0.27333, 15, -27.12, 10.25, 0.35511, 1, 16, 18.54999, -16.62999, 1, 1, 16, 19.07, -14.51, 1, 6, 11, 381.55, -150.4, 3.0E-4, 12, 130.71, 150.34, 0.00811, 13, 145.36, 89.53, 0.04102, 14, 89.29, 30.41, 0.02558, 15, 36, 24.95, 0.37636, 16, -13.89, 3.64, 0.5486, 1, 16, 37.75, -25.46, 1, 4, 12, 164.9, 153.55, 0.02263, 13, 151.18, 56, 0.23908, 14, 65.44, 5.55, 0.19254, 15, 8.45, 4.27, 0.54574, 2, 11, -9.28, -17.5, 0.59605, 3, 7.72, -30.85, 0.40393, 3, 11, 195.9, -53.81, 0.42356, 12, 61.11, -47.06, 0.57612, 14, 39.7, 225.21, 2.9E-4, 3, 11, 190.1, -48.45, 0.53227, 12, 56.61, -53.56, 0.46765, 14, 39.83, 233.12, 6.0E-5, 2, 11, 161.26, -48.26, 0.79873, 12, 60.44, -82.12999, 0.20126, 3, 11, 120.37, -58.54, 0.8485, 12, 76.31, -121.18, 0.14441, 3, 41.04, -161.4, 0.00707, 4, 11, 197.37, -69.23, 0.33487, 12, 76.17, -43.46, 0.66324, 14, 30.34, 213.88, 0.0017, 15, -9.09, 262.42, 1.8E-4 ], + "hull": 32, + "edges": [ 40, 38, 38, 36, 28, 30, 28, 26, 26, 24, 24, 22, 22, 20, 14, 12, 12, 10, 6, 4, 60, 62, 0, 62, 40, 42, 42, 44, 34, 36, 16, 14, 52, 50, 4, 2, 2, 0, 10, 8, 8, 6, 72, 74, 74, 76, 76, 78, 78, 80, 80, 90, 90, 88, 16, 18, 18, 20, 30, 32, 32, 34, 56, 58, 58, 60, 94, 96, 96, 98, 52, 54, 54, 56, 100, 98, 48, 50, 44, 46, 46, 48, 102, 94, 72, 70, 70, 68, 66, 68, 66, 64, 64, 92, 86, 84, 50, 96, 94, 48, 46, 102, 52, 98, 54, 100, 70, 6, 68, 4, 66, 2, 72, 8, 86, 20, 86, 82, 82, 88, 84, 26, 88, 26 ], + "width": 382, + "height": 514 } }, "raptor_hindleg_back": { "raptor_hindleg_back": { "type": "skinnedmesh", "uvs": [ 0.45041, 0.09352, 0.56933, 0.23361, 0.65294, 0.47296, 0.66353, 0.50822, 0.63174, 0.54254, 0.32383, 0.69723, 0.30068, 0.73875, 0.27934, 0.77704, 0.30417, 0.83513, 0.31058, 0.85014, 0.341, 0.85046, 0.45165, 0.85163, 0.59555, 0.81881, 0.91176, 0.92548, 1, 1, 0.56336, 0.96426, 0.48349, 0.9826, 0.29878, 0.98027, 0.22808, 0.98389, 0.15997, 0.98737, 0.15423, 0.95546, 0.13894, 0.87047, 0.07371, 0.78726, 0, 0.75299, 0, 0.7049, 0, 0.671, 0.11875, 0.64652, 0.16535, 0.52659, 0.28495, 0.47397, 0.2901, 0.45773, 0.29427, 0.4446, 0.20635, 0.40396, 0.06128, 0.33691, 0, 0.25247, 0, 0, 0.30793, 0, 0.27599, 0.20261, 0.40397, 0.31121, 0.48439, 0.45963, 0.48317, 0.48383, 0.47029, 0.51062, 0.22698, 0.67328, 0.17141, 0.7242, 0.17122, 0.78241, 0.22995, 0.89469, 0.24677, 0.90829, 0.28672, 0.9146, 0.46582, 0.91414 ], - "triangles": [ 16, 47, 15, 15, 12, 13, 15, 13, 14, 15, 47, 12, 47, 10, 11, 17, 46, 47, 47, 46, 10, 18, 46, 17, 17, 47, 16, 18, 45, 46, 47, 11, 12, 22, 23, 24, 43, 42, 7, 43, 22, 42, 21, 22, 43, 44, 43, 7, 44, 7, 8, 44, 8, 9, 21, 43, 44, 45, 44, 9, 46, 45, 9, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 46, 9, 10, 41, 27, 28, 26, 27, 41, 41, 28, 40, 5, 41, 40, 5, 40, 4, 24, 25, 26, 42, 26, 41, 24, 26, 42, 6, 41, 5, 42, 41, 6, 28, 29, 40, 40, 39, 4, 7, 42, 6, 24, 42, 22, 40, 29, 39, 36, 34, 35, 36, 35, 0, 33, 34, 36, 37, 36, 0, 37, 0, 1, 32, 33, 36, 31, 32, 36, 31, 36, 37, 30, 31, 37, 38, 37, 1, 30, 37, 38, 38, 1, 2, 39, 30, 38, 39, 38, 2, 29, 30, 39, 39, 2, 3, 4, 39, 3 ], - "vertices": [ 1, 6, 53.94, 69.15, 1, 1, 6, 126.23, 67.31, 1, 2, 6, 226.42, 31.13, 0.9375, 11, -30.87, -1.11, 0.0625, 2, 6, 240.84, 25.33, 0.7, 11, -25.64, 13.52, 0.3, 2, 6, 246.67, 8.05, 0.3, 11, -8.61, 20.02, 0.7, 3, 6, 240.81, -115.25, 0.0625, 11, 114.8, 19.01, 0.875, 19, 9.48, 59.16, 0.0625, 2, 11, 131.07, 29.69, 0.7, 19, 22.11, 44.35, 0.3, 2, 11, 146.06, 39.54, 0.3, 19, 33.76, 30.71, 0.7, 4, 11, 152.6, 65.01, 0.12438, 19, 59.85, 27.41, 0.74434, 35, 15.85, 48.05, 0.12104, 51, -80.52, 23.87, 0.01022, 4, 11, 154.28, 71.59, 0.0519, 19, 66.59, 26.56, 0.74749, 35, 16.72, 41.31, 0.15401, 51, -77.54, 17.76, 0.04658, 4, 11, 145.73, 77.3, 0.02193, 19, 71.19, 35.76, 0.63296, 35, 26.78, 39.17, 0.1288, 51, -67.32, 18.96, 0.21628, 3, 19, 87.93, 69.21, 0.0625, 35, 63.37, 31.39, 0.675, 51, -30.17, 23.3, 0.26249, 2, 35, 113.82, 35.72, 0.1038, 51, 16.23, 43.56, 0.89619, 1, 51, 128.14, 12.02, 1, 1, 51, 161.85, -15.81, 1, 2, 35, 90.98, -23.36, 0.0138, 51, 13.52, -19.72, 0.98619, 2, 35, 62.97, -25.81, 0.7, 51, -12.23, -31.02, 0.3, 3, 19, 115.12, -1.33, 0.08333, 35, 1.93, -12.66, 0.83333, 51, -74.26, -38.1, 0.08333, 2, 19, 106.11, -23.53, 0.3, 35, -21.8, -9.52, 0.7, 2, 19, 97.43, -44.9, 0.7, 35, -44.67, -6.51, 0.3, 2, 19, 84.26, -40.69, 0.9375, 35, -43.9, 7.29, 0.0625, 1, 19, 49.18, -29.46, 1, 2, 11, 206.75, 5.37, 0.13333, 19, 7.44, -33.77, 0.86666, 2, 11, 219.64, -20.52, 0.36111, 19, -16.64, -49.8, 0.63888, 2, 11, 208.4, -37.82, 0.72083, 19, -35.22, -40.82, 0.27916, 2, 11, 200.49, -50.02, 0.91666, 19, -48.31, -34.48, 0.08333, 1, 11, 161.1, -36.97, 1, 2, 6, 150.1, -116.76, 0.08333, 11, 119.88, -71.55, 0.91666, 2, 6, 154.99, -70.71, 0.42846, 11, 73.68, -68.47, 0.57153, 2, 6, 150.3, -65.27, 0.35604, 11, 68.42, -73.36, 0.64395, 2, 6, 146.51, -60.87, 0.59147, 11, 64.17, -77.32, 0.40852, 2, 6, 115.12, -75.08, 0.8446, 11, 79.61, -108.13, 0.15539, 1, 6, 63.33, -98.53, 1, 1, 6, 21.78, -94.55, 1, 1, 6, -66.69, -32.04, 1, 1, 6, -6.62, 52.97, 1, 1, 6, 58.14, -6, 1, 1, 6, 121.17, 2.44, 1, 2, 6, 188.87, -12.1, 0.96, 11, 13.79, -36.92, 0.04, 2, 6, 197.11, -18.42, 0.7, 11, 19.79, -28.44, 0.3, 2, 6, 203.98, -28.61, 0.3, 11, 29.69, -21.17, 0.7, 3, 6, 213.53, -136.06, 0.04, 11, 136.67, -7.42, 0.91999, 19, -14.02, 34.16, 0.04, 2, 11, 164.32, 0.66, 0.7, 19, -2.53, 7.73, 0.3, 2, 11, 177.97, 21.57, 0.25, 19, 19.92, -3.19, 0.75, 3, 11, 187.55, 72.78, 0.04, 19, 71.93, -6.29, 0.91999, 35, -13.72, 27.87, 0.04, 2, 19, 79.66, -3.72, 0.7, 35, -9.28, 21.04, 0.3, 3, 19, 87.98, 7.25, 0.3, 35, 3.42, 15.76, 0.66, 51, -81.96, -10.7, 0.04, 3, 19, 114.16, 61.85, 0.04, 35, 62.84, 4.15, 0.7, 51, -21.95, -2.66, 0.26 ], - "hull": 36 + "triangles": [ 15, 47, 12, 15, 12, 13, 16, 47, 15, 15, 13, 14, 47, 11, 12, 47, 46, 10, 47, 10, 11, 17, 46, 47, 17, 47, 16, 18, 45, 46, 18, 46, 17, 22, 23, 24, 43, 42, 7, 43, 22, 42, 21, 22, 43, 44, 43, 7, 44, 7, 8, 44, 8, 9, 21, 43, 44, 45, 44, 9, 46, 45, 9, 46, 9, 10, 20, 21, 44, 20, 45, 19, 44, 45, 20, 45, 18, 19, 40, 29, 39, 28, 29, 40, 40, 39, 4, 41, 27, 28, 26, 27, 41, 41, 28, 40, 5, 41, 40, 5, 40, 4, 24, 25, 26, 42, 26, 41, 24, 26, 42, 6, 41, 5, 42, 41, 6, 7, 42, 6, 24, 42, 22, 36, 34, 35, 36, 35, 0, 33, 34, 36, 37, 36, 0, 37, 0, 1, 32, 33, 36, 31, 32, 36, 31, 36, 37, 30, 31, 37, 38, 37, 1, 30, 37, 38, 38, 1, 2, 39, 30, 38, 39, 38, 2, 29, 30, 39, 39, 2, 3, 4, 39, 3 ], + "vertices": [ 1, 4, 53.94, 69.15, 1, 1, 4, 126.23, 67.31, 1, 2, 4, 226.42, 31.13, 0.9375, 5, -30.87, -1.11, 0.0625, 2, 4, 240.84, 25.33, 0.7, 5, -25.64, 13.52, 0.3, 2, 4, 246.67, 8.05, 0.3, 5, -8.60999, 20.02, 0.7, 3, 4, 240.81, -115.25, 0.0625, 5, 114.8, 19.01, 0.875, 6, 9.47999, 59.16, 0.0625, 2, 5, 131.07, 29.69, 0.7, 6, 22.11, 44.35, 0.3, 2, 5, 146.06, 39.54, 0.3, 6, 33.75999, 30.71, 0.7, 4, 5, 152.6, 65.01, 0.12438, 6, 59.85, 27.41, 0.74434, 7, 15.85, 48.05, 0.12104, 8, -80.51999, 23.87, 0.01021, 4, 5, 154.28, 71.58999, 0.0519, 6, 66.58999, 26.56, 0.74749, 7, 16.71999, 41.31, 0.15401, 8, -77.54, 17.76, 0.04658, 4, 5, 145.73, 77.3, 0.02193, 6, 71.19, 35.75999, 0.63296, 7, 26.78, 39.16999, 0.1288, 8, -67.32, 18.95999, 0.21628, 3, 6, 87.93, 69.21, 0.0625, 7, 63.37, 31.39, 0.675, 8, -30.17, 23.3, 0.26249, 2, 7, 113.82, 35.72, 0.1038, 8, 16.23, 43.56, 0.89619, 1, 8, 128.14, 12.02, 1, 1, 8, 161.85, -15.81, 1, 2, 7, 90.98, -23.36, 0.0138, 8, 13.52, -19.71999, 0.98619, 2, 7, 62.97, -25.81, 0.7, 8, -12.23, -31.02, 0.3, 3, 6, 115.12, -1.33, 0.08333, 7, 1.93, -12.66, 0.83333, 8, -74.26, -38.09999, 0.08333, 2, 6, 106.11, -23.53, 0.3, 7, -21.8, -9.52, 0.7, 2, 6, 97.43, -44.9, 0.7, 7, -44.67, -6.51, 0.3, 2, 6, 84.26, -40.68999, 0.9375, 7, -43.9, 7.29, 0.0625, 1, 6, 49.18, -29.46, 1, 2, 5, 206.75, 5.37, 0.13333, 6, 7.44, -33.77, 0.86666, 2, 5, 219.64, -20.52, 0.36111, 6, -16.64, -49.8, 0.63888, 2, 5, 208.4, -37.82, 0.72083, 6, -35.22, -40.82, 0.27916, 2, 5, 200.49, -50.02, 0.91666, 6, -48.31, -34.48, 0.08333, 1, 5, 161.1, -36.97, 1, 2, 4, 150.1, -116.76, 0.08333, 5, 119.88, -71.55, 0.91666, 2, 4, 154.99, -70.71, 0.42846, 5, 73.68, -68.47, 0.57153, 2, 4, 150.3, -65.26999, 0.35604, 5, 68.42, -73.36, 0.64395, 2, 4, 146.51, -60.87, 0.59147, 5, 64.17, -77.32, 0.40852, 2, 4, 115.12, -75.08, 0.8446, 5, 79.61, -108.13, 0.15538, 1, 4, 63.33, -98.53, 1, 1, 4, 21.78, -94.55, 1, 1, 4, -66.69, -32.04, 1, 1, 4, -6.62, 52.97, 1, 1, 4, 58.14, -6, 1, 1, 4, 121.17, 2.44, 1, 2, 4, 188.87, -12.1, 0.96, 5, 13.79, -36.91999, 0.04, 2, 4, 197.11, -18.42, 0.7, 5, 19.79, -28.44, 0.3, 2, 4, 203.98, -28.61, 0.3, 5, 29.69, -21.17, 0.7, 3, 4, 213.53, -136.06, 0.04, 5, 136.67, -7.42, 0.91999, 6, -14.02, 34.16, 0.04, 2, 5, 164.32, 0.66, 0.7, 6, -2.53, 7.73, 0.3, 2, 5, 177.97, 21.57, 0.25, 6, 19.92, -3.19, 0.75, 3, 5, 187.55, 72.78, 0.04, 6, 71.93, -6.29, 0.91999, 7, -13.72, 27.87, 0.04, 2, 6, 79.66, -3.72, 0.7, 7, -9.28, 21.04, 0.3, 3, 6, 87.98, 7.25, 0.3, 7, 3.42, 15.76, 0.66, 8, -81.96, -10.7, 0.04, 3, 6, 114.16, 61.85, 0.04, 7, 62.84, 4.15, 0.7, 8, -21.95, -2.66, 0.26 ], + "hull": 36, + "edges": [ 66, 68, 66, 64, 56, 54, 54, 52, 52, 50, 46, 44, 44, 42, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 68, 70, 0, 70, 46, 48, 48, 50, 14, 12, 12, 10, 60, 58, 58, 56, 42, 40, 40, 38, 18, 16, 16, 14, 22, 20, 20, 18, 38, 36, 36, 34, 60, 62, 62, 64, 68, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 16, 88, 86, 88, 18, 90, 90, 38, 88, 90, 20, 92, 92, 36, 90, 92, 92, 94, 94, 22, 94, 32, 30, 24, 88, 40, 86, 14, 84, 12, 82, 10, 82, 52, 48, 84, 44, 86, 78, 6, 4, 76, 80, 8, 80, 56, 58, 78, 76, 60 ], + "width": 338, + "height": 429 } }, "raptor_horn": { @@ -307,10 +421,13 @@ "raptor_jaw": { "raptor_jaw": { "type": "skinnedmesh", - "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 0.4726, 1, 0.53491, 0.87731, 0.77925, 0.63281, 0.94487, 0.39908, 0.96947, 0.19456, 0.89404, 0.21609, 0.6497, 0, 0.46111, 0, 0, 0.26069, 0, 0.19456, 0.29385, 0.31758, 0.50047 ], - "triangles": [ 14, 13, 0, 10, 11, 15, 15, 14, 1, 2, 7, 8, 8, 9, 10, 15, 2, 8, 15, 8, 10, 7, 3, 6, 7, 2, 3, 2, 15, 1, 6, 3, 5, 5, 3, 4, 14, 0, 1, 11, 14, 15, 11, 12, 14, 14, 12, 13 ], - "vertices": [ 1, 48, 28.6, 68.85, 1, 1, 48, 69.65, 38.95, 1, 1, 48, 150.72, 72.88, 1, 1, 48, 186.16, 74.79, 1, 1, 48, 199.76, 159.69, 1, 1, 48, 213.35, 148.16, 1, 1, 48, 242.43, 74.42, 1, 1, 48, 230.31, -13.08, 1, 1, 48, 189.56, -71.99, 1, 1, 48, 132.76, -105.6, 1, 1, 48, 83.71, -55.39, 1, 2, 33, -18.31, 12.1, 0.67732, 48, -0.04, -70.76, 0.32267, 1, 33, 113.44, 16.95, 1, 1, 33, 116.36, -62.48, 1, 1, 48, 1.86, 5.43, 1, 1, 48, 71.19, -4.17, 1 ], - "hull": 14 + "uvs": [ 0.40984, 0.22169, 0.42214, 0.3988, 0.67894, 0.53819, 0.7589, 0.62838, 0.99999, 0.4726, 1, 0.53491, 0.87731, 0.77925, 0.63281, 0.94487, 0.39908, 0.96947, 0.19456, 0.89404, 0.21609, 0.6497, 0, 0.46111, 0, 0, 0.26069, 0, 0.19456, 0.29385 ], + "triangles": [ 14, 13, 0, 14, 0, 1, 5, 3, 4, 10, 14, 1, 11, 14, 10, 6, 3, 5, 2, 10, 1, 7, 2, 3, 7, 3, 6, 2, 8, 10, 8, 9, 10, 2, 7, 8, 14, 12, 13, 11, 12, 14 ], + "vertices": [ 1, 52, 28.6, 68.85, 1, 1, 52, 69.65, 38.95, 1, 1, 52, 150.72, 72.87999, 1, 1, 52, 186.16, 74.79, 1, 1, 52, 199.76, 159.69, 1, 1, 52, 213.35, 148.16, 1, 1, 52, 242.43, 74.42, 1, 1, 52, 230.31, -13.08, 1, 1, 52, 189.56, -71.99, 1, 1, 52, 132.76, -105.6, 1, 1, 52, 83.71, -55.39, 1, 2, 48, -18.31, 12.1, 0.67732, 52, -0.04, -70.76, 0.32267, 1, 48, 113.44, 16.95, 1, 1, 48, 116.36, -62.48, 1, 1, 52, 1.86, 5.43, 1 ], + "hull": 14, + "edges": [ 22, 24, 22, 20, 20, 18, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 24, 26, 0, 26, 24, 28, 22, 28, 28, 0 ], + "width": 305, + "height": 286 } }, "raptor_saddle_noshadow": { @@ -323,9 +440,12 @@ "raptor_saddle_strap_rear": { "type": "skinnedmesh", "uvs": [ 0.85499, 0.06802, 1, 0.13237, 1, 0.20266, 0.95981, 0.26524, 0.88583, 0.38045, 0.80684, 0.46413, 0.74038, 0.53453, 0.81676, 0.5895, 0.51961, 1, 0.4516, 1, 0.01739, 0.8407, 0, 0.80889, 0.24645, 0.36639, 0.3792, 0.39151, 0.42457, 0.32099, 0.49229, 0.21571, 0.57673, 0.10986, 0.66437, 0, 0.70168, 0, 0.56028, 0.46321, 0.68822, 0.29772, 0.76845, 0.18722, 0.61529, 0.39206 ], - "triangles": [ 19, 14, 22, 13, 14, 19, 19, 22, 6, 13, 10, 11, 9, 13, 19, 8, 9, 19, 6, 8, 19, 13, 11, 12, 9, 10, 13, 7, 8, 6, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 15, 16, 20, 20, 21, 4, 6, 22, 5, 21, 18, 0, 16, 17, 18, 21, 16, 18, 0, 1, 2, 3, 21, 0, 2, 3, 0, 20, 16, 21, 4, 21, 3 ], - "vertices": [ 1, 21, 3.9, -3.27, 1, 1, 21, 4.25, 15.05, 1, 1, 21, 13.24, 20.28, 1, 2, 21, 23.42, 21.2, 0.7, 37, -15.2, 21.22, 0.3, 3, 21, 41.11, 22.87, 0.3, 37, 2.48, 22.89, 0.6375, 53, -33.83, 24.96, 0.0625, 3, 21, 52.07, 21.72, 0.0625, 37, 13.43, 21.74, 0.6375, 53, -22.97, 23.11, 0.3, 2, 37, 18.39, 20.76, 0.25, 53, -18.09, 21.82, 0.75, 1, 53, -18.76, 33.09, 1, 1, 53, 49.92, 31.57, 1, 1, 53, 53.21, 25, 1, 1, 53, 53.11, -27.48, 1, 1, 53, 49.74, -31.27, 1, 1, 53, -20.73, -36.76, 1, 1, 53, -23.82, -22.28, 1, 3, 21, 53.48, -24.61, 0.0625, 37, 14.84, -24.59, 0.575, 53, -24.51, -23.21, 0.3625, 3, 21, 41.44, -26.12, 0.3, 37, 2.81, -26.09, 0.6375, 53, -36.62, -23.95, 0.0625, 2, 21, 24.38, -26.12, 0.7, 37, -14.24, -26.1, 0.3, 1, 21, 5.57, -26.12, 1, 1, 21, 3.54, -22.64, 1, 1, 53, -23.08, -0.04, 1, 3, 21, 41.66, -1.72, 0.3, 37, 3.03, -1.7, 0.66, 53, -34.85, 0.38, 0.04, 2, 21, 23.85, -2.46, 0.7, 37, -14.77, -2.44, 0.3, 3, 21, 52.58, -1.52, 0.04, 37, 13.95, -1.5, 0.62, 53, -23.94, -0.11, 0.34 ], - "hull": 19 + "triangles": [ 19, 14, 22, 13, 14, 19, 19, 22, 6, 13, 10, 11, 9, 13, 19, 8, 9, 19, 6, 8, 19, 13, 11, 12, 9, 10, 13, 7, 8, 6, 15, 16, 20, 20, 21, 4, 22, 15, 20, 14, 15, 22, 5, 20, 4, 22, 20, 5, 6, 22, 5, 21, 18, 0, 16, 17, 18, 21, 16, 18, 0, 1, 2, 3, 21, 0, 2, 3, 0, 20, 16, 21, 4, 21, 3 ], + "vertices": [ 1, 38, 3.9, -3.27, 1, 1, 38, 4.25, 15.05, 1, 1, 38, 13.24, 20.28, 1, 2, 38, 23.42, 21.2, 0.7, 39, -15.2, 21.22, 0.3, 3, 38, 41.11, 22.87, 0.3, 39, 2.48, 22.89, 0.6375, 40, -33.83, 24.96, 0.0625, 3, 38, 52.07, 21.72, 0.0625, 39, 13.43, 21.74, 0.6375, 40, -22.97, 23.11, 0.3, 2, 39, 18.39, 20.76, 0.25, 40, -18.09, 21.82, 0.75, 1, 40, -18.76, 33.09, 1, 1, 40, 49.92, 31.57, 1, 1, 40, 53.21, 25, 1, 1, 40, 53.11, -27.48, 1, 1, 40, 49.74, -31.27, 1, 1, 40, -20.73, -36.75999, 1, 1, 40, -23.82, -22.28, 1, 3, 38, 53.48, -24.61, 0.0625, 39, 14.84, -24.59, 0.575, 40, -24.51, -23.21, 0.3625, 3, 38, 41.43999, -26.12, 0.3, 39, 2.81, -26.09, 0.6375, 40, -36.62, -23.95, 0.0625, 2, 38, 24.38, -26.12, 0.7, 39, -14.24, -26.1, 0.3, 1, 38, 5.57, -26.12, 1, 1, 38, 3.54, -22.64, 1, 1, 40, -23.08, -0.04, 1, 3, 38, 41.66, -1.72, 0.3, 39, 3.03, -1.7, 0.66, 40, -34.84999, 0.38, 0.04, 2, 38, 23.85, -2.46, 0.7, 39, -14.77, -2.44, 0.3, 3, 38, 52.58, -1.52, 0.04, 39, 13.95, -1.5, 0.62, 40, -23.94, -0.11, 0.34 ], + "hull": 19, + "edges": [ 26, 24, 24, 22, 22, 20, 20, 18, 16, 18, 16, 14, 14, 12, 4, 2, 34, 36, 12, 38, 38, 26, 8, 40, 40, 30, 2, 0, 0, 36, 30, 32, 32, 34, 32, 42, 4, 6, 6, 8, 42, 6, 26, 28, 28, 30, 28, 44, 8, 10, 10, 12, 44, 10 ], + "width": 108, + "height": 148 } }, "raptor_saddle_w_shadow": { @@ -336,8 +456,11 @@ "type": "skinnedmesh", "uvs": [ 0.35242, 0.2156, 0.4794, 0.44245, 0.62071, 0.61176, 0.80562, 0.75373, 1, 0.90297, 1, 1, 0.8971, 1, 0.72054, 0.92254, 0.50668, 0.82872, 0.30401, 0.70725, 0.10537, 0.57888, 0, 0.50622, 0, 0, 0.26224, 0 ], "triangles": [ 8, 7, 6, 6, 4, 5, 4, 6, 3, 6, 7, 3, 7, 8, 3, 8, 2, 3, 9, 10, 1, 8, 9, 2, 9, 1, 2, 1, 10, 0, 10, 11, 0, 0, 12, 13, 0, 11, 12 ], - "vertices": [ 2, 55, 3.63, 27.04, 0.6875, 62, -47.26, 33.87, 0.3125, 3, 55, 39.09, 19.45, 0.3125, 62, -13.41, 20.86, 0.625, 65, -51.54, 33.37, 0.0625, 3, 55, 71.56, 19.02, 0.0625, 62, 18.58, 15.39, 0.625, 65, -21.56, 20.92, 0.3125, 2, 62, 55.03, 16.85, 0.3125, 65, 14.29, 14.23, 0.6875, 2, 62, 93.34, 18.39, 0.08333, 65, 51.98, 7.21, 0.91666, 1, 65, 56.09, -4.5, 1, 2, 62, 85.06, -1.49, 0.08333, 65, 39.48, -10.33, 0.91666, 2, 62, 54.22, -9.18, 0.3125, 65, 7.71, -10.96, 0.6875, 3, 55, 75.14, -14.72, 0.0625, 62, 16.87, -18.5, 0.625, 65, -30.77, -11.73, 0.3125, 3, 55, 38.8, -25.8, 0.3125, 62, -20.74, -23.8, 0.625, 65, -68.62, -8.53, 0.0625, 2, 55, 2.4, -35.77, 0.6875, 62, -58.25, -27.99, 0.3125, 2, 55, -17.28, -40.62, 0.91666, 62, -78.45, -29.71, 0.08333, 1, 55, -59.91, 8.18, 1, 2, 55, -26.13, 37.69, 0.91666, 62, -75.02, 49.02, 0.08333 ], - "hull": 14 + "vertices": [ 2, 49, 3.63, 27.04, 0.6875, 50, -47.26, 33.87, 0.3125, 3, 49, 39.09, 19.45, 0.3125, 50, -13.41, 20.86, 0.625, 51, -51.54, 33.37, 0.0625, 3, 49, 71.56, 19.02, 0.0625, 50, 18.58, 15.39, 0.625, 51, -21.56, 20.92, 0.3125, 2, 50, 55.03, 16.85, 0.3125, 51, 14.29, 14.23, 0.6875, 2, 50, 93.34, 18.39, 0.08333, 51, 51.98, 7.21, 0.91666, 1, 51, 56.09, -4.5, 1, 2, 50, 85.06, -1.49, 0.08333, 51, 39.48, -10.33, 0.91666, 2, 50, 54.22, -9.18, 0.3125, 51, 7.71, -10.96, 0.6875, 3, 49, 75.14, -14.72, 0.0625, 50, 16.87, -18.5, 0.625, 51, -30.77, -11.73, 0.3125, 3, 49, 38.8, -25.8, 0.3125, 50, -20.74, -23.8, 0.625, 51, -68.62, -8.53, 0.0625, 2, 49, 2.4, -35.77, 0.6875, 50, -58.25, -27.99, 0.3125, 2, 49, -17.28, -40.62, 0.91666, 50, -78.44999, -29.71, 0.08333, 1, 49, -59.91, 8.18, 1, 2, 49, -26.13, 37.68999, 0.91666, 50, -75.01999, 49.02, 0.08333 ], + "hull": 14, + "edges": [ 22, 24, 10, 12, 10, 8, 24, 26, 16, 4, 18, 16, 2, 4, 18, 2, 22, 20, 0, 26, 20, 0, 0, 2, 12, 14, 14, 16, 4, 6, 6, 8, 14, 6, 20, 18 ], + "width": 171, + "height": 128 } }, "spineboy_torso": { @@ -354,8 +477,11 @@ "type": "skinnedmesh", "uvs": [ 0.36822, 0.27893, 0.45737, 0.38897, 0.54451, 0.49651, 0.67872, 0.59135, 0.81977, 0.69102, 1, 0.77344, 1, 1, 0.77956, 1, 0.63729, 0.81629, 0.53364, 0.72348, 0.40534, 0.6086, 0.30886, 0.52535, 0.21049, 0.44047, 0, 0.26245, 0, 0, 0.30637, 0, 0.20241, 0.23 ], "triangles": [ 2, 10, 1, 9, 10, 2, 9, 2, 3, 8, 9, 3, 8, 3, 4, 7, 8, 4, 7, 4, 5, 7, 5, 6, 16, 14, 15, 13, 14, 16, 16, 15, 0, 12, 16, 0, 12, 0, 1, 13, 16, 12, 11, 12, 1, 10, 11, 1 ], - "vertices": [ 2, 26, 24.71, 8.03, 0.80344, 39, -17.42, 11.02, 0.19655, 2, 26, 37.95, 8.04, 0.59978, 39, -4.36, 8.87, 0.40021, 2, 26, 50.88, 8.04, 0.36895, 39, 8.39, 6.77, 0.63104, 2, 26, 65.92, 12.27, 0.17748, 39, 23.91, 8.48, 0.82251, 2, 26, 81.72, 16.7, 0.05943, 39, 40.23, 10.28, 0.94056, 2, 26, 98.82, 25.04, 0.01209, 39, 58.46, 15.71, 0.9879, 2, 26, 114.44, 11.57, 0.00191, 39, 71.67, -0.11, 0.99808, 2, 26, 100.47, -4.61, 0.01817, 39, 55.25, -13.81, 0.98182, 2, 26, 78.79, -4.14, 0.07487, 39, 33.94, -9.81, 0.92512, 2, 26, 65.83, -6.24, 0.2028, 39, 20.81, -9.76, 0.79719, 2, 26, 49.78, -8.83, 0.39971, 39, 4.55, -9.7, 0.60028, 2, 26, 37.93, -10.97, 0.62658, 39, -7.48, -9.88, 0.37341, 2, 26, 25.85, -13.15, 0.82034, 39, -19.75, -10.06, 0.17965, 2, 26, 0.25, -18.03, 0.95288, 39, -45.81, -10.7, 0.04711, 2, 26, -17.83, -2.43, 0.97709, 39, -61.11, 7.63, 0.0229, 2, 26, 1.57, 20.07, 0.94774, 39, -38.29, 26.67, 0.05225, 2, 26, 10.84, -1.23, 0.97709, 39, -32.62, 4.14, 0.0229 ], - "hull": 16 + "vertices": [ 2, 25, 24.71, 8.03, 0.80344, 26, -17.42, 11.02, 0.19655, 2, 25, 37.95, 8.04, 0.59978, 26, -4.36, 8.87, 0.40021, 2, 25, 50.88, 8.04, 0.36895, 26, 8.39, 6.77, 0.63103, 2, 25, 65.92, 12.27, 0.17748, 26, 23.91, 8.47999, 0.82251, 2, 25, 81.72, 16.7, 0.05943, 26, 40.23, 10.28, 0.94056, 2, 25, 98.82, 25.04, 0.01209, 26, 58.46, 15.71, 0.9879, 2, 25, 114.44, 11.57, 0.00191, 26, 71.67, -0.11, 0.99808, 2, 25, 100.47, -4.61, 0.01816, 26, 55.25, -13.81, 0.98182, 2, 25, 78.79, -4.14, 0.07487, 26, 33.93999, -9.81, 0.92512, 2, 25, 65.83, -6.24, 0.2028, 26, 20.81, -9.76, 0.79719, 2, 25, 49.78, -8.83, 0.39971, 26, 4.55, -9.7, 0.60028, 2, 25, 37.93, -10.97, 0.62658, 26, -7.48, -9.88, 0.37341, 2, 25, 25.85, -13.15, 0.82034, 26, -19.75, -10.06, 0.17965, 2, 25, 0.25, -18.03, 0.95288, 26, -45.81, -10.7, 0.04711, 2, 25, -17.83, -2.43, 0.97709, 26, -61.11, 7.63, 0.0229, 2, 25, 1.57, 20.07, 0.94774, 26, -38.29, 26.67, 0.05225, 2, 25, 10.84, -1.23, 0.97709, 26, -32.62, 4.14, 0.0229 ], + "hull": 16, + "edges": [ 28, 30, 30, 0, 12, 10, 8, 10, 12, 14, 14, 16, 26, 28, 24, 26, 26, 32, 32, 30, 20, 22, 22, 24, 0, 2, 2, 4, 4, 6, 6, 8, 16, 18, 18, 20 ], + "width": 97, + "height": 91 } }, "visor": { @@ -363,8 +489,1183 @@ } } }, +"events": { + "footstep": {} +}, "animations": { - "empty": {}, + "Jump": { + "bones": { + "root": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { + "time": 0.3, + "x": 0, + "y": 0, + "curve": [ 0.201, 0.17, 0.815, 0.83 ] + }, + { "time": 0.6666, "x": 1482.78, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front_foot_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.2, "angle": 0 }, + { "time": 0.3, "angle": -41.64 }, + { "time": 0.3666, "angle": -69.66 }, + { "time": 0.4333, "angle": -12.8 }, + { "time": 0.5333, "angle": 5.73 }, + { "time": 0.6666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.3666, "x": -60.01, "y": 111.1 }, + { "time": 0.4333, "x": 213.18, "y": 291.22 }, + { "time": 0.5333, "x": 243.73, "y": 332.61 }, + { "time": 0.6666, "x": 95.94, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6666, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": -4.48 }, + { "time": 0.1, "angle": -23.02 }, + { "time": 0.3, "angle": 19.24 }, + { "time": 0.5333, "angle": 20.85 }, + { "time": 0.6666, "angle": -10.76 }, + { "time": 0.7666, "angle": -18.58 }, + { "time": 0.9333, "angle": -3.56 }, + { "time": 1.0666, "angle": -4.48 } + ], + "translate": [ + { "time": 0, "x": -100.65, "y": 49.77 }, + { + "time": 0.1, + "x": 9.37, + "y": -109.06, + "curve": [ 0.245, 0, 0.609, 0.41 ] + }, + { + "time": 0.1666, + "x": 150.37, + "y": -76.51, + "curve": [ 0.401, 0.34, 0.858, 0.87 ] + }, + { "time": 0.3, "x": 361, "y": 36.69 }, + { + "time": 0.5333, + "x": 5.36, + "y": 290.91, + "curve": [ 0.808, 0, 0.892, 0.81 ] + }, + { "time": 0.6666, "x": -56.27, "y": 88.07 }, + { + "time": 0.7666, + "x": 179.93, + "y": -59.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.9333, + "x": 238.11, + "y": 50.63, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1.0666, "x": 213.19, "y": 49.77 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_foot_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.2, "angle": 0 }, + { "time": 0.3, "angle": -41.64 }, + { "time": 0.3666, "angle": -69.66 }, + { "time": 0.4333, "angle": -57.97 }, + { "time": 0.7, "angle": -9.19 }, + { "time": 0.7333, "angle": -7.78 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.3666, "x": -131.66, "y": 47.58 }, + { "time": 0.4333, "x": -16.1, "y": 205.84 }, + { "time": 0.5333, "x": 61.29, "y": 320.2 }, + { "time": 0.7333, "x": 235.62, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7333, "x": 1, "y": 1 } + ] + }, + "front_leg1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_leg_goal": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.7, "x": -0.39, "y": 24.29 }, + { "time": 0.7666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "rear_leg1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_leg_goal": { + "rotate": [ + { "time": 0, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.3, "x": 0, "y": 0 }, + { "time": 0.7, "x": 6.75, "y": 25.64 }, + { "time": 0.7666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "tail1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -11.02 }, + { "time": 0.3, "angle": 0.53 }, + { "time": 0.4333, "angle": 8.64 }, + { "time": 0.7, "angle": -9.73 }, + { + "time": 0.7666, + "angle": -4.46, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "torso1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_leg2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_leg2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -39.83 }, + { "time": 0.3, "angle": -31.82 }, + { "time": 0.4333, "angle": -7.28 }, + { "time": 0.5333, "angle": 1.28 }, + { "time": 0.6, "angle": -7.22 }, + { "time": 0.7, "angle": -30.66 }, + { + "time": 0.7666, + "angle": -40.54, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "torso2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 0.51 }, + { "time": 0.3, "angle": -1.9 }, + { "time": 0.5333, "angle": 1.04 }, + { "time": 0.7, "angle": -3.25 }, + { "time": 0.7666, "angle": 4.81 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -308.79 }, + { "time": 0.3, "angle": -398.7 }, + { "time": 0.5333, "angle": -297.8 }, + { "time": 0.7, "angle": 62.19 }, + { "time": 0.7666, "angle": -325.36 }, + { "time": 0.8333, "angle": -374.42 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_leg3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -8.25 }, + { "time": 0.3, "angle": -1.9 }, + { "time": 0.5333, "angle": 5.44 }, + { "time": 0.7, "angle": 24.01 }, + { "time": 0.7666, "angle": 4.82 }, + { "time": 0.8666, "angle": -1.78 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1, "x": 0, "y": 0 }, + { "time": 0.3, "x": 62.9, "y": -44.25 }, + { "time": 0.5333, "x": -4.35, "y": 17.31 }, + { "time": 0.7, "x": 0, "y": 0 }, + { "time": 0.7666, "x": 23.29, "y": -42.27 }, + { "time": 0.8666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_arm1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 51.2 }, + { "time": 0.3333, "angle": -38.7 }, + { "time": 0.6, "angle": 62.19, "curve": "stepped" }, + { "time": 0.7333, "angle": 62.19 }, + { "time": 0.8, "angle": 34.62 }, + { "time": 0.8666, "angle": -14.43 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_leg3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_front1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_rear1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_front_arm_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.1, "x": 35.96, "y": -11.83 }, + { "time": 0.3, "x": 31.1, "y": -50.39 }, + { "time": 0.5333, "x": 12.1, "y": -8.03 }, + { "time": 0.7, "x": 41.7, "y": -19.46 }, + { "time": 0.8666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_rear_arm_goal": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "stirrup": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "stirrup_strap1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -8.97 }, + { "time": 0.3, "angle": -18.38 }, + { "time": 0.4333, "angle": 0.9 }, + { "time": 0.5333, "angle": 11.43 }, + { "time": 0.6, "angle": 17.22 }, + { "time": 0.7, "angle": 4.74 }, + { + "time": 0.7666, + "angle": -20.69, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { + "time": 0.9666, + "angle": -20.4, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 23.1 }, + { "time": 0.3, "angle": -75.92 }, + { "time": 0.5333, "angle": -1.41 }, + { "time": 0.7666, "angle": 26.86 }, + { "time": 0.8333, "angle": -56.14 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_thigh": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 15.27 }, + { "time": 0.3, "angle": -53.4 }, + { "time": 0.5666, "angle": -63.35 }, + { "time": 0.7666, "angle": -29.92 }, + { "time": 0.9, "angle": 7.24 }, + { "time": 1, "angle": -3.69 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 9.93 }, + { "time": 0.3, "angle": -3.76 }, + { "time": 0.5333, "angle": -26.63 }, + { "time": 0.7, "angle": -10.23 }, + { "time": 0.7666, "angle": 21.8 }, + { "time": 0.8666, "angle": 15.36 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_arm2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 23.1 }, + { "time": 0.3, "angle": -75.92 }, + { "time": 0.5333, "angle": -1.41 }, + { "time": 0.7666, "angle": 26.86 }, + { "time": 0.8333, "angle": -56.14 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_foot1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_front2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_rear2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "spineboy_torso": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1666, "angle": -24.93 }, + { "time": 0.2333, "angle": -20.34 }, + { "time": 0.5333, "angle": -11.2 }, + { "time": 0.7, "angle": 10.49 }, + { + "time": 0.8333, + "angle": -30.21, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 1, "angle": 1.34 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "stirrup_strap2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 34.12 }, + { "time": 0.3, "angle": -12.25 }, + { "time": 0.4333, "angle": 11.11 }, + { "time": 0.5333, "angle": 25.19 }, + { "time": 0.6, "angle": 32.5 }, + { "time": 0.7, "angle": 24.4 }, + { + "time": 0.7666, + "angle": 9.9, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { + "time": 0.9666, + "angle": -11.72, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_arm": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_knee": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3, "angle": 0 }, + { "time": 0.3666, "angle": -63.6 }, + { "time": 0.4333, "angle": -80.16 }, + { "time": 0.5333, "angle": -17.48 }, + { "time": 0.6666, "angle": 24.85 }, + { "time": 0.7666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_hand": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5333, "angle": -27.74 }, + { "time": 0.7666, "angle": -27.09 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "horn_front": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "horn_rear": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "jaw": { + "rotate": [ + { "time": 0, "angle": 15.56 }, + { "time": 0.2333, "angle": -0.92 }, + { "time": 0.5, "angle": 20.4 }, + { "time": 0.7, "angle": 18.32 }, + { "time": 0.7666, "angle": 5.17 }, + { "time": 0.8333, "angle": 20.34 }, + { "time": 1.0666, "angle": 15.56 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "lower_leg": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 11.08 }, + { "time": 0.8333, "angle": 8.16 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_foot2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3, "angle": 0 }, + { "time": 0.3666, "angle": -87.93 }, + { "time": 0.4333, "angle": -126.75 }, + { "time": 0.5333, "angle": -63.79 }, + { "time": 0.7, "angle": 24.85 }, + { "time": 0.7666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.7, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.7, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_hand": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.5333, "angle": -27.74 }, + { "time": 0.7666, "angle": -27.09 }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "saddle_strap_rear3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tail5": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": 76.87 }, + { "time": 0.3, "angle": -12.25 }, + { "time": 0.4333, "angle": 10.5 }, + { "time": 0.5333, "angle": 24.81 }, + { "time": 0.6, "angle": 32.21 }, + { "time": 0.7, "angle": 24.4 }, + { + "time": 0.7666, + "angle": 9.9, + "curve": [ 0.243, 0, 0.648, 1 ] + }, + { + "time": 0.9666, + "angle": -41.66, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tongue1": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_bracer": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_arm_target": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_foot3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3, "angle": 0 }, + { "time": 0.3666, "angle": -84.17 }, + { "time": 0.4333, "angle": -127.53 }, + { "time": 0.5333, "angle": -52.16 }, + { "time": 0.6666, "angle": 10.77 }, + { "time": 0.7666, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.6666, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6666, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "head2": { + "rotate": [ + { "time": 0, "angle": 15.31 }, + { "time": 0.1, "angle": 29.85 }, + { "time": 0.2, "angle": 22.43 }, + { "time": 0.3, "angle": 12.64 }, + { "time": 0.4666, "angle": 24.85 }, + { "time": 0.5333, "angle": 9.28 }, + { "time": 0.7, "angle": 4.77 }, + { "time": 0.7666, "angle": 37.9 }, + { + "time": 0.8333, + "angle": 18.87, + "curve": [ 0.056, 0.81, 0.75, 1 ] + }, + { "time": 1, "angle": 22.96 }, + { "time": 1.0666, "angle": 15.31 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "rear_arm_target": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tongue2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "back_hand": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "front_hand2": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + }, + "tongue3": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 1.0666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 1.0666, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } + ] + } + } + }, "gungrab": { "slots": { "front_hand": { @@ -439,13 +1740,94 @@ }, "ik": { "front_arm_goal": [ - { - "time": 0, - "mix": 1, - "bendPositive": true, - "curve": [ 0.317, 0.13, 0.781, 0.56 ] - }, - { "time": 0.1333, "mix": 0, "bendPositive": true } + { "time": 0, "mix": 0, "bendPositive": true } + ] + } + }, + "gunkeep": { + "slots": { + "front_hand": { + "attachment": [ + { "time": 0, "name": "gun" }, + { "time": 0.4, "name": "front_open_hand" }, + { "time": 0.5333, "name": "front_hand" } + ] + }, + "gun": { + "attachment": [ + { "time": 0, "name": null }, + { "time": 0.1, "name": null }, + { "time": 0.4, "name": "gun_nohand" } + ] + } + }, + "bones": { + "front_hand2": { + "rotate": [ + { "time": 0, "angle": -10.18, "curve": "stepped" }, + { "time": 0.1, "angle": -10.18 }, + { "time": 0.3333, "angle": -79.78 }, + { "time": 0.4, "angle": -89.54 }, + { "time": 0.4333, "angle": 12.33 }, + { "time": 0.5666, "angle": 0, "curve": "stepped" }, + { "time": 0.7, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.1, "x": 1, "y": 1 }, + { "time": 0.4, "x": 0.938, "y": 0.938 }, + { "time": 0.5666, "x": 1, "y": 1 } + ] + }, + "front_arm": { + "rotate": [ + { "time": 0, "angle": -56.74, "curve": "stepped" }, + { "time": 0.1, "angle": -56.74 }, + { + "time": 0.2, + "angle": 246.13, + "curve": [ 0.184, 0.33, 0.75, 1 ] + }, + { + "time": 0.3333, + "angle": 155.19, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "angle": 223.11, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.5, "angle": -31.99 }, + { "time": 0.5666, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.1, "x": 0, "y": 0 }, + { "time": 0.3333, "x": 6.84, "y": 4.79 }, + { "time": 0.4, "x": 6.49, "y": -2.66 }, + { "time": 0.5666, "x": 0, "y": 0 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 34.73, "curve": "stepped" }, + { "time": 0.1, "angle": 34.73 }, + { + "time": 0.2, + "angle": 81.86, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.3333, "angle": 114.94 }, + { "time": 0.4, "angle": 86.01 }, + { "time": 0.5666, "angle": 0 } + ] + } + }, + "ik": { + "front_arm_goal": [ + { "time": 0, "mix": 0, "bendPositive": true, "curve": "stepped" }, + { "time": 0.5666, "mix": 1, "bendPositive": true } ] } }, @@ -552,9 +1934,6 @@ "front_leg1": { "rotate": [ { "time": 0, "angle": 27.07 }, - { "time": 0.5333, "angle": -41.93 }, - { "time": 0.6333, "angle": -16.71 }, - { "time": 0.7333, "angle": 16.92 }, { "time": 1.0666, "angle": 31.39 } ], "translate": [ @@ -583,9 +1962,6 @@ "rear_leg1": { "rotate": [ { "time": 0, "angle": -64.85 }, - { "time": 0.1, "angle": -45.79 }, - { "time": 0.1666, "angle": -19.95 }, - { "time": 0.4, "angle": 35.36 }, { "time": 1.0666, "angle": -45.71 } ], "translate": [ @@ -639,9 +2015,6 @@ "front_leg2": { "rotate": [ { "time": 0, "angle": -347.28 }, - { "time": 0.5333, "angle": -346.78 }, - { "time": 0.6333, "angle": -398.52 }, - { "time": 0.7333, "angle": -393.21 }, { "time": 1.0666, "angle": -362.06 } ], "translate": [ @@ -652,11 +2025,6 @@ "rear_leg2": { "rotate": [ { "time": 0, "angle": 27.05 }, - { "time": 0.0666, "angle": -14.99 }, - { "time": 0.1, "angle": -28.87 }, - { "time": 0.1666, "angle": -49.87 }, - { "time": 0.4, "angle": -14.45 }, - { "time": 0.4666, "angle": 11.42 }, { "time": 1.0666, "angle": 9.92 } ], "translate": [ @@ -705,25 +2073,22 @@ }, "tail2": { "rotate": [ - { "time": 0, "angle": -6.57 }, - { "time": 0.0666, "angle": -1.96 }, - { "time": 0.3333, "angle": -18.09 }, - { "time": 0.6333, "angle": -1.96 }, - { "time": 0.9, "angle": -18.09 }, - { "time": 1.0666, "angle": -6.57 } + { "time": 0, "angle": -19.15 }, + { "time": 0.2333, "angle": -11.3 }, + { "time": 0.5, "angle": -9.37 }, + { "time": 0.7666, "angle": -11.3 }, + { "time": 1.0333, "angle": -20.27 }, + { "time": 1.0666, "angle": -19.15 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 1.024, "y": 1 }, - { "time": 0.0666, "x": 1.072, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 0.6333, "x": 1.072, "y": 1 }, - { "time": 0.9, "x": 0.903, "y": 1 }, - { "time": 1.0666, "x": 1.024, "y": 1 } + { "time": 0, "x": 0.8, "y": 1 }, + { "time": 0.2333, "x": 0.9, "y": 1 }, + { "time": 0.5, "x": 0.8, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 0.8, "y": 1 } ] }, "torso2": { @@ -841,23 +2206,22 @@ }, "tail3": { "rotate": [ - { "time": 0, "angle": -14.83 }, - { "time": 0.0666, "angle": -24.31 }, - { "time": 0.3333, "angle": 8.86 }, - { "time": 0.6333, "angle": -24.31 }, - { "time": 0.9, "angle": 8.86 }, - { "time": 1.0666, "angle": -14.83 } + { "time": 0, "angle": -12.46 }, + { "time": 0.2333, "angle": 12.65 }, + { "time": 0.5, "angle": -20.79 }, + { "time": 0.7666, "angle": 12.65 }, + { "time": 1.0333, "angle": -16.04 }, + { "time": 1.0666, "angle": -12.46 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.2333, "x": 1, "y": 1 }, + { "time": 0.5, "x": 0.997, "y": 1 }, + { "time": 1.0666, "x": 1, "y": 1 } ] }, "front_arm2": { @@ -969,23 +2333,30 @@ }, "tail4": { "rotate": [ - { "time": 0, "angle": 16.99 }, - { "time": 0.0666, "angle": 7.36 }, - { "time": 0.3333, "angle": 41.06 }, - { "time": 0.6333, "angle": 7.36 }, - { "time": 0.9, "angle": 41.06 }, - { "time": 1.0666, "angle": 16.99 } + { "time": 0, "angle": 10.25 }, + { + "time": 0.2333, + "angle": 39.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.5, "angle": 1.33 }, + { + "time": 0.7666, + "angle": 39.47, + "curve": [ 0.664, 0, 0.75, 1 ] + }, + { "time": 1.0333, "angle": 6.08 }, + { "time": 1.0666, "angle": 10.25 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.2333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.5, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0666, "x": 1, "y": 1 } ] }, "front_foot2": { @@ -1098,23 +2469,39 @@ }, "tail5": { "rotate": [ - { "time": 0, "angle": -15.7 }, - { "time": 0.0666, "angle": -38.39 }, - { "time": 0.3333, "angle": 41.03 }, - { "time": 0.6333, "angle": -38.39 }, - { "time": 0.9, "angle": 41.03 }, - { "time": 1.0666, "angle": -15.7 } + { + "time": 0, + "angle": -26.34, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { + "time": 0.2333, + "angle": 45.41, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { + "time": 0.5, + "angle": -21.92, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { + "time": 0.7666, + "angle": 45.41, + "curve": [ 0.391, -0.58, 0.653, 1.01 ] + }, + { "time": 1.0333, "angle": -7.73 }, + { "time": 1.0666, "angle": -26.34 } ], "translate": [ { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.0666, "x": 0, "y": 0, "curve": "stepped" }, { "time": 1.0666, "x": 0, "y": 0 } ], "scale": [ - { "time": 0, "x": 0.995, "y": 1 }, - { "time": 0.0666, "x": 1, "y": 1 }, - { "time": 0.3333, "x": 0.947, "y": 1 }, - { "time": 1.0666, "x": 0.995, "y": 1 } + { "time": 0, "x": 0.765, "y": 1 }, + { "time": 0.2333, "x": 1, "y": 1 }, + { "time": 0.5, "x": 0.765, "y": 1 }, + { "time": 0.7666, "x": 1, "y": 1 }, + { "time": 1.0666, "x": 0.765, "y": 1 } ] }, "tongue1": { @@ -1290,14 +2677,14 @@ { "time": 0 }, { "time": 0.2666, - "offset": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 452, + "vertices": [ -16.78684, 15.47479, -0.63024, 22.82083, 18.11511, 13.89254, 19.32452, 12.15423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, 0, 0, -3.24548, 0.81152 ] }, { "time": 0.5333 }, { "time": 0.8, - "offset": 368, - "vertices": [ -16.78, 15.47, -0.63, 22.82, 18.11, 13.89, 19.32, 12.15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, -3.24, 0.81, 0, 0, 0, 0, 0, 0, -3.24, 0.81, 0, 0, -3.24, 0.81 ] + "offset": 452, + "vertices": [ -16.78684, 15.47479, -0.63024, 22.82083, 18.11511, 13.89254, 19.32452, 12.15423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, -3.24548, 0.81152, 0, 0, 0, 0, 0, 0, -3.24548, 0.81152, 0, 0, -3.24548, 0.81152 ] }, { "time": 1.0666 } ] @@ -1308,18 +2695,18 @@ { "time": 0.2666 }, { "time": 0.5333, - "offset": 216, - "vertices": [ -2.23, 21.95, 21.54, -4.75 ] + "offset": 206, + "vertices": [ -2.23608, 21.95403, -21.04628, 6.63481, 21.54915, -4.7554 ] }, { "time": 0.6, - "offset": 216, - "vertices": [ 7.17, 15.14, 15.26, -6.91 ] + "offset": 206, + "vertices": [ 7.17962, 15.14358, -16.74015, -0.80053, 15.26523, -6.91741 ] }, { "time": 0.7333, - "offset": 176, - "vertices": [ -0.82, 0.73, -0.01, -1.1, -0.27, 1.06, -1.28, 0.39, 0, 0, 0, 0, 0, 0, 1.48, -2.59, 0.98, 2.82, 2.73, -10.49, 6.12, 8.95, -3.72, -10.18, -2.6, -2.28, 3.43, -0.47, -3.44, -0.39, -2.28, -4.76, 5.08, 1.4, -4.58, -2.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.37, -1.75, 2.22, 0.1, -1.86, -0.75, -2.86, -0.77, 2.45, -1.65 ] + "offset": 160, + "vertices": [ -0.82485, 0.73406, -0.01284, -1.10443, -0.27497, 1.06005, -1.28054, 0.39633, 0, 0, 0, 0, 0, 0, 0, 0, 1.4866, -2.59426, 0.98071, 2.82342, -0.10126, -2.98623, 2.95008, -2.11668, 2.7366, -10.49935, 6.12506, 8.95282, -2.88093, -10.35023, -2.60873, -2.28384, 3.43417, -0.47045, -2.28305, -4.76037, 5.08892, 1.40078, -4.58522, -2.61465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.37966, -1.75515, -2.13229, -0.65667, -2.86239, -0.77365, 2.45989, -1.65319, -2.51593, 0.86412 ] }, { "time": 0.8, "curve": "stepped" }, { "time": 0.9666, "curve": "stepped" }, @@ -1327,7 +2714,11 @@ ] } } - } + }, + "events": [ + { "time": 0, "name": "footstep" }, + { "time": 0.5333, "name": "footstep" } + ] } } } \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta b/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta index e94f20be9..1cd830520 100644 --- a/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta +++ b/spine-unity/Assets/Examples/Spine/Raptor/raptor.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 4261719a8f729a644b2dab6113d1b0ea +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset index e853ea0d3..fbceadfb0 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat index bba7fb875..197b240a7 100644 Binary files a/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat and b/spine-unity/Assets/Examples/Spine/Raptor/raptor_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta index 1174bc26f..64f7ac3b3 100644 --- a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta +++ b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy.png.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 guid: 49bb65eefe08e424bbf7a38bc98ec638 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 @@ -15,11 +17,14 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 2048 @@ -30,18 +35,23 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 + allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: -1 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset index 7a117dfbe..4610674e7 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset and b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat index 33e439d9b..cb02038bf 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat and b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset index 8c6f6de39..8628dd2bc 100644 Binary files a/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset and b/spine-unity/Assets/Examples/Spine/Spineboy/spineboy_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl.meta new file mode 100644 index 000000000..55e508bf1 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e5043a979111803419245ca47932431d +folderAsset: yes +timeCreated: 1455491037 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.atlas.txt b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.atlas.txt new file mode 100644 index 000000000..0dde0b61b --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.atlas.txt @@ -0,0 +1,279 @@ + +Doi.png +size: 646,520 +format: RGBA8888 +filter: Linear,Linear +repeat: none +armL + rotate: false + xy: 1, 46 + size: 163, 133 + orig: 163, 133 + offset: 0, 0 + index: -1 +armR + rotate: true + xy: 165, 46 + size: 133, 109 + orig: 133, 109 + offset: 0, 0 + index: -1 +arrow + rotate: true + xy: 467, 1 + size: 64, 85 + orig: 64, 85 + offset: 0, 0 + index: -1 +body + rotate: false + xy: 1, 180 + size: 274, 339 + orig: 274, 339 + offset: 0, 0 + index: -1 +bootR + rotate: false + xy: 499, 258 + size: 91, 84 + orig: 91, 84 + offset: 0, 0 + index: -1 +browL + rotate: false + xy: 228, 23 + size: 40, 22 + orig: 40, 22 + offset: 0, 0 + index: -1 +browR + rotate: true + xy: 591, 287 + size: 32, 25 + orig: 32, 25 + offset: 0, 0 + index: -1 +eyelids closed + rotate: false + xy: 276, 201 + size: 183, 92 + orig: 183, 92 + offset: 0, 0 + index: -1 +eyelids open + rotate: true + xy: 499, 343 + size: 176, 89 + orig: 176, 89 + offset: 0, 0 + index: -1 +hairL + rotate: false + xy: 589, 459 + size: 54, 60 + orig: 54, 60 + offset: 0, 0 + index: -1 +hairL2 + rotate: false + xy: 553, 4 + size: 71, 76 + orig: 71, 76 + offset: 0, 0 + index: -1 +hairM + rotate: true + xy: 467, 66 + size: 96, 77 + orig: 96, 77 + offset: 0, 0 + index: -1 +hairM blob + rotate: true + xy: 133, 15 + size: 30, 45 + orig: 30, 45 + offset: 0, 0 + index: -1 +hairM blobS + rotate: false + xy: 545, 142 + size: 16, 20 + orig: 16, 20 + offset: 0, 0 + index: -1 +hairR + rotate: true + xy: 1, 4 + size: 41, 83 + orig: 41, 83 + offset: 0, 0 + index: -1 +hairR2 + rotate: true + xy: 460, 163 + size: 94, 101 + orig: 94, 101 + offset: 0, 0 + index: -1 +hairSide + rotate: false + xy: 179, 21 + size: 48, 24 + orig: 48, 24 + offset: 0, 0 + index: -1 +head + rotate: false + xy: 276, 294 + size: 222, 225 + orig: 222, 225 + offset: 0, 0 + index: -1 +indexL + rotate: true + xy: 405, 7 + size: 24, 36 + orig: 24, 36 + offset: 0, 0 + index: -1 +indexR + rotate: false + xy: 296, 3 + size: 34, 28 + orig: 34, 28 + offset: 0, 0 + index: -1 +inmouth + rotate: false + xy: 589, 403 + size: 46, 55 + orig: 46, 55 + offset: 0, 0 + index: -1 +irisL + rotate: true + xy: 85, 11 + size: 34, 47 + orig: 34, 47 + offset: 0, 0 + index: -1 +irisL flatspec + rotate: false + xy: 625, 70 + size: 19, 10 + orig: 19, 10 + offset: 0, 0 + index: -1 +irisL spec + rotate: true + xy: 624, 384 + size: 18, 21 + orig: 18, 21 + offset: 0, 0 + index: -1 +irisR + rotate: false + xy: 589, 355 + size: 34, 47 + orig: 34, 47 + offset: 0, 0 + index: -1 +irisR flatspec + rotate: true + xy: 445, 178 + size: 22, 11 + orig: 22, 11 + offset: 0, 0 + index: -1 +irisR spec + rotate: false + xy: 545, 124 + size: 16, 17 + orig: 16, 17 + offset: 0, 0 + index: -1 +middleL + rotate: true + xy: 331, 5 + size: 26, 36 + orig: 26, 36 + offset: 0, 0 + index: -1 +middleR + rotate: true + xy: 591, 320 + size: 34, 26 + orig: 34, 26 + offset: 0, 0 + index: -1 +mouth + rotate: true + xy: 562, 168 + size: 89, 83 + orig: 89, 83 + offset: 0, 0 + index: -1 +nose + rotate: false + xy: 545, 113 + size: 11, 10 + orig: 11, 10 + offset: 0, 0 + index: -1 +pinkyL + rotate: false + xy: 442, 4 + size: 24, 27 + orig: 24, 27 + offset: 0, 0 + index: -1 +pony1 + rotate: false + xy: 394, 32 + size: 72, 105 + orig: 72, 105 + offset: 0, 0 + index: -1 +pony2 + rotate: true + xy: 562, 81 + size: 86, 83 + orig: 86, 83 + offset: 0, 0 + index: -1 +ringL + rotate: false + xy: 269, 1 + size: 26, 30 + orig: 26, 30 + offset: 0, 0 + index: -1 +rotate + rotate: true + xy: 275, 32 + size: 105, 118 + orig: 105, 118 + offset: 0, 0 + index: -1 +strap + rotate: true + xy: 276, 138 + size: 62, 168 + orig: 62, 168 + offset: 0, 0 + index: -1 +thumbL + rotate: false + xy: 460, 265 + size: 37, 28 + orig: 37, 28 + offset: 0, 0 + index: -1 +thumbR + rotate: false + xy: 368, 6 + size: 36, 25 + orig: 36, 25 + offset: 0, 0 + index: -1 diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.atlas.txt.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.atlas.txt.meta new file mode 100644 index 000000000..10247bbc3 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.atlas.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a99a92edb8383b244b4fcf3babe8ebae +timeCreated: 1455491064 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json new file mode 100644 index 000000000..a34c3ff3b --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json @@ -0,0 +1,2376 @@ +{ +"skeleton": { "hash": "aq3I/GFgl2Kr7OAkfYGs9KrHeXc", "spine": "3.0.10", "width": 519.72, "height": 542.19, "images": "" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "length": 68.61, "x": -19.9, "y": 151.37, "rotation": -171.49, "color": "ffe941ff" }, + { "name": "lumbar", "parent": "hip", "length": 33.93, "x": 0.07, "y": -4.74, "rotation": -97.88 }, + { "name": "femurR", "parent": "hip", "length": 45.3, "x": 43.53, "y": 43.45, "rotation": 53.25 }, + { "name": "femurL", "parent": "hip", "length": 92.96, "x": -52.77, "y": 39.86, "rotation": 125.21 }, + { "name": "strap anchor", "parent": "hip", "length": 31.94, "x": 2.3, "y": 43.77, "rotation": -85.09, "color": "ff702eff" }, + { "name": "thorax", "parent": "lumbar", "length": 54.39, "x": 35.09, "y": -0.8, "rotation": -18.29 }, + { "name": "strap tie", "parent": "thorax", "length": 32.33, "x": 48.07, "y": 9.54, "rotation": 174.59, "color": "ff702eff" }, + { "name": "humerusR", "parent": "thorax", "length": 55.73, "x": 23.08, "y": 29.13, "rotation": 137.38 }, + { "name": "radiusR", "parent": "humerusR", "length": 47.29, "x": 58.87, "rotation": 4.01 }, + { "name": "handR", "parent": "radiusR", "x": 54.01, "y": -1.07 }, + { "name": "ringR", "parent": "handR", "length": 18.11, "x": -10.21, "y": -16.03, "rotation": -31.44 }, + { "name": "pinkyR", "parent": "handR", "length": 20.98, "x": -15.17, "y": -0.62, "rotation": -38.56 }, + { "name": "middleR", "parent": "handR", "length": 19.24, "x": -3.3, "y": -17.06, "rotation": -23.52 }, + { "name": "indexR", "parent": "handR", "length": 18, "x": 6.82, "y": -13.85, "rotation": -11.04 }, + { "name": "handleCenterTargetR", "parent": "handR", "x": 18.07, "y": 0.06, "rotation": -89, "color": "ff0000ff" }, + { "name": "rotateHandle", "parent": "root", "length": 55.27, "x": -152.63, "y": 153.44, "rotation": 124.8, "color": "ff0000ff" }, + { "name": "rs", "parent": "rotateHandle", "scaleX": 1.294, "scaleY": 0.767, "color": "ff0000ff" }, + { "name": "rr", "parent": "rs", "color": "ff0000ff" }, + { "name": "humerusL", "parent": "thorax", "length": 73.48, "x": 41.33, "y": -55.5, "rotation": -65.21 }, + { "name": "radiusL", "parent": "humerusL", "length": 65.38, "x": 75.72, "y": 1.83, "rotation": 43.11 }, + { "name": "handL", "parent": "radiusL", "x": 80.44, "y": 2.06, "rotation": -52.7 }, + { "name": "ringL", "parent": "handL", "length": 15.27, "x": 21.05, "y": 12.5, "rotation": 62.01 }, + { "name": "pinkyL", "parent": "handL", "length": 12.17, "x": 22.03, "y": -15.19, "rotation": 37.78 }, + { "name": "middleL", "parent": "handL", "length": 23.21, "x": 4.54, "y": 20.96, "rotation": 75.15 }, + { "name": "indexL", "parent": "handL", "length": 22, "x": -13.07, "y": 20.89, "rotation": 99.18 }, + { "name": "arrowOrigin", "parent": "root", "x": 172.99, "y": 292 }, + { "name": "arrowY", "parent": "arrowOrigin", "length": 71.44, "x": 37.77, "y": 44.72, "rotation": 49.81 }, + { "name": "arrowX", "parent": "arrowOrigin", "length": 71.44, "x": 47.68, "y": -3.92, "rotation": -4.7 }, + { "name": "head", "parent": "thorax", "length": 14.3, "x": 70.1, "y": -1.78, "rotation": 6.59 }, + { "name": "pony2 1", "parent": "head", "length": 22.09, "x": 12.68, "y": -53.86, "rotation": -126.98 }, + { "name": "pony2 2", "parent": "pony2 1", "length": 24.31, "x": 25.67, "y": -0.29, "rotation": 2.08 }, + { "name": "pony2 3R", "parent": "pony2 2", "length": 43.41, "x": 27.7, "y": 0.83, "rotation": 15.37 }, + { "name": "pony2 3L", "parent": "pony2 2", "length": 33.37, "x": 31.3, "y": -1.21, "rotation": -9.21 }, + { "name": "pony1 1", "parent": "head", "length": 26.78, "x": 3.24, "y": -49.43, "rotation": -127.21 }, + { "name": "pony1 2", "parent": "pony1 1", "length": 20.86, "x": 29.89, "y": -1.1, "rotation": -14.7 }, + { "name": "pony1 3R", "parent": "pony1 2", "length": 37.66, "x": 34.01, "y": 6.79, "rotation": -2.95 }, + { "name": "pony1 3L", "parent": "pony1 2", "length": 36.26, "x": 27.65, "y": -8.15, "rotation": -26.46 }, + { "name": "mouth", "parent": "head", "x": 28.05, "y": 0.81, "rotation": -77.99 }, + { "name": "mouth opening", "parent": "mouth" }, + { "name": "irisR", "parent": "head", "x": 72.86, "y": 40.02, "rotation": -79.01 }, + { "name": "irisL", "parent": "head", "x": 82.7, "y": -29.95, "rotation": -79.01 }, + { "name": "hairSide", "parent": "head", "length": 33.33, "x": 47.44, "y": -92.9, "rotation": 94.94 }, + { "name": "hairR2", "parent": "head", "length": 49.32, "x": 179.91, "y": 62.62, "rotation": 157.66 }, + { "name": "hairR2 2", "parent": "hairR2", "length": 28.91, "x": 45.74, "y": -13.91, "rotation": -50.6 }, + { "name": "hairR1", "parent": "head", "length": 43.15, "x": 157.15, "y": 74.61, "rotation": -178.89 }, + { "name": "hairM", "parent": "head", "length": 25.81, "x": 182.69, "y": 31.1, "rotation": -173.33 }, + { "name": "hairMR", "parent": "hairM", "length": 44.06, "x": 17, "y": -28.44, "rotation": -6.41 }, + { "name": "hairML", "parent": "hairM", "length": 46.41, "x": 13.83, "y": 24.11, "rotation": 32.57 }, + { "name": "hairL2", "parent": "head", "length": 35.09, "x": 173.5, "y": -26.26, "rotation": -135.32 }, + { "name": "hairL2 2", "parent": "hairL2", "length": 32.49, "x": 37.68, "y": -0.62, "rotation": 17.32 }, + { "name": "hairL1", "parent": "head", "length": 27.5, "x": 179.86, "y": -9.57, "rotation": -150.58 }, + { "name": "eyelids", "parent": "head", "length": 14.96, "x": 79.11, "y": 8.18, "rotation": -82.34 }, + { "name": "browR", "parent": "head", "length": 26.75, "x": 121.66, "y": 39.52, "rotation": 65.11 }, + { "name": "browL", "parent": "head", "length": 31.37, "x": 128.48, "y": -11.4, "rotation": -58.18 }, + { "name": "thumbL", "parent": "handL", "length": 16.61, "x": -29.83, "y": -12.11, "rotation": 150.77 }, + { "name": "thumbR", "parent": "handR", "length": 20.56, "x": 4.36, "y": 18.56, "rotation": -7.45 }, + { "name": "tibiaL", "parent": "femurL", "length": 83, "x": 107.79, "y": -1.31, "rotation": -24.72 }, + { "name": "footL", "parent": "tibiaL", "length": 54.47, "x": 82.83, "y": -20.62, "rotation": 37.77 }, + { "name": "tibiaR", "parent": "femurR", "length": 42.31, "x": 52.54, "y": 9.88, "rotation": 106.18 } +], +"slots": [ + { "name": "rotate", "bone": "rr", "attachment": "rotate" }, + { "name": "pony2", "bone": "pony2 1", "attachment": "pony2" }, + { "name": "pony1", "bone": "pony1 1", "attachment": "pony1" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "inmouth", "bone": "mouth", "attachment": "inmouth" }, + { "name": "mouth", "bone": "mouth opening", "attachment": "mouth" }, + { "name": "irisL", "bone": "irisL", "attachment": "irisL" }, + { "name": "irisR", "bone": "irisR", "attachment": "irisR" }, + { "name": "eyelids open", "bone": "eyelids", "attachment": "eyelids open" }, + { "name": "irisR spec", "bone": "irisR", "attachment": "irisR spec" }, + { "name": "irisR flatspec", "bone": "irisR", "attachment": "irisR flatspec" }, + { "name": "irisL flatspec", "bone": "irisL", "attachment": "irisL flatspec" }, + { "name": "irisL spec", "bone": "irisL", "attachment": "irisL spec" }, + { "name": "eyelids closed", "bone": "eyelids" }, + { "name": "nose", "bone": "head", "attachment": "nose" }, + { "name": "browR", "bone": "browR", "attachment": "browR" }, + { "name": "browL", "bone": "browL", "attachment": "browL" }, + { "name": "hairR2", "bone": "hairR2", "attachment": "hairR2" }, + { "name": "hairL2", "bone": "hairL2", "attachment": "hairL2" }, + { "name": "hairL", "bone": "hairL1", "attachment": "hairL" }, + { "name": "hairR", "bone": "hairR1", "attachment": "hairR" }, + { "name": "hairM", "bone": "hairM", "attachment": "hairM" }, + { "name": "hairM blobS", "bone": "hairM", "attachment": "hairM blobS" }, + { "name": "hairM blob", "bone": "hairM", "attachment": "hairM blob" }, + { "name": "hairSide", "bone": "hairSide", "attachment": "hairSide" }, + { "name": "thumbR", "bone": "thumbR", "attachment": "thumbR" }, + { "name": "pinkyR", "bone": "pinkyR", "attachment": "middleR" }, + { "name": "ringR", "bone": "ringR", "attachment": "indexR" }, + { "name": "middleR", "bone": "middleR", "attachment": "middleR" }, + { "name": "indexR", "bone": "indexR", "attachment": "indexR" }, + { "name": "armR", "bone": "humerusR", "attachment": "armR" }, + { "name": "bootR", "bone": "tibiaR", "attachment": "bootR" }, + { "name": "body", "bone": "hip", "attachment": "body" }, + { "name": "strap", "bone": "strap anchor", "attachment": "strap" }, + { "name": "armL", "bone": "humerusL", "attachment": "armL" }, + { "name": "thumbL", "bone": "thumbL", "attachment": "thumbL" }, + { "name": "indexL", "bone": "indexL", "attachment": "indexL" }, + { "name": "middleL", "bone": "middleL", "attachment": "middleL" }, + { "name": "ringL", "bone": "ringL", "attachment": "ringL" }, + { "name": "pinkyL", "bone": "pinkyL", "attachment": "pinkyL" }, + { "name": "arrowY", "bone": "arrowY", "attachment": "arrowY" }, + { "name": "arrowX", "bone": "arrowX", "attachment": "arrowX" } +], +"skins": { + "default": { + "armL": { + "armL": { + "type": "skinnedmesh", + "uvs": [ 0, 0.53854, 0.04432, 0.51804, 0.12166, 0.54622, 0.18646, 0.55903, 0.30561, 0.55903, 0.3934, 0.5411, 0.46656, 0.44375, 0.51882, 0.33872, 0.57944, 0.20807, 0.63169, 0.09022, 0.71322, 0.02618, 0.79683, 5.6E-4, 0.91598, 0.01081, 0.98914, 0.11584, 1, 0.2798, 0.99332, 0.41045, 0.95778, 0.54622, 0.87626, 0.69993, 0.79265, 0.80497, 0.65887, 0.88438, 0.47701, 0.94843, 0.3077, 0.97405, 0.17601, 0.97149, 0.11748, 0.98429, 0.07149, 0.99967, 0.03386, 0.95355, 0, 0.8562, 0, 0.64614, 0.17852, 0.72842, 0.42193, 0.62878, 0.64362, 0.53195, 0.79941, 0.13446, 0.60451, 0.76196, 0.36098, 0.83549, 0.76897, 0.34426, 0.84802, 0.50653 ], + "triangles": [ 27, 0, 1, 27, 1, 2, 26, 27, 28, 26, 23, 25, 24, 25, 23, 30, 34, 35, 35, 34, 15, 34, 8, 31, 15, 34, 14, 31, 11, 12, 31, 12, 13, 10, 11, 31, 31, 13, 14, 31, 9, 10, 34, 31, 14, 31, 8, 9, 16, 35, 15, 7, 8, 34, 17, 35, 16, 17, 30, 35, 6, 7, 30, 29, 6, 30, 30, 17, 32, 18, 32, 17, 30, 7, 34, 32, 29, 30, 19, 32, 18, 29, 4, 5, 28, 2, 3, 27, 2, 28, 4, 29, 28, 28, 3, 4, 29, 33, 28, 20, 33, 32, 20, 32, 19, 28, 22, 26, 22, 28, 33, 21, 22, 33, 21, 33, 20, 22, 23, 26, 33, 29, 32, 29, 5, 6 ], + "vertices": [ 1, 6, 72.47, -38.62, 1, 1, 6, 77.25, -44.69, 1, 3, 19, 17.27, 31.86, 0.8272, 20, -22.11, 61.87, 0.00479, 6, 77.49, -57.83, 0.16799, 2, 19, 27.54, 28.85, 0.95931, 20, -16.67, 52.66, 0.04067, 2, 19, 46.81, 26.42, 0.89979, 20, -4.27, 37.71, 0.1002, 2, 19, 61.3, 27, 0.58207, 20, 6.69, 28.22, 0.41792, 3, 19, 74.75, 38.36, 0.24874, 20, 24.27, 27.31, 0.62043, 21, -54.13, -29.38, 0.1308, 2, 20, 40.46, 29.68, 0.60754, 21, -46.2, -15.07, 0.39245, 1, 21, -37.05, 2.7, 1, 1, 21, -29.18, 18.70999, 1, 1, 21, -16.26, 27.78, 1, 1, 21, -2.78, 31.75, 1, 1, 21, 16.67, 31.19, 1, 2, 20, 112.22, -10.38, 0.00319, 21, 29.17, 17.71999, 0.9968, 1, 21, 31.84, -3.98, 1, 1, 21, 31.47, -21.39, 1, 2, 20, 64.9, -43, 0.34301, 21, 26.44, -39.68, 0.65698, 3, 19, 136.75, -3.77, 0.00362, 20, 40.68999, -45.83, 0.69388, 21, 14, -60.66, 0.30249, 3, 19, 121.48, -15.93, 0.19497, 20, 21.23, -44.26, 0.50686, 21, 0.96, -75.18, 0.29815, 2, 19, 98.53, -23.69, 0.6028, 20, -0.81, -34.22, 0.39719, 2, 19, 68.06, -28.44, 0.98196, 20, -26.29, -16.85, 0.01803, 1, 19, 40.25, -28.37, 1, 1, 19, 19, -25.35, 1, 2, 19, 9.32, -25.85, 0.82399, 6, 21.76, -74.8, 0.176, 1, 6, 17.54999, -68.26999, 1, 1, 6, 21.54, -60.58, 1, 1, 6, 32.21, -51.4, 1, 1, 6, 58.83, -42.95, 1, 2, 19, 23.44, 6.66, 0.99126, 20, -34.84, 39.27, 0.00873, 2, 19, 64.46, 14.85, 0.69542, 20, 0.68, 17.2, 0.30456, 2, 20, 33.66999, -2.38, 0.736, 21, -24.8, -39.9, 0.26399, 1, 21, -1.62, 13.97, 1, 2, 19, 91.77, -6.43, 0.73823, 20, 6.05, -17.01, 0.26176, 1, 19, 51.17, -11.17, 1, 2, 20, 65.92, -2.16, 0.336, 21, -5.42, -14.11, 0.66399, 1, 21, 8.34, -35.14, 1 ], + "hull": 28, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 0 ], + "width": 163, + "height": 133 + } + }, + "armR": { + "armR": { + "type": "skinnedmesh", + "uvs": [ 0, 0.7003, 0.04189, 0.50764, 0.19978, 0.38837, 0.34264, 0.32186, 0.43474, 0.29663, 0.53625, 0.22553, 0.75429, 0.06727, 0.88211, 0, 0.9761, 0.02828, 1, 0.22323, 0.96294, 0.34479, 0.86708, 0.46635, 0.68662, 0.60397, 0.60016, 0.67966, 0.51557, 0.75534, 0.39151, 0.86314, 0.27685, 0.97094, 0.18662, 1, 0.087, 0.96177, 0.03061, 0.87232, 0, 0.79434, 0.13963, 0.63837, 0.30505, 0.50764, 0.47422, 0.41819, 0.62647, 0.31039, 0.81068, 0.16131, 0.16783, 0.86314, 0.27685, 0.74158, 0.44038, 0.60626, 0.6152, 0.48012, 0.77121, 0.3425, 0.90843, 0.2347 ], + "triangles": [ 16, 17, 26, 17, 18, 26, 16, 26, 15, 18, 19, 26, 19, 20, 26, 26, 27, 15, 15, 27, 14, 20, 21, 26, 26, 21, 27, 20, 0, 21, 27, 28, 14, 14, 28, 13, 27, 22, 28, 27, 21, 22, 0, 1, 21, 21, 2, 22, 21, 1, 2, 13, 28, 29, 28, 22, 23, 23, 3, 4, 23, 22, 3, 22, 2, 3, 12, 13, 29, 28, 23, 29, 12, 29, 11, 29, 30, 11, 29, 24, 30, 29, 23, 24, 11, 30, 10, 24, 4, 5, 24, 23, 4, 30, 31, 10, 10, 31, 9, 30, 25, 31, 30, 24, 25, 25, 24, 6, 31, 25, 8, 31, 8, 9, 8, 25, 7, 24, 5, 6, 25, 6, 7 ], + "vertices": [ 1, 9, 65.4, -17.71999, 1, 1, 9, 49.09, -32.07, 1, 2, 8, 85.41, -29.41, 0.00107, 9, 24.41, -31.2, 0.99892, 2, 8, 65.32, -26.27, 0.14336, 9, 4.59, -26.65, 0.85663, 2, 8, 53.32, -22.57, 0.51598, 9, -7.11, -22.13, 0.48401, 2, 8, 37.75999, -22.59, 0.92586, 9, -22.64, -21.06, 0.07413, 2, 8, 4.02, -23.16, 0.99998, 9, -56.34, -19.26, 1.0E-5, 2, 8, -14.37, -21.08, 0.99998, 9, -74.54, -15.9, 1.0E-5, 2, 8, -23.69, -12.19, 0.99998, 9, -83.21, -6.39, 1.0E-5, 2, 8, -15.89, 7.82, 0.99999, 9, -74.04, 13.03, 0, 1, 8, -5.03, 16.87, 1, 1, 8, 12.61, 22.04, 1, 2, 8, 40.89, 23.14, 0.90115, 9, -16.32, 24.34, 0.09884, 2, 8, 54.97, 24.58, 0.45832, 9, -2.17, 24.8, 0.54167, 2, 8, 68.83, 26.16, 0.06028, 9, 11.76, 25.4, 0.93971, 1, 9, 32, 25.98, 1, 1, 9, 51.21, 27.27, 1, 1, 9, 62.95, 23.22, 1, 1, 9, 71.64, 12.39, 1, 1, 9, 72.44999, 0.12, 1, 1, 9, 71.11, -9.2, 1, 1, 9, 46.22, -13, 1, 2, 8, 79.72, -11.18, 0.00278, 9, 20.01, -12.61, 0.99721, 2, 8, 55.35, -8.46, 0.56562, 9, -4.1, -8.18999, 0.43437, 2, 8, 31.94, -8.6, 0.9957, 9, -27.47, -6.7, 0.00429, 2, 8, 2.59999, -10.53, 0.99999, 9, -56.87, -6.57, 0, 1, 9, 56.73, 9.43999, 1, 1, 9, 37.31, 6.49, 1, 1, 9, 11.03, 6.33, 1, 2, 8, 42.43, 6.7, 0.94672, 9, -15.93, 7.83, 0.05327, 1, 8, 16.96999, 3.99, 1, 2, 8, -4.69999, 2.86, 0.99999, 9, -63.22, 7.3, 0 ], + "hull": 21, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 0, 40, 42, 44, 44, 46, 46, 48, 48, 50, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62 ], + "width": 133, + "height": 109 + } + }, + "arrowX": { + "arrowX": { "path": "arrow", "color": "f0100cff", "x": 36.22, "y": 1.18, "rotation": -60.13, "width": 64, "height": 85 } + }, + "arrowY": { + "arrowY": { "path": "arrow", "color": "99ff00ff", "x": 36.22, "y": 1.18, "rotation": -60.13, "width": 64, "height": 85 } + }, + "body": { + "body": { + "type": "skinnedmesh", + "uvs": [ 0.38823, 0, 0.3066, 0, 0.21707, 0.04123, 0.15987, 0.09148, 0.10764, 0.16385, 0.09272, 0.24023, 0.10142, 0.3116, 0.1151, 0.37391, 0.08153, 0.41512, 0.04919, 0.46638, 0, 0.58297, 0, 0.6684, 0.07531, 0.68548, 0.1723, 0.66538, 0.22329, 0.6091, 0.26929, 0.58096, 0.35261, 0.55583, 0.43841, 0.57593, 0.49561, 0.60206, 0.54535, 0.62116, 0.62867, 0.66639, 0.65354, 0.6885, 0.65851, 0.71765, 0.6697, 0.77594, 0.69955, 0.85231, 0.7468, 0.92568, 0.77665, 0.94678, 0.82639, 0.97292, 0.92587, 0.99704, 1, 1, 1, 0.95181, 1, 0.91796, 1, 0.88949, 0.99426, 0.84326, 0.96441, 0.73672, 0.92214, 0.66235, 0.88732, 0.62415, 0.86618, 0.60405, 0.84628, 0.58395, 0.76918, 0.51762, 0.661, 0.44726, 0.61002, 0.4151, 0.57768, 0.38595, 0.54038, 0.34675, 0.5267, 0.30756, 0.52581, 0.27771, 0.55068, 0.2566, 0.58425, 0.2375, 0.6228, 0.21037, 0.65389, 0.14705, 0.63897, 0.08674, 0.56933, 0.04252, 0.46985, 0, 0.21649, 0.53614, 0.2549, 0.38287, 0.38346, 0.24995, 0.24331, 0.30662, 0.69584, 0.53321, 0.48354, 0.10468, 0.33238, 0.32689, 0.37187, 0.1683, 0.7505, 0.7801, 0.2752, 0.11006, 0.28246, 0.22606, 0.63511, 0.56427, 0.12875, 0.57015, 0.79784, 0.67188, 0.16469, 0.44561, 0.50331, 0.42526, 0.17172, 0.25178, 0.57192, 0.16189, 0.45878, 0.31875, 0.47189, 0.20966, 0.29645, 0.47484, 0.9177, 0.90248, 0.71807, 0.60369, 0.3892, 0.07463, 0.17518, 0.34541, 0.87803, 0.78245, 0.38636, 0.40615, 0.40981, 0.49336, 0.79937, 0.88039, 0.42912, 0.13933, 0.19937, 0.16866, 0.56174, 0.51389, 0.48177, 0.52211, 0.3175, 0.39771, 0.7973, 0.91644, 0.94422, 0.96365 ], + "triangles": [ 26, 25, 87, 88, 74, 31, 30, 88, 31, 87, 74, 88, 27, 87, 88, 26, 87, 27, 28, 27, 88, 88, 30, 29, 28, 88, 29, 76, 0, 52, 58, 52, 51, 76, 52, 58, 62, 2, 1, 3, 2, 62, 82, 76, 58, 70, 51, 50, 70, 50, 49, 58, 51, 70, 1, 76, 62, 76, 1, 0, 60, 76, 82, 60, 62, 76, 83, 3, 62, 4, 3, 83, 72, 82, 58, 72, 58, 70, 48, 70, 49, 63, 62, 60, 83, 62, 63, 47, 70, 48, 46, 72, 70, 72, 55, 60, 72, 60, 82, 63, 60, 55, 69, 4, 83, 69, 83, 63, 5, 4, 69, 47, 46, 70, 45, 72, 46, 71, 55, 72, 59, 63, 55, 66, 38, 37, 22, 21, 66, 61, 23, 22, 66, 61, 22, 36, 66, 37, 35, 66, 36, 78, 35, 34, 35, 78, 66, 61, 66, 78, 78, 34, 33, 24, 23, 61, 81, 61, 78, 24, 61, 81, 74, 78, 33, 74, 33, 32, 81, 78, 74, 81, 25, 24, 87, 81, 74, 74, 32, 31, 87, 25, 81, 41, 84, 68, 41, 68, 42, 84, 41, 40, 85, 80, 68, 84, 85, 68, 57, 40, 39, 64, 84, 40, 57, 64, 40, 18, 85, 84, 17, 85, 18, 75, 57, 39, 75, 39, 38, 64, 57, 75, 19, 18, 84, 19, 84, 64, 20, 19, 64, 20, 64, 75, 66, 75, 38, 21, 20, 75, 21, 75, 66, 65, 9, 67, 10, 9, 65, 65, 53, 14, 13, 65, 14, 12, 11, 10, 65, 12, 10, 13, 12, 65, 67, 9, 8, 65, 67, 53, 56, 69, 63, 6, 5, 69, 71, 72, 45, 71, 45, 44, 59, 55, 71, 56, 63, 59, 77, 69, 56, 6, 69, 77, 7, 6, 77, 54, 56, 59, 77, 56, 54, 86, 54, 59, 79, 59, 71, 86, 59, 79, 43, 68, 71, 43, 71, 44, 68, 43, 42, 79, 71, 68, 67, 7, 77, 67, 77, 54, 8, 7, 67, 73, 54, 86, 67, 54, 73, 80, 79, 68, 53, 67, 73, 73, 79, 80, 79, 73, 86, 16, 73, 80, 15, 53, 73, 17, 80, 85, 16, 80, 17, 16, 15, 73, 14, 53, 15 ], + "vertices": [ 1, 6, 77.69, -3.35, 1, 1, 6, 70.93, 17.96999, 1, 5, 1, 5.71, -100.8, 0.0145, 57, -247.48, -75.75, 0, 2, 94.39, 18.70999, 0.00385, 6, 50.19, 37.13, 0.98163, 19, -80.4, 46.88, 0, 5, 1, 23.74, -86.28, 0.08471, 57, -236.49, -96.13, 0, 2, 77.54, 34.58, 0.03571, 6, 29.21, 46.92, 0.87956, 19, -98.09, 31.93, 0, 5, 1, 41.53, -64.15, 0.26317, 57, -217.96, -117.66, 0, 2, 53.18, 49.18, 0.0809, 6, 1.5, 53.15, 0.65592, 19, -115.36, 9.38, 0, 5, 1, 49.42, -39.15, 0.58274, 57, -194.81, -129.97, 0, 2, 27.34, 53.58, 0.07701, 6, -24.41, 49.22, 0.34024, 19, -122.66, -15.8, 0, 3, 1, 50.65, -14.87, 0.84586, 2, 3.12, 51.48, 0.04506, 6, -46.76, 39.63, 0.10906, 2, 1, 50.08, 6.57, 0.99949, 6, -65.76, 29.68, 5.0E-4, 4, 1, 61.25, 19.02, 0.41233, 3, -8.97, -28.82, 0.58677, 2, -31.9, 57.35, 0, 6, -81.86, 34.22, 8.8E-4, 4, 1, 72.58999, 34.89, 0.07954, 3, 10.52, -28.41, 0.92009, 2, -49.17, 66.42, 0, 6, -101.1, 37.41999, 3.6E-4, 4, 1, 91.79, 71.97, 0.02573, 3, 51.72, -21.6, 0.97336, 2, -88.53, 80.37, 1.0E-5, 6, -142.86, 38.32, 8.9E-4, 4, 1, 96.09, 100.61, 1.0E-5, 3, 77.24, -7.91, 0.99997, 2, -117.49, 80.71, 0, 6, -170.47, 29.57, 1.0E-5, 3, 1, 76.54, 109.4, 1.0E-5, 3, 72.58999, 13, 0.99998, 2, -123.53, 60.14, 0, 2, 1, 49.25, 106.61, 0.14582, 3, 54.02, 33.2, 0.85417, 2, 1, 32.59999, 89.81, 0.31082, 3, 30.6, 36.49, 0.68917, 2, 1, 18.71999, 82.25, 0.83943, 3, 16.24, 43.09, 0.16056, 3, 1, -5.11, 77.22, 0.91391, 3, -2.05, 59.18, 0.048, 4, 3.04, -60.47, 0.03808, 2, 1, -27.35, 87.44, 0.75787, 4, 24.21, -48.2, 0.24212, 3, 1, -41.54, 98.53, 0.16242, 4, 41.45, -43, 0.83708, 57, -42.83, -65.61, 4.8E-4, 4, 1, -54.05, 106.96, 0.00263, 3, -7.5, 116.18, 0.02515, 4, 55.55, -37.64, 0.92652, 57, -32.27, -54.84, 0.04568, 4, 1, -74.35, 125.51, 1.4E-4, 3, -4.78, 143.55, 0.00627, 4, 82.41, -31.75, 0.81754, 57, -10.32, -38.25999, 0.17603, 3, 3, -1.4, 153.1, 2.5E-4, 4, 92.54, -32.00999, 0.60675, 57, -1.01, -34.25999, 0.39299, 2, 4, 100.62, -37.86, 0.33847, 57, 8.76, -36.18999, 0.66152, 2, 4, 117.02, -49.3, 0.13549, 57, 28.45, -39.74, 0.8645, 1, 57, 55.59, -40.45, 1, 2, 57, 83.33, -36.33, 0.92669, 58, -10.6, -11.59, 0.07329, 2, 57, 92.76, -30.93, 0.09793, 58, -0.08, -14.31, 0.90206, 1, 58, 16.06, -16.11, 1, 1, 58, 44.1, -11.17, 1, 1, 58, 62.7, -2.95, 1, 3, 4, 222.66, -25.15, 2.0E-5, 57, 114.34, 26.37, 0.13331, 58, 55.36, 11.64, 0.86666, 3, 4, 216.44, -20.19, 4.5E-4, 57, 106.6, 28.28, 0.42261, 58, 48.75, 24.08, 0.57693, 3, 4, 207.4, -10.55, 8.1E-4, 57, 94.36, 33.25999, 0.66584, 58, 45.88, 30.52, 0.33333, 3, 4, 195, -0.84, 0.00298, 57, 79.03, 36.88, 0.8859, 58, 37.43, 43.82, 0.11111, 2, 4, 163.25, 18.20999, 0.00655, 57, 42.22, 40.93, 0.99344, 2, 4, 137.03, 27.28, 0.05801, 57, 14.6, 38.21, 0.94198, 2, 4, 121.08, 29.34, 0.16158, 57, -0.74, 33.41, 0.83841, 2, 4, 112.15, 29.87, 0.33221, 57, -9.07, 30.16, 0.66778, 2, 4, 103.46, 30.64, 0.60759, 57, -17.29, 27.22, 0.39239, 2, 4, 72.6, 30.93, 0.83736, 57, -45.45, 14.59, 0.16263, 2, 4, 34.88, 26.01, 0.9936, 57, -77.67, -5.65, 0.00639, 3, 1, -81.94, 40.50999, 0.30239, 4, 17.34, 23.46, 0.6976, 57, -92.53, -15.3, 0, 3, 1, -74.65, 29.42, 0.60736, 4, 4.08, 23.89, 0.39263, 57, -104.76, -20.45, 0, 4, 1, -66.51, 14.76, 0.78491, 4, -12.58, 25.69, 0.21277, 57, -120.66, -25.78, 0, 6, -21.76, -78.62, 0.0023, 4, 1, -64.78, 1.05999, 0.77424, 4, -24.77, 32.16999, 0.13585, 57, -134.45, -24.99, 0, 6, -10.22999, -71.03, 0.08989, 4, 1, -66.04, -8.97, 0.68679, 57, -144.09, -21.92, 0, 6, -0.66, -67.74, 0.31202, 19, -6.48, -43.26, 0.00116, 4, 1, -73.83999, -15.03, 0.38179, 57, -148.63, -13.14, 0, 6, 8.22, -72.07, 0.49072, 19, 1.16999, -37.00999, 0.12748, 4, 1, -83.9, -20.07, 0.19577, 57, -151.75, -2.33, 0, 6, 17.17, -78.89, 0.55657, 19, 11.1, -31.74, 0.24764, 3, 1, -95.71, -27.6, 0.10164, 6, 29.13, -86.18, 0.54542, 19, 22.74, -23.93, 0.35293, 3, 1, -107.32, -47.56, 0.07677, 6, 52.17, -87.81, 0.57428, 19, 33.88, -3.69, 0.34892, 3, 1, -106.31, -68.39, 0.03831, 6, 70.42, -77.73, 0.62598, 19, 32.38, 17.1, 0.3357, 3, 1, -89.67, -86.04, 0.01311, 6, 78.94999, -55.01, 0.76821, 19, 15.32, 34.36, 0.21866, 1, 6, 84.45, -24.67, 1, 2, 1, 30.77, 65.08, 0.7233, 3, 9.68999, 23.15, 0.27669, 1, 1, 12.65, 15.26, 1, 3, 57, -165.71, -55.73, 0, 2, 23.09, -26.03, 0.72213, 6, -3.47, -27.71, 0.27785, 1, 1, 11.95, -10.77, 1, 1, 4, 62.53, 12.76, 1, 1, 6, 51.75, -38.97, 1, 3, 1, -11.15, -0.35, 0.71938, 4, -56.85, -10.81, 0.08552, 2, -2.81, -11.72, 0.19508, 3, 57, -192.92, -49.7, 0, 2, 50.81, -23.18, 0.05995, 6, 21.94, -16.32, 0.94004, 1, 57, 37, -19.27, 1, 1, 6, 32.75999, 14.89, 1, 2, 2, 31.52, 1.54, 0.468, 6, -4.12, 1.11, 0.53199, 2, 3, -36.13, 128.74, 1.1E-4, 4, 58.63, -6.53, 0.99988, 1, 3, 31.21, 7.42, 1, 1, 57, 6.55, 4.94999, 1, 3, 1, 40.25, 32.62, 0.73018, 3, -10.64, -3.85, 0.26962, 6, -84.83, 9.38, 1.8E-4, 2, 1, -52.52, 39.57, 0.42399, 4, -0.38, -0.04, 0.57599, 3, 1, 28.59, -32.06, 0.4151, 2, 23.16, 31.98, 0.19535, 6, -21.6, 27.4, 0.38953, 3, 1, -84.36, -45.92, 0.10306, 6, 40.58, -67.92, 0.5254, 19, 10.96, -5.87, 0.37152, 5, 1, -45.81, 2.06, 0.90915, 4, -34.9, 16.11, 0.04371, 57, -136.93, -43.82, 0, 2, -0.46, -46.39, 0.04497, 6, -19.46999, -54.44, 0.00215, 3, 1, -54.85, -33.97, 0.03193, 2, 36.46, -50.42, 0.01639, 6, 16.86, -46.68, 0.95165, 1, 1, 6.02, 47.78, 1, 2, 57, 91.17, 10.5, 0.91199, 58, 27.7, 16.45999, 0.088, 1, 4, 84, 0.64, 1, 1, 6, 53.65, -11.25, 1, 1, 1, 32.37, -0.52999, 1, 1, 57, 49.15, 13.5, 1, 1, 1, -21.79, 28.41, 1, 2, 1, -23.76, 58.6, 0.89677, 4, -1.41, -34.50999, 0.10322, 1, 57, 73.51, -17.7, 1, 1, 6, 36.05, -28.3, 1, 4, 1, 16.92, -58.8, 0.0867, 57, -208.22, -94.43, 0, 2, 51.25, 24.07, 0.04854, 6, 7.54, 28.7, 0.86475, 3, 1, -63.89, 71.66, 5.3E-4, 3, -41.66999, 102.95, 0.01015, 4, 32.39, -9.25, 0.9893, 2, 1, -41.81, 71.16, 0.017, 4, 19.25, -27, 0.98299, 1, 1, -3.56, 22.78, 1, 1, 58, -0.09, -2.88, 1, 1, 58, 43.03, 2.03, 1 ], + "hull": 53, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 64, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 84, 84, 86, 86, 88, 88, 90, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 0, 174, 176, 60, 62, 62, 64 ], + "width": 274, + "height": 339 + } + }, + "bootR": { + "bootR": { + "type": "mesh", + "uvs": [ 0, 0.54474, 0.46746, 1, 0.71832, 1, 1, 0.80288, 1, 0.24718, 0.71458, 0, 0.38509, 0, 0, 0.15389, 0.51169, 0.62779, 0.42963, 0.26122, 0.73117, 0.38791, 0.23532, 0.39703 ], + "triangles": [ 9, 6, 5, 7, 6, 9, 10, 5, 4, 9, 5, 10, 11, 7, 9, 0, 7, 11, 8, 9, 10, 11, 9, 8, 10, 4, 3, 8, 10, 3, 8, 0, 11, 2, 1, 8, 1, 0, 8, 3, 2, 8 ], + "vertices": [ -22.6, -25.18, 26.97, -53.71, 49.29, -48.96, 70.91, -27.42, 61.18, 18.21999, 31.45, 33.12, 2.13, 26.87, -29.44, 6.92, 24.39, -22.3, 10.67, 6.25, 39.72, 1.56, -4.23999, -8.58 ], + "hull": 8, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 0 ], + "width": 91, + "height": 84 + } + }, + "browL": { + "browL": { + "type": "mesh", + "uvs": [ 0.62764, 0, 0, 0.55392, 0, 1, 0.37349, 1, 1, 0.4836, 1, 0 ], + "triangles": [ 0, 5, 4, 1, 0, 4, 3, 2, 1, 4, 3, 1 ], + "vertices": [ 24.48, 8.57, -3.31, 6.09, -6.79, -3.07, 7.17, -8.38, 34.63, -6.66, 38.4, 3.28 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 40, + "height": 22 + } + }, + "browR": { + "browR": { + "type": "mesh", + "uvs": [ 0.32799, 0.01349, 0, 0, 0.01721, 0.47317, 0.66639, 1, 1, 1, 1, 0.60577 ], + "triangles": [ 2, 1, 0, 2, 0, 5, 3, 2, 5, 3, 5, 4 ], + "vertices": [ 24.12, -6.57, 32.82, -0.69, 25.44, 8.56, 0.89, 7.05, -7.75, 0.79, -1.97, -7.19 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 32, + "height": 25 + } + }, + "eyelids closed": { + "eyelids closed": { "x": 7.71, "y": 8.77, "rotation": 3.33, "width": 183, "height": 92 } + }, + "eyelids open": { + "eyelids open": { + "type": "mesh", + "uvs": [ 0, 0.66298, 0.14307, 0.91808, 0.34607, 0.94181, 0.45207, 0.70056, 0.58607, 0.94972, 0.75507, 1, 0.99997, 0.80932, 1, 0.29912, 0.90697, 0.09741, 0.72297, 0.05391, 0.55697, 0.17058, 0.45697, 0.43161, 0.37697, 0.14883, 0.23197, 0, 0.10068, 0, 0, 0.23386 ], + "triangles": [ 15, 11, 0, 15, 14, 13, 13, 12, 15, 11, 15, 12, 3, 0, 11, 7, 10, 9, 7, 9, 8, 7, 11, 10, 6, 11, 7, 3, 11, 6, 1, 0, 3, 2, 1, 3, 4, 3, 6, 5, 4, 6 ], + "vertices": [ -80.37, -10.14, -53.91, -31.34, -18.12, -31.38, -0.74, -8.85999, 24.08, -29.63, 54.03, -32.37, 96.07, -12.92, 93.44, 32.4, 76.06, 49.37, 43.5, 51.35, 14.94, 39.29, -1.27, 15.08, -16.79, 39.38, -43.04, 51.13, -66.11, 49.78, -82.58999, 27.98 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30 ], + "width": 176, + "height": 89 + } + }, + "hairL": { + "hairL": { + "type": "mesh", + "uvs": [ 0, 0.51919, 0.0632, 0.70911, 0.29876, 0.93436, 0.59811, 0.97853, 0.99999, 1, 0.92691, 0.87253, 0.7257, 0.68703, 0.58339, 0.51036, 0.49506, 0.27186, 0.37728, 0.0157, 0.00922, 0, 0, 0.2807 ], + "triangles": [ 11, 10, 9, 11, 9, 8, 0, 11, 8, 0, 8, 7, 1, 0, 7, 2, 1, 7, 2, 7, 6, 3, 2, 6, 3, 6, 5, 3, 5, 4 ], + "vertices": [ 10.89, -19.51, 22.78, -19.87999, 39.63, -12.09, 47.26, 2.4, 55.34, 22.58, 46.84, 21.25, 32.84, 14.47, 20.36, 10.53, 5.27, 10.53, -11.31, 9.35999, -18.49, -9.18, -2.67, -14.98 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 54, + "height": 60 + } + }, + "hairL2": { + "hairL2": { + "type": "skinnedmesh", + "uvs": [ 0, 0.35686, 0.08751, 0.53469, 0.27039, 0.74739, 0.4906, 0.8764, 0.74067, 0.94614, 0.95342, 1, 1, 0.9287, 0.82279, 0.78574, 0.6399, 0.59048, 0.51673, 0.35686, 0.37117, 0.09883, 0.26666, 0, 0, 0 ], + "triangles": [ 6, 5, 7, 5, 4, 7, 4, 3, 7, 3, 8, 7, 3, 2, 8, 2, 9, 8, 2, 1, 9, 1, 0, 9, 0, 10, 9, 0, 11, 10, 0, 12, 11 ], + "vertices": [ 2, 49, 3.3, -16.42, 0.88765, 50, -37.53, -4.84, 0.11234, 2, 49, 17.99, -18.75, 0.67842, 50, -24.2, -11.44, 0.32157, 2, 49, 38.64, -16.93, 0.38403, 50, -3.94, -15.85, 0.61596, 2, 49, 55.47, -9.35999, 0.14944, 50, 14.38, -13.64, 0.85055, 2, 49, 69.74, 2.45, 0.02565, 50, 31.52, -6.6, 0.97434, 1, 50, 45.83, -0.28, 1, 2, 49, 78.86, 18.5, 0.03594, 50, 45, 6, 0.96405, 2, 49, 62.84, 14.07, 0.18299, 50, 28.38, 6.54, 0.817, 2, 49, 43.28, 11.5, 0.44116, 50, 8.96, 9.91, 0.55883, 2, 49, 23.66, 14.09, 0.73855, 50, -9, 18.21999, 0.26144, 2, 49, 1.61, 16.37999, 0.92483, 50, -29.36, 26.97, 0.07515, 2, 49, -8.74, 14.37, 0.99968, 50, -39.86, 28.15, 3.1E-4, 2, 49, -19.25, -1.37, 0.98639, 50, -54.58, 16.24, 0.0136 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 71, + "height": 76 + } + }, + "hairM": { + "hairM": { + "type": "skinnedmesh", + "uvs": [ 0.12393, 0.10157, 0.05237, 0.3157, 0.00704, 0.53875, 0, 0.87482, 0.03805, 1, 0.10007, 1, 0.3577, 0.91645, 0.49881, 0.9119, 0.6344, 0.90753, 0.91588, 0.95512, 1, 0.97891, 0.94689, 0.76775, 0.87056, 0.5566, 0.86818, 0.33949, 0.83955, 0.09562, 0.67496, 0, 0.29568, 0, 0.50907, 0.24347, 0.34406, 0.60578, 0.22208, 0.30093, 0.67769, 0.45813, 0.58656, 0.67825, 0.16063, 0.73851 ], + "triangles": [ 9, 11, 10, 9, 8, 11, 7, 21, 8, 8, 21, 11, 6, 5, 22, 22, 5, 3, 5, 4, 3, 7, 6, 18, 6, 22, 18, 3, 2, 22, 7, 18, 21, 21, 12, 11, 22, 2, 18, 19, 2, 1, 2, 19, 18, 21, 20, 12, 21, 18, 20, 18, 17, 20, 18, 19, 17, 20, 13, 12, 13, 20, 17, 13, 17, 14, 14, 17, 15, 1, 0, 19, 19, 16, 17, 19, 0, 16, 17, 16, 15 ], + "vertices": [ 1, 46, -2.06, -32.41999, 1, 1, 46, 14.88, -38.04, 1, 2, 46, 32.34, -41.09, 0.66666, 47, 16.65, -10.85, 0.33333, 2, 46, 58.19, -39.83, 0.33453, 47, 42.21, -6.71, 0.66546, 3, 46, 67.53, -35.46, 0.16544, 47, 51, -1.33, 0.82718, 48, 13.17, -79.12, 0.00736, 3, 46, 67.08, -29.52, 0.14636, 47, 49.89, 4.51, 0.76915, 48, 15.99, -73.87, 0.08447, 3, 46, 58.82, -5.34, 0.23615, 47, 38.98, 27.62, 0.49129, 48, 22.04, -49.05, 0.27254, 3, 46, 57.45, 8.13, 0.22896, 47, 36.12, 40.87, 0.35342, 48, 28.15, -36.95, 0.4176, 3, 46, 56.14, 21.09, 0.22206, 47, 33.37, 53.6, 0.22094, 48, 34.02, -25.33, 0.55699, 3, 46, 57.77, 48.31, 0.13017, 47, 31.95, 80.83, 0.05675, 48, 50.05, -3.27, 0.81307, 3, 46, 58.99, 56.5, 0.1503, 47, 32.25, 89.1, 0.00247, 48, 55.49, 2.97, 0.84722, 2, 46, 43.16, 50.19, 0.33347, 48, 38.75999, 6.18, 0.66652, 2, 46, 27.5, 41.66999, 0.66666, 48, 20.96999, 7.43, 0.33333, 1, 46, 10.85, 40.18999, 1, 1, 46, -7.66, 36.04, 1, 1, 46, -13.82, 19.73, 1, 1, 46, -11.1, -16.57, 1, 1, 46, 6.05, 5.26, 1, 3, 46, 35.06, -8.43999, 0.61317, 47, 15.72, 21.89, 0.38471, 48, 0.36, -38.87, 0.0021, 1, 46, 12.53, -21.88, 1, 1, 46, 21.32, 22.64, 1, 3, 46, 38.88, 15.18, 0.59023, 47, 16.87999, 45.8, 0.17654, 48, 16.29999, -21.01, 0.23321, 3, 46, 46.57, -25.23, 0.47519, 47, 29.03, 6.48, 0.52382, 48, 1.01, -59.22, 9.8E-4 ], + "hull": 17, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 0, 12, 14, 14, 16 ], + "width": 96, + "height": 77 + } + }, + "hairM blob": { + "hairM blob": { + "type": "mesh", + "uvs": [ 0.69346, 0, 0.31103, 0.03982, 0, 0.45391, 0.05436, 1, 0.4984, 0.99804, 1, 0.5292, 0.95526, 0.08774 ], + "triangles": [ 5, 4, 1, 0, 5, 1, 5, 0, 6, 2, 1, 4, 3, 2, 4 ], + "vertices": [ -2.84, -14.32, -0.19, -25.63, 19.08, -33.54, 43.46, -30.07, 42.37, -16.79, 20.20999, -3.37, 0.5, -6.19 ], + "hull": 7, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 0, 12 ], + "width": 30, + "height": 45 + } + }, + "hairM blobS": { + "hairM blobS": { + "type": "mesh", + "uvs": [ 0.94868, 0.00232, 0.40005, 0, 0, 0.64141, 0.13055, 1, 0.6118, 0.94556, 1, 0.30261 ], + "triangles": [ 5, 4, 1, 5, 1, 0, 2, 1, 4, 3, 2, 4 ], + "vertices": [ 6.33, 5.59, 6.94, -3.16, 20.20999, -8.58, 27.21, -5.96, 25.54, 1.62, 12.26, 6.85 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 16, + "height": 20 + } + }, + "hairR": { + "hairR": { + "type": "mesh", + "uvs": [ 0.32525, 0.09815, 0.12488, 0.25779, 0, 0.48767, 0.02147, 0.73351, 0.11842, 0.89315, 0.28, 1, 0.48037, 1, 0.41574, 0.88038, 0.40281, 0.71435, 0.66781, 0.45893, 0.84878, 0.26737, 1, 0.15562, 0.99744, 0, 0.64842, 0 ], + "triangles": [ 10, 13, 12, 10, 12, 11, 9, 13, 10, 0, 13, 9, 9, 1, 0, 8, 1, 9, 2, 1, 8, 3, 2, 8, 4, 3, 8, 4, 8, 7, 5, 4, 7, 5, 7, 6 ], + "vertices": [ -9.09, -6.81, 5.36, -12.64, 25.03, -14.42, 44.98, -10.06, 57.36, -3.88, 64.96, 4.16, 63.56, 12.25, 54.23, 7.94, 40.74, 5.06, 18, 12.14, 1.05999, 16.73, -9.13, 21.25, -21.84, 18.93, -19.39, 4.84 ], + "hull": 14, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 0, 26 ], + "width": 41, + "height": 83 + } + }, + "hairR2": { + "hairR2": { + "type": "skinnedmesh", + "uvs": [ 0.89239, 0, 0.74016, 0.07452, 0.55691, 0.2267, 0.44133, 0.29491, 0.29192, 0.33689, 0.16505, 0.33427, 0.00718, 0.31328, 0, 0.41036, 0.15378, 0.44972, 0.25245, 0.47333, 0.35394, 0.46546, 0.43875, 0.42724, 0.43287, 0.45234, 0.37085, 0.60714, 0.3483, 0.78818, 0.38213, 0.9666, 0.49207, 0.9666, 0.66686, 0.48907, 1, 0.14536, 1, 0, 0.60766, 0.30016, 0.51389, 0.3818 ], + "triangles": [ 11, 3, 21, 7, 6, 5, 11, 4, 3, 8, 7, 5, 11, 10, 4, 9, 5, 4, 9, 4, 10, 8, 5, 9, 21, 3, 2, 12, 11, 21, 0, 19, 18, 20, 2, 1, 18, 17, 20, 21, 20, 17, 1, 0, 18, 18, 20, 1, 12, 21, 17, 13, 12, 17, 17, 14, 13, 16, 15, 14, 17, 16, 14, 21, 2, 20 ], + "vertices": [ 1, 43, -2.69, -5.03, 1, 2, 43, 11.45, -12.85, 0.97293, 44, -22.59, -25.83, 0.02706, 2, 43, 33.79, -19.14, 0.26299, 44, -3.55, -12.55, 0.737, 1, 44, 8.47999, -7.18, 1, 1, 44, 24.96, -5.77, 1, 1, 44, 37.43, -7.71, 1, 1, 44, 51.97, -11.39, 1, 1, 44, 53.68, -1.71, 1, 1, 44, 39.72, 3.77, 1, 1, 44, 30.55, 7.25, 1, 1, 44, 19.9, 8.16, 1, 2, 43, 56.79, -17.09, 0.18536, 44, 9.47, 6.51, 0.81463, 1, 43, 59.2, -16.03, 1, 1, 43, 75.47, -12.31, 1, 2, 43, 91.91, -4.04, 0.99835, 44, 21.69, 41.93999, 0.00164, 1, 43, 105.23, 8.51, 1, 1, 43, 99.55, 17.14, 1, 1, 43, 50.22, 4.38, 1, 2, 43, 4.01, 11.48, 0.99999, 44, -46.12, -16.11, 0, 2, 43, -8.25, 3.41, 1, 44, -47.68, -30.72, 0, 1, 43, 37.33, -10.74, 1, 1, 43, 49.07, -13.58, 1 ], + "hull": 20, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 0, 38, 40, 4, 20, 22, 24, 42, 42, 40, 22, 42, 22, 24 ], + "width": 94, + "height": 101 + } + }, + "hairSide": { + "hairSide": { + "type": "mesh", + "uvs": [ 0.86288, 0.88915, 0.22757, 0.9212, 0.00508, 0.04663, 0.99221, 0.44959 ], + "triangles": [ 3, 1, 2, 0, 1, 3 ], + "vertices": [ -1, 7.56, 29.24, 11.54, 42.07, -8.18999, -6.06, -3.57 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 48, + "height": 24 + } + }, + "head": { + "head": { + "type": "mesh", + "uvs": [ 0.24206, 0, 0, 0.45222, 9.0E-5, 0.80446, 0.28242, 1, 0.64097, 1, 0.93277, 0.93463, 0.98244, 0.80292, 0.99999, 0.41699, 0.88777, 0.16274, 0.64718, 0 ], + "triangles": [ 9, 8, 1, 3, 2, 1, 7, 6, 3, 9, 1, 0, 1, 8, 7, 6, 4, 3, 1, 7, 3, 5, 4, 6 ], + "vertices": [ 193.43, 73.89, 83.29, 107.23, 5.5, 92.1, -25.72, 22.18, -10.54, -55.95, 16.25, -116.73, 47.44, -121.91, 133.42, -109.16, 184.82, -73.8, 210.58, -14.38 ], + "hull": 10, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], + "width": 222, + "height": 225 + } + }, + "indexL": { + "indexL": { + "type": "mesh", + "uvs": [ 0.27265, 0.05076, 0.07156, 0.21655, 0.02393, 0.36472, 0.11389, 0.73513, 0.35202, 0.91152, 0.65893, 0.97855, 0.89177, 0.86566, 0.98173, 0.63283, 0.92352, 0.25888, 0.8071, 0.08955, 0.60073, 0 ], + "triangles": [ 2, 1, 0, 0, 8, 2, 10, 8, 0, 9, 8, 10, 3, 2, 8, 3, 8, 7, 7, 4, 3, 7, 5, 4, 6, 5, 7 ], + "vertices": [ 26.34, 4.6, 20.98, 10.1, 15.82, 11.86, 2.33, 11.3, -4.65, 6.38, -7.92, -0.64, -4.54, -6.67, 3.51, -9.81, 17.04999, -10.02, 23.43, -7.97, 27.22, -3.43 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 4, 16, 6, 14 ], + "width": 24, + "height": 36 + } + }, + "indexR": { + "indexR": { + "type": "mesh", + "uvs": [ 0.36032, 0, 0.28713, 0.09647, 0.17785, 0.24051, 0, 0.52251, 0.07832, 0.85151, 0.28291, 0.93208, 0.52068, 0.93208, 0.68103, 0.67023, 0.84138, 0.6098, 0.94644, 0.3748, 0.94091, 0.17337, 0.70867, 0.05251, 0.45985, 0, 0.50962, 0.38823 ], + "triangles": [ 13, 12, 11, 1, 0, 12, 13, 1, 12, 11, 9, 13, 9, 11, 10, 8, 13, 9, 7, 13, 8, 3, 5, 4, 2, 1, 13, 13, 3, 2, 13, 5, 3, 5, 13, 7, 6, 5, 7 ], + "vertices": [ 9.2, -14.52, 12.54, -12.99, 17.53, -10.71, 26.16, -5.77, 27.28, 3.74, 21.74, 8.52, 14.28, 11.65, 6.42, 7, 0.73, 7.55, -5.1, 2.87, -7.11, -2.39, -1.14, -8.57, 6.08, -13.21, 8.72999, -2.53 ], + "hull": 13, + "edges": [ 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24, 0, 2, 2, 4 ], + "width": 34, + "height": 28 + } + }, + "inmouth": { + "inmouth": { "x": 1.53, "y": 3.93, "rotation": -1.02, "width": 46, "height": 55 } + }, + "irisL": { + "irisL": { + "type": "mesh", + "uvs": [ 0.50042, 8.0E-5, 0.26704, 0.08083, 0.08101, 0.25455, 0.00321, 0.46742, 0.08777, 0.70966, 0.28057, 0.92987, 0.48689, 0.99838, 0.70336, 0.92987, 0.92998, 0.69987, 1, 0.45029, 0.9266, 0.24721, 0.75748, 0.07349 ], + "triangles": [ 8, 10, 9, 4, 2, 1, 3, 2, 4, 8, 4, 1, 11, 1, 0, 10, 1, 11, 8, 1, 10, 7, 5, 4, 8, 7, 4, 6, 5, 7 ], + "vertices": [ 0.86, 22.88, -7.07, 19.08, -13.39, 10.92, -16.04, 0.91, -13.16, -10.46, -6.61, -20.81, 0.4, -24.03, 7.76, -20.81, 15.46, -10, 17.84, 1.72, 15.35, 11.26, 9.6, 19.43 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 34, + "height": 47 + } + }, + "irisL flatspec": { + "irisL flatspec": { + "type": "mesh", + "uvs": [ 0.86335, 0.82292, 0.10561, 0.78759, 0.06831, 0.15344, 0.96892, 0.16522 ], + "triangles": [ 0, 1, 2, 3, 0, 2 ], + "vertices": [ 16.54, -10.97, 2.14, -10.62, 1.43, -4.28, 18.54, -4.4 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 19, + "height": 10 + } + }, + "irisL spec": { + "irisL spec": { + "type": "mesh", + "uvs": [ 0.86251, 0.79041, 0.11006, 0.75378, 0.25366, 1.0E-5, 0.96942, 0.04714 ], + "triangles": [ 0, 2, 3, 1, 2, 0 ], + "vertices": [ 0.57, 3.49, -12.97, 4.26, -10.38, 20.09, 2.49, 19.1 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 18, + "height": 21 + } + }, + "irisR": { + "irisR": { + "type": "mesh", + "uvs": [ 0.52601, 0.01062, 0.25542, 0.08402, 0.08293, 0.25774, 0.00851, 0.4804, 0.09307, 0.70306, 0.26895, 0.91104, 0.52601, 1, 0.76616, 0.91593, 0.91498, 0.71285, 1, 0.47551, 0.93528, 0.24796, 0.75939, 0.07668 ], + "triangles": [ 4, 2, 1, 3, 2, 4, 8, 11, 10, 8, 10, 9, 1, 8, 4, 4, 8, 5, 1, 0, 8, 11, 8, 0, 7, 5, 8, 6, 5, 7 ], + "vertices": [ -0.1, 22.31, -9.3, 18.86, -15.17, 10.69, -17.7, 0.23, -14.82, -10.22999, -8.84, -20, -0.1, -24.18, 8.05, -20.23, 13.11, -10.69, 16, 0.46, 13.8, 11.15, 7.82, 19.2 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22 ], + "width": 34, + "height": 47 + } + }, + "irisR flatspec": { + "irisR flatspec": { + "type": "mesh", + "uvs": [ 0.8498, 0.80682, 0.06439, 0.76397, 0.07509, 0.12877, 0.94096, 0.24675 ], + "triangles": [ 1, 2, 3, 0, 1, 3 ], + "vertices": [ 12.7, -6.86, -4.57, -6.39, -4.33, 0.58999, 14.7, -0.7 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 22, + "height": 11 + } + }, + "irisR spec": { + "irisR spec": { + "type": "mesh", + "uvs": [ 0.83035, 0.9236, 0.05166, 0.85421, 0.20652, 0.09722, 0.95572, 0.11107 ], + "triangles": [ 0, 2, 3, 1, 2, 0 ], + "vertices": [ -1.1, 3.51, -13.56, 4.69, -11.08, 17.56, 0.9, 17.32 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 16, + "height": 17 + } + }, + "middleL": { + "middleL": { + "type": "mesh", + "uvs": [ 0.56585, 0.02295, 0.30716, 0.12726, 0.15283, 0.2387, 0.01668, 0.58288, 0.0666, 0.7861, 0.25268, 0.94671, 0.55676, 0.95654, 0.83814, 0.76316, 0.95159, 0.48459, 0.93346, 0.24203, 0.8382, 0.07484 ], + "triangles": [ 0, 10, 9, 8, 0, 9, 1, 0, 8, 2, 1, 8, 7, 2, 8, 3, 2, 7, 5, 4, 3, 3, 6, 5, 7, 6, 3 ], + "vertices": [ 28.67, 3.86, 23.09, 9.18, 18.07, 11.82, 5.19, 11.54, -1.41, 8.14, -5.5, 1.8, -3.5, -5.84, 5.3, -10.77, 15.76, -10.62, 23.96, -7.59, 28.98, -3.45 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 4, 16, 6, 14 ], + "width": 26, + "height": 36 + } + }, + "middleR": { + "middleR": { + "type": "mesh", + "uvs": [ 0.58054, 0.02406, 0.33431, 0.17106, 0.06666, 0.32506, 0.00778, 0.54906, 0.07737, 0.82906, 0.29148, 1, 0.53772, 0.86406, 0.66619, 0.82206, 0.84284, 0.85006, 0.97131, 0.64706, 0.98736, 0.31106, 0.60322, 0.46044, 0.33022, 0.59344 ], + "triangles": [ 11, 0, 10, 1, 0, 11, 12, 2, 1, 12, 1, 11, 3, 2, 12, 9, 11, 10, 7, 11, 9, 6, 12, 11, 4, 3, 12, 8, 7, 9, 7, 6, 11, 5, 4, 12, 6, 5, 12 ], + "vertices": [ 4.37, -13.19, 13.29, -10.93, 22.96, -8.60999, 25.97, -3.24, 24.94, 4.34, 18.57, 10.01, 9.7, 8.03, 5.21, 7.74, -0.56, 9.53, -5.8, 5.12, -7.9, -3.37, 5.64, -1.89, 15.39, -0.14 ], + "hull": 11, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20, 22, 24 ], + "width": 34, + "height": 26 + } + }, + "mouth": { + "mouth": { "x": 1.05, "y": 2.98, "rotation": -1.02, "width": 89, "height": 83 } + }, + "nose": { + "nose": { + "type": "mesh", + "uvs": [ 1, 0.59333, 0.31942, 0.98575, 0.00201, 0.51279, 0.81751, 0 ], + "triangles": [ 2, 3, 0, 1, 2, 0 ], + "vertices": [ 66.01999, 9.54, 60.74, 16.14, 64.72, 20.46999, 71.46, 12.65 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 11, + "height": 10 + } + }, + "pinkyL": { + "pinkyL": { + "type": "mesh", + "uvs": [ 0.3883, 0.02395, 0.06918, 0.31172, 0.00906, 0.71872, 0.32818, 1, 0.79067, 0.83383, 1, 0.46794, 0.83692, 0.09383 ], + "triangles": [ 5, 4, 0, 5, 0, 6, 1, 0, 4, 3, 2, 1, 4, 3, 1 ], + "vertices": [ 10.28, 12, -0.46, 10.10999, -8, 1.99, -6.16, -8.63, 5.47, -11.4, 15.29, -6.26, 17.95999, 4.23 ], + "hull": 7, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 0, 12 ], + "width": 24, + "height": 27 + } + }, + "pinkyR": { + "middleR": { + "type": "mesh", + "uvs": [ 0.53113, 0.03869, 0.33308, 0.19269, 0.10825, 0.29069, 0, 0.57768, 0.04402, 0.78068, 0.18319, 0.91368, 0.39196, 0.98368, 0.59537, 0.83668, 0.77737, 0.86468, 0.91119, 0.73868, 0.99684, 0.47968, 0.91654, 0.24869, 0.76666, 0.10869, 0.52043, 0.52868 ], + "triangles": [ 13, 1, 0, 13, 0, 12, 13, 12, 11, 13, 11, 10, 9, 13, 10, 13, 4, 3, 7, 13, 9, 8, 7, 9, 3, 2, 13, 13, 2, 1, 6, 5, 13, 5, 4, 13, 7, 6, 13 ], + "vertices": [ 7.25, -13.24, 14.54, -10.35999, 22.49, -9.07, 27.31, -2.29, 26.68, 3.15, 22.56, 7.32, 15.84, 10.25, 8.39999, 7.58, 2.41, 9.29, -2.59999, 6.78, -6.55, 0.58999, -4.81, -5.76, -0.36, -10.17, 9.64, -0.72 ], + "hull": 13, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 0, 24 ], + "width": 34, + "height": 26 + } + }, + "pony1": { + "pony1": { + "type": "skinnedmesh", + "uvs": [ 0, 0.13329, 0.13824, 0.27986, 0.24274, 0.41991, 0.32824, 0.58277, 0.33792, 0.66575, 0.34724, 0.74563, 0.34724, 0.81699, 0.34724, 0.90197, 0.32824, 0.99969, 0.63699, 0.96711, 1, 0.94757, 1, 0.86614, 0.96762, 0.78148, 0.93149, 0.687, 0.8884, 0.60724, 0.83649, 0.51111, 0.74295, 0.41244, 0.65124, 0.31569, 0.50399, 0.19191, 0.29024, 0.0486, 0.17624, 0, 0.00524, 0, 0.67788, 0.7395, 0.59398, 0.54813, 0.47976, 0.69723 ], + "triangles": [ 9, 12, 11, 12, 22, 13, 10, 9, 11, 22, 14, 13, 12, 9, 22, 22, 15, 14, 24, 23, 22, 5, 4, 24, 6, 5, 24, 7, 6, 24, 24, 22, 7, 24, 4, 3, 22, 8, 7, 23, 24, 3, 22, 9, 8, 23, 18, 17, 23, 17, 16, 2, 18, 23, 3, 2, 23, 15, 22, 23, 15, 23, 16, 20, 0, 21, 1, 20, 19, 1, 19, 18, 1, 0, 20, 2, 1, 18 ], + "vertices": [ 1, 34, -2.75, -10.57, 1, 2, 34, 15.34, -13.42, 0.858, 35, -10.94, -15.6, 0.14199, 2, 34, 31.32, -17.62, 0.18389, 35, 5.57, -15.62, 0.8161, 2, 35, 23.6, -17.94, 0.66187, 37, 0.72, -10.56, 0.33812, 3, 34, 55.12, -29.73, 0.00875, 35, 31.67, -21.29, 0.48806, 37, 9.43999, -9.97, 0.50317, 3, 34, 61.82, -34.82, 0.00354, 35, 39.43999, -24.52, 0.32978, 37, 17.84, -9.39999, 0.66666, 3, 34, 67.4, -39.82, 0.00192, 35, 46.11, -27.94, 0.30605, 37, 25.33, -9.49, 0.69202, 1, 37, 34.25999, -9.6, 1, 1, 37, 44.51, -11.09, 1, 2, 37, 41.34999, 11.18, 0.45454, 36, 36.79, -21.5, 0.54544, 1, 36, 45.63, 3.18, 1, 1, 36, 37.83, 6.68, 1, 3, 34, 94.41, -4.04, 0.00256, 35, 63.16, 13.51, 0.27216, 36, 28.77, 8.2, 0.72526, 3, 34, 85.29, 0.62, 0.00542, 35, 53.15, 15.72, 0.3279, 36, 18.65, 9.89999, 0.66666, 3, 34, 76.98, 3.9, 0.01281, 35, 44.28, 16.78, 0.47168, 36, 9.74, 10.5, 0.51549, 2, 35, 33.59, 18.04999, 0.65926, 36, -0.99, 11.23, 0.34073, 2, 35, 21.3, 16.79, 0.8289, 36, -13.2, 9.33, 0.17109, 2, 34, 42.78, 11.59, 0.18399, 35, 9.24, 15.54, 0.816, 1, 34, 26.02, 12.35, 1, 2, 34, 4.55, 10.92, 0.99582, 35, -27.56, 5.19999, 0.00417, 2, 34, -4.71999, 8.21, 0.98425, 35, -35.84999, 0.22, 0.01574, 2, 34, -12.93, -0.96, 0.99487, 35, -41.46, -10.72, 0.00512, 2, 37, 17.48, 14.41, 0.52799, 36, 16.19, -9.01, 0.472, 3, 35, 29.09, 0.74, 0.73333, 37, -2.68, 8.60999, 0.14666, 36, -4.6, -6.28, 0.12, 1, 37, 12.87, 0.19, 1 ], + "hull": 22, + "edges": [ 0, 2, 2, 4, 4, 6, 14, 16, 16, 18, 18, 20, 20, 22, 34, 36, 36, 38, 38, 40, 40, 42, 0, 42, 44, 46, 16, 44, 26, 28, 28, 30, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 30, 32, 32, 34 ], + "width": 72, + "height": 105 + } + }, + "pony2": { + "pony2": { + "type": "skinnedmesh", + "uvs": [ 0, 0.01225, 0, 0.16059, 0.07048, 0.25835, 0.10916, 0.31199, 0.14855, 0.36662, 0.20193, 0.43853, 0.24878, 0.50163, 0.28646, 0.55239, 0.31721, 0.5938, 0.34738, 0.63445, 0.38869, 0.68437, 0.42486, 0.7281, 0.47502, 0.78874, 0.51441, 0.83635, 0.68143, 1, 0.81664, 0.95172, 1, 0.88168, 1, 0.79515, 0.83255, 0.65917, 0.76214, 0.61585, 0.70529, 0.58088, 0.63899, 0.54009, 0.57803, 0.50259, 0.54048, 0.4656, 0.49529, 0.42107, 0.44368, 0.37023, 0.39267, 0.31997, 0.33545, 0.2636, 0.30394, 0.21751, 0.27183, 0.17054, 0.20024, 0.06582, 0.14457, 0.00401, 0.55254, 0.65391, 0.67684, 0.74492 ], + "triangles": [ 20, 32, 21, 33, 20, 19, 33, 32, 20, 15, 18, 17, 18, 33, 19, 16, 15, 17, 15, 33, 18, 32, 22, 21, 12, 11, 32, 13, 12, 32, 33, 13, 32, 14, 33, 15, 13, 33, 14, 11, 10, 32, 1, 0, 31, 1, 31, 30, 2, 1, 30, 2, 30, 29, 3, 2, 29, 3, 29, 28, 4, 3, 28, 4, 28, 27, 5, 4, 27, 5, 27, 26, 6, 5, 26, 6, 26, 25, 7, 6, 25, 7, 25, 24, 8, 7, 24, 23, 9, 8, 23, 8, 24, 9, 23, 22, 32, 9, 22, 10, 9, 32 ], + "vertices": [ 1, 30, -8.14, 1.04999, 1, 1, 30, 0.99, -7.18, 1, 1, 30, 11.07, -8.10999, 1, 2, 31, -9.35, -8, 0.20667, 30, 16.61, -8.63, 0.79332, 2, 31, -3.74, -8.72999, 0.41715, 30, 22.24, -9.14999, 0.58284, 2, 31, 3.73, -9.59, 0.72759, 30, 29.75, -9.72999, 0.2724, 1, 31, 10.3, -10.34, 1, 3, 31, 15.58, -10.95, 0.94603, 33, -13.96, -12.12, 0.0429, 32, -14.81, -8.14, 0.01105, 3, 31, 19.89, -11.44, 0.85612, 33, -9.63, -11.92, 0.10558, 32, -10.78, -9.76, 0.03829, 3, 31, 24.12, -11.93, 0.71142, 33, -5.38, -11.72, 0.19561, 32, -6.84, -11.35, 0.09295, 3, 31, 29.56, -12.26, 0.5223, 33, 0.04, -11.18, 0.4394, 32, -1.67, -13.12, 0.03829, 3, 31, 34.33, -12.55, 0.31189, 33, 4.8, -10.71, 0.67703, 32, 2.84, -14.67, 0.01105, 3, 31, 40.95, -12.96, 0.13585, 33, 11.4, -10.05, 0.86243, 32, 9.10999, -16.81, 0.0017, 1, 33, 16.58, -9.54, 1, 1, 33, 35.93999, -5.53, 1, 2, 33, 39.31, 6.28, 0.50399, 32, 41.29, -13.55, 0.496, 1, 32, 51.93, -0.54, 1, 1, 32, 48.28, 5.64, 1, 1, 32, 30.14, 8.05, 1, 3, 31, 47.84, 14.74, 0.10666, 33, 13.77, 18.4, 6.6E-4, 32, 23.1, 8.08, 0.89267, 3, 31, 42.35, 13.25, 0.27184, 33, 8.59, 16.04999, 0.00626, 32, 17.42, 8.1, 0.72188, 3, 31, 35.95, 11.52, 0.49123, 33, 2.55, 13.32, 0.02539, 32, 10.78, 8.12, 0.48336, 3, 31, 30.07, 9.92, 0.69316, 33, -2.99, 10.8, 0.06975, 32, 4.69, 8.14, 0.23708, 3, 31, 25.62, 9.74, 0.82519, 33, -7.36, 9.91, 0.02539, 32, 0.35, 9.14, 0.1494, 4, 31, 20.26, 9.52, 0.89665, 30, 45.57, 9.96, 0.01837, 33, -12.62, 8.84, 0.00626, 32, -4.87, 10.35, 0.07869, 4, 31, 14.14, 9.28, 0.89545, 30, 39.47, 9.49, 0.0735, 33, -18.62, 7.62, 6.6E-4, 32, -10.83, 11.74, 0.03036, 2, 31, 8.09, 9.03, 0.8346, 30, 33.43, 9.03, 0.16539, 2, 31, 1.30999, 8.76, 0.64909, 30, 26.66, 8.51, 0.3509, 2, 31, -3.32, 9.47, 0.3443, 30, 22, 9.06, 0.65569, 2, 31, -8.04, 10.2, 0.0337, 30, 17.26, 9.60999, 0.96629, 1, 30, 6.68, 10.86, 1, 1, 30, -0.33, 10.74, 1, 2, 33, 6.04, 1.81, 0.51199, 32, 9.17, -3.79, 0.488, 3, 31, 50.42, 2.02, 0.00322, 33, 18.35, 6.25, 0.48683, 32, 22.22, -4.87, 0.50994 ], + "hull": 32, + "edges": [ 0, 2, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 60, 62, 0, 62, 2, 4, 58, 60, 18, 20, 20, 22, 22, 24, 24, 26, 40, 42, 42, 44, 36, 38, 38, 40, 66, 64, 54, 56, 56, 58, 50, 52, 52, 54, 8, 10, 10, 12, 4, 6, 6, 8, 12, 14, 48, 50, 14, 16, 16, 18, 44, 46, 46, 48, 44, 18 ], + "width": 86, + "height": 83 + } + }, + "ringL": { + "ringL": { + "type": "mesh", + "uvs": [ 0.53521, 0.0222, 0.95301, 0.12326, 0.88955, 0.66716, 0.45407, 1, 0.06137, 0.87066, 0.08698, 0.36747 ], + "triangles": [ 2, 0, 1, 5, 0, 2, 3, 4, 5, 2, 3, 5 ], + "vertices": [ 19.25, 6.34, 22.12, -4.56, 7.2, -11.38, -7.12, -6.65, -8.93, 4.11, 4.42, 11.16 ], + "hull": 6, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 0, 10 ], + "width": 26, + "height": 30 + } + }, + "ringR": { + "indexR": { + "type": "mesh", + "uvs": [ 0.34216, 0.00754, 0.1334, 0.26103, 0.01028, 0.43003, 0.03705, 0.81353, 0.19228, 0.95003, 0.45993, 0.99553, 0.71151, 0.69003, 0.83998, 0.61853, 0.9631, 0.31953, 0.97381, 0.15703, 0.68475, 0.05303, 0.50275, 0.01403, 0.53057, 0.38289, 0.35393, 0.59089 ], + "triangles": [ 8, 10, 9, 12, 11, 10, 12, 10, 8, 0, 12, 1, 12, 0, 11, 13, 1, 12, 2, 1, 13, 7, 12, 8, 6, 12, 7, 13, 12, 6, 3, 2, 13, 4, 3, 13, 5, 13, 6, 4, 13, 5 ], + "vertices": [ 7.28, -13.61, 16.75, -10.26, 22.57, -7.79, 26.37, 2.28, 23.25, 8, 15.58, 13.07, 4.17999, 9.03, -0.62, 9.10999, -8, 3.35, -10.29, -0.58999, -2.67, -7.45, 2.43, -11.1, 6.03, -1.37, 13.96, 1.29 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 26, 24 ], + "width": 34, + "height": 28 + } + }, + "rotate": { + "rotate": { + "type": "mesh", + "color": "f0100cff", + "uvs": [ 0.48079, 0, 0.34251, 0.15285, 0, 0.22277, 0, 0.75692, 0.29851, 1, 0.66936, 1, 1, 0.77929, 1, 0.34582, 0.60965, 0.13328 ], + "triangles": [ 1, 0, 8, 3, 2, 1, 8, 7, 6, 4, 3, 1, 5, 4, 1, 1, 8, 5, 6, 5, 8 ], + "vertices": [ 65.26999, 1.17999, 47.24, 15.7, 38.99, 51.67, -24.03, 51.67, -52.72, 20.32, -52.72, -18.61, -26.67, -53.32, 24.47, -53.32, 49.55, -12.34 ], + "hull": 9, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 0, 16 ], + "width": 105, + "height": 118 + } + }, + "strap": { + "strap": { + "type": "skinnedmesh", + "uvs": [ 0.34969, 0, 0.20076, 0.08266, 0.03528, 0.21905, 0.02424, 0.46741, 0.10147, 0.76869, 0, 0.82773, 0, 0.93562, 0.23386, 1, 0.83511, 1, 1, 0.87862, 1, 0.82773, 0.64757, 0.72187, 0.4545, 0.43891, 0.47657, 0.24348, 0.64205, 0.08673, 0.66963, 0.01752 ], + "triangles": [ 14, 0, 15, 13, 0, 14, 1, 0, 13, 13, 2, 1, 12, 2, 13, 4, 3, 12, 3, 2, 12, 8, 11, 10, 6, 5, 4, 6, 4, 7, 9, 8, 10, 7, 11, 8, 4, 12, 11, 7, 4, 11 ], + "vertices": [ 1, 7, -7.67, -10.93, 1, 1, 7, 8.72, -14, 1, 2, 2, 58.57, 20.03, 0.02146, 7, 33.82, -14.48, 0.97853, 3, 5, 69.28, 10.57, 0.00935, 2, 16.86, 21.19, 0.97687, 7, 72.49, 1.2, 0.01376, 1, 5, 18.94, 17.69, 1, 1, 5, 10.76, 26.12, 1, 1, 5, -6.86, 30.34, 1, 1, 5, -20.75, 18.75, 1, 1, 5, -29.42, -17.5, 1, 1, 5, -11.97, -32.18, 1, 1, 5, -3.65, -34.16999, 1, 2, 5, 18.71999, -17.06, 0.98247, 2, -26.33, -16.92, 0.01751, 1, 2, 21.34, -5.53, 1, 2, 2, 54.15, -7.27, 0.10496, 7, 26.89, 12.3, 0.89503, 1, 7, -1.35, 11.44, 1, 1, 7, -12.72, 8.46, 1 ], + "hull": 16, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30 ], + "width": 62, + "height": 168 + } + }, + "thumbL": { + "thumbL": { + "type": "mesh", + "uvs": [ 0.02768, 0.34732, 0.02654, 0.705, 0.2247, 0.80529, 0.48611, 0.83593, 0.61892, 0.94736, 0.80232, 0.93621, 0.96886, 0.75793, 1, 0.55457, 0.91616, 0.31779, 0.82762, 0.17851, 0.68216, 0.05872, 0.52616, 0.02251, 0.3807, 0.04479, 0.24789, 0.09215, 0.11719, 0.16736, 0.37101, 0.43959, 0.66614, 0.51109 ], + "triangles": [ 15, 13, 12, 14, 13, 15, 0, 14, 15, 10, 15, 11, 16, 10, 9, 16, 9, 8, 15, 12, 11, 10, 16, 15, 16, 8, 7, 1, 0, 15, 6, 16, 7, 2, 1, 15, 3, 15, 16, 16, 4, 3, 2, 15, 3, 6, 5, 16, 5, 4, 16 ], + "vertices": [ 26.92, 6.63, 21.71, 15.19, 13.99, 13.74, 5.3, 9.39999, -0.51, 9.47999, -6.12, 5.66, -8.76, -1.81, -6.76, -7.26, -0.64, -11.28, 4.17999, -12.89, 10.53, -12.93, 15.97, -10.77, 20.23, -7.42, 23.72, -3.71, 26.74, 0.61, 14.74, 2.18, 4.39, -1.83 ], + "hull": 15, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 0, 28, 30, 32 ], + "width": 37, + "height": 28 + } + }, + "thumbR": { + "thumbR": { + "type": "mesh", + "uvs": [ 0.66994, 0, 0.47671, 0.20243, 0.2626, 0.17987, 0.06938, 0.33779, 0, 0.68371, 0.10071, 0.93939, 0.40883, 1, 0.6856, 0.89427, 0.80049, 0.63859, 0.9676, 0.37539, 0.95716, 0.16483, 0.84749, 0.07459, 0.39531, 0.5683, 0.58237, 0.52462 ], + "triangles": [ 1, 9, 13, 11, 1, 0, 11, 9, 1, 9, 11, 10, 12, 2, 1, 12, 1, 13, 3, 2, 12, 8, 13, 9, 4, 3, 12, 7, 13, 8, 5, 4, 12, 7, 6, 12, 7, 12, 13, 5, 12, 6 ], + "vertices": [ -0.75, -8.32, 7.72, -6.87, 14.38, -10.8, 22.36, -10.35, 28.44, -3.71, 28.03, 3.62, 18.77, 9.89999, 8.66, 11.96, 2.11999, 8.07, -6.18, 4.84, -8.18, -0.03, -5.65, -3.81, 14.41, 0.01, 7.89, 2.03 ], + "hull": 12, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 0, 22, 24, 26 ], + "width": 36, + "height": 25 + } + } + } +}, +"animations": { + "blink": { + "slots": { + "eyelids closed": { + "attachment": [ + { "time": 0, "name": "eyelids closed" }, + { "time": 0.0666, "name": null } + ] + } + }, + "bones": { + "eyelids": { + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { + "time": 0.0666, + "x": 1, + "y": 0.894, + "curve": [ 0.15, 0, 0.341, 1 ] + }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + } + } + }, + "main": { + "bones": { + "hip": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 13.42, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 1, + "y": 1.02, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "femurR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "angle": 4.88, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": -2.37, + "y": 1.21, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.0333, + "x": 0.982, + "y": 1.046, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "tibiaR": { + "rotate": [ + { + "time": 0, + "angle": 2.93, + "curve": [ 0.316, 0.54, 0.642, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 1.5, + "angle": 8.61, + "curve": [ 0.357, 0, 0.672, 0.55 ] + }, + { "time": 2, "angle": 2.93 } + ] + }, + "femurL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "angle": -11.11, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "tibiaL": { + "rotate": [ + { + "time": 0, + "angle": 3.48, + "curve": [ 0.375, 0.5, 0.75, 1 ] + }, + { + "time": 0.5, + "angle": 10.23, + "curve": [ 0.389, 0.4, 0.56, 1 ] + }, + { + "time": 1.5, + "angle": -3.26, + "curve": [ 0.25, 0, 0.625, 0.5 ] + }, + { "time": 2, "angle": 3.48 } + ] + }, + "lumbar": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "angle": 0.11, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 2.48, + "y": 0.23, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "thorax": { + "rotate": [ + { + "time": 0, + "angle": 0.95, + "curve": [ 0.317, 0.57, 0.645, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 1.3333, + "angle": 3.86, + "curve": [ 0.358, 0, 0.668, 0.6 ] + }, + { "time": 2, "angle": 0.95 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 2.95, + "y": -0.65, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "humerusR": { + "rotate": [ + { + "time": 0, + "angle": -3.46, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.8666, + "angle": 7.59, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": -3.46 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.9666, + "x": -1.08, + "y": -1.53, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "radiusR": { + "rotate": [ + { + "time": 0, + "angle": -4.64, + "curve": [ 0.316, 0.54, 0.642, 1 ] + }, + { + "time": 0.3333, + "angle": -9.49, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.5, + "angle": 4.71, + "curve": [ 0.357, 0, 0.672, 0.55 ] + }, + { "time": 2, "angle": -4.64 } + ] + }, + "humerusL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.9, + "angle": 17.78, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.9, + "x": 0.04, + "y": 0.95, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "radiusL": { + "rotate": [ + { + "time": 0, + "angle": 2.91, + "curve": [ 0.317, 0.57, 0.646, 1 ] + }, + { "time": 0.2333, "angle": 0 }, + { + "time": 0.6666, + "angle": -5.94, + "curve": [ 0.319, 0.46, 0.636, 1 ] + }, + { + "time": 1.5, + "angle": 12.84, + "curve": [ 0.358, 0, 0.667, 0.61 ] + }, + { "time": 2, "angle": 2.91 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": -5.09, + "y": -2.47, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "head": { + "translate": [ + { + "time": 0, + "x": 2.99, + "y": 0.95, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 2.99, "y": 0.95 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1.006, + "y": 0.98, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "rr": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.79, 0, 0.524, 1 ] + }, + { + "time": 1.1666, + "angle": 51.39, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "strap anchor": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1.54, + "y": -0.49, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "x": 0.97, + "y": 1, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "strap tie": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1, + "x": 0.39, + "y": 0.59, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "arrowY": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.347, 0, 0.677, 0.4 ] + }, + { + "time": 0.3333, + "x": 5.25, + "y": 6.22, + "curve": [ 0.328, 0.33, 0.633, 1 ] + }, + { + "time": 1.3333, + "x": -17.78, + "y": -21.05, + "curve": [ 0.2, 0, 0.289, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "arrowX": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.347, 0, 0.677, 0.4 ] + }, + { + "time": 0.3333, + "x": 8.76, + "y": -0.72, + "curve": [ 0.328, 0.33, 0.633, 1 ] + }, + { + "time": 1.3333, + "x": -23.36, + "y": 1.91, + "curve": [ 0.2, 0, 0.289, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairR1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.223, 0.33, 0.635, 1 ] + }, + { + "time": 0.3333, + "angle": 4.4, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 0.6666, + "angle": 355.25, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.2, + "angle": 4.4, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.5, + "angle": 358.55, + "curve": [ 0.353, 0, 0.635, 1 ] + }, + { + "time": 1.7333, + "angle": 353.9, + "curve": [ 0.353, 0, 0.825, 0.73 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.6, + "x": 1, + "y": 1.119, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.6, + "x": 1, + "y": 1.119, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "hairM": { + "rotate": [ + { + "time": 0, + "angle": -2.48, + "curve": [ 0.235, 0.51, 0.483, 1 ] + }, + { "time": 0.4666, "angle": 0 }, + { + "time": 1.4666, + "angle": -5.52, + "curve": [ 0.542, 0, 0.764, 0.51 ] + }, + { "time": 2, "angle": -2.48 } + ] + }, + "hairMR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.5, + "angle": -4.64, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 4.36, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": -8.58, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "hairML": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.266, 0.3, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": 1.52, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.3333, + "angle": -11.95, + "curve": [ 0.25, 0, 0.794, 0.75 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "hairL1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.1666, + "angle": -8.18, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "hairL2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.5, + "angle": -4.71, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": -0.28, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": -6.78, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1.03, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 0.5, "x": 1, "y": 1 }, + { + "time": 1.5, + "x": 1, + "y": 1.06, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { "time": 2, "x": 1, "y": 1.03 } + ] + }, + "hairR2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 1.75, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1.003, + "y": 1.016, + "curve": [ 0.233, 0.54, 0.506, 1 ] + }, + { "time": 0.4, "x": 1, "y": 1 }, + { + "time": 1.4, + "x": 1.01, + "y": 1.05, + "curve": [ 0.56, 0, 0.747, 0.55 ] + }, + { "time": 2, "x": 1.003, "y": 1.016 } + ] + }, + "hairR2 2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.3, + "angle": 13.76, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.8666, + "angle": 3.94, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": 13.76, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "eyelids": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1, "x": -0.97, "y": -0.13 }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "mouth": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": -1.18, + "y": 0.01, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "mouth opening": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 0, + "y": -0.64, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 0.847, + "y": 0.958, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "browR": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 0.12, + "y": -4.71, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "browL": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": -2.35, + "y": 4.93, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairSide": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.227, 0.29, 0.655, 1 ] + }, + { + "time": 0.2333, + "angle": -7.55, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.8666, + "angle": 10.25, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.3666, + "angle": -7.46, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.7666, + "angle": 8.26, + "curve": [ 0.353, 0, 0.817, 0.56 ] + }, + { "time": 2, "angle": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.5, "x": 1.059, "y": 0.925 }, + { "time": 1, "x": 1.004, "y": 0.95 }, + { "time": 1.5, "x": 1.059, "y": 0.925 }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "thumbL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.5333, + "angle": 21.4, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.3666, + "angle": -22.39, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 4.53, + "y": -3.02, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "indexL": { + "rotate": [ + { + "time": 0, + "angle": 3.22, + "curve": [ 0.326, 0.53, 0.654, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 0.9, + "angle": -9.85, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5333, + "angle": 8.52, + "curve": [ 0.352, 0, 0.675, 0.54 ] + }, + { "time": 2, "angle": 3.22 } + ], + "translate": [ + { + "time": 0, + "x": -0.9, + "y": -0.8, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 0.3666, "x": 0, "y": 0 }, + { + "time": 1.2666, + "x": -3.2, + "y": -2.85, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": -0.9, "y": -0.8 } + ] + }, + "middleL": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.3333, "angle": 0 }, + { "time": 0.7666, "angle": -13.31 }, + { "time": 1.1666, "angle": -0.17 }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.251, 0, 0.623, 0.49 ] + }, + { + "time": 0.4333, + "x": 0.16, + "y": 2.38, + "curve": [ 0.373, 0.49, 0.751, 1 ] + }, + { + "time": 1.4666, + "x": -2.49, + "y": -5.66, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "ringL": { + "rotate": [ + { "time": 0, "angle": -20.61, "curve": "stepped" }, + { + "time": 0.4666, + "angle": -20.61, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "angle": -17.66, + "curve": [ 0.251, 0, 0.623, 0.49 ] + }, + { + "time": 1.3666, + "angle": 12.76, + "curve": [ 0.373, 0.49, 0.75, 1 ] + }, + { "time": 2, "angle": -20.61 } + ], + "translate": [ + { + "time": 0, + "x": -2.13, + "y": -2.27, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 0.3333, "x": 0, "y": 0 }, + { + "time": 0.7666, + "x": -1.19, + "y": 0.27, + "curve": [ 0.367, 0.46, 0.753, 1 ] + }, + { + "time": 1.3333, + "x": -7.51, + "y": -8.02, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": -2.13, "y": -2.27 } + ] + }, + "pinkyL": { + "rotate": [ + { + "time": 0, + "angle": 7.2, + "curve": [ 0.326, 0.57, 0.656, 1 ] + }, + { "time": 0.3333, "angle": 0 }, + { + "time": 1.1, + "angle": -20.2, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5666, + "angle": 27.64, + "curve": [ 0.353, 0, 0.672, 0.6 ] + }, + { "time": 2, "angle": 7.2 } + ], + "translate": [ + { + "time": 0, + "x": -4.47, + "y": -1.73, + "curve": [ 0.378, 0.52, 0.746, 1 ] + }, + { "time": 0.3333, "x": 0, "y": 0 }, + { + "time": 0.8333, + "x": 0.78, + "y": 0.49, + "curve": [ 0.361, 0.44, 0.755, 1 ] + }, + { + "time": 1.6, + "x": -10.16, + "y": -3.94, + "curve": [ 0.247, 0, 0.629, 0.52 ] + }, + { "time": 2, "x": -4.47, "y": -1.73 } + ], + "scale": [ + { + "time": 0, + "x": 0.969, + "y": 0.993, + "curve": [ 0.382, 0.57, 0.735, 1 ] + }, + { "time": 0.3333, "x": 1, "y": 1 }, + { + "time": 1.3333, + "x": 0.892, + "y": 0.976, + "curve": [ 0.243, 0, 0.648, 0.6 ] + }, + { "time": 2, "x": 0.969, "y": 0.993 } + ] + }, + "handL": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.6666, + "angle": -13.99, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.4666, + "angle": -1.75, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": -2.94, + "y": -3.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ], + "scale": [ + { + "time": 0, + "x": 1, + "y": 1, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "x": 1.079, + "y": 1.079, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 1, "y": 1 } + ] + }, + "thumbR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.348, 0, 0.676, 0.44 ] + }, + { + "time": 0.7666, + "angle": 14.27, + "curve": [ 0.334, 0.32, 0.667, 0.66 ] + }, + { + "time": 1.1666, + "angle": 12.05, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 0.5, + "x": 2.17, + "y": 1.11, + "curve": [ 0.332, 0.36, 0.663, 0.73 ] + }, + { + "time": 0.7666, + "x": -4.4, + "y": 4.26, + "curve": [ 0.326, 0.6, 0.658, 1 ] + }, + { + "time": 1, + "x": -6.85, + "y": 2.43, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 1.5, + "x": -0.15, + "y": 2.83, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "indexR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 5.32, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.349, 0, 0.676, 0.46 ] + }, + { + "time": 0.4333, + "x": 2.73, + "y": 5.71, + "curve": [ 0.329, 0.46, 0.652, 1 ] + }, + { + "time": 1, + "x": 2.75, + "y": 13.12, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "middleR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 11.8, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 0.5, + "x": 5.17, + "y": -0.78, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { + "time": 1, + "x": 7.99, + "y": 5.3, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "x": 5.17, + "y": -0.78, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "ringR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": 11.72, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.35, 0, 0.676, 0.5 ] + }, + { + "time": 0.5, + "x": 4.21, + "y": -1.67, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { + "time": 1, + "x": 9.2, + "y": 1.03, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "x": 4.21, + "y": -1.67, + "curve": [ 0.327, 0.5, 0.653, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "footL": { + "rotate": [ + { + "time": 0, + "angle": -2.11, + "curve": [ 0.328, 0.47, 0.652, 1 ] + }, + { + "time": 0.6, + "angle": 6.05, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.5, + "angle": -8.19, + "curve": [ 0.349, 0, 0.676, 0.47 ] + }, + { "time": 2, "angle": -2.11 } + ] + }, + "pinkyR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.2666, + "angle": -2.35, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.353, 0, 0.672, 0.6 ] + }, + { + "time": 0.6666, + "x": -0.04, + "y": -9.92, + "curve": [ 0.326, 0.57, 0.656, 1 ] + }, + { + "time": 1.2666, + "x": 3.35, + "y": -10.54, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "handR": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1, + "angle": -4.18, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "pony1 1": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "angle": -12.37, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": 0 } + ] + }, + "pony1 2": { + "rotate": [ + { + "time": 0, + "angle": 4.41, + "curve": [ 0.326, 0.54, 0.654, 1 ] + }, + { + "time": 0.4, + "angle": 10.29, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.4, + "angle": -6.34, + "curve": [ 0.352, 0, 0.674, 0.55 ] + }, + { "time": 2, "angle": 4.41 } + ] + }, + "pony1 3R": { + "rotate": [ + { + "time": 0, + "angle": -7.59, + "curve": [ 0.6, 0.28, 0.534, 1 ] + }, + { + "time": 0.6666, + "angle": 12.45, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1.8333, + "angle": -8.13, + "curve": [ 0.424, 0, 0.747, 0.38 ] + }, + { "time": 2, "angle": -7.59 } + ] + }, + "pony1 3L": { + "rotate": [ + { + "time": 0, + "angle": -0.17, + "curve": [ 0.245, 0.48, 0.463, 1 ] + }, + { + "time": 0.5666, + "angle": 10.98, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1.5, + "angle": -8.13, + "curve": [ 0.521, 0, 0.772, 0.48 ] + }, + { "time": 2, "angle": -0.17 } + ] + }, + "pony2 1": { + "rotate": [ + { + "time": 0, + "angle": -8.23, + "curve": [ 0.337, 0.31, 0.652, 1 ] + }, + { "time": 0.7666, "angle": 0 }, + { + "time": 1.7666, + "angle": -9.51, + "curve": [ 0.343, 0, 0.674, 0.39 ] + }, + { "time": 2, "angle": -8.23 } + ] + }, + "pony2 2": { + "rotate": [ + { + "time": 0, + "angle": -16.39, + "curve": [ 0.346, 0, 0.676, 0.42 ] + }, + { + "time": 0.3333, + "angle": -11.16, + "curve": [ 0.332, 0.4, 0.652, 1 ] + }, + { + "time": 1, + "angle": -7.45, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2, "angle": -16.39 } + ] + }, + "pony2 3R": { + "rotate": [ + { + "time": 0, + "angle": -11.29, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.8666, + "angle": -6.62, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "angle": -11.29 } + ] + }, + "pony2 3L": { + "rotate": [ + { + "time": 0, + "angle": -10.97, + "curve": [ 0.471, 0.19, 0.438, 1 ] + }, + { + "time": 0.6666, + "angle": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.6666, + "angle": -13.5, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2, "angle": -10.97 } + ] + }, + "irisR": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0.26, + "y": -1.35, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "irisL": { + "translate": [ + { + "time": 0, + "x": 0, + "y": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1, + "x": 0.31, + "y": -2.38, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "x": 0, "y": 0 } + ] + }, + "hairL2 2": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.7666, + "angle": -7.98, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.2, + "angle": -0.55, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 1.5333, + "angle": -9.16, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 2, "angle": 0 } + ] + } + }, + "ffd": { + "default": { + "armL": { + "armL": [ + { "time": 0, "curve": "stepped" }, + { + "time": 0.9, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.2666, + "offset": 28, + "vertices": [ -1.51086, 0.7194, -1.20222, -0.99176, -1.74438, -0.55032, -1.74438, -0.55032, -5.4474, -2.71472, -6.01333, -5.1203, -6.01333, -5.1203, -8.01959, 2.93899, -6.01333, -5.1203, -6.01333, -5.1203, -6.01333, -5.1203, -8.01959, 2.93899, -6.01333, -5.1203, -3.22636, -2.41085, -3.92453, 0.90549, -2.31031, -2.9559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.92453, 0.90549, -2.31031, -2.9559, -6.81498, -7.15472, 0, 0, 0, 0, 0, 0, -8.95159, 4.12372, -7.38049, -5.44018, -4.89614, -4.35224 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "armR": { + "armR": [ + { + "time": 0, + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { + "time": 1, + "vertices": [ 3.29416, 7.54852, 7.38307, 4.59548, 3.10798, 4.21008, 3.70951, 3.69085, 2.18121, 3.09289, 2.62421, 2.72685, -3.07338, 1.39288, -2.82711, 1.84239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.41422, 0.03585, 0.41485, -0.02728, 0.41422, 0.03585, 0.41485, -0.02728, 0, 0, 0, 0, -2.70642, -0.02931, -7.84894, 0.7765, -6.89496, 4.14276, -6.60889, 5.26571, -3.56116, 5.85961, -1.18236, 5.82011, 3.62316, 4.25227, 2.36634, 3.31623, 2.84126, 2.91955, -0.40275, 1.8318, -0.12073, 1.8717, 0.78494, 0.48286, 0.84898, 0.35839, 0, 0, 0, 0, -2.54119, 3.44401, -0.37628, 0.85307, 0, 0, 1.28616, -0.30337, 1.22529, -0.4947 ], + "curve": [ 0.79, 0, 0.635, 1 ] + }, + { "time": 2 } + ] + }, + "bootR": { + "bootR": [ + { + "time": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 0.8333, + "offset": 2, + "vertices": [ 5.22825, -1.73952, 4.71845, 0.22129, 5.62447, 6.47461, 1.50862, 7.97214, -4.4706, 2.31834, 0, 0, 0, 0, -4.4706, 2.31834, -4.4706, 2.31834, -4.4706, 2.31834, -4.4706, 2.31834 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "hairM blob": { + "hairM blob": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "vertices": [ -1.08212, 8.65523, -1.11431, 7.52468, -2.24057, 6.26953, -3.82797, 5.99093, -3.91436, 7.22202, -2.67053, 9.04969, -1.38165, 9.20383 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2 } + ] + }, + "hairM blobS": { + "hairM blobS": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1, + "vertices": [ -5.04184, 4.96768, -4.67045, 7.01031, -4.93046, 10.27776, -5.3127, 10.78222, -5.59051, 8.83482, -5.32306, 5.60684 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2 } + ] + }, + "hairSide": { + "hairSide": [ + { "time": 0 }, + { + "time": 0.6, + "vertices": [ -1.60583, 0.69799, -2.3974, 5.14581, 1.78112, 10.48461, -1.31721, -1.77716 ] + }, + { "time": 1.1 }, + { + "time": 1.6666, + "vertices": [ -1.60583, 0.69799, -2.3974, 5.14581, 1.78112, 10.48461, -1.31721, -1.77716 ] + }, + { "time": 2 } + ] + }, + "indexL": { + "indexL": [ + { "time": 0, "curve": "stepped" }, + { + "time": 0.3333, + "curve": [ 0.35, 0, 0.676, 0.48 ] + }, + { + "time": 0.8, + "vertices": [ 0.3316, -0.01168, 0.3316, -0.01168, 0.3316, -0.01168, 0.32022, -0.02302, 0, 0, 0, 0, 0, 0, 0.32022, -0.02302, 0.3316, -0.01168, 0.3316, -0.01168, 0.3316, -0.01168 ], + "curve": [ 0.328, 0.48, 0.652, 1 ] + }, + { + "time": 1.2666, + "vertices": [ -7.78268, -0.32069, -7.78268, -0.32069, -7.78268, -0.32069, -1.72647, -0.27644, 0, 0, 0, 0, 0, 0, -1.72647, -0.27644, -7.78268, -0.32069, -7.78268, -0.32069, -7.78268, -0.32069 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "indexR": { + "indexR": [ + { + "time": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "vertices": [ -3.70743, 2.07255, -3.56297, 1.70497, -4.31731, -0.57101, -3.25647, -3.29185, -2.18936, -5.81704, 0.70666, -5.57202, 1.93817, -3.54266, 1.80318, 0.17359, 0.49382, -1.71757, 0.49382, -1.71757, 0, 0, 0, 0, -4.19105, 3.05998, -1.06692, -0.08682 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "irisL flatspec": { + "irisL flatspec": [ + { "time": 0 }, + { + "time": 0.5, + "vertices": [ 0.61251, -0.47808, -0.34621, -0.26419, -0.95873, 0.21389 ] + }, + { "time": 1 }, + { + "time": 1.5666, + "vertices": [ 0.61251, -0.47808, -0.34621, -0.26419, -1.41388, 0.64572, 1.69758, 0.8432 ] + }, + { "time": 2 } + ] + }, + "irisL spec": { + "irisL spec": [ + { "time": 0 }, + { + "time": 0.5, + "vertices": [ 2.6656, -1.34318, -0.62154, -1.43818, 2.1585, -0.04376, 3.15285, -1.17855 ] + }, + { + "time": 1, + "vertices": [ 0.98534, -1.2969, -1.24309, -2.87637, -2.16038, -1.52056 ] + }, + { + "time": 1.5666, + "vertices": [ 2.93274, 1.38347, 1.49109, -0.79592, -0.93616, -0.65891 ] + }, + { "time": 2 } + ] + }, + "irisR flatspec": { + "irisR flatspec": [ + { "time": 0 }, + { + "time": 0.4666, + "offset": 2, + "vertices": [ -1.70543, 0.46472, -1.25659, -0.32217, 1.71141, 0.20523 ] + }, + { "time": 0.9666 }, + { + "time": 1.5666, + "vertices": [ 0.42843, -0.47369, -1.27699, -0.00897, -1.25659, -0.32217, 1.71141, 0.20523 ] + }, + { "time": 2 } + ] + }, + "irisR spec": { + "irisR spec": [ + { "time": 0 }, + { + "time": 0.4, + "vertices": [ 1.33019, 0.30987, -0.77219, -1.58123, -0.9354, -2.05615, -0.31694, 1.15225 ] + }, + { + "time": 0.9666, + "vertices": [ -1.23871, -0.1724, -2.84217, 0.45324, 1.84366, 0.51276, 1.38389, 0.67143 ] + }, + { + "time": 1.5, + "vertices": [ -0.55318, 2.56623, -1.37524, 0.21931, -0.9046, 0.64041, -1.50448, -0.12948 ] + }, + { "time": 2 } + ] + }, + "middleL": { + "middleL": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 0.7, + "vertices": [ 1.875, -1.17946, 2.27199, -0.96693, 2.27367, -1.08019, -0.73205, -0.10649, 0, 0, 0, 0, 0, 0, -0.55562, -0.01207, 2.27367, -1.08019, 1.79737, -1.19242, 1.78679, -1.22669 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.3666, + "vertices": [ -6.1622, -0.21533, -4.73236, 0.55014, -4.72631, 0.14221, -2.63659, -0.38357, 0, 0, 0, 0, 0, 0, -2.00115, -0.04347, -4.72631, 0.14221, -6.44177, -0.26199, -6.47988, -0.38543 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "ringL": { + "ringL": [ + { + "time": 0, + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.1333, + "vertices": [ 2.29756, -2.1041, 2.29756, -2.1041, 2.29756, -2.1041, 0, 0, 0, 0, -0.61599, -0.2029 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { + "time": 1.5333, + "vertices": [ -3.41745, -0.94554, -3.41745, -0.94554, -3.41745, -0.94554, 0, 0, 0, 0, -1.24407, -0.40979 ], + "curve": [ 0.542, 0, 0.482, 1 ] + }, + { "time": 2 } + ] + }, + "thumbL": { + "thumbL": [ + { "time": 0, "curve": "stepped" }, + { + "time": 0.4666, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1.1666, + "vertices": [ -2.29185, -3.98126, -0.23339, -3.13461, 0.49542, -1.60928, 1.06944, 0.67767, -0.11907, -0.5765, -0.11912, -0.57647, 0, 0, 0, 0, -1.80242, 1.16174, -2.50971, 0.70312, -3.87533, 0.49871, -4.51916, -1.38058, -4.28195, -2.70175, -3.59239, -3.16152, -3.25914, -3.82949, -1.17744, -0.89035, 0.37959, 0.01583 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + }, + "thumbR": { + "thumbR": [ + { + "time": 0, + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { + "time": 1, + "offset": 2, + "vertices": [ 4.24297, 0.26622, 5.38371, 4.83061, 3.73976, 9.41351, -1.18714, 11.81196, -5.39822, 10.30255, -6.95536, 4.73573, -3.19516, -0.32293, -1.316, 0.11442, 0, 0, 0, 0, 0, 0, -0.93784, 2.97592 ], + "curve": [ 0.353, 0, 0.655, 1 ] + }, + { "time": 2 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json.meta new file mode 100644 index 000000000..586846a06 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee66d4e095e47d44792cf450371372e3 +timeCreated: 1455491064 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png new file mode 100644 index 000000000..de4f02228 Binary files /dev/null and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png differ diff --git a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapNear-0.exr.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta similarity index 56% rename from spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapNear-0.exr.meta rename to spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta index 2899da10c..de9e94891 100644 --- a/spine-unity/Assets/Examples/Scenes/Basic Platformer/LightmapNear-0.exr.meta +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi.png.meta @@ -1,12 +1,14 @@ fileFormatVersion: 2 -guid: 6be9cbac7529e734ab3d6093239f6bec +guid: 33e128e17951b4a42b17608ff79ba5c5 +timeCreated: 1455501336 +licenseType: Free TextureImporter: fileIDToRecycleName: {} serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 - linearTexture: 1 + enableMipMap: 0 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -15,33 +17,41 @@ TextureImporter: bumpmap: convertToNormalMap: 0 externalNormalMap: 0 - heightScale: .25 + heightScale: 0.25 normalMapFilter: 0 isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 + textureFormat: -3 + maxTextureSize: 2048 textureSettings: - filterMode: 1 - aniso: 3 + filterMode: -1 + aniso: 16 mipBias: -1 wrapMode: 1 - nPOTScale: 1 - lightmap: 1 - compressionQuality: 100 - spriteMode: 0 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 - spritePivot: {x: .5, y: .5} + spritePivot: {x: 0.5, y: 0.5} spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 alphaIsTransparency: 0 - textureType: 6 + textureType: 5 buildTargetSettings: [] spriteSheet: sprites: [] + outline: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset new file mode 100644 index 000000000..56f28290c Binary files /dev/null and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset.meta new file mode 100644 index 000000000..f05672bde --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Atlas.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80099c7f091da3d41b98d11b9c5622d8 +timeCreated: 1455491064 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat new file mode 100644 index 000000000..346c1951b Binary files /dev/null and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat.meta new file mode 100644 index 000000000..ccc1773d1 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2745674eb28031e499ac70ef825b153e +timeCreated: 1455491064 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset new file mode 100644 index 000000000..a9640336f Binary files /dev/null and b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset differ diff --git a/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset.meta b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset.meta new file mode 100644 index 000000000..759421435 --- /dev/null +++ b/spine-unity/Assets/Examples/Spine/Spineunitygirl/Doi_SkeletonData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c48535ae5679204c950a22a7caaa5a4 +timeCreated: 1455491065 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Spine/dragon.prefab b/spine-unity/Assets/Examples/Spine/dragon.prefab index f70e632e4..788e55953 100644 Binary files a/spine-unity/Assets/Examples/Spine/dragon.prefab and b/spine-unity/Assets/Examples/Spine/dragon.prefab differ diff --git a/spine-unity/Assets/spine-unity/Asset Types.meta b/spine-unity/Assets/spine-unity/Asset Types.meta new file mode 100644 index 000000000..ade58c0bf --- /dev/null +++ b/spine-unity/Assets/spine-unity/Asset Types.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1dc4b7c23385e8c43ad19d01cbed78ce +folderAsset: yes +timeCreated: 1455489521 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/AtlasAsset.cs b/spine-unity/Assets/spine-unity/Asset Types/AtlasAsset.cs similarity index 100% rename from spine-unity/Assets/spine-unity/AtlasAsset.cs rename to spine-unity/Assets/spine-unity/Asset Types/AtlasAsset.cs diff --git a/spine-unity/Assets/spine-unity/AtlasAsset.cs.meta b/spine-unity/Assets/spine-unity/Asset Types/AtlasAsset.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/AtlasAsset.cs.meta rename to spine-unity/Assets/spine-unity/Asset Types/AtlasAsset.cs.meta diff --git a/spine-unity/Assets/spine-unity/Asset Types/Editor.meta b/spine-unity/Assets/spine-unity/Asset Types/Editor.meta new file mode 100644 index 000000000..ad248b556 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Asset Types/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cbe5d97ed1d75964cab2e2882a52a200 +folderAsset: yes +timeCreated: 1455489536 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs b/spine-unity/Assets/spine-unity/Asset Types/Editor/AtlasAssetInspector.cs similarity index 100% rename from spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs rename to spine-unity/Assets/spine-unity/Asset Types/Editor/AtlasAssetInspector.cs diff --git a/spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs.meta b/spine-unity/Assets/spine-unity/Asset Types/Editor/AtlasAssetInspector.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs.meta rename to spine-unity/Assets/spine-unity/Asset Types/Editor/AtlasAssetInspector.cs.meta diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs similarity index 99% rename from spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs rename to spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs index 74885c02c..83aae04ce 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs @@ -784,7 +784,7 @@ public class SkeletonDataAssetInspector : Editor { Skin skin = (Skin)o; m_skeletonAnimation.initialSkinName = skin.Name; - m_skeletonAnimation.Reset(); + m_skeletonAnimation.Initialize(true); m_requireRefresh = true; EditorPrefs.SetString(m_skeletonDataAssetGUID + "_lastSkin", skin.Name); diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs.meta b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs.meta rename to spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs.meta diff --git a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs b/spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonDataAsset.cs rename to spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs diff --git a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs.meta b/spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonDataAsset.cs.meta rename to spine-unity/Assets/spine-unity/Asset Types/SkeletonDataAsset.cs.meta diff --git a/spine-unity/Assets/spine-unity/BoneFollower.cs b/spine-unity/Assets/spine-unity/BoneFollower.cs index f835f84d4..5cfb97b51 100644 --- a/spine-unity/Assets/spine-unity/BoneFollower.cs +++ b/spine-unity/Assets/spine-unity/BoneFollower.cs @@ -77,8 +77,8 @@ public class BoneFollower : MonoBehaviour { return; skeletonTransform = skeletonRenderer.transform; - skeletonRenderer.OnReset -= HandleResetRenderer; - skeletonRenderer.OnReset += HandleResetRenderer; + skeletonRenderer.OnRebuild -= HandleResetRenderer; + skeletonRenderer.OnRebuild += HandleResetRenderer; if (Application.isEditor) DoUpdate(); @@ -87,7 +87,7 @@ public class BoneFollower : MonoBehaviour { void OnDestroy () { //cleanup if (skeletonRenderer != null) - skeletonRenderer.OnReset -= HandleResetRenderer; + skeletonRenderer.OnRebuild -= HandleResetRenderer; } public void Awake () { diff --git a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs index 1d28e23c2..5305d2b35 100644 --- a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs @@ -45,7 +45,7 @@ public class BoneFollowerInspector : Editor { followBoneRotation = serializedObject.FindProperty("followBoneRotation"); followZPosition = serializedObject.FindProperty("followZPosition"); component = (BoneFollower)target; - ForceReload(); + component.skeletonRenderer.Initialize(false); } void FindRenderer () { @@ -59,13 +59,6 @@ public class BoneFollowerInspector : Editor { } } - void ForceReload () { - if (component.skeletonRenderer != null) { - if (component.skeletonRenderer.valid == false) - component.skeletonRenderer.Reset(); - } - } - override public void OnInspectorGUI () { if (needsReset) { component.Reset(); diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs index 267a4e4d0..3bcc39e08 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs @@ -38,7 +38,7 @@ using UnityEngine; public class SkeletonRendererInspector : Editor { protected static bool advancedFoldout; - protected SerializedProperty skeletonDataAsset, initialSkinName, normals, tangents, meshes, immutableTriangles, submeshSeparators, front; + protected SerializedProperty skeletonDataAsset, initialSkinName, normals, tangents, meshes, immutableTriangles, submeshSeparators, front, zSpacing; private static MethodInfo EditorGUILayoutSortingLayerField; protected SerializedObject rendererSerializedObject; @@ -54,6 +54,7 @@ public class SkeletonRendererInspector : Editor { immutableTriangles = serializedObject.FindProperty("immutableTriangles"); submeshSeparators = serializedObject.FindProperty("submeshSeparators"); front = serializedObject.FindProperty("frontFacing"); + zSpacing = serializedObject.FindProperty("zSpacing"); if(EditorGUILayoutSortingLayerField == null) EditorGUILayoutSortingLayerField = typeof(EditorGUILayout).GetMethod("SortingLayerField", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] { typeof(GUIContent), typeof(SerializedProperty), typeof(GUIStyle) }, null); @@ -76,12 +77,12 @@ public class SkeletonRendererInspector : Editor { component.skeletonDataAsset.Reset(); } - component.Reset(); + component.Initialize(true); } EditorGUILayout.EndHorizontal(); if (!component.valid) { - component.Reset(); + component.Initialize(true); component.LateUpdate(); if (!component.valid) return; @@ -130,14 +131,18 @@ public class SkeletonRendererInspector : Editor { advancedFoldout = EditorGUILayout.Foldout(advancedFoldout, "Advanced"); if(advancedFoldout) { EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(submeshSeparators, true); + EditorGUILayout.Space(); EditorGUILayout.PropertyField(meshes, new GUIContent("Render Meshes", "Disable to optimize rendering for skeletons that don't use meshes")); EditorGUILayout.PropertyField(immutableTriangles, new GUIContent("Immutable Triangles", "Enable to optimize rendering for skeletons that never change attachment visbility")); + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(zSpacing); EditorGUILayout.PropertyField(normals); EditorGUILayout.PropertyField(tangents); EditorGUILayout.PropertyField(front); - EditorGUILayout.PropertyField(submeshSeparators, true); + EditorGUILayout.Separator(); EditorGUI.indentLevel--; } } @@ -150,7 +155,7 @@ public class SkeletonRendererInspector : Editor { (Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed") ) { if (!Application.isPlaying) - ((SkeletonRenderer)target).Reset(); + ((SkeletonRenderer)target).Initialize(true); } } diff --git a/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs b/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs index ddf90af0a..a2e7152b3 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs @@ -25,6 +25,7 @@ public struct SpineDrawerValuePair { public abstract class SpineTreeItemDrawerBase : PropertyDrawer where T:SpineAttributeBase { protected SkeletonDataAsset skeletonDataAsset; + internal const string NoneLabel = ""; protected T TargetAttribute { get { return (T)attribute; } } @@ -62,8 +63,9 @@ public abstract class SpineTreeItemDrawerBase : PropertyDrawer where T:SpineA } position = EditorGUI.PrefixLabel(position, label); - - if (GUI.Button(position, property.stringValue, EditorStyles.popup)) { + + var propertyStringValue = property.stringValue; + if (GUI.Button(position, string.IsNullOrEmpty(propertyStringValue) ? NoneLabel : propertyStringValue, EditorStyles.popup)) { Selector(property); } @@ -155,7 +157,7 @@ public class SpineAnimationDrawer : SpineTreeItemDrawerBase { var animations = skeletonDataAsset.GetAnimationStateData().SkeletonData.Animations; // item - menu.AddItem(new GUIContent(""), property.stringValue == "", HandleSelect, new SpineDrawerValuePair("", property)); + menu.AddItem(new GUIContent(NoneLabel), string.IsNullOrEmpty(property.stringValue), HandleSelect, new SpineDrawerValuePair("", property)); for (int i = 0; i < animations.Count; i++) { string name = animations.Items[i].Name; diff --git a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs index 93af39ec8..11e9c737a 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs @@ -964,7 +964,8 @@ public class SpineEditorUtilities : AssetPostprocessor { } public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, Skin skin = null) { - GameObject go = new GameObject(skeletonDataAsset.name.Replace("_SkeletonData", ""), typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation)); + string spineGameObjectName = string.Format("Spine GameObject ({0})", skeletonDataAsset.name.Replace("_SkeletonData", "")); + GameObject go = new GameObject(spineGameObjectName, typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation)); SkeletonAnimation anim = go.GetComponent(); anim.skeletonDataAsset = skeletonDataAsset; @@ -1000,7 +1001,7 @@ public class SpineEditorUtilities : AssetPostprocessor { if (skin == null) skin = data.Skins.Items[0]; - anim.Reset(); + anim.Initialize(false); anim.skeleton.SetSkin(skin); anim.initialSkinName = skin.Name; @@ -1045,7 +1046,8 @@ public class SpineEditorUtilities : AssetPostprocessor { } public static SkeletonAnimator InstantiateSkeletonAnimator (SkeletonDataAsset skeletonDataAsset, Skin skin = null) { - GameObject go = new GameObject(skeletonDataAsset.name.Replace("_SkeletonData", ""), typeof(MeshFilter), typeof(MeshRenderer), typeof(Animator), typeof(SkeletonAnimator)); + string spineGameObjectName = string.Format("Spine Mecanim GameObject ({0})", skeletonDataAsset.name.Replace("_SkeletonData", "")); + GameObject go = new GameObject(spineGameObjectName, typeof(MeshFilter), typeof(MeshRenderer), typeof(Animator), typeof(SkeletonAnimator)); if (skeletonDataAsset.controller == null) { SkeletonBaker.GenerateMecanimAnimationClips(skeletonDataAsset); @@ -1086,7 +1088,7 @@ public class SpineEditorUtilities : AssetPostprocessor { if (skin == null) skin = data.Skins.Items[0]; - anim.Reset(); + anim.Initialize(false); anim.skeleton.SetSkin(skin); anim.initialSkinName = skin.Name; diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs b/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs similarity index 96% rename from spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs rename to spine-unity/Assets/spine-unity/ISkeletonAnimation.cs index 520114fd8..2d53eb670 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs +++ b/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs @@ -33,7 +33,7 @@ using UnityEngine; using System.Collections; using Spine; -public delegate void UpdateBonesDelegate (SkeletonRenderer skeletonRenderer); +public delegate void UpdateBonesDelegate (ISkeletonAnimation skeletonRenderer); public interface ISkeletonAnimation { event UpdateBonesDelegate UpdateLocal; event UpdateBonesDelegate UpdateWorld; diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta b/spine-unity/Assets/spine-unity/ISkeletonAnimation.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta rename to spine-unity/Assets/spine-unity/ISkeletonAnimation.cs.meta diff --git a/spine-unity/Assets/spine-unity/Mesh Generation.meta b/spine-unity/Assets/spine-unity/Mesh Generation.meta new file mode 100644 index 000000000..ae633507c --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c5d065c4fe677ad4495a852580ec32fa +folderAsset: yes +timeCreated: 1455493477 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/DoubleBufferedMesh.cs b/spine-unity/Assets/spine-unity/Mesh Generation/DoubleBufferedMesh.cs new file mode 100644 index 000000000..53a6c2a47 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/DoubleBufferedMesh.cs @@ -0,0 +1,15 @@ +using UnityEngine; +using System.Collections; + +namespace Spine.Unity { + public class DoubleBufferedMesh { + readonly Mesh mesh1 = SpineMesh.NewMesh(); + readonly Mesh mesh2 = SpineMesh.NewMesh(); + bool usingMesh1; + + public Mesh GetNextMesh () { + usingMesh1 = !usingMesh1; + return usingMesh1 ? mesh1 : mesh2; + } + } +} diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/DoubleBufferedMesh.cs.meta b/spine-unity/Assets/spine-unity/Mesh Generation/DoubleBufferedMesh.cs.meta new file mode 100644 index 000000000..8114723f9 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/DoubleBufferedMesh.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7191a70dcf4959f43961fa78e05484a0 +timeCreated: 1455140057 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Simple.meta b/spine-unity/Assets/spine-unity/Mesh Generation/Simple.meta new file mode 100644 index 000000000..49e80b2f1 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Simple.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8e1503fd3294b7042a676e58798e4136 +folderAsset: yes +timeCreated: 1455486312 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ArraysSimpleMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ArraysSimpleMeshGenerator.cs new file mode 100644 index 000000000..e2531ddc1 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ArraysSimpleMeshGenerator.cs @@ -0,0 +1,321 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to use, install, execute and perform the Spine + * Runtimes Software (the "Software") and derivative works solely for personal + * or internal use. Without the written permission of Esoteric Software (see + * Section 2 of the Spine Software License Agreement), you may not (a) modify, + * translate, adapt or otherwise create derivative works, improvements of the + * Software or develop new applications using the Software or (b) remove, + * delete, alter or obscure any trademarks or any copyright, trademark, patent + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using UnityEngine; +using System.Collections; + +namespace Spine.Unity { + public class ArraysSimpleMeshGenerator : ISimpleMeshGenerator { + #region Settings + protected float scale; + public float Scale { + get { return scale; } + set { scale = value; } + } + + public bool renderMeshes = true; + #endregion + + #region Buffers + readonly DoubleBufferedMesh doubleBufferedMesh = new DoubleBufferedMesh(); + private float[] tempVertices = new float[8]; + private Vector3[] vertices; + private Color32[] colors; + private Vector2[] uvs; + private int[] triangles; + #endregion + + public Mesh GenerateMesh (Skeleton skeleton) { + int totalVertexCount = 0; // size of vertex arrays + int totalTriangleCount = 0; // size of index array + + // Step 1 : Count verts and tris to determine array sizes. + // + var drawOrderItems = skeleton.drawOrder.Items; + int drawOrderCount = skeleton.drawOrder.Count; + for (int i = 0; i < drawOrderCount; i++) { + Slot slot = drawOrderItems[i]; + Attachment attachment = slot.attachment; + int attachmentVertexCount, attachmentTriangleCount; + var regionAttachment = attachment as RegionAttachment; + if (regionAttachment != null) { + attachmentVertexCount = 4; + attachmentTriangleCount = 6; + } else { + if (!renderMeshes) continue; + var meshAttachment = attachment as MeshAttachment; + if (meshAttachment != null) { + attachmentVertexCount = meshAttachment.vertices.Length >> 1; + attachmentTriangleCount = meshAttachment.triangles.Length; + } else { + var skinnedMeshAttachment = attachment as WeightedMeshAttachment; + if (skinnedMeshAttachment != null) { + attachmentVertexCount = skinnedMeshAttachment.uvs.Length >> 1; + attachmentTriangleCount = skinnedMeshAttachment.triangles.Length; + } else + continue; + } + } + totalTriangleCount += attachmentTriangleCount; + totalVertexCount += attachmentVertexCount; + } + + + // Step 2 : Prepare vertex arrays. + // + Vector3[] vertices = this.vertices; + bool verticesDontFit = vertices == null || totalVertexCount > vertices.Length; + if (verticesDontFit) { + // Not enough space, increase size. + this.vertices = vertices = new Vector3[totalVertexCount]; + this.colors = new Color32[totalVertexCount]; + this.uvs = new Vector2[totalVertexCount]; + + } else { + // Too many vertices, zero the extra. + Vector3 zero = Vector3.zero; + for (int i = totalVertexCount, n = vertices.Length; i < n; i++) + vertices[i] = zero; + } + + + // Step 3 : Push vertices to arrays + // + const float z = 0; + const float zFauxHalfThickness = 0.01f; // Somehow needs this thickness for bounds to work properly in some cases (eg, Unity UI clipping) + float[] tempVertices = this.tempVertices; + Vector2[] uvs = this.uvs; + Color32[] colors = this.colors; + int vertexIndex = 0; + Color32 color; + float a = skeleton.a * 255, r = skeleton.r, g = skeleton.g, b = skeleton.b; + + Vector3 meshBoundsMin; + Vector3 meshBoundsMax; + if (totalVertexCount == 0) { + meshBoundsMin = new Vector3(0, 0, 0); + meshBoundsMax = new Vector3(0, 0, 0); + } else { + meshBoundsMin.x = int.MaxValue; + meshBoundsMin.y = int.MaxValue; + meshBoundsMax.x = int.MinValue; + meshBoundsMax.y = int.MinValue; + meshBoundsMin.z = -zFauxHalfThickness; + meshBoundsMax.z = zFauxHalfThickness; + + int i = 0; + do { + Slot slot = drawOrderItems[i]; + Attachment attachment = slot.attachment; + var regionAttachment = attachment as RegionAttachment; + if (regionAttachment != null) { + regionAttachment.ComputeWorldVertices(slot.bone, tempVertices); + + float x1 = tempVertices[RegionAttachment.X1], y1 = tempVertices[RegionAttachment.Y1]; + float x2 = tempVertices[RegionAttachment.X2], y2 = tempVertices[RegionAttachment.Y2]; + float x3 = tempVertices[RegionAttachment.X3], y3 = tempVertices[RegionAttachment.Y3]; + float x4 = tempVertices[RegionAttachment.X4], y4 = tempVertices[RegionAttachment.Y4]; + vertices[vertexIndex].x = x1 * scale; vertices[vertexIndex].y = y1 * scale; vertices[vertexIndex].z = z; + vertices[vertexIndex + 1].x = x4 * scale; vertices[vertexIndex + 1].y = y4 * scale; vertices[vertexIndex + 1].z = z; + vertices[vertexIndex + 2].x = x2 * scale; vertices[vertexIndex + 2].y = y2 * scale; vertices[vertexIndex + 2].z = z; + vertices[vertexIndex + 3].x = x3 * scale; vertices[vertexIndex + 3].y = y3 * scale; vertices[vertexIndex + 3].z = z; + + color.a = (byte)(a * slot.a * regionAttachment.a); + color.r = (byte)(r * slot.r * regionAttachment.r * color.a); + color.g = (byte)(g * slot.g * regionAttachment.g * color.a); + color.b = (byte)(b * slot.b * regionAttachment.b * color.a); + if (slot.data.blendMode == BlendMode.additive) color.a = 0; + colors[vertexIndex] = color; colors[vertexIndex + 1] = color; colors[vertexIndex + 2] = color; colors[vertexIndex + 3] = color; + + float[] regionUVs = regionAttachment.uvs; + uvs[vertexIndex].x = regionUVs[RegionAttachment.X1]; uvs[vertexIndex].y = regionUVs[RegionAttachment.Y1]; + uvs[vertexIndex + 1].x = regionUVs[RegionAttachment.X4]; uvs[vertexIndex + 1].y = regionUVs[RegionAttachment.Y4]; + uvs[vertexIndex + 2].x = regionUVs[RegionAttachment.X2]; uvs[vertexIndex + 2].y = regionUVs[RegionAttachment.Y2]; + uvs[vertexIndex + 3].x = regionUVs[RegionAttachment.X3]; uvs[vertexIndex + 3].y = regionUVs[RegionAttachment.Y3]; + + // Calculate min/max X + if (x1 < meshBoundsMin.x) meshBoundsMin.x = x1; + else if (x1 > meshBoundsMax.x) meshBoundsMax.x = x1; + if (x2 < meshBoundsMin.x) meshBoundsMin.x = x2; + else if (x2 > meshBoundsMax.x) meshBoundsMax.x = x2; + if (x3 < meshBoundsMin.x) meshBoundsMin.x = x3; + else if (x3 > meshBoundsMax.x) meshBoundsMax.x = x3; + if (x4 < meshBoundsMin.x) meshBoundsMin.x = x4; + else if (x4 > meshBoundsMax.x) meshBoundsMax.x = x4; + + // Calculate min/max Y + if (y1 < meshBoundsMin.y) meshBoundsMin.y = y1; + else if (y1 > meshBoundsMax.y) meshBoundsMax.y = y1; + if (y2 < meshBoundsMin.y) meshBoundsMin.y = y2; + else if (y2 > meshBoundsMax.y) meshBoundsMax.y = y2; + if (y3 < meshBoundsMin.y) meshBoundsMin.y = y3; + else if (y3 > meshBoundsMax.y) meshBoundsMax.y = y3; + if (y4 < meshBoundsMin.y) meshBoundsMin.y = y4; + else if (y4 > meshBoundsMax.y) meshBoundsMax.y = y4; + + vertexIndex += 4; + } else { + if (!renderMeshes) continue; + var meshAttachment = attachment as MeshAttachment; + if (meshAttachment != null) { + int meshVertexCount = meshAttachment.vertices.Length; + if (tempVertices.Length < meshVertexCount) + this.tempVertices = tempVertices = new float[meshVertexCount]; + meshAttachment.ComputeWorldVertices(slot, tempVertices); + + color.a = (byte)(a * slot.a * meshAttachment.a); + color.r = (byte)(r * slot.r * meshAttachment.r * color.a); + color.g = (byte)(g * slot.g * meshAttachment.g * color.a); + color.b = (byte)(b * slot.b * meshAttachment.b * color.a); + if (slot.data.blendMode == BlendMode.additive) color.a = 0; + + float[] meshUVs = meshAttachment.uvs; + for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) { + float x = tempVertices[ii], y = tempVertices[ii + 1]; + vertices[vertexIndex].x = x * scale; vertices[vertexIndex].y = y * scale; vertices[vertexIndex].z = z; + colors[vertexIndex] = color; + uvs[vertexIndex].x = meshUVs[ii]; uvs[vertexIndex].y = meshUVs[ii + 1]; + + if (x < meshBoundsMin.x) meshBoundsMin.x = x; + else if (x > meshBoundsMax.x) meshBoundsMax.x = x; + + if (y < meshBoundsMin.y) meshBoundsMin.y = y; + else if (y > meshBoundsMax.y) meshBoundsMax.y = y; + } + } else { + var skinnedMeshAttachment = attachment as WeightedMeshAttachment; + if (skinnedMeshAttachment != null) { + int meshVertexCount = skinnedMeshAttachment.uvs.Length; + if (tempVertices.Length < meshVertexCount) + this.tempVertices = tempVertices = new float[meshVertexCount]; + skinnedMeshAttachment.ComputeWorldVertices(slot, tempVertices); + + color.a = (byte)(a * slot.a * skinnedMeshAttachment.a); + color.r = (byte)(r * slot.r * skinnedMeshAttachment.r * color.a); + color.g = (byte)(g * slot.g * skinnedMeshAttachment.g * color.a); + color.b = (byte)(b * slot.b * skinnedMeshAttachment.b * color.a); + if (slot.data.blendMode == BlendMode.additive) color.a = 0; + + float[] meshUVs = skinnedMeshAttachment.uvs; + for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) { + float x = tempVertices[ii], y = tempVertices[ii + 1]; + vertices[vertexIndex].x = x * scale; vertices[vertexIndex].y = y * scale; vertices[vertexIndex].z = z; + colors[vertexIndex] = color; + uvs[vertexIndex].x = meshUVs[ii]; uvs[vertexIndex].y = meshUVs[ii + 1]; + + if (x < meshBoundsMin.x) meshBoundsMin.x = x; + else if (x > meshBoundsMax.x) meshBoundsMax.x = x; + + if (y < meshBoundsMin.y) meshBoundsMin.y = y; + else if (y > meshBoundsMax.y) meshBoundsMax.y = y; + } + } + } + } + } while (++i < drawOrderCount); + } + + + // Step 3 : Ensure correct triangle array size + // + var triangles = this.triangles; + bool trianglesDontFit = triangles == null || totalTriangleCount > triangles.Length; + if (trianglesDontFit) { + // Not enough space, increase size + this.triangles = triangles = new int[totalTriangleCount]; + } else { + // Too many indices, zero the extra. + for (int i = totalTriangleCount, n = triangles.Length; i < n; i++) + triangles[i] = 0; + } + + + // Step 4 : Push triangles to triangle array. + // + int triangleArrayIndex = 0; // next triangle index. modified by loop + int firstAttachmentVertex = 0; + for (int i = 0, n = drawOrderCount; i < n; i++) { + Attachment attachment = drawOrderItems[i].attachment; + + if (attachment is RegionAttachment) { + triangles[triangleArrayIndex] = firstAttachmentVertex; + triangles[triangleArrayIndex + 1] = firstAttachmentVertex + 2; + triangles[triangleArrayIndex + 2] = firstAttachmentVertex + 1; + triangles[triangleArrayIndex + 3] = firstAttachmentVertex + 2; + triangles[triangleArrayIndex + 4] = firstAttachmentVertex + 3; + triangles[triangleArrayIndex + 5] = firstAttachmentVertex + 1; + + triangleArrayIndex += 6; + firstAttachmentVertex += 4; + continue; + } else { + if (!renderMeshes) continue; + int[] attachmentTriangles; + int attachmentVertexCount; + var meshAttachment = attachment as MeshAttachment; + if (meshAttachment != null) { + attachmentVertexCount = meshAttachment.vertices.Length >> 1; // length/2 + attachmentTriangles = meshAttachment.triangles; + } else { + var skinnedMeshAttachment = attachment as WeightedMeshAttachment; + if (skinnedMeshAttachment != null) { + attachmentVertexCount = skinnedMeshAttachment.uvs.Length >> 1; // length/2 + attachmentTriangles = skinnedMeshAttachment.triangles; + } else + continue; + } + + for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii++, triangleArrayIndex++) + triangles[triangleArrayIndex] = firstAttachmentVertex + attachmentTriangles[ii]; + + firstAttachmentVertex += attachmentVertexCount; + } + } + + + // Step 5 : Push Data To Mesh + // + var mesh = doubleBufferedMesh.GetNextMesh(); + mesh.vertices = vertices; + mesh.colors32 = colors; + mesh.uv = uvs; + + Vector3 meshBoundsExtents = (meshBoundsMax - meshBoundsMin) * scale; + mesh.bounds = new Bounds(meshBoundsMin + meshBoundsExtents * 0.5f, meshBoundsExtents); + + mesh.SetTriangles(triangles, 0); + + return mesh; + } + + } + +} diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ArraysSimpleMeshGenerator.cs.meta b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ArraysSimpleMeshGenerator.cs.meta new file mode 100644 index 000000000..72f63e4b0 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ArraysSimpleMeshGenerator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 296d4c2077fb3bc4fa9a5211c0f95011 +timeCreated: 1455406990 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ISimpleMeshGenerator.cs b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ISimpleMeshGenerator.cs new file mode 100644 index 000000000..efab03eec --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ISimpleMeshGenerator.cs @@ -0,0 +1,10 @@ +namespace Spine.Unity { + // Typically, each ISpineMeshGenerator implementation will handle double-buffering meshes, handling any other optimization behavior + // and operating on assumptions (eg, only handling one skeleton, not updating triangles all the time). + // The Scale property allows generated mesh to match external systems like Canvas referencePixelsPerUnit + + public interface ISimpleMeshGenerator { + float Scale { set; } + UnityEngine.Mesh GenerateMesh (Spine.Skeleton skeleton); + } +} diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ISimpleMeshGenerator.cs.meta b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ISimpleMeshGenerator.cs.meta new file mode 100644 index 000000000..41c9e5a9b --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/Simple/ISimpleMeshGenerator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0af0615ce8e0e054ea224e3e03ab31aa +timeCreated: 1455406790 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs new file mode 100644 index 000000000..d84850501 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections; + +public static class SpineMesh { + internal const HideFlags MeshHideflags = HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor; + + /// Factory method for creating a new mesh for use in Spine components. This can be called in field initializers. + public static Mesh NewMesh () { + var m = new Mesh(); + m.MarkDynamic(); + m.name = "Skeleton Mesh"; + m.hideFlags = SpineMesh.MeshHideflags; + return m; + } + +} diff --git a/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs.meta b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs.meta new file mode 100644 index 000000000..b30649ab3 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Mesh Generation/SpineMesh.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f834c8746034db645a52a9506ff1de89 +timeCreated: 1455416715 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules.meta b/spine-unity/Assets/spine-unity/Modules.meta new file mode 100644 index 000000000..2dc106cc8 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a7935399edad9a14bb5708cf59c94b67 +folderAsset: yes +timeCreated: 1455489260 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs b/spine-unity/Assets/spine-unity/Modules/AtlasRegionAttacher.cs similarity index 98% rename from spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs rename to spine-unity/Assets/spine-unity/Modules/AtlasRegionAttacher.cs index 84fef5f45..cc95706b6 100644 --- a/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs +++ b/spine-unity/Assets/spine-unity/Modules/AtlasRegionAttacher.cs @@ -51,7 +51,7 @@ public class AtlasRegionAttacher : MonoBehaviour { Atlas atlas; void Awake () { - GetComponent().OnReset += Apply; + GetComponent().OnRebuild += Apply; } diff --git a/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs.meta b/spine-unity/Assets/spine-unity/Modules/AtlasRegionAttacher.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs.meta rename to spine-unity/Assets/spine-unity/Modules/AtlasRegionAttacher.cs.meta diff --git a/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower.meta b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower.meta new file mode 100644 index 000000000..56d0730a1 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 86b1ae3ec8681c646aea49654969b73c +folderAsset: yes +timeCreated: 1455492474 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/BoundingBoxFollower.cs b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs similarity index 95% rename from spine-unity/Assets/spine-unity/BoundingBoxFollower.cs rename to spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs index ae8d94e16..a3c71fc8b 100644 --- a/spine-unity/Assets/spine-unity/BoundingBoxFollower.cs +++ b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs @@ -88,8 +88,8 @@ public class BoundingBoxFollower : MonoBehaviour { skeletonRenderer = GetComponentInParent(); if (skeletonRenderer != null) { - skeletonRenderer.OnReset -= HandleReset; - skeletonRenderer.OnReset += HandleReset; + skeletonRenderer.OnRebuild -= HandleReset; + skeletonRenderer.OnRebuild += HandleReset; if (hasReset) HandleReset(skeletonRenderer); @@ -97,7 +97,7 @@ public class BoundingBoxFollower : MonoBehaviour { } void OnDisable () { - skeletonRenderer.OnReset -= HandleReset; + skeletonRenderer.OnRebuild -= HandleReset; } void Start () { @@ -115,9 +115,9 @@ public class BoundingBoxFollower : MonoBehaviour { colliderTable.Clear(); if (skeletonRenderer.skeleton == null) { - skeletonRenderer.OnReset -= HandleReset; - skeletonRenderer.Reset(); - skeletonRenderer.OnReset += HandleReset; + skeletonRenderer.OnRebuild -= HandleReset; + skeletonRenderer.Initialize(false); + skeletonRenderer.OnRebuild += HandleReset; } diff --git a/spine-unity/Assets/spine-unity/BoundingBoxFollower.cs.meta b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/BoundingBoxFollower.cs.meta rename to spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/BoundingBoxFollower.cs.meta diff --git a/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor.meta b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor.meta new file mode 100644 index 000000000..76ca150c2 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b7f013ad20f0af34e913e21b44466777 +folderAsset: yes +timeCreated: 1455492480 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/BoundingBoxFollowerInspector.cs b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs similarity index 100% rename from spine-unity/Assets/spine-unity/Editor/BoundingBoxFollowerInspector.cs rename to spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs diff --git a/spine-unity/Assets/spine-unity/Editor/BoundingBoxFollowerInspector.cs.meta b/spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Editor/BoundingBoxFollowerInspector.cs.meta rename to spine-unity/Assets/spine-unity/Modules/BoundingBoxFollower/Editor/BoundingBoxFollowerInspector.cs.meta diff --git a/spine-unity/Assets/spine-unity/CustomSkin.cs b/spine-unity/Assets/spine-unity/Modules/CustomSkin.cs similarity index 100% rename from spine-unity/Assets/spine-unity/CustomSkin.cs rename to spine-unity/Assets/spine-unity/Modules/CustomSkin.cs diff --git a/spine-unity/Assets/spine-unity/CustomSkin.cs.meta b/spine-unity/Assets/spine-unity/Modules/CustomSkin.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/CustomSkin.cs.meta rename to spine-unity/Assets/spine-unity/Modules/CustomSkin.cs.meta diff --git a/spine-unity/Assets/spine-unity/Ghost.meta b/spine-unity/Assets/spine-unity/Modules/Ghost.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost.meta rename to spine-unity/Assets/spine-unity/Modules/Ghost.meta diff --git a/spine-unity/Assets/spine-unity/Ghost/Shaders.meta b/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/Shaders.meta rename to spine-unity/Assets/spine-unity/Modules/Ghost/Shaders.meta diff --git a/spine-unity/Assets/spine-unity/Ghost/Shaders/SkeletonGhost.shader b/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/Shaders/SkeletonGhost.shader rename to spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader diff --git a/spine-unity/Assets/spine-unity/Ghost/Shaders/SkeletonGhost.shader.meta b/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/Shaders/SkeletonGhost.shader.meta rename to spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader.meta diff --git a/spine-unity/Assets/spine-unity/Ghost/SkeletonGhost.cs b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/SkeletonGhost.cs rename to spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs diff --git a/spine-unity/Assets/spine-unity/Ghost/SkeletonGhost.cs.meta b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/SkeletonGhost.cs.meta rename to spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs.meta diff --git a/spine-unity/Assets/spine-unity/Ghost/SkeletonGhostRenderer.cs b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/SkeletonGhostRenderer.cs rename to spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs diff --git a/spine-unity/Assets/spine-unity/Ghost/SkeletonGhostRenderer.cs.meta b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ghost/SkeletonGhostRenderer.cs.meta rename to spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs.meta diff --git a/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples.meta b/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples.meta new file mode 100644 index 000000000..4b2cdf3b4 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a61c8f6e11823c488856e3c7ce9edc7 +folderAsset: yes +timeCreated: 1455160403 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples/VertexHelperSpineMeshGenerator.cs b/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples/VertexHelperSpineMeshGenerator.cs new file mode 100644 index 000000000..d24754dd6 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples/VertexHelperSpineMeshGenerator.cs @@ -0,0 +1,231 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to use, install, execute and perform the Spine + * Runtimes Software (the "Software") and derivative works solely for personal + * or internal use. Without the written permission of Esoteric Software (see + * Section 2 of the Spine Software License Agreement), you may not (a) modify, + * translate, adapt or otherwise create derivative works, improvements of the + * Software or develop new applications using the Software or (b) remove, + * delete, alter or obscure any trademarks or any copyright, trademark, patent + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using UnityEngine; +using System.Collections.Generic; +using System.Collections; + +namespace Spine.Unity { + /// This is for testing and educational purposes only. This takes about 10 times longer to render than ArraySpineMeshGenerator. + public class VertexHelperSpineMeshGenerator : ISimpleMeshGenerator { + + public float scale = 1f; + public float Scale { get { return scale; } set { scale = value; } } + + public bool premultiplyAlpha = true; + public bool PremultiplyAlpha { get { return premultiplyAlpha; } set { premultiplyAlpha = value; } } + + public int CurrentVertexCount { get { return this.positions.Count; } } + + public Mesh GenerateMesh (Skeleton skeleton) { + skeletonColor.r = skeleton.r; + skeletonColor.g = skeleton.g; + skeletonColor.b = skeleton.b; + skeletonColor.a = skeleton.a; + + ClearBuffers(); + var drawOrderItems = skeleton.drawOrder.Items; + for (int i = 0, n = skeleton.drawOrder.Count; i < n; i++) { + AddSlot(drawOrderItems[i]); + } + + Mesh currentMesh = doubleBufferedMesh.GetNextMesh(); + FillMesh(currentMesh); + return currentMesh; + } + + #region Internals + private DoubleBufferedMesh doubleBufferedMesh = new DoubleBufferedMesh(); + protected Color skeletonColor = Color.white; + protected List positions = new List(); + //protected List colors = new List(); // 5.3 mesh.SetColors(Color) is broken in UI. + protected List colors32 = new List(); + protected List uvs = new List(); + protected List indices = new List(); + protected List normals = new List(); + + // Buffers + protected float[] tempVertices = new float[8]; + + static readonly Vector3 DefaultNormal = Vector3.back; + const float Z = 0f; + + protected void FillMesh (Mesh mesh) { + mesh.Clear(); + + if (positions.Count > 65000) + throw new System.ArgumentException("Mesh cannot have more than 65000 vertices."); // Limitation based on UnityEngine.UI.VertexHelper + + mesh.SetVertices(positions); + //mesh.SetColors(colors); // 5.3 mesh.SetColors(Color) is broken in UI. + mesh.SetColors(colors32); + mesh.SetUVs(0, uvs); + mesh.SetNormals(normals); + mesh.SetTriangles(indices, 0); + + mesh.RecalculateBounds(); + } + + protected void ClearBuffers () { + positions.Clear(); + //colors.Clear(); // 5.3 mesh.SetColors(Color) is broken. + colors32.Clear(); + uvs.Clear(); + indices.Clear(); + normals.Clear(); + } + + protected void AddVert (Vector3 position, Color color, Vector2 uv) { + positions.Add(position); + //colors.Add(color); // 5.3 mesh.SetColors(Color) is broken in UI. + Color32 c; c.r = (byte)(color.r * 255); c.g = (byte)(color.g * 255); c.b = (byte)(color.b * 255); c.a = (byte)(color.a * 255); + colors32.Add(c); + uvs.Add(uv); + normals.Add(DefaultNormal); + } + + protected void AddTriangle (int id0, int id1, int id2) { + indices.Add(id0); + indices.Add(id1); + indices.Add(id2); + } + + protected void AddSlot (Slot slot) { + var a = slot.attachment; + + var regionAttachment = a as RegionAttachment; + if (regionAttachment != null) { + AddAttachment(slot, regionAttachment); + return; + } + + var meshAttachment = a as MeshAttachment; + if (meshAttachment != null) { + AddAttachment(slot, meshAttachment); + return; + } + + var skinnedMeshAttachment = a as WeightedMeshAttachment; + if (skinnedMeshAttachment != null) { + AddAttachment(slot, skinnedMeshAttachment); + return; + } + } + + // RegionAttachment + protected void AddAttachment (Slot slot, RegionAttachment attachment) { + var tempVertices = this.tempVertices; + attachment.ComputeWorldVertices(slot.bone, tempVertices); + + float[] regionUVs = attachment.uvs; + + Color color = skeletonColor; + color.r = color.r * attachment.r * slot.r; + color.g = color.g * attachment.g * slot.g; + color.b = color.b * attachment.b * slot.b; + color.a = color.a * attachment.a * slot.a; + if (premultiplyAlpha) { + color.r *= color.a; color.g *= color.a; color.b *= color.a; + if (slot.data.blendMode == BlendMode.additive) color.a = 0; + } + + int fv = positions.Count; // first vertex index + AddVert(new Vector3(tempVertices[RegionAttachment.X1] * scale, tempVertices[RegionAttachment.Y1] * scale), color, new Vector2(regionUVs[RegionAttachment.X1], regionUVs[RegionAttachment.Y1])); + AddVert(new Vector3(tempVertices[RegionAttachment.X4] * scale, tempVertices[RegionAttachment.Y4] * scale), color, new Vector2(regionUVs[RegionAttachment.X4], regionUVs[RegionAttachment.Y4])); + AddVert(new Vector3(tempVertices[RegionAttachment.X2] * scale, tempVertices[RegionAttachment.Y2] * scale), color, new Vector2(regionUVs[RegionAttachment.X2], regionUVs[RegionAttachment.Y2])); + AddVert(new Vector3(tempVertices[RegionAttachment.X3] * scale, tempVertices[RegionAttachment.Y3] * scale), color, new Vector2(regionUVs[RegionAttachment.X3], regionUVs[RegionAttachment.Y3])); + + AddTriangle(fv, fv+2, fv+1); + AddTriangle(fv+2, fv+3, fv+1); + } + + // MeshAttachment + protected void AddAttachment (Slot slot, MeshAttachment attachment) { + var tempVertices = this.tempVertices; + var meshUVs = attachment.uvs; + int meshVertexCount = attachment.vertices.Length; + + if (tempVertices.Length < meshVertexCount) + this.tempVertices = tempVertices = new float[meshVertexCount]; + attachment.ComputeWorldVertices(slot, tempVertices); + + Color color = skeletonColor; + color.r = color.r * attachment.r * slot.r; + color.g = color.g * attachment.g * slot.g; + color.b = color.b * attachment.b * slot.b; + color.a = color.a * attachment.a * slot.a; + if (premultiplyAlpha) { + color.r *= color.a; color.g *= color.a; color.b *= color.a; + if (slot.data.blendMode == BlendMode.additive) color.a = 0; + } + + int fv = positions.Count; // first vertex index + for (int ii = 0; ii < meshVertexCount; ii += 2) + AddVert(new Vector3(tempVertices[ii], tempVertices[ii + 1]) * scale, color, new Vector2(meshUVs[ii], meshUVs[ii + 1])); + + var attachmentTriangles = attachment.triangles; + for (int ii = 0, n = attachmentTriangles.Length; ii < n; ii++) + indices.Add(attachmentTriangles[ii] + fv); + } + + // SkinnedMeshAttachment + protected void AddAttachment (Slot slot, WeightedMeshAttachment attachment) { + var tempVertices = this.tempVertices; + float[] meshUVs = attachment.uvs; + + int meshVertexCount = attachment.uvs.Length; + if (tempVertices.Length < meshVertexCount) + this.tempVertices = tempVertices = new float[meshVertexCount]; + attachment.ComputeWorldVertices(slot, tempVertices); + + Color color = skeletonColor; + color.r = color.r * attachment.r * slot.r; + color.g = color.g * attachment.g * slot.g; + color.b = color.b * attachment.b * slot.b; + color.a = color.a * attachment.a * slot.a; + if (premultiplyAlpha) { + color.r *= color.a; color.g *= color.a; color.b *= color.a; + if (slot.data.blendMode == BlendMode.additive) color.a = 0; + } + + int fv = positions.Count; // first vertex index + for (int ii = 0; ii < meshVertexCount; ii += 2) + AddVert(new Vector3(tempVertices[ii], tempVertices[ii + 1]) * scale, color, new Vector2(meshUVs[ii], meshUVs[ii + 1])); + + var attachmentTriangles = attachment.triangles; + for (int ii = 0, n = attachmentTriangles.Length; ii < n; ii++) + indices.Add(attachmentTriangles[ii] + fv); + } + #endregion + + } + +} diff --git a/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples/VertexHelperSpineMeshGenerator.cs.meta b/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples/VertexHelperSpineMeshGenerator.cs.meta new file mode 100644 index 000000000..9e8b698e9 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/Mesh Generation Samples/VertexHelperSpineMeshGenerator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 90314614996d9074ab6de408d0baa004 +timeCreated: 1455147712 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Ragdoll.meta b/spine-unity/Assets/spine-unity/Modules/Ragdoll.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll.meta rename to spine-unity/Assets/spine-unity/Modules/Ragdoll.meta diff --git a/spine-unity/Assets/spine-unity/Ragdoll/Editor.meta b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/Editor.meta rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor.meta diff --git a/spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs diff --git a/spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs.meta b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs.meta rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs.meta diff --git a/spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdollInspector.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdollInspector.cs rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs diff --git a/spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdollInspector.cs.meta b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/Editor/SkeletonRagdollInspector.cs.meta rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs.meta diff --git a/spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs similarity index 99% rename from spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll.cs rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs index d52305f00..9e5f2f5bb 100644 --- a/spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs @@ -348,7 +348,7 @@ public class SkeletonRagdoll : MonoBehaviour { return colliders; } - void UpdateWorld (SkeletonRenderer skeletonRenderer) { + void UpdateWorld (ISkeletonAnimation skeletonRenderer) { foreach (var pair in boneTable) { var b = pair.Key; var t = pair.Value; diff --git a/spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll.cs.meta b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll.cs.meta rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs.meta diff --git a/spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll2D.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs similarity index 99% rename from spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll2D.cs rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs index 9b8fd8193..cef143f89 100644 --- a/spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll2D.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs @@ -348,7 +348,7 @@ public class SkeletonRagdoll2D : MonoBehaviour { return colliders; } - void UpdateWorld (SkeletonRenderer skeletonRenderer) { + void UpdateWorld (ISkeletonAnimation skeletonRenderer) { foreach (var pair in boneTable) { var b = pair.Key; var t = pair.Value; diff --git a/spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll2D.cs.meta b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/Ragdoll/SkeletonRagdoll2D.cs.meta rename to spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs.meta diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic.meta new file mode 100644 index 000000000..dfa68ee1a --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6338355ec521d6848bb8ef1e10272b3e +folderAsset: yes +timeCreated: 1455493504 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders.meta new file mode 100644 index 000000000..da6d0a292 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 43897010c7e77c54897cb98c1ddf84f1 +folderAsset: yes +timeCreated: 1455128695 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader new file mode 100644 index 000000000..c58b7ef71 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader @@ -0,0 +1,93 @@ +Shader "Spine/SkeletonGraphic (Premultiply Alpha)" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Fog { Mode Off } + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + }; + + fixed4 _Color; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); + OUT.texcoord = IN.texcoord; + + #ifdef UNITY_HALF_TEXEL_OFFSET + OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); + #endif + + OUT.color = IN.color * _Color; + return OUT; + } + + sampler2D _MainTex; + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; + clip (color.a - 0.01); + return color; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader.meta new file mode 100644 index 000000000..167123f4a --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphic.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fa95b0fb6983c0f40a152e6f9aa82bfb +timeCreated: 1455080068 +licenseType: Free +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphicDefault.mat b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphicDefault.mat new file mode 100644 index 000000000..132bc088e Binary files /dev/null and b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphicDefault.mat differ diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphicDefault.mat.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphicDefault.mat.meta new file mode 100644 index 000000000..aaa80ff62 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Shaders/SkeletonGraphicDefault.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b66cf7a186d13054989b33a5c90044e4 +timeCreated: 1455140322 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs new file mode 100644 index 000000000..a7a9ca9bd --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs @@ -0,0 +1,208 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to use, install, execute and perform the Spine + * Runtimes Software (the "Software") and derivative works solely for personal + * or internal use. Without the written permission of Esoteric Software (see + * Section 2 of the Spine Software License Agreement), you may not (a) modify, + * translate, adapt or otherwise create derivative works, improvements of the + * Software or develop new applications using the Software or (b) remove, + * delete, alter or obscure any trademarks or any copyright, trademark, patent + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using Spine; + +public delegate void SkeletonGraphicDelegate (SkeletonGraphic skeletonGraphic); + +[ExecuteInEditMode, RequireComponent(typeof(CanvasRenderer), typeof(RectTransform)), DisallowMultipleComponent] +[AddComponentMenu("Spine/SkeletonGraphic (Unity UI Canvas)")] +public class SkeletonGraphic : MaskableGraphic { + + #region Inspector + [Header("Skeleton Renderer")] + public SkeletonDataAsset skeletonDataAsset; + + [SpineSkin(dataField:"skeletonDataAsset")] + public string initialSkinName = "default"; + + [Header("Skeleton Animation")] + [SpineAnimation(dataField:"skeletonDataAsset")] + public string startingAnimation; + public bool startingLoop; + public float timeScale = 1f; + public bool freeze; + + #if UNITY_EDITOR + protected override void OnValidate () { + // This handles Scene View preview. + base.OnValidate (); + this.raycastTarget = false; + + if (this.IsValid) { + if (skeletonDataAsset == null) { + Clear(); + startingAnimation = ""; + } else if (skeletonDataAsset.GetSkeletonData(true) != skeleton.data) { + Clear(); + Initialize(true); + startingAnimation = ""; + if (skeletonDataAsset.atlasAssets.Length > 1 || skeletonDataAsset.atlasAssets[0].materials.Length > 1) { + Debug.LogError("Unity UI does not support multiple textures per Renderer. Your skeleton will not be rendered correctly. Recommend using SkeletonAnimation instead. This requires the use of a Screen space camera canvas."); + } + } else { + if (freeze) return; + skeleton.SetToSetupPose(); + skeleton.PoseWithAnimation(startingAnimation, 0f, false); + } + } else { + if (skeletonDataAsset != null) + Initialize(false); + } + + } + + protected override void Reset () { + base.Reset(); + if (material == null || material.shader != Shader.Find("Spine/SkeletonGraphic (Premultiply Alpha)")) { + Debug.LogWarning("SkeletonGraphic works best with the SkeletonGraphic material."); + } + } + #endif + #endregion + + #region Internals + protected Spine.Unity.ISimpleMeshGenerator spineMeshGenerator; // This is any object that can give you a mesh when you give it a skeleton to render. + protected Skeleton skeleton; + protected Spine.AnimationState state; + + // This is used by the UI system to determine what to put in the MaterialPropertyBlock. + public override Texture mainTexture { + get { + if (skeletonDataAsset == null) return null; + // Fail loudly when incorrectly set up. + return skeletonDataAsset.atlasAssets[0].materials[0].mainTexture; + } + } + + protected override void Awake () { + base.Awake (); + if (!this.IsValid) { + Initialize(false); + Rebuild(CanvasUpdate.PreRender); + } + } + + public override void Rebuild (CanvasUpdate update) { + base.Rebuild(update); + if (canvasRenderer.cull) return; + if (update == CanvasUpdate.PreRender) UpdateMesh(); + } + + public virtual void Update () { + if (freeze) return; + Update(Time.deltaTime); + } + + public virtual void Update (float deltaTime) { + if (!this.IsValid) return; + + deltaTime *= timeScale; + skeleton.Update(deltaTime); + state.Update(deltaTime); + state.Apply(skeleton); + + if (UpdateLocal != null) UpdateLocal(this); + + skeleton.UpdateWorldTransform(); + + if (UpdateWorld != null) { + UpdateWorld(this); + skeleton.UpdateWorldTransform(); + } + + if (UpdateComplete != null) UpdateComplete(this); + } + + void LateUpdate () { + if (freeze) return; + //this.SetVerticesDirty(); // Which is better? + UpdateMesh(); + } + #endregion + + #region API + public Skeleton Skeleton { get { return skeleton; } } + public Spine.AnimationState AnimationState { get { return state; } } + public SkeletonData SkeletonData { get { return skeleton == null ? null : skeleton.data; } } + public bool IsValid { get { return skeleton != null; } } + + public event SkeletonGraphicDelegate UpdateLocal; + public event SkeletonGraphicDelegate UpdateWorld; + public event SkeletonGraphicDelegate UpdateComplete; + + public void Clear () { + skeleton = null; + canvasRenderer.Clear(); + } + + public void Initialize (bool overwrite) { + if (this.IsValid && !overwrite) return; + + // Make sure none of the stuff is null + if (this.skeletonDataAsset == null) return; + var skeletonData = this.skeletonDataAsset.GetSkeletonData(false); + if (skeletonData == null) return; + + if (skeletonDataAsset.atlasAssets.Length <= 0 || skeletonDataAsset.atlasAssets[0].materials.Length <= 0) return; + + this.state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData()); + if (state == null) { + Clear(); + return; + } + + this.skeleton = new Skeleton(skeletonData); + this.spineMeshGenerator = new Spine.Unity.ArraysSimpleMeshGenerator(); // You can switch this out with any other implementer of ISpineMeshGenerator + + // Set the initial Skin and Animation + if (!string.IsNullOrEmpty(initialSkinName)) + skeleton.SetSkin(initialSkinName); + + if (!string.IsNullOrEmpty(startingAnimation)) + state.SetAnimation(0, startingAnimation, startingLoop); + } + + + public void UpdateMesh () { + //Debug.Log("update mesh"); + if (this.IsValid) { + skeleton.SetColor(this.color); + spineMeshGenerator.Scale = canvas.referencePixelsPerUnit; // TODO: move this to a listener to of the canvas? + canvasRenderer.SetMesh(spineMeshGenerator.GenerateMesh(skeleton)); + this.UpdateMaterial(); + } + } + #endregion +} diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs.meta new file mode 100644 index 000000000..d5c0fc204 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d85b887af7e6c3f45a2e2d2920d641bc +timeCreated: 1455074790 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules.meta new file mode 100644 index 000000000..4f84211da --- /dev/null +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d81fbd54cb5cab844900eaa11c48a907 +folderAsset: yes +timeCreated: 1455489575 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs rename to spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs.meta rename to spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityEyeConstraint.cs.meta diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs rename to spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs.meta rename to spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityGroundConstraint.cs.meta diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs rename to spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs.meta b/spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs.meta rename to spine-unity/Assets/spine-unity/Modules/SkeletonUtility Modules/SkeletonUtilityKinematicShadow.cs.meta diff --git a/spine-unity/Assets/spine-unity/SpriteAttacher.cs b/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs similarity index 100% rename from spine-unity/Assets/spine-unity/SpriteAttacher.cs rename to spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs diff --git a/spine-unity/Assets/spine-unity/SpriteAttacher.cs.meta b/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SpriteAttacher.cs.meta rename to spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs.meta diff --git a/spine-unity/Assets/spine-unity/SpriteCollectionAttachmentLoader.cs b/spine-unity/Assets/spine-unity/Modules/SpriteCollectionAttachmentLoader.cs similarity index 100% rename from spine-unity/Assets/spine-unity/SpriteCollectionAttachmentLoader.cs rename to spine-unity/Assets/spine-unity/Modules/SpriteCollectionAttachmentLoader.cs diff --git a/spine-unity/Assets/spine-unity/SpriteCollectionAttachmentLoader.cs.meta b/spine-unity/Assets/spine-unity/Modules/SpriteCollectionAttachmentLoader.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/SpriteCollectionAttachmentLoader.cs.meta rename to spine-unity/Assets/spine-unity/Modules/SpriteCollectionAttachmentLoader.cs.meta diff --git a/spine-unity/Assets/spine-unity/YieldInstructions.meta b/spine-unity/Assets/spine-unity/Modules/YieldInstructions.meta similarity index 100% rename from spine-unity/Assets/spine-unity/YieldInstructions.meta rename to spine-unity/Assets/spine-unity/Modules/YieldInstructions.meta diff --git a/spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineAnimationComplete.cs b/spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineAnimationComplete.cs similarity index 100% rename from spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineAnimationComplete.cs rename to spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineAnimationComplete.cs diff --git a/spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineAnimationComplete.cs.meta b/spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineAnimationComplete.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineAnimationComplete.cs.meta rename to spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineAnimationComplete.cs.meta diff --git a/spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineEvent.cs b/spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineEvent.cs similarity index 100% rename from spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineEvent.cs rename to spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineEvent.cs diff --git a/spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineEvent.cs.meta b/spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineEvent.cs.meta similarity index 100% rename from spine-unity/Assets/spine-unity/YieldInstructions/WaitForSpineEvent.cs.meta rename to spine-unity/Assets/spine-unity/Modules/YieldInstructions/WaitForSpineEvent.cs.meta diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs index af31742c0..c1b83cc16 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs @@ -62,9 +62,12 @@ public class SkeletonAnimation : SkeletonRenderer, ISkeletonAnimation { protected event UpdateBonesDelegate _UpdateWorld; protected event UpdateBonesDelegate _UpdateComplete; - // TODO: Make this a safe getter. Lazy-initialize and avoid double-initialization. + /// Gets the skeleton. public Skeleton Skeleton { - get { return this.skeleton; } + get { + this.Initialize(false); + return this.skeleton; + } } [SerializeField] @@ -126,8 +129,12 @@ public class SkeletonAnimation : SkeletonRenderer, ISkeletonAnimation { } #endregion - public override void Reset () { - base.Reset(); + public override void Initialize (bool overwrite) { + if (valid && !overwrite) + return; + + base.Initialize(overwrite); + if (!valid) return; diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs index 51e8b724b..c41c0c46a 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs @@ -40,13 +40,17 @@ public class SkeletonAnimator : SkeletonRenderer, ISkeletonAnimation { } } - Dictionary animationTable = new Dictionary(); - Dictionary clipNameHashCodeTable = new Dictionary(); + readonly Dictionary animationTable = new Dictionary(); + readonly Dictionary clipNameHashCodeTable = new Dictionary(); Animator animator; float lastTime; - public override void Reset () { - base.Reset(); + public override void Initialize (bool overwrite) { + if (valid && !overwrite) + return; + + base.Initialize(overwrite); + if (!valid) return; diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs index 8d723e42c..0e2101bb7 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs @@ -35,11 +35,11 @@ using UnityEngine; using Spine; /// Renders a skeleton. -[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] +[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer)), DisallowMultipleComponent] public class SkeletonRenderer : MonoBehaviour { public delegate void SkeletonRendererDelegate (SkeletonRenderer skeletonRenderer); - public SkeletonRendererDelegate OnReset; + public SkeletonRendererDelegate OnRebuild; public SkeletonDataAsset skeletonDataAsset; public String initialSkinName; @@ -85,7 +85,7 @@ public class SkeletonRenderer : MonoBehaviour { if (skeletonDataAsset != null) { c.skeletonDataAsset = skeletonDataAsset; - c.Reset(); // TODO: Method name will change. + c.Initialize(false); } return c; @@ -97,42 +97,35 @@ public class SkeletonRenderer : MonoBehaviour { #endregion public virtual void Awake () { - Reset(); + Initialize(false); } - public virtual void Reset () { - if (meshFilter != null) - meshFilter.sharedMesh = null; + public virtual void Initialize (bool overwrite) { + if (valid && !overwrite) + return; - meshRenderer = GetComponent(); - if (meshRenderer != null) meshRenderer.sharedMaterial = null; + // Clear + { + if (meshFilter != null) + meshFilter.sharedMesh = null; - if (mesh1 != null) { - if (Application.isPlaying) - Destroy(mesh1); - else - DestroyImmediate(mesh1); + meshRenderer = GetComponent(); + if (meshRenderer != null) meshRenderer.sharedMaterial = null; + + meshState = new MeshState(); + mesh1 = null; + mesh2 = null; + vertices = null; + colors = null; + uvs = null; + sharedMaterials = new Material[0]; + submeshMaterials.Clear(); + submeshes.Clear(); + skeleton = null; + + valid = false; } - if (mesh2 != null) { - if (Application.isPlaying) - Destroy(mesh2); - else - DestroyImmediate(mesh2); - } - - meshState = new MeshState(); - mesh1 = null; - mesh2 = null; - vertices = null; - colors = null; - uvs = null; - sharedMaterials = new Material[0]; - submeshMaterials.Clear(); - submeshes.Clear(); - skeleton = null; - - valid = false; if (!skeletonDataAsset) { if (logErrors) Debug.LogError("Missing SkeletonData asset.", this); @@ -146,8 +139,8 @@ public class SkeletonRenderer : MonoBehaviour { meshFilter = GetComponent(); meshRenderer = GetComponent(); - mesh1 = newMesh(); - mesh2 = newMesh(); + mesh1 = SpineMesh.NewMesh(); + mesh2 = SpineMesh.NewMesh(); vertices = new Vector3[0]; skeleton = new Skeleton(skeletonData); @@ -163,41 +156,14 @@ public class SkeletonRenderer : MonoBehaviour { LateUpdate(); - if (OnReset != null) - OnReset(this); + if (OnRebuild != null) + OnRebuild(this); } public void CollectSubmeshRenderers () { submeshRenderers = GetComponentsInChildren(); } - public virtual void OnDestroy () { - if (mesh1 != null) { - if (Application.isPlaying) - Destroy(mesh1); - else - DestroyImmediate(mesh1); - } - - if (mesh2 != null) { - if (Application.isPlaying) - Destroy(mesh2); - else - DestroyImmediate(mesh2); - } - - mesh1 = null; - mesh2 = null; - } - - private static Mesh newMesh () { - Mesh mesh = new Mesh(); - mesh.name = "Skeleton Mesh"; - mesh.hideFlags = HideFlags.HideAndDontSave; - mesh.MarkDynamic(); - return mesh; - } - public virtual void LateUpdate () { if (!valid) return; @@ -222,20 +188,20 @@ public class SkeletonRenderer : MonoBehaviour { var workingAttachments = workingState.attachments; workingAttachments.Clear(true); workingState.UpdateAttachmentCount(drawOrderCount); - var workingAttachmentsItems = workingAttachments.Items; // Make sure to not add to or remove from ExposedList inside the loop below + var workingAttachmentsItems = workingAttachments.Items; // Make sure to not add to or remove from ExposedList inside the loop below var workingFlips = workingState.attachmentsFlipState; - var workingFlipsItems = workingState.attachmentsFlipState.Items; // Make sure to not add to or remove from ExposedList inside the loop below + var workingFlipsItems = workingState.attachmentsFlipState.Items; // Make sure to not add to or remove from ExposedList inside the loop below var workingSubmeshArguments = workingState.addSubmeshArguments; // Items array should not be cached. There is dynamic writing to this object. workingSubmeshArguments.Clear(false); MeshState.SingleMeshState storedState = useMesh1 ? meshState.stateMesh1 : meshState.stateMesh2; var storedAttachments = storedState.attachments; - var storedAttachmentsItems = storedAttachments.Items; // Make sure to not add to or remove from ExposedList inside the loop below + var storedAttachmentsItems = storedAttachments.Items; // Make sure to not add to or remove from ExposedList inside the loop below var storedFlips = storedState.attachmentsFlipState; - var storedFlipsItems = storedFlips.Items; // Make sure to not add to or remove from ExposedList inside the loop below + var storedFlipsItems = storedFlips.Items; // Make sure to not add to or remove from ExposedList inside the loop below bool mustUpdateMeshStructure = storedState.requiresUpdate || // Force update if the mesh was cleared. (prevents flickering due to incorrect state) drawOrder.Count != storedAttachments.Count || // Number of slots changed (when does this happen?) @@ -604,7 +570,7 @@ public class SkeletonRenderer : MonoBehaviour { if (calculateTangents) { Vector4[] tangents = new Vector4[vertexCount]; - Vector3 tangent = new Vector3(0, 0, 1); + Vector4 tangent = new Vector4(1, 0, 0, -1); for (int i = 0; i < vertexCount; i++) tangents[i] = tangent; mesh1.tangents = tangents; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs index 6fc3ae8d1..99e1a353c 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs @@ -40,7 +40,7 @@ public class SkeletonUtilityBoneInspector : Editor { EvaluateFlags(); if (utilityBone.valid == false && skeletonUtility != null && skeletonUtility.skeletonRenderer != null) { - skeletonUtility.skeletonRenderer.Reset(); + skeletonUtility.skeletonRenderer.Initialize(false); } canCreateHingeChain = CanCreateHingeChain(); diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs index 9e6a81c39..e6af51945 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs @@ -83,7 +83,7 @@ public class SkeletonUtilityInspector : Editor { transform = skeletonRenderer.transform; if (skeleton == null) { - skeletonRenderer.Reset(); + skeletonRenderer.Initialize(false); skeletonRenderer.LateUpdate(); skeleton = skeletonRenderer.skeleton; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs index 03d6e6148..2ff91eccd 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs @@ -156,8 +156,8 @@ public class SkeletonUtility : MonoBehaviour { skeletonAnimation = GetComponent(); } - skeletonRenderer.OnReset -= HandleRendererReset; - skeletonRenderer.OnReset += HandleRendererReset; + skeletonRenderer.OnRebuild -= HandleRendererReset; + skeletonRenderer.OnRebuild += HandleRendererReset; if (skeletonAnimation != null) { skeletonAnimation.UpdateLocal -= UpdateLocal; @@ -174,7 +174,7 @@ public class SkeletonUtility : MonoBehaviour { } void OnDisable () { - skeletonRenderer.OnReset -= HandleRendererReset; + skeletonRenderer.OnRebuild -= HandleRendererReset; if (skeletonAnimation != null) { skeletonAnimation.UpdateLocal -= UpdateLocal; @@ -265,7 +265,7 @@ public class SkeletonUtility : MonoBehaviour { } - void UpdateLocal (SkeletonRenderer anim) { + void UpdateLocal (ISkeletonAnimation anim) { if (needToReprocessBones) CollectBones(); @@ -280,14 +280,14 @@ public class SkeletonUtility : MonoBehaviour { UpdateAllBones(); } - void UpdateWorld (SkeletonRenderer anim) { + void UpdateWorld (ISkeletonAnimation anim) { UpdateAllBones(); foreach (SkeletonUtilityConstraint c in utilityConstraints) c.DoUpdate(); } - void UpdateComplete (SkeletonRenderer anim) { + void UpdateComplete (ISkeletonAnimation anim) { UpdateAllBones(); }