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); } }
public void UpdatePolityCulturalProminence(PolityProminence polityProminence, long timeSpan) { PolityCulture polityCulture = polityProminence.Polity.Culture; foreach (CulturalPreference polityPreference in polityCulture.GetPreferences()) { CellCulturalPreference cellPreference = GetAcquiredPreferenceOrToAcquire(polityPreference.Id); if (cellPreference == null) { cellPreference = CellCulturalPreference.CreateCellInstance(Group, polityPreference, 0); AddPreferenceToAcquire(cellPreference); } cellPreference.AddPolityProminenceEffect(polityPreference, polityProminence, timeSpan); } foreach (CulturalActivity polityActivity in polityCulture.GetActivities()) { CellCulturalActivity cellActivity = GetPerformedActivityOrToPerform(polityActivity.Id); if (cellActivity == null) { cellActivity = CellCulturalActivity.CreateCellInstance(Group, polityActivity, 0); AddActivityToPerform(cellActivity); } cellActivity.AddPolityProminenceEffect(polityActivity, polityProminence, timeSpan); } foreach (CulturalSkill politySkill in polityCulture.GetSkills()) { CellCulturalSkill cellSkill = GetLearnedSkillOrToLearn(politySkill.Id); if (cellSkill == null) { cellSkill = CellCulturalSkill.CreateCellInstance(Group, politySkill, 0); AddSkillToLearn(cellSkill); } cellSkill.AddPolityProminenceEffect(politySkill, polityProminence, timeSpan); } foreach (CulturalKnowledge polityKnowledge in polityCulture.GetKnowledges()) { //#if DEBUG // if (Manager.RegisterDebugEvent != null) // { // if (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( // "CellCulture.UpdatePolityCulturalProminence - Group:" + groupId, // "CurrentDate: " + Group.World.CurrentDate + // ", polityCulture.Polity.Id: " + polityCulture.Polity.Id + // ", polityKnowledge.Name: " + polityKnowledge.Name + // "", Group.World.CurrentDate); // Manager.RegisterDebugEvent("DebugMessage", debugMessage); // } // } // } //#endif CellCulturalKnowledge cellKnowledge = TryAddKnowledgeToLearn(polityKnowledge.Id, 0); cellKnowledge.AddPolityProminenceEffect(polityKnowledge, polityProminence, timeSpan); } foreach (Discovery polityDiscovery in polityCulture.Discoveries.Values) { AddDiscoveryToFind(polityDiscovery); } }
public override void Apply(CellGroup group) { group.Culture.AddSkillToLearn(CellCulturalSkill.CreateCellInstance(SkillId, group)); }