Esempio n. 1
0
        public Armies Add(Armies armies)
        {
            if (this.Fogged || armies.Fogged)
            {
                return(this);
            }

            SpecialUnit[] specials;

            if (armies.SpecialUnits.Length == 0)
            {
                specials = SpecialUnits; //we're adding none, so just keep what we have
            }
            else
            {
                //It's OK to do a N^2 algorithm here since our array length is usually 1, and never higher than 3. It's likely slower to allocate a dictionary.
                var ourSpecialCount = SpecialUnits.Length;
                specials = new SpecialUnit[ourSpecialCount + armies.SpecialUnits.Length];

                for (int i = 0; i < SpecialUnits.Length; i++)
                {
                    specials[i] = SpecialUnits[i].Clone();
                }

                for (int i = 0; i < armies.SpecialUnits.Length; i++)
                {
                    specials[i + ourSpecialCount] = armies.SpecialUnits[i].Clone();
                }
            }


            return(new Armies(this._numArmies + armies._numArmies, false, specials));
        }
Esempio n. 2
0
        public static Armies DeserializeFromString(string raw)
        {
            var split  = raw.Split('|');
            var armies = int.Parse(split[0]);

            if (split.Length == 1)
            {
                return(new Armies(armies));
            }

            var specials = new SpecialUnit[split.Length - 1];

            for (int i = 0; i < split.Length - 1; i++)
            {
                specials[i] = SpecialUnit.DeserializeFromString(split[i + 1], false);
            }
            return(new Armies(armies, false, specials));
        }