Exemple #1
0
        public Font ParseFont(Stream stream, Font font = null)
        {
            var path = Serialization.GetCurrentSerializationPath();

            this.textureSize = GetTextureSize(path);
            using (var reader = new StreamReader(stream)) {
                string text = reader.ReadToEnd();
                lexer = new HotLexer("", text, true);
            }
            var type = lexer.ParseQuotedString();

            if (type != "Hot::Font")
            {
                throw new Exception("Unknown type of object '{0}'", type);
            }
            if (font == null)
            {
                font = new Font();
            }
            AddFontTextures(font, path);
            lexer.ParseToken('{');
            while (lexer.PeekChar() != '}')
            {
                ParseFontProperty(font, lexer.ParseWord());
            }
            lexer.ParseToken('}');
            return(font);
        }
Exemple #2
0
        FontChar ParseFontChar()
        {
            string type = lexer.ParseQuotedString();

            if (type != "Hot::FontChar")
            {
                throw new Exception("Unknown type of object '{0}'", type);
            }
            var fontChar = new FontChar();

            lexer.ParseToken('{');
            while (lexer.PeekChar() != '}')
            {
                ParseFontCharProperty(ref fontChar, lexer.ParseWord());
            }
            lexer.ParseToken('}');
            return(fontChar);
        }
Exemple #3
0
        public Font ParseFont(string srcPath, string dstPath)
        {
            this.textureSize = GetTextureSize(srcPath);
            this.lexer       = CreateLexer(srcPath);
            var type = lexer.ParseQuotedString();

            if (type != "Hot::Font")
            {
                throw new Exception("Unknown type of object '{0}'", type);
            }
            var font = new Font();

            AddFontTextures(font, srcPath, dstPath);
            lexer.ParseToken('{');
            while (lexer.PeekChar() != '}')
            {
                ParseFontProperty(font, lexer.ParseWord());
            }
            lexer.ParseToken('}');
            return(font);
        }
Exemple #4
0
        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());
            }
        }