Added attack order. Cursor is currently incorrect.
This commit is contained in:
@@ -65,10 +65,12 @@ namespace OpenRa.Game
|
|||||||
public Order Order( int2 xy, bool lmb )
|
public Order Order( int2 xy, bool lmb )
|
||||||
{
|
{
|
||||||
if (Owner != Game.LocalPlayer)
|
if (Owner != Game.LocalPlayer)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
var underCursor = Game.UnitInfluence.GetUnitAt( xy ) ?? Game.BuildingInfluence.GetBuildingAt( xy );
|
||||||
|
|
||||||
return traits.WithInterface<Traits.IOrder>()
|
return traits.WithInterface<Traits.IOrder>()
|
||||||
.Select( x => x.Order( this, xy, lmb ) )
|
.Select( x => x.Order( this, xy, lmb, underCursor ) )
|
||||||
.FirstOrDefault( x => x != null );
|
.FirstOrDefault( x => x != null );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ using System.Text;
|
|||||||
|
|
||||||
namespace OpenRa.Game.Traits
|
namespace OpenRa.Game.Traits
|
||||||
{
|
{
|
||||||
class AttackTurreted : ITick
|
class AttackTurreted : ITick, IOrder
|
||||||
{
|
{
|
||||||
public Actor target;
|
public Actor target;
|
||||||
|
|
||||||
@@ -52,5 +52,30 @@ namespace OpenRa.Game.Traits
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Order Order( Actor self, int2 xy, bool lmb, Actor underCursor )
|
||||||
|
{
|
||||||
|
if( underCursor == null ) return null;
|
||||||
|
|
||||||
|
if( underCursor.Owner == self.Owner ) return null;
|
||||||
|
|
||||||
|
return new AttackOrder( self, underCursor );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AttackOrder : Order
|
||||||
|
{
|
||||||
|
public readonly Actor Attacker;
|
||||||
|
public readonly Actor Target;
|
||||||
|
|
||||||
|
public AttackOrder( Actor attacker, Actor target )
|
||||||
|
{
|
||||||
|
this.Attacker = attacker;
|
||||||
|
this.Target = target;
|
||||||
|
}
|
||||||
|
public override void Apply()
|
||||||
|
{
|
||||||
|
Attacker.traits.Get<AttackTurreted>().target = Target;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace OpenRa.Game.Traits
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public Order Order(Actor self, int2 xy, bool lmb)
|
public Order Order(Actor self, int2 xy, bool lmb, Actor underCursor)
|
||||||
{
|
{
|
||||||
if( lmb ) return null;
|
if( lmb ) return null;
|
||||||
|
|
||||||
|
|||||||
@@ -47,9 +47,12 @@ namespace OpenRa.Game.Traits
|
|||||||
fromCell = toCell;
|
fromCell = toCell;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Order Order(Actor self, int2 xy, bool lmb)
|
public Order Order(Actor self, int2 xy, bool lmb, Actor underCursor)
|
||||||
{
|
{
|
||||||
if( lmb ) return null;
|
if( lmb ) return null;
|
||||||
|
|
||||||
|
if( underCursor != null )
|
||||||
|
return null;
|
||||||
|
|
||||||
if (xy != toCell)
|
if (xy != toCell)
|
||||||
return new MoveOrder(self, xy);
|
return new MoveOrder(self, xy);
|
||||||
@@ -248,21 +251,21 @@ namespace OpenRa.Game.Traits
|
|||||||
{
|
{
|
||||||
var nextCell = parent.path[ parent.path.Count - 1 ];
|
var nextCell = parent.path[ parent.path.Count - 1 ];
|
||||||
if( ( nextCell - mobile.toCell ) != ( mobile.toCell - mobile.fromCell ) )
|
if( ( nextCell - mobile.toCell ) != ( mobile.toCell - mobile.fromCell ) )
|
||||||
{
|
{
|
||||||
if( CanEnterCell( nextCell, self ) )
|
if( CanEnterCell( nextCell, self ) )
|
||||||
{
|
{
|
||||||
parent.path.RemoveAt( parent.path.Count - 1 );
|
parent.path.RemoveAt( parent.path.Count - 1 );
|
||||||
|
|
||||||
var ret = new MoveFirstHalf(
|
var ret = new MoveFirstHalf(
|
||||||
BetweenCells( mobile.fromCell, mobile.toCell ),
|
BetweenCells( mobile.fromCell, mobile.toCell ),
|
||||||
BetweenCells( mobile.toCell, nextCell ),
|
BetweenCells( mobile.toCell, nextCell ),
|
||||||
mobile.facing,
|
mobile.facing,
|
||||||
Util.GetNearestFacing( mobile.facing, Util.GetFacing( nextCell - mobile.toCell, mobile.facing ) ),
|
Util.GetNearestFacing( mobile.facing, Util.GetFacing( nextCell - mobile.toCell, mobile.facing ) ),
|
||||||
moveFraction - moveFractionTotal );
|
moveFraction - moveFractionTotal );
|
||||||
mobile.fromCell = mobile.toCell;
|
mobile.fromCell = mobile.toCell;
|
||||||
mobile.toCell = nextCell;
|
mobile.toCell = nextCell;
|
||||||
Game.UnitInfluence.Update( mobile );
|
Game.UnitInfluence.Update( mobile );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ namespace OpenRa.Game.Traits
|
|||||||
{
|
{
|
||||||
interface ITick { void Tick(Actor self); }
|
interface ITick { void Tick(Actor self); }
|
||||||
interface IRender { IEnumerable<Pair<Sprite, float2>> Render(Actor self); }
|
interface IRender { IEnumerable<Pair<Sprite, float2>> Render(Actor self); }
|
||||||
interface IOrder { Order Order(Actor self, int2 xy, bool lmb); }
|
interface IOrder { Order Order(Actor self, int2 xy, bool lmb, Actor underCursor); }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user