bool LoadPackage(ByteBuffer buffer) { if (buffer.ReadUint() != 0x46475549) { throw new Exception("FairyGUI: old package format found in '" + assetPath + "'"); } buffer.version = buffer.ReadInt(); buffer.ReadBool(); //compressed id = buffer.ReadString(); name = buffer.ReadString(); if (_packageInstById.ContainsKey(id) && name != _packageInstById[id].name) { Log.Warning("FairyGUI: Package id conflicts, '" + name + "' and '" + _packageInstById[id].name + "'"); return(false); } buffer.Skip(20); int indexTablePos = buffer.position; int cnt; buffer.Seek(indexTablePos, 4); cnt = buffer.ReadInt(); string[] stringTable = new string[cnt]; for (int i = 0; i < cnt; i++) { stringTable[i] = buffer.ReadString(); } buffer.stringTable = stringTable; if (buffer.Seek(indexTablePos, 5)) { cnt = buffer.ReadInt(); for (int i = 0; i < cnt; i++) { int index = buffer.ReadUshort(); int len = buffer.ReadInt(); stringTable[index] = buffer.ReadString(len); } } buffer.Seek(indexTablePos, 1); PackageItem pi; cnt = buffer.ReadShort(); for (int i = 0; i < cnt; i++) { int nextPos = buffer.ReadInt(); nextPos += buffer.position; pi = new PackageItem(); pi.owner = this; pi.type = (PackageItemType)buffer.ReadByte(); pi.id = buffer.ReadS(); pi.name = buffer.ReadS(); buffer.ReadS(); //path pi.file = buffer.ReadS(); pi.exported = buffer.ReadBool(); pi.width = buffer.ReadInt(); pi.height = buffer.ReadInt(); switch (pi.type) { case PackageItemType.Image: { pi.objectType = ObjectType.Image; int scaleOption = buffer.ReadByte(); if (scaleOption == 1) { Rectangle rect = new Rectangle(); rect.X = buffer.ReadInt(); rect.Y = buffer.ReadInt(); rect.Width = buffer.ReadInt(); rect.Height = buffer.ReadInt(); pi.scale9Grid = rect; pi.tileGridIndice = buffer.ReadInt(); } else if (scaleOption == 2) { pi.scaleByTile = true; } buffer.ReadBool(); //smoothing break; } case PackageItemType.MovieClip: { buffer.ReadBool(); //smoothing pi.objectType = ObjectType.MovieClip; pi.rawData = buffer.ReadBuffer(); break; } case PackageItemType.Font: { pi.rawData = buffer.ReadBuffer(); break; } case PackageItemType.Component: { int extension = buffer.ReadByte(); if (extension > 0) { pi.objectType = (ObjectType)extension; } else { pi.objectType = ObjectType.Component; } pi.rawData = buffer.ReadBuffer(); UIObjectFactory.ResolvePackageItemExtension(pi); break; } case PackageItemType.Atlas: case PackageItemType.Sound: case PackageItemType.Misc: { pi.file = assetPath + "_" + Path.GetFileNameWithoutExtension(pi.file); break; } } _items.Add(pi); _itemsById[pi.id] = pi; if (pi.name != null) { _itemsByName[pi.name] = pi; } buffer.position = nextPos; } buffer.Seek(indexTablePos, 2); cnt = buffer.ReadShort(); for (int i = 0; i < cnt; i++) { int nextPos = buffer.ReadShort(); nextPos += buffer.position; string itemId = buffer.ReadS(); pi = _itemsById[buffer.ReadS()]; AtlasSprite sprite = new AtlasSprite(); sprite.atlas = pi; sprite.rect.X = buffer.ReadInt(); sprite.rect.Y = buffer.ReadInt(); sprite.rect.Width = buffer.ReadInt(); sprite.rect.Height = buffer.ReadInt(); sprite.rotated = buffer.ReadBool(); _sprites[itemId] = sprite; buffer.position = nextPos; } if (buffer.Seek(indexTablePos, 3)) { cnt = buffer.ReadShort(); for (int i = 0; i < cnt; i++) { int nextPos = buffer.ReadInt(); nextPos += buffer.position; if (_itemsById.TryGetValue(buffer.ReadS(), out pi)) { if (pi.type == PackageItemType.Image) { pi.pixelHitTestData = new PixelHitTestData(); pi.pixelHitTestData.Load(buffer); } } buffer.position = nextPos; } } buffer.Seek(indexTablePos, 0); cnt = buffer.ReadShort(); _dependencies = new Dictionary <string, string> [cnt]; for (int i = 0; i < cnt; i++) { Dictionary <string, string> kv = new Dictionary <string, string>(); kv.Add("id", buffer.ReadS()); kv.Add("name", buffer.ReadS()); _dependencies[i] = kv; } return(true); }
bool LoadPackage(ByteBuffer buffer, string packageSource, string assetNamePrefix) { if (buffer.ReadUint() != 0x46475549) { if (Application.isPlaying) { throw new Exception("FairyGUI: old package format found in '" + packageSource + "'"); } else { Debug.LogWarning("FairyGUI: old package format found in '" + packageSource + "'"); return(false); } } buffer.version = buffer.ReadInt(); buffer.ReadBool(); //compressed id = buffer.ReadString(); name = buffer.ReadString(); if (_packageInstById.ContainsKey(id) && name != _packageInstById[id].name) { Debug.LogWarning("FairyGUI: Package id conflicts, '" + name + "' and '" + _packageInstById[id].name + "'"); return(false); } buffer.Skip(20); int indexTablePos = buffer.position; int cnt; buffer.Seek(indexTablePos, 4); cnt = buffer.ReadInt(); string[] stringTable = new string[cnt]; for (int i = 0; i < cnt; i++) { stringTable[i] = buffer.ReadString(); } buffer.stringTable = stringTable; buffer.Seek(indexTablePos, 1); PackageItem pi; if (assetNamePrefix == null) { assetNamePrefix = string.Empty; } else if (assetNamePrefix.Length > 0) { assetNamePrefix = assetNamePrefix + "_"; } cnt = buffer.ReadShort(); for (int i = 0; i < cnt; i++) { int nextPos = buffer.ReadInt(); nextPos += buffer.position; pi = new PackageItem(); pi.owner = this; pi.type = (PackageItemType)buffer.ReadByte(); pi.id = buffer.ReadS(); pi.name = buffer.ReadS(); buffer.ReadS(); //path pi.file = buffer.ReadS(); pi.exported = buffer.ReadBool(); pi.width = buffer.ReadInt(); pi.height = buffer.ReadInt(); switch (pi.type) { case PackageItemType.Image: { pi.objectType = ObjectType.Image; int scaleOption = buffer.ReadByte(); if (scaleOption == 1) { Rect rect = new Rect(); rect.x = buffer.ReadInt(); rect.y = buffer.ReadInt(); rect.width = buffer.ReadInt(); rect.height = buffer.ReadInt(); pi.scale9Grid = rect; pi.tileGridIndice = buffer.ReadInt(); } else if (scaleOption == 2) { pi.scaleByTile = true; } buffer.ReadBool(); //smoothing break; } case PackageItemType.MovieClip: { buffer.ReadBool(); //smoothing pi.objectType = ObjectType.MovieClip; pi.rawData = buffer.ReadBuffer(); break; } case PackageItemType.Font: { pi.rawData = buffer.ReadBuffer(); break; } case PackageItemType.Component: { int extension = buffer.ReadByte(); if (extension > 0) { pi.objectType = (ObjectType)extension; } else { pi.objectType = ObjectType.Component; } pi.rawData = buffer.ReadBuffer(); UIObjectFactory.ResolvePackageItemExtension(pi); break; } case PackageItemType.Atlas: case PackageItemType.Sound: case PackageItemType.Misc: { pi.file = assetNamePrefix + pi.file; break; } } _items.Add(pi); _itemsById[pi.id] = pi; if (pi.name != null) { _itemsByName[pi.name] = pi; } buffer.position = nextPos; } buffer.Seek(indexTablePos, 2); cnt = buffer.ReadShort(); for (int i = 0; i < cnt; i++) { int nextPos = buffer.ReadShort(); nextPos += buffer.position; string itemId = buffer.ReadS(); pi = _itemsById[buffer.ReadS()]; AtlasSprite sprite = new AtlasSprite(); sprite.atlas = pi; sprite.rect.x = buffer.ReadInt(); sprite.rect.y = buffer.ReadInt(); sprite.rect.width = buffer.ReadInt(); sprite.rect.height = buffer.ReadInt(); sprite.rotated = buffer.ReadBool(); _sprites[itemId] = sprite; buffer.position = nextPos; } if (buffer.Seek(indexTablePos, 3)) { cnt = buffer.ReadShort(); for (int i = 0; i < cnt; i++) { int nextPos = buffer.ReadInt(); nextPos += buffer.position; if (_itemsById.TryGetValue(buffer.ReadS(), out pi)) { if (pi.type == PackageItemType.Image) { pi.pixelHitTestData = new PixelHitTestData(); pi.pixelHitTestData.Load(buffer); } } buffer.position = nextPos; } } if (!Application.isPlaying) { _items.Sort(ComparePackageItem); } return(true); }