void ParseFontCharProperty(ref FontChar fontChar, string name) { switch (name) { case "CharCode": fontChar.Char = (char)lexer.ParseInt(); break; case "TexPosition": fontChar.UV0 = lexer.ParseVector2() / (Vector2)textureSize; break; case "TexSize": Vector2 size = lexer.ParseVector2(); fontChar.Width = size.X; fontChar.Height = size.Y; fontChar.UV1 = fontChar.UV0 + size / (Vector2)textureSize; break; case "ACWidths": fontChar.ACWidths = lexer.ParseVector2(); break; case "TextureIndex": fontChar.TextureIndex = lexer.ParseInt(); break; default: throw new Exception("Unknown property '{0}'. Parsing: {1}", name, fontChar); } }
protected void ParseActorProperty(Node node, string name) { switch (name) { case "Name": node.Id = lexer.ParseQuotedString(); break; case "RuntimeClass": lexer.ParseQuotedString(); break; case "Localizable": lexer.ParseBool(); break; case "Source": var s = lexer.ParsePath(); node.ContentsPath = s; break; case "Attributes": node.TangerineFlags = (TangerineFlags)(lexer.ParseInt() & 7); break; case "Trigger": node.Trigger = lexer.ParseQuotedString(); break; case "Tag": node.Tag = lexer.ParseQuotedString(); break; case "Actors": lexer.ParseToken('['); while (lexer.PeekChar() != ']') { var child = ParseNode(null); if (child != null) { node.Nodes.Add(child); } } lexer.ParseToken(']'); if (node is Widget) { var allBones = node.AsWidget.Nodes.OfType <Bone>(); foreach (var root in allBones.Where(b => b.BaseIndex == 0)) { var loc = node.AsWidget.Nodes.IndexOf(root); if (loc == 0) { loc++; } var bones = BoneUtils.SortBones(BoneUtils.FindBoneDescendats(root, allBones)); foreach (var bone in bones) { bone.Unlink(); node.AsWidget.Nodes.Insert(loc, bone); } } } break; case "Animators": lexer.ParseToken('['); while (lexer.PeekChar() != ']') { ParseAnimator(node); } if (node is ParticleModifier) { TryMergeScaleAndAspectRatioForParticleTemplate(node as ParticleModifier); particleModifierScaleAnimator = null; particleModifierAspectRatioAnimator = null; } lexer.ParseToken(']'); break; case "Markers": lexer.ParseToken('['); while (lexer.PeekChar() != ']') { var marker = ParseMarker(); if (marker.Action == MarkerAction.Jump && marker.JumpTo == null) { throw new Exception("Jump marker '{0}' in node '{1}' have no JumpTo property.", marker.Id ?? "<noname>", node.ToString()); } node.Markers.Add(marker); } lexer.ParseToken(']'); break; default: throw new Exception("Unknown property '{0}'. Parsing: {1}", name, node.GetType()); } }