Added: forceQueue to IOrderTarget' CanTargetUnit / CanTargetLocation

Added: forceQueue to all related methods
Added: Only shows the select cursor IF hovering over a unit AND the orders return the 'default' icon
This commit is contained in:
geckosoft
2010-11-13 01:25:31 +01:00
committed by Bob
parent 8df47f5a60
commit 622f9bfe71
12 changed files with 72 additions and 40 deletions

View File

@@ -142,15 +142,17 @@ namespace OpenRA.Mods.RA.Air
public string OrderID { get { return "Move"; } }
public int OrderPriority { get { return 4; } }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
IsQueued = forceQueued;
cursor = "move";
return true;
}
public bool IsQueued { get; protected set; }
}
}

View File

@@ -261,8 +261,10 @@ namespace OpenRA.Mods.RA
public string OrderID { get; private set; }
public int OrderPriority { get; private set; }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
IsQueued = forceQueued;
cursor = isHeal ? "heal" : "attack";
if( self == target ) return false;
if( !self.Trait<AttackBase>().HasAnyValidWeapons( Target.FromActor( target ) ) ) return false;
@@ -276,8 +278,10 @@ namespace OpenRA.Mods.RA
return playerRelationship == Stance.Enemy || forceAttack;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
IsQueued = forceQueued;
cursor = isHeal ? "heal" : "attack";
if( isHeal ) return false;
if( !self.Trait<AttackBase>().HasAnyValidWeapons( Target.FromCell( location ) ) ) return false;
@@ -288,6 +292,8 @@ namespace OpenRA.Mods.RA
return false;
}
public bool IsQueued { get; protected set; }
}
}
}

View File

@@ -70,9 +70,11 @@ namespace OpenRA.Mods.RA
{
}
public override bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public override bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
if( !base.CanTargetUnit( self, target, forceAttack, forceMove, ref cursor ) ) return false;
if( !base.CanTargetUnit( self, target, forceAttack, forceMove, forceQueued, ref cursor ) ) return false;
IsQueued = forceQueued;
if( target.GetDamageState() == DamageState.Undamaged )
cursor = "goldwrench-blocked";

View File

@@ -218,15 +218,15 @@ namespace OpenRA.Mods.RA
public string OrderID { get { return "Harvest";}}
public int OrderPriority { get { return 10; } }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
// Don't leak info about resources under the shroud
if( !self.World.LocalPlayer.Shroud.IsExplored( location ) ) return false;
// Don't leak info about resources under the shroud
if (!self.World.LocalPlayer.Shroud.IsExplored(location)) return false;
var res = self.World.WorldActor.Trait<ResourceLayer>().GetResource( location );
var info = self.Info.Traits.Get<HarvesterInfo>();
@@ -234,8 +234,11 @@ namespace OpenRA.Mods.RA
if( res == null ) return false;
if( !info.Resources.Contains( res.info.Name ) ) return false;
cursor = "attackmove";
IsQueued = forceQueued;
return true;
}
public bool IsQueued { get; protected set; }
}
}
}

View File

@@ -152,16 +152,19 @@ namespace OpenRA.Mods.RA
public string OrderID { get { return "BeginMinefield"; } }
public int OrderPriority { get { return 5; } }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
cursor = "ability";
IsQueued = forceQueued;
return ( actorsAtLocation.Count == 0 && forceAttack );
}
public bool IsQueued { get; protected set; }
}
}
}

View File

@@ -360,14 +360,16 @@ namespace OpenRA.Mods.RA.Move
public string OrderID { get { return "Move"; } }
public int OrderPriority { get { return 4; } }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool IsQueued { get; protected set; }
public bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
IsQueued = forceQueued;
cursor = "move";
if( self.World.LocalPlayer.Shroud.IsVisible( location ) && !self.Trait<Mobile>().CanEnterCell( location ) )
cursor = "move-blocked";

View File

@@ -25,15 +25,18 @@ namespace OpenRA.Mods.RA.Orders
public string OrderID { get; private set; }
public int OrderPriority { get; private set; }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor )
{
IsQueued = forceQueued;
cursor = useDeployCursor() ? "deploy" : "deploy-blocked";
return self == target;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public bool IsQueued { get; protected set; }
}
}

View File

@@ -25,11 +25,12 @@ namespace OpenRA.Mods.RA.Orders
this.useEnterCursor = useEnterCursor;
}
public override bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public override bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
if( !base.CanTargetUnit( self, target, forceAttack, forceMove, ref cursor ) ) return false;
if( !base.CanTargetUnit( self, target, forceAttack, forceMove, forceQueued, ref cursor ) ) return false;
if( !canTarget( target ) ) return false;
cursor = useEnterCursor( target ) ? "enter" : "enter-blocked";
cursor = useEnterCursor(target) ? "enter" : "enter-blocked";
IsQueued = forceQueued;
return true;
}
}

View File

@@ -31,12 +31,13 @@ namespace OpenRA.Mods.RA.Orders
public string OrderID { get; private set; }
public int OrderPriority { get; private set; }
public virtual bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public virtual bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
if( self == null ) throw new ArgumentNullException( "self" );
if( target == null ) throw new ArgumentNullException( "target" );
cursor = this.cursor;
IsQueued = forceQueued;
var playerRelationship = self.Owner.Stances[ target.Owner ];
@@ -46,10 +47,11 @@ namespace OpenRA.Mods.RA.Orders
return true;
}
public virtual bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public virtual bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public virtual bool IsQueued { get; protected set; }
}
public class UnitTraitOrderTargeter<T> : UnitOrderTargeter
@@ -59,11 +61,13 @@ namespace OpenRA.Mods.RA.Orders
{
}
public override bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public override bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
if( !base.CanTargetUnit( self, target, forceAttack, forceMove, ref cursor ) ) return false;
if( !base.CanTargetUnit( self, target, forceAttack, forceMove, forceQueued, ref cursor ) ) return false;
if( !target.HasTrait<T>() ) return false;
IsQueued = forceQueued;
return true;
}
}

View File

@@ -69,15 +69,17 @@ namespace OpenRA.Mods.RA
public string OrderID { get { return "SetRallyPoint"; } }
public int OrderPriority { get { return 0; } }
public bool CanTargetUnit( Actor self, Actor target, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetUnit(Actor self, Actor target, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return false;
}
public bool CanTargetLocation( Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, ref string cursor )
public bool CanTargetLocation(Actor self, int2 location, List<Actor> actorsAtLocation, bool forceAttack, bool forceMove, bool forceQueued, ref string cursor)
{
return true;
}
public bool IsQueued { get { return false; } } // unused
}
}
}