diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 7fa1982c64..d5ca17effc 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -239,14 +239,6 @@ namespace OpenRa.Game .FirstOrDefault(); } - public static int GetDistanceToBase(int2 b, Player p) - { - var building = BuildingInfluence.GetNearestBuilding(b); - if (building == null || building.Owner != p) - return int.MaxValue; - - return BuildingInfluence.GetDistanceToBuilding(b); - } public static Random SharedRandom = new Random(0); /* for things that require sync */ public static Random CosmeticRandom = new Random(); /* for things that are just fluff */ @@ -282,7 +274,7 @@ namespace OpenRa.Game heuristic = loc => { var b = Game.BuildingInfluence.GetBuildingAt(loc); - if (b != null && b.Owner == p) return 0; + if (b != null && b.Owner == p && (b.Info as BuildingInfo).BaseNormal) return 0; if ((loc - position).Length > maxDistance) return float.PositiveInfinity; /* not quite right */ return 1; diff --git a/OpenRa.Game/Traits/Mobile.cs b/OpenRa.Game/Traits/Mobile.cs index 0f5f3721b2..4feb981222 100644 --- a/OpenRa.Game/Traits/Mobile.cs +++ b/OpenRa.Game/Traits/Mobile.cs @@ -5,42 +5,46 @@ using OpenRa.Game.GameRules; namespace OpenRa.Game.Traits { - class Mobile : IOrder + class Mobile : IOrder, IOccupySpace { public Actor self; int2 __fromCell; - public int2 fromCell { get { return __fromCell; } set { Game.UnitInfluence.Remove( this ); __fromCell = value; Game.UnitInfluence.Add( this ); } } - public int2 toCell { get { return self.Location; } set { Game.UnitInfluence.Remove( this ); self.Location = value; Game.UnitInfluence.Add( this ); } } + public int2 fromCell + { + get { return __fromCell; } + set { Game.UnitInfluence.Remove(this); __fromCell = value; Game.UnitInfluence.Add(this); } + } + public int2 toCell + { + get { return self.Location; } + set { Game.UnitInfluence.Remove(this); self.Location = value; Game.UnitInfluence.Add(this); } + } public Mobile(Actor self) { this.self = self; fromCell = toCell; - Game.UnitInfluence.Update( this ); + Game.UnitInfluence.Update(this); } public Order IssueOrder(Actor self, int2 xy, bool lmb, Actor underCursor) { - if( lmb ) return null; - - if( underCursor != null ) - return null; - + if (lmb) return null; + if (underCursor != null) return null; if (xy == toCell) return null; - - return Order.Move( self, xy ); + return Order.Move(self, xy); } - public void ResolveOrder( Actor self, Order order ) + public void ResolveOrder(Actor self, Order order) { - if( order.OrderString == "Move" ) + if (order.OrderString == "Move") { self.CancelActivity(); - self.QueueActivity( new Traits.Activities.Move( order.TargetLocation, 8 ) ); + self.QueueActivity(new Activities.Move(order.TargetLocation, 8)); var attackBase = self.traits.WithInterface().FirstOrDefault(); - if( attackBase != null ) + if (attackBase != null) attackBase.target = null; /* move cancels attack order */ } } @@ -52,24 +56,24 @@ namespace OpenRa.Game.Traits public UnitMovementType GetMovementType() { - switch( Rules.UnitCategory[ self.Info.Name ] ) + switch (Rules.UnitCategory[self.Info.Name]) { - case "Infantry": - return UnitMovementType.Foot; - case "Vehicle": - return ( self.Info as VehicleInfo ).Tracked ? UnitMovementType.Track : UnitMovementType.Wheel; - case "Ship": - return UnitMovementType.Float; - case "Plane": - return UnitMovementType.Track; // FIXME: remove this when planes actually fly. - default: - throw new InvalidOperationException( "GetMovementType on unit that shouldn't be aable to move." ); + case "Infantry": + return UnitMovementType.Foot; + case "Vehicle": + return (self.Info as VehicleInfo).Tracked ? UnitMovementType.Track : UnitMovementType.Wheel; + case "Ship": + return UnitMovementType.Float; + case "Plane": + return UnitMovementType.Track; // FIXME: remove this when planes actually fly. + default: + throw new InvalidOperationException("GetMovementType on unit that shouldn't be aable to move."); } } public IEnumerable GetCurrentPath() { - var move = self.GetCurrentActivity() as Traits.Activities.Move; + var move = self.GetCurrentActivity() as Activities.Move; if (move == null || move.path == null) return new int2[] { }; return Enumerable.Reverse(move.path); } diff --git a/OpenRa.Game/Traits/TraitsInterfaces.cs b/OpenRa.Game/Traits/TraitsInterfaces.cs index 1bff833d32..56094cd736 100644 --- a/OpenRa.Game/Traits/TraitsInterfaces.cs +++ b/OpenRa.Game/Traits/TraitsInterfaces.cs @@ -16,5 +16,6 @@ namespace OpenRa.Game.Traits Order IssueOrder( Actor self, int2 xy, bool lmb, Actor underCursor ); void ResolveOrder( Actor self, Order order ); } - interface IProducer { bool Produce( Actor self, UnitInfo produceee ); } + interface IProducer { bool Produce( Actor self, UnitInfo producee ); } + interface IOccupySpace { IEnumerable OccupiedCells(); } }