/// <summary> /// Gets the first plan where the village is either the target /// or one of the attackers /// </summary> public AttackPlan GetPlan(Village village, out bool isActivePlan, out AttackPlanFrom attacker, bool cycleVillage) { var plan = _attacker.GetPlan(village, out attacker, cycleVillage); isActivePlan = plan == _attacker.ActivePlan; return(plan); }
public override void ReadXml(XDocument doc) { XElement attackManipulator = doc.Descendants("Manipulator") .SingleOrDefault(manipulator => manipulator.Attribute("Type").Value == "Attack"); if (attackManipulator != null) { // Settings var settingsNode = attackManipulator.Element("Plans"); Debug.Assert(settingsNode != null); Func <string, bool, bool> readSetting = (settingName, defaultValue) => { XAttribute value = settingsNode.Attribute(settingName); return(value != null?Convert.ToBoolean(value.Value) : defaultValue); }; Settings.ShowOtherTargets = readSetting("ShowOtherTargets", true); Settings.ShowOtherAttackers = readSetting("ShowOtherAttackers", true); Settings.ShowIfNotActiveManipulator = readSetting("ShowIfNotActiveManipulator", true); Settings.ShowArrivalTimeWhenSentNow = readSetting("ShowArrivalTimeWhenSentNow", false); // AttackPlans var plans = attackManipulator.Descendants("Plan"); foreach (XElement xmlPlan in plans) { var plan = new AttackPlan( World.Default.GetVillage(xmlPlan.Attribute("Target").Value), DateTime.FromFileTimeUtc(long.Parse(xmlPlan.Attribute("ArrivalTime").Value))); if (xmlPlan.Attribute("Comments") != null) { plan.Comments = xmlPlan.Attribute("Comments").Value; } if (plan.Target != null) { foreach (var attackerXml in xmlPlan.Descendants("Attacker")) { var slowestUnit = (UnitTypes)Enum.Parse(typeof(UnitTypes), attackerXml.Attribute("SlowestUnit").Value); var attacker = new AttackPlanFrom( plan, World.Default.GetVillage(attackerXml.Attribute("Attacker").Value), WorldUnits.Default[slowestUnit]); plan.AddAttacker(attacker); } _plans.Add(plan); } } } }
/// <summary> /// Pinpoint the plan on the main map /// </summary> public void Pinpoint(AttackPlanFrom activeAttacker) { World.Default.Map.Manipulators.SetManipulator(ManipulatorManagerTypes.Attack); var villages = Attacks.SelectMany(x => x.Attacker).Union(Target).ToArray(); if (activeAttacker != null) { World.Default.Map.EventPublisher.AttackSelect(this, activeAttacker); } else { World.Default.Map.EventPublisher.AttackSelect(this, this); } World.Default.Map.SetCenter(villages); }
/// <summary> /// Pinpoint the plan on the main map /// </summary> public void Pinpoint(AttackPlanFrom activeAttacker) { World.Default.Map.Manipulators.SetManipulator(ManipulatorManagerTypes.Attack); var villages = Attacks.SelectMany(x => x.Attacker).Union(Target).ToArray(); if (activeAttacker != null) { World.Default.Map.EventPublisher.AttackSelect(this, activeAttacker); } else { World.Default.Map.EventPublisher.AttackSelect(this, this); } World.Default.Map.SetCenter(villages); }
public AttackPlan GetPlan(Village village, out AttackPlanFrom attacker, bool cycleVillage) { AttackPlan asTarget = GetExistingPlan(village, cycleVillage); if (asTarget != null) { attacker = null; return(asTarget); } AttackPlanFrom asAttacker = GetAttacker(village); if (asAttacker != null) { attacker = asAttacker; return(asAttacker.Plan); } attacker = null; return(null); }
private void RemoveAttacker(AttackPlan plan, AttackPlanFrom attacker) { Debug.Assert(plan.Attacks.Contains(attacker)); ActiveAttacker = null; plan.RemoveAttack(attacker); }
private void EventPublisherOnTargetSelected(object sender, AttackEventArgs e) { ActiveAttacker = e.Attacker; ActivePlan = e.Plan; _map.Invalidate(false); }
private void AddAttacker(AttackPlan plan, AttackPlanFrom attacker) { Debug.Assert(!plan.Attacks.Contains(attacker)); ActiveAttacker = attacker; plan.AddAttacker(attacker); }
/// <summary> /// Cleanup anything when switching worlds or settings /// </summary> protected internal override void CleanUp() { _plans.Clear(); ActivePlan = null; ActiveAttacker = null; }
public override void ReadXml(XDocument doc) { XElement attackManipulator = doc.Descendants("Manipulator") .SingleOrDefault(manipulator => manipulator.Attribute("Type").Value == "Attack"); if (attackManipulator != null) { // Settings var settingsNode = attackManipulator.Element("Plans"); Debug.Assert(settingsNode != null); Func<string, bool, bool> readSetting = (settingName, defaultValue) => { XAttribute value = settingsNode.Attribute(settingName); return value != null ? Convert.ToBoolean(value.Value) : defaultValue; }; Settings.ShowOtherTargets = readSetting("ShowOtherTargets", true); Settings.ShowOtherAttackers = readSetting("ShowOtherAttackers", true); Settings.ShowIfNotActiveManipulator = readSetting("ShowIfNotActiveManipulator", true); Settings.ShowArrivalTimeWhenSentNow = readSetting("ShowArrivalTimeWhenSentNow", false); // AttackPlans var plans = attackManipulator.Descendants("Plan"); foreach (XElement xmlPlan in plans) { var plan = new AttackPlan( World.Default.GetVillage(xmlPlan.Attribute("Target").Value), DateTime.FromFileTimeUtc(long.Parse(xmlPlan.Attribute("ArrivalTime").Value))); if (xmlPlan.Attribute("Comments") != null) { plan.Comments = xmlPlan.Attribute("Comments").Value; } if (plan.Target != null) { foreach (var attackerXml in xmlPlan.Descendants("Attacker")) { var slowestUnit = (UnitTypes)Enum.Parse(typeof(UnitTypes), attackerXml.Attribute("SlowestUnit").Value); var attacker = new AttackPlanFrom( plan, World.Default.GetVillage(attackerXml.Attribute("Attacker").Value), WorldUnits.Default[slowestUnit]); plan.AddAttacker(attacker); } _plans.Add(plan); } } } }
private void AddAttacker(AttackPlan plan, AttackPlanFrom attacker) { Debug.Assert(!plan.Attacks.Contains(attacker)); ActiveAttacker = attacker; plan.AddAttacker(attacker); }
public void AddAttacker(AttackPlanFrom attacker) { _attacks.Add(attacker); }
/// <summary> /// Gets the first plan where the village is either the target /// or one of the attackers /// </summary> public AttackPlan GetPlan(Village village, out bool isActivePlan, out AttackPlanFrom attacker, bool cycleVillage) { var plan = _attacker.GetPlan(village, out attacker, cycleVillage); isActivePlan = plan == _attacker.ActivePlan; return plan; }
public void AttackSelect(object sender, AttackPlanFrom attacker) { var e = new AttackEventArgs(attacker.Plan, attacker); AttackSelect(sender, e); }
private AttackPlanFrom GetAttacker(Village village) { AttackPlanFrom existingAttack = GetAttackers(village).FirstOrDefault(); return(existingAttack); }
public void RemoveAttack(AttackPlanFrom attacker) { _attacks.Remove(attacker); }
public void AddAttacker(AttackPlanFrom attacker) { _attacks.Add(attacker); }
public AttackPlan GetPlan(Village village, out AttackPlanFrom attacker, bool cycleVillage) { AttackPlan asTarget = GetExistingPlan(village, cycleVillage); if (asTarget != null) { attacker = null; return asTarget; } AttackPlanFrom asAttacker = GetAttacker(village); if (asAttacker != null) { attacker = asAttacker; return asAttacker.Plan; } attacker = null; return null; }
public void RemoveAttack(AttackPlanFrom attacker) { _attacks.Remove(attacker); }
private void RemoveAttacker(AttackPlan plan, AttackPlanFrom attacker) { Debug.Assert(plan.Attacks.Contains(attacker)); ActiveAttacker = null; plan.RemoveAttack(attacker); }