Ejemplo n.º 1
0
 public static Asset GetFile(this IAssetProvider assetProvider, NamedIdentifier name)
 {
     if (name.Name.IndexOf('/') == -1)
     {
         assetProvider.GetAssets().FirstOrDefault(p => p.NamedIdentifier.Equals(name));
     }
     var type = name.Name[..name.Name.IndexOf('/')] switch
Ejemplo n.º 2
0
 /// <summary>
 /// 创建一个<see cref="Asset" />
 /// </summary>
 /// <param name="type"><see cref="Asset" />的类型</param>
 /// <param name="resource"><see cref="Asset" />的所属资源</param>
 /// <param name="uuid"><see cref="Asset" />的标识符</param>
 /// <exception cref="ResourceException">命名空间或名字格式错误</exception>
 protected Asset(NamedIdentifier namedId, AssetType type, Resource resource, Uuid uuid)
 {
     if (!namedId.IsValid)
     {
         throw new ResourceException("invalid namespace or name");
     }
     NamedIdentifier = namedId;
     Type            = type;
     Resource        = resource;
     Id = uuid;
 }
Ejemplo n.º 3
0
 public Asset this[AssetType type, NamedIdentifier name]
 {
     get
     {
         var asset = GetAssets().FirstOrDefault(p => p.Type == type && p.NamedIdentifier.Equals(name));
         if (asset == null)
         {
             throw new ResourceException($"{type} asset {name} not found!");
         }
         return(asset);
     }
 }
Ejemplo n.º 4
0
        public (NamedIdentifier file, float x1, float y1, float x2, float y2)? GetChar(char c)
        {
            if (c > '\uffff')
            {
                return(null);
            }
            NamedIdentifier file = Template.Replace("%s", (c >> 8).ToString("x2"));
            int             x    = (c & 0b1111) << 4;
            int             y    = c & 0b11110000;
            float           unit = 1F / 256;

            return(file, unit *(x + (_size[c] >> 4)), unit *y, unit *(x + (_size[c] & 0b1111) + 1), unit *(y + 16));
        }
Ejemplo n.º 5
0
 public BitmapFontProvider(NamedIdentifier file, int ascent, IEnumerable <string> chars, int height = 16)
 {
     File   = file;
     Ascent = ascent;
     _chars = chars.ToArray();
     Column = Chars[0].Length;
     Row    = Chars.Count;
     if (!Chars.All(p => p.Length == Column))
     {
         throw new ResourceException("Failed to load bitmap provider.");
     }
     Height = height;
 }
Ejemplo n.º 6
0
 public void Write(NamedIdentifier value)
 {
     _binaryWriter.Write(value);
 }
Ejemplo n.º 7
0
 public Asset this[AssetType type, NamedIdentifier name] {
     get => ActiveAssets[new KeyValuePair <AssetType, NamedIdentifier>(type, name)];
Ejemplo n.º 8
0
 public BlockState(NamedIdentifier id, IEnumerable <KeyValuePair <string, string> > properties)
 {
     Name       = id;
     Properties = new Dictionary <string, string>(properties);
 }
Ejemplo n.º 9
0
 public BlockState(NamedIdentifier id)
 {
     Name = id;
 }
Ejemplo n.º 10
0
 public bool TryGetAsset(AssetType type, NamedIdentifier name, out Asset asset)
 {
     asset = GetAssets().FirstOrDefault(p => p.Type == type && p.NamedIdentifier == name);
     return(asset != null);
 }
Ejemplo n.º 11
0
 /// <summary>
 /// 创建<see cref="AssetFile" />
 /// </summary>
 /// <param name="name">名称</param>
 /// <param name="type">类型</param>
 /// <param name="resource">所属资源</param>
 /// <param name="id">标识符</param>
 /// <param name="file">文件</param>
 /// <param name="namespace">命名空间</param>
 public AssetFile(NamedIdentifier name, AssetType type, Resource resource, Uuid id, IFilePath file,
                  string @namespace = "minecraft") :
     base(name, type, resource, id)
 {
     _file = file;
 }
Ejemplo n.º 12
0
 public static Translation GetTranslation(this IEnumerable <Translation> translations, NamedIdentifier fullname)
 {
     return(translations
            .FirstOrDefault(translation => translation.NamedIdentifier == fullname));
 }
Ejemplo n.º 13
0
        public override bool TryThisParseXml(XmlElement elem)
        {
            if (!base.TryThisParseXml(elem))
                return false;

            if (!elem.HasChildNodes)
                return true;

            var tempIdList = new List<XrefIdentifier>();
            foreach (var cnode in elem.ChildNodes)
            {
                var cElem = cnode as XmlElement;
                if (cElem == null)
                    continue;

                if(string.Equals(cElem.Name, X_REF, StringComparison.OrdinalIgnoreCase))
                {
                    if(!cElem.HasChildNodes)
                        throw new RahRowRagee($"The '{X_REF}' node must have at least one child " +
                                              "element to be a valid cross reference");

                    foreach (var xRefIdNode in cElem.ChildNodes)
                    {
                        var xRefIdElem = xRefIdNode as XmlElement;

                        var idValue = xRefIdElem?.InnerText;
                        if (string.IsNullOrWhiteSpace(idValue))
                            continue;

                        var dataFileXrefNode = _dataFile.SelectSingleNode($"//{_nodeName}[@ID='{idValue}']");

                        var dataFileXrefElem = dataFileXrefNode as XmlElement;

                        var xmlDocId = new XmlDocXrefIdentifier {_localName = _nodeName};
                        if (xmlDocId.TryThisParseXml(dataFileXrefElem))
                        {
                            tempIdList.Add(xmlDocId);
                        }
                    }

                    continue;
                }

                var nameAttr = cElem.Attributes[NAME];
                var valueAttr = cElem.Attributes[VALUE];

                if (nameAttr == null || valueAttr == null)
                    continue;
                if(string.IsNullOrWhiteSpace(nameAttr.Value) || string.IsNullOrWhiteSpace(valueAttr.Value))
                    continue;

                ReferenceDictionary.Add(nameAttr.Value, valueAttr.Value);
            }

            XrefIds = new NamedIdentifier[tempIdList.Count];
            Array.Copy(tempIdList.ToArray(), XrefIds, XrefIds.Length);

            return XrefIds.Length > 0;
        }
Ejemplo n.º 14
0
 /// <summary>
 /// 创建翻译
 /// </summary>
 /// <param name="value">值</param>
 public Translation(NamedIdentifier namedIdentifier, string value)
 {
     NamedIdentifier = namedIdentifier;
     Value           = value;
 }