split IOrder
This commit is contained in:
@@ -101,7 +101,7 @@ namespace OpenRa.Game
|
||||
if (underCursor != null && !underCursor.Info.Selectable)
|
||||
underCursor = null;
|
||||
|
||||
return traits.WithInterface<IOrder>()
|
||||
return traits.WithInterface<IIssueOrder>()
|
||||
.Select( x => x.IssueOrder( this, xy, mi, underCursor ) )
|
||||
.FirstOrDefault( x => x != null );
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ namespace OpenRa.Game.Orders
|
||||
|
||||
default:
|
||||
{
|
||||
foreach (var t in order.Subject.traits.WithInterface<IOrder>())
|
||||
foreach (var t in order.Subject.traits.WithInterface<IResolveOrder>())
|
||||
t.ResolveOrder(order.Subject, order);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ using OpenRa.Game.Effects;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class AttackBase : IOrder, ITick
|
||||
class AttackBase : IIssueOrder, IResolveOrder, ITick
|
||||
{
|
||||
public Actor target;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ using OpenRa.Game.Graphics;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Building : INotifyDamage, IOrder, ITick
|
||||
class Building : INotifyDamage, IResolveOrder, ITick
|
||||
{
|
||||
readonly Actor self;
|
||||
public readonly BuildingInfo unitInfo;
|
||||
@@ -44,11 +44,6 @@ namespace OpenRa.Game.Traits
|
||||
Sound.Play("kaboom22.aud");
|
||||
}
|
||||
|
||||
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
|
||||
{
|
||||
return null; // sell/repair orders are issued through Chrome, not here.
|
||||
}
|
||||
|
||||
public void ResolveOrder(Actor self, Order order)
|
||||
{
|
||||
if (order.OrderString == "Sell")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class C4Demolition : IOrder
|
||||
class C4Demolition : IIssueOrder, IResolveOrder
|
||||
{
|
||||
public C4Demolition(Actor self) { }
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Cargo : IPips, IOrder
|
||||
class Cargo : IPips, IIssueOrder, IResolveOrder
|
||||
{
|
||||
List<Actor> cargo = new List<Actor>();
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ using OpenRa.Game.Orders;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class ChronoshiftDeploy : IOrder, ISpeedModifier, ITick, IPips
|
||||
class ChronoshiftDeploy : IIssueOrder, IResolveOrder, ISpeedModifier, ITick, IPips
|
||||
{
|
||||
// Recharge logic
|
||||
int chargeTick = 0; // How long until we can chronoshift again?
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Linq;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Chronoshiftable : IOrder, ISpeedModifier, ITick
|
||||
class Chronoshiftable : IResolveOrder, ISpeedModifier, ITick
|
||||
{
|
||||
// Return-to-sender logic
|
||||
int2 chronoshiftOrigin;
|
||||
@@ -30,11 +30,6 @@ namespace OpenRa.Game.Traits
|
||||
}
|
||||
}
|
||||
|
||||
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
|
||||
{
|
||||
return null; // Chronoshift order is issued through Chrome.
|
||||
}
|
||||
|
||||
public void ResolveOrder(Actor self, Order order)
|
||||
{
|
||||
if (order.OrderString == "ChronosphereSelect")
|
||||
|
||||
@@ -3,7 +3,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class ConstructionYard : IOrder, IMovement
|
||||
class ConstructionYard : IIssueOrder, IResolveOrder, IMovement
|
||||
{
|
||||
readonly Actor self;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ using OpenRa.Game.Orders;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class DemoTruck : Chronoshiftable, IOrder, INotifyDamage
|
||||
class DemoTruck : Chronoshiftable, IResolveOrder, INotifyDamage
|
||||
{
|
||||
readonly Actor self;
|
||||
public DemoTruck(Actor self)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class EngineerCapture : IOrder
|
||||
class EngineerCapture : IIssueOrder, IResolveOrder
|
||||
{
|
||||
public const int EngineerDamage = 300; // todo: push into rules, as a weapon
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Harvester : IOrder, IPips
|
||||
class Harvester : IIssueOrder, IResolveOrder, IPips
|
||||
{
|
||||
public int oreCarried = 0; /* sum of these must not exceed capacity */
|
||||
public int gemsCarried = 0;
|
||||
|
||||
@@ -4,7 +4,7 @@ using OpenRa.Game.GameRules;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Helicopter : IOrder, IMovement
|
||||
class Helicopter : IIssueOrder, IResolveOrder, IMovement
|
||||
{
|
||||
public IDisposable reservation;
|
||||
public Helicopter(Actor self) {}
|
||||
|
||||
@@ -3,7 +3,7 @@ using OpenRa.Game.Effects;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class IronCurtainable : IOrder, IDamageModifier, ITick
|
||||
class IronCurtainable : IResolveOrder, IDamageModifier, ITick
|
||||
{
|
||||
int RemainingTicks = 0;
|
||||
|
||||
@@ -19,11 +19,6 @@ namespace OpenRa.Game.Traits
|
||||
return (RemainingTicks > 0) ? 0.0f : 1.0f;
|
||||
}
|
||||
|
||||
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
|
||||
{
|
||||
return null; // IronCurtain order is issued through Chrome.
|
||||
}
|
||||
|
||||
public void ResolveOrder(Actor self, Order order)
|
||||
{
|
||||
if (order.OrderString == "IronCurtain")
|
||||
|
||||
@@ -3,7 +3,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class McvDeploy : IOrder
|
||||
class McvDeploy : IIssueOrder, IResolveOrder
|
||||
{
|
||||
public McvDeploy(Actor self) { }
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Text;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Minelayer : IOrder
|
||||
class Minelayer : IIssueOrder, IResolveOrder
|
||||
{
|
||||
public Minelayer(Actor self) { }
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ using OpenRa.Game.GameRules;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Mobile : IOrder, IOccupySpace, IMovement
|
||||
class Mobile : IIssueOrder, IResolveOrder, IOccupySpace, IMovement
|
||||
{
|
||||
readonly Actor self;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Passenger : IOrder
|
||||
class Passenger : IIssueOrder, IResolveOrder
|
||||
{
|
||||
public Passenger(Actor self) { }
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Plane : IOrder, IMovement
|
||||
class Plane : IIssueOrder, IResolveOrder, IMovement
|
||||
{
|
||||
public IDisposable reservation;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ using System.Collections.Generic;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Production : IOrder, IProducer, ITags
|
||||
class Production : IIssueOrder, IResolveOrder, IProducer, ITags
|
||||
{
|
||||
bool isPrimary = false;
|
||||
public bool IsPrimary { get { return isPrimary; } }
|
||||
@@ -66,10 +66,8 @@ namespace OpenRa.Game.Traits
|
||||
public void ResolveOrder(Actor self, Order order)
|
||||
{
|
||||
if (order.OrderString == "Deploy")
|
||||
{
|
||||
SetPrimaryProducer(self, !isPrimary);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetPrimaryProducer(Actor self, bool state)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ using IjwFramework.Collections;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class ProductionQueue : IOrder, ITick
|
||||
class ProductionQueue : IResolveOrder, ITick
|
||||
{
|
||||
Actor self;
|
||||
|
||||
@@ -22,12 +22,6 @@ namespace OpenRa.Game.Traits
|
||||
(p.Value)[0].Tick( self.Owner );
|
||||
}
|
||||
|
||||
public Order IssueOrder( Actor self, int2 xy, MouseInput mi, Actor underCursor )
|
||||
{
|
||||
// production isn't done by clicks in the world; the chrome handles it.
|
||||
return null;
|
||||
}
|
||||
|
||||
public void ResolveOrder( Actor self, Order order )
|
||||
{
|
||||
switch( order.OrderString )
|
||||
|
||||
@@ -4,7 +4,7 @@ using OpenRa.Game.Orders;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class RallyPoint : IRender, IOrder, ITick
|
||||
class RallyPoint : IRender, IIssueOrder, IResolveOrder, ITick
|
||||
{
|
||||
public int2 rallyPoint;
|
||||
public Animation anim;
|
||||
|
||||
@@ -6,7 +6,7 @@ using OpenRa.Game.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Repairable : IOrder
|
||||
class Repairable : IIssueOrder, IResolveOrder
|
||||
{
|
||||
IDisposable reservation;
|
||||
public Repairable(Actor self) { }
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class Thief : IOrder
|
||||
class Thief : IIssueOrder, IResolveOrder
|
||||
{
|
||||
public Thief(Actor self) { }
|
||||
|
||||
|
||||
@@ -18,11 +18,10 @@ namespace OpenRa.Game.Traits
|
||||
interface INotifyBuildComplete { void BuildingComplete (Actor self); }
|
||||
interface INotifyProduction { void UnitProduced(Actor self, Actor other); }
|
||||
interface IAcceptThief { void OnSteal(Actor self, Actor thief); }
|
||||
interface IOrder
|
||||
{
|
||||
Order IssueOrder( Actor self, int2 xy, MouseInput mi, Actor underCursor );
|
||||
void ResolveOrder( Actor self, Order order );
|
||||
}
|
||||
|
||||
interface IIssueOrder { Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor); }
|
||||
interface IResolveOrder { void ResolveOrder(Actor self, Order order); }
|
||||
|
||||
interface IProducer
|
||||
{
|
||||
bool Produce( Actor self, UnitInfo producee );
|
||||
|
||||
Reference in New Issue
Block a user