public static RawUpgradeRoot Read(Stream input, Endian endian) { var instance = new RawUpgradeRoot(); instance.UpgradeOffset = input.ReadValueS64(endian); instance.UpgradeCount = input.ReadValueS64(endian); return(instance); }
public static void Write(Stream output, RawUpgradeRoot instance, Endian endian) { output.WriteValueS64(instance.UpgradeOffset, endian); output.WriteValueS64(instance.UpgradeCount, endian); }
public void Deserialize(Stream input, Endian endian) { var basePosition = input.Position; var rawUpgradeRoot = RawUpgradeRoot.Read(input, endian); var upgrades = new Upgrade[rawUpgradeRoot.UpgradeCount]; if (rawUpgradeRoot.UpgradeCount != 0) { if (rawUpgradeRoot.UpgradeCount < 0 || rawUpgradeRoot.UpgradeCount > int.MaxValue) { throw new FormatException(); } var rawUpgrades = new RawUpgrade[rawUpgradeRoot.UpgradeCount]; input.Position = basePosition + rawUpgradeRoot.UpgradeOffset; for (long i = 0; i < rawUpgradeRoot.UpgradeCount; i++) { rawUpgrades[i] = RawUpgrade.Read(input, endian); } for (long i = 0; i < rawUpgradeRoot.UpgradeCount; i++) { var rawUpgrade = rawUpgrades[i]; var upgrade = new Upgrade() { Name = rawUpgrade.Name, TaskGroup = rawUpgrade.TaskGroup, StarThreshold = rawUpgrade.StarThreshold, Prerequisites = new uint[rawUpgrade.PrerequisiteCount], Cost = rawUpgrade.Cost, Ability = rawUpgrade.Ability, UIName = rawUpgrade.UIName, UIDescription = rawUpgrade.UIDescription, UIDisplayOrder = rawUpgrade.UIDisplayOrder, UIImage = rawUpgrade.UIImage, UITreeName = rawUpgrade.UITreeName, UITreeOrder = rawUpgrade.UITreeOrder, }; if (rawUpgrade.PrerequisiteCount != 0) { if (rawUpgrade.PrerequisiteCount < 0 || rawUpgrade.PrerequisiteCount > int.MaxValue) { throw new FormatException(); } input.Position = basePosition + rawUpgrade.PrerequisiteOffset; for (long j = 0; j < rawUpgrade.PrerequisiteCount; j++) { upgrade.Prerequisites[j] = input.ReadValueU32(endian); } } if (rawUpgrade.UIVideoOffset != 0) { input.Position = basePosition + rawUpgrade.UIVideoOffset; upgrade.UIVideo = input.ReadStringZ(Encoding.ASCII); } upgrades[i] = upgrade; } } this._Upgrades.Clear(); this._Upgrades.AddRange(upgrades); }