Example #1
0
            public static RawUpgradeRoot Read(Stream input, Endian endian)
            {
                var instance = new RawUpgradeRoot();

                instance.UpgradeOffset = input.ReadValueS64(endian);
                instance.UpgradeCount  = input.ReadValueS64(endian);
                return(instance);
            }
Example #2
0
 public static void Write(Stream output, RawUpgradeRoot instance, Endian endian)
 {
     output.WriteValueS64(instance.UpgradeOffset, endian);
     output.WriteValueS64(instance.UpgradeCount, endian);
 }
Example #3
0
        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);
        }