#8 hardcoded refs to afld/hpad/fix

This commit is contained in:
Chris Forbes
2010-04-17 10:01:42 +12:00
parent e3ac2a4e88
commit 4b70fa6594
4 changed files with 14 additions and 8 deletions

View File

@@ -29,8 +29,9 @@ namespace OpenRA.Traits.Activities
static Actor ChooseHelipad(Actor self) static Actor ChooseHelipad(Actor self)
{ {
var rearmBuildings = self.Info.Traits.Get<HelicopterInfo>().RearmBuildings;
return self.World.Queries.OwnedBy[self.Owner].FirstOrDefault( return self.World.Queries.OwnedBy[self.Owner].FirstOrDefault(
a => a.Info.Name == "hpad" && a => rearmBuildings.Contains(a.Info.Name) &&
!Reservable.IsReserved(a)); !Reservable.IsReserved(a));
} }

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Traits.Activities
public static Actor ChooseAirfield(Actor self) public static Actor ChooseAirfield(Actor self)
{ {
return self.World.Queries.OwnedBy[self.Owner] return self.World.Queries.OwnedBy[self.Owner]
.Where(a => a.Info.Name == "afld" .Where(a => self.Info.Traits.Get<PlaneInfo>().RearmBuildings.Contains(a.Info.Name)
&& !Reservable.IsReserved(a)) && !Reservable.IsReserved(a))
.FirstOrDefault(); .FirstOrDefault();
} }

View File

@@ -19,6 +19,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using OpenRA.GameRules; using OpenRA.GameRules;
@@ -26,6 +27,8 @@ namespace OpenRA.Traits
{ {
class HelicopterInfo : ITraitInfo class HelicopterInfo : ITraitInfo
{ {
public readonly string[] RepairBuildings = { "fix" };
public readonly string[] RearmBuildings = { "hpad" };
public object Create(Actor self) { return new Helicopter(self); } public object Create(Actor self) { return new Helicopter(self); }
} }
@@ -34,10 +37,10 @@ namespace OpenRA.Traits
public IDisposable reservation; public IDisposable reservation;
public Helicopter(Actor self) {} public Helicopter(Actor self) {}
static bool HeliCanEnter(Actor a) static bool HeliCanEnter(Actor self, Actor a)
{ {
if (a.Info.Name == "hpad") return true; if (self.Info.Traits.Get<HelicopterInfo>().RearmBuildings.Contains(a.Info.Name)) return true;
if (a.Info.Name == "fix") return true; if (self.Info.Traits.Get<HelicopterInfo>().RepairBuildings.Contains(a.Info.Name)) return true;
return false; return false;
} }
@@ -51,7 +54,7 @@ namespace OpenRA.Traits
return new Order("Move", self, xy); return new Order("Move", self, xy);
} }
if (HeliCanEnter(underCursor) if (HeliCanEnter(self, underCursor)
&& underCursor.Owner == self.Owner && underCursor.Owner == self.Owner
&& !Reservable.IsReserved(underCursor)) && !Reservable.IsReserved(underCursor))
return new Order("Enter", self, underCursor); return new Order("Enter", self, underCursor);
@@ -90,7 +93,7 @@ namespace OpenRA.Traits
self.QueueActivity(new HeliFly(order.TargetActor.CenterLocation + offsetVec)); self.QueueActivity(new HeliFly(order.TargetActor.CenterLocation + offsetVec));
self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing)); self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing));
self.QueueActivity(new HeliLand(false)); self.QueueActivity(new HeliLand(false));
self.QueueActivity(order.TargetActor.Info.Name == "hpad" self.QueueActivity(self.Info.Traits.Get<HelicopterInfo>().RearmBuildings.Contains(order.TargetActor.Info.Name)
? (IActivity)new Rearm() : new Repair(true)); ? (IActivity)new Rearm() : new Repair(true));
} }
} }

View File

@@ -19,12 +19,14 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
class RepairableInfo : ITraitInfo class RepairableInfo : ITraitInfo
{ {
public readonly string[] RepairBuildings = { "fix" };
public object Create(Actor self) { return new Repairable(self); } public object Create(Actor self) { return new Repairable(self); }
} }
@@ -38,7 +40,7 @@ namespace OpenRA.Traits
if (mi.Button != MouseButton.Right) return null; if (mi.Button != MouseButton.Right) return null;
if (underCursor == null) return null; if (underCursor == null) return null;
if (underCursor.Info.Name == "fix" if (self.Info.Traits.Get<RepairableInfo>().RepairBuildings.Contains(underCursor.Info.Name)
&& underCursor.Owner == self.Owner && underCursor.Owner == self.Owner
&& !Reservable.IsReserved(underCursor)) && !Reservable.IsReserved(underCursor))
return new Order("Enter", self, underCursor); return new Order("Enter", self, underCursor);