コード例 #1
0
        private object ParseGodotValue()
        {
            if (_parser.Peek() == '"')
            {
                return(ParseGodotString());
            }

            if (_parser.PeekIsDigit())
            {
                return(ParseGodotNumber());
            }

            if (_parser.TryParse("ExtResource("))
            {
                _parser.EatWhitespace();
                var val = new GodotAsset.TokenExtResource((long)ParseGodotNumber());
                _parser.EatWhitespace();
                _parser.Parse(')');
                return(val);
            }

            throw new NotImplementedException($"Unable to handle complex kv pairs: '{_parser.Peek()}'");
        }
コード例 #2
0
        private object ParseGodotValue()
        {
            if (_parser.Peek() == '"')
            {
                return(ParseGodotString());
            }

            if (_parser.PeekIsDigit() || _parser.Peek() == '-')
            {
                return(ParseGodotNumber());
            }

            if (_parser.TryParse("null"))
            {
                return(null);
            }

            if (_parser.TryParse("true"))
            {
                return(true);
            }

            if (_parser.TryParse("false"))
            {
                return(false);
            }

            if (_parser.TryParse("Color("))
            {
                _parser.EatWhitespace();
                var r = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(',');
                _parser.EatWhitespace();
                var g = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(',');
                _parser.EatWhitespace();
                var b = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(',');
                _parser.EatWhitespace();
                var a = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(')');
                return(new Color(r, g, b, a));
            }

            if (_parser.TryParse("Vector2("))
            {
                _parser.EatWhitespace();
                var x = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(',');
                _parser.EatWhitespace();
                var y = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(')');
                return(new Vector2(x, y));
            }

            if (_parser.TryParse("Vector3("))
            {
                _parser.EatWhitespace();
                var x = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(',');
                _parser.EatWhitespace();
                var y = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(',');
                _parser.EatWhitespace();
                var z = ParseGodotFloat();
                _parser.EatWhitespace();
                _parser.Parse(')');
                return(new Vector3(x, y, z));
            }

            if (_parser.TryParse("ExtResource("))
            {
                _parser.EatWhitespace();
                var val = new GodotAsset.TokenExtResource((long)ParseGodotNumber());
                _parser.EatWhitespace();
                _parser.Parse(')');
                return(val);
            }

            if (_parser.TryParse("SubResource("))
            {
                _parser.EatWhitespace();
                var val = new GodotAsset.TokenSubResource((long)ParseGodotNumber());
                _parser.EatWhitespace();
                _parser.Parse(')');
                return(val);
            }

            throw new NotImplementedException($"Unable to handle complex kv pairs: '{_parser.Peek()}'");
        }