public CellCulture(CellGroup group, Culture sourceCulture) : base(group.World, sourceCulture.Language) { Group = group; foreach (CulturalPreference p in sourceCulture.GetPreferences()) { AddPreference(CellCulturalPreference.CreateCellInstance(group, p)); } foreach (CulturalActivity a in sourceCulture.GetActivities()) { AddActivity(CellCulturalActivity.CreateCellInstance(group, a)); } foreach (CulturalSkill s in sourceCulture.GetSkills()) { AddSkill(CellCulturalSkill.CreateCellInstance(group, s)); } foreach (Discovery d in sourceCulture.Discoveries.Values) { AddDiscovery(d); } foreach (CulturalKnowledge k in sourceCulture.GetKnowledges()) { //#if DEBUG // if ((Manager.RegisterDebugEvent != null) && (Manager.TracingData.Priority <= 0)) // { // if (Group.Id == Manager.TracingData.GroupId) // { // string groupId = "Id:" + Group.Id + "|Long:" + Group.Longitude + "|Lat:" + Group.Latitude; // SaveLoadTest.DebugMessage debugMessage = new SaveLoadTest.DebugMessage( // "PostUpdateAddAttributes - Group:" + groupId, // "CurrentDate: " + World.CurrentDate + // ", k.Id: " + k.Id + // ", k.IsPresent: " + k.IsPresent + // ""); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } //#endif CellCulturalKnowledge knowledge = CellCulturalKnowledge.CreateCellInstance(k.Id, group, k.Value); AddKnowledge(knowledge); } if (sourceCulture.Language != null) { SetLanguageUpdateCells(); } }
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); } }