public void BuildLodge(Beaver beaver) { if (beaver.CanAct() && beaver.CanBuildLodge()) { Console.WriteLine(" Build Lodge: {0}, {1}+{2}/{3}", beaver.ToPoint(), beaver.Branches, beaver.Tile.Branches, this.Player.BranchesToBuildLodge); beaver.BuildLodge(); } }
public static void Harvest(Beaver harvester, IEnumerable <Spawner> targets) { if (!harvester.CanAct() || harvester.OpenCarryCapacity() == 0) { return; } var targettables = targets.Where(t => t.Health > 0); var target = targettables.FirstOrDefault(t => harvester.Tile._HasNeighbor(t.Tile)); if (target != null) { while (harvester.CanAct() && target.Health > 0) { harvester.Harvest(target); } } }
public static void Drop(Beaver dropper, IEnumerable <Tile> targets, string resource) { if (!dropper.CanAct() || dropper.GetCount(resource) == 0) { return; } var target = targets.FirstOrDefault(t => t == dropper.Tile || dropper.Tile._HasNeighbor(t)); if (target != null) { dropper.Drop(target, resource, dropper.GetCount(resource)); } }
public static void Pickup(Beaver picker, IEnumerable <Tile> targets, string resource) { if (!picker.CanAct() || picker.OpenCarryCapacity() == 0) { return; } var targettables = targets.Where(t => t.GetCount(resource) > 0 && picker.Tile._HasNeighbor(t)); if (targettables.Any()) { var target = targettables.MaxByValue(t => t.GetCount(resource)); picker.Pickup(target, resource, Math.Min(target.GetCount(resource), picker.OpenCarryCapacity())); } }
public static void MoveAndDrop(Beaver dropper, IEnumerable <Tile> targets, string resource) { if (!dropper.CanAct() || dropper.GetCount(resource) == 0) { return; } if (dropper.CanMove()) { var movePoints = targets.Concat(targets.SelectMany(t => t.GetNeighbors())) .Select(n => n.ToPoint()); Move(dropper, movePoints); } Drop(dropper, targets, resource); }
public static void Attack(Beaver attacker, IEnumerable <Beaver> targets) { var targettables = targets.Where(t => t.CanBeAttacked()); var target = targettables.FirstOrDefault(t => attacker.Tile._HasNeighbor(t.Tile)); if (target != null) { while (attacker.CanAct() && target.CanBeAttacked()) { if (attacker.Owner == target.Owner) { Console.WriteLine("DIE SLACKER"); } attacker.Attack(target); } } }
public static void MoveAndPickup(Beaver picker, IEnumerable <Tile> targets, string resource) { if (!picker.CanAct() || picker.OpenCarryCapacity() == 0) { return; } var targetPoints = targets.Where(t => t.GetCount(resource) > 0); if (picker.CanMove()) { var movePoints = targetPoints.Concat(targetPoints.SelectMany(t => t.GetNeighbors())) .Select(n => n.ToPoint()); Move(picker, movePoints); } Pickup(picker, targets, resource); }