public CrewViewModelCollection Clone(TankViewModelBase owner, TankViewModelCloneFlags flags) { var clone = new CrewViewModelCollection(_commandBindings); foreach (var crew in this) { var deepCopy = false; foreach (var role in crew.Crew.AllRoles) { switch (role) { case CrewRoleType.Commander: deepCopy = (flags & TankViewModelCloneFlags.Commander) == TankViewModelCloneFlags.Commander; break; case CrewRoleType.Driver: deepCopy = (flags & TankViewModelCloneFlags.Driver) == TankViewModelCloneFlags.Driver; break; case CrewRoleType.Gunner: deepCopy = (flags & TankViewModelCloneFlags.Gunner) == TankViewModelCloneFlags.Gunner; break; case CrewRoleType.Loader: deepCopy = (flags & TankViewModelCloneFlags.Loader) == TankViewModelCloneFlags.Loader; break; case CrewRoleType.Radioman: deepCopy = (flags & TankViewModelCloneFlags.Radioman) == TankViewModelCloneFlags.Radioman; break; } if (deepCopy) { break; } } if (deepCopy) { clone.Add(crew.Clone(owner, crew.Index)); } else { clone.Add(crew); } } return(clone); }
internal void InheritCrews(CrewViewModelCollection targetCrews) { _suppressModificationContextUpdate = true; var targetCrewSet = new HashSet <CrewViewModel>(targetCrews); foreach (var crew in this.Crews) { var targetCrew = targetCrews.FirstOrDefault(c => c.Crew.PrimaryRole == crew.Crew.PrimaryRole); if (targetCrew != null) { targetCrewSet.Remove(targetCrew); crew.CopyFrom(targetCrew); } } _suppressModificationContextUpdate = false; this.UpdateModificationContext(); }