using System.Drawing; namespace OpenRa.Game.Traits { class Harvester : IOrder, IPips { public int oreCarried = 0; /* sum of these must not exceed capacity */ public int gemsCarried = 0; public bool IsFull { get { return oreCarried + gemsCarried == Rules.General.BailCount; } } public bool IsEmpty { get { return oreCarried == 0 && gemsCarried == 0; } } public Harvester( Actor self ) { } public void AcceptResource(bool isGem) { if (isGem) gemsCarried++; else oreCarried++; } public void Deliver(Actor self, Actor proc) { proc.Owner.GiveOre(oreCarried * Rules.General.GoldValue); proc.Owner.GiveOre(gemsCarried * Rules.General.GemValue); oreCarried = 0; gemsCarried = 0; } public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor) { if (mi.Button == MouseButton.Left) return null; if (underCursor != null && underCursor.Owner == self.Owner && underCursor.traits.Contains() && !IsEmpty) return Order.DeliverOre(self, underCursor); if (underCursor == null && Rules.Map.ContainsResource(xy)) return Order.Harvest(self, xy); return null; } public void ResolveOrder( Actor self, Order order ) { if( order.OrderString == "Harvest" ) { self.CancelActivity(); self.QueueActivity( new Traits.Activities.Move( order.TargetLocation, 0 ) ); self.QueueActivity( new Traits.Activities.Harvest() ); } else if( order.OrderString == "DeliverOre" ) { self.CancelActivity(); self.QueueActivity( new Traits.Activities.DeliverOre( order.TargetActor ) ); } } public Color GetBorderColor() { return Color.Black; } public int GetPipCount() { return 7; } public Color GetColorForPip(int index) { if ((oreCarried + gemsCarried)*1.0f/Rules.General.BailCount* GetPipCount() < index + 1) return Color.Transparent; return Color.LimeGreen; } } }