public void MergeCulture(Culture sourceCulture, float percentage) { foreach (CulturalPreference p in sourceCulture.GetPreferences()) { CellCulturalPreference preference = GetAcquiredPreferenceOrToAcquire(p.Id); if (preference == null) { preference = CellCulturalPreference.CreateCellInstance(Group, p); preference.DecreaseValue(percentage); AddPreferenceToAcquire(preference); } else { preference.Merge(p, percentage); } } foreach (CulturalActivity a in sourceCulture.GetActivities()) { CellCulturalActivity activity = GetPerformedActivityOrToPerform(a.Id); if (activity == null) { activity = CellCulturalActivity.CreateCellInstance(Group, a); activity.DecreaseValue(percentage); AddActivityToPerform(activity); } else { activity.Merge(a, percentage); } } foreach (CulturalSkill s in sourceCulture.GetSkills()) { CellCulturalSkill skill = GetLearnedSkillOrToLearn(s.Id); if (skill == null) { skill = CellCulturalSkill.CreateCellInstance(Group, s); skill.DecreaseValue(percentage); AddSkillToLearn(skill); } else { skill.Merge(s, percentage); } } foreach (CulturalKnowledge k in sourceCulture.GetKnowledges()) { CellCulturalKnowledge knowledge = TryAddKnowledgeToLearn(k.Id, 0); knowledge.Merge(k.Value, percentage); } foreach (Discovery d in sourceCulture.Discoveries.Values) { AddDiscoveryToFind(d); } }