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)); }
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)); }