clean up some of the noise in Move

This commit is contained in:
Chris Forbes
2011-08-15 14:48:17 +12:00
parent a74fd17d39
commit 36f6e503ef
2 changed files with 38 additions and 29 deletions

View File

@@ -109,7 +109,7 @@ namespace OpenRA.Mods.RA.Move
int __facing; int __facing;
int2 __fromCell, __toCell; int2 __fromCell, __toCell;
public SubCell __fromSubCell, __toSubCell; public SubCell fromSubCell, toSubCell;
int __altitude; int __altitude;
@@ -146,8 +146,8 @@ namespace OpenRA.Mods.RA.Move
RemoveInfluence(); RemoveInfluence();
__fromCell = from; __fromCell = from;
__toCell = to; __toCell = to;
__fromSubCell = fromSub; fromSubCell = fromSub;
__toSubCell = toSub; toSubCell = toSub;
AddInfluence(); AddInfluence();
} }
@@ -160,16 +160,16 @@ namespace OpenRA.Mods.RA.Move
this.self = init.self; this.self = init.self;
this.Info = info; this.Info = info;
__toSubCell = __fromSubCell = info.SharesCell ? SubCell.Center : SubCell.FullCell; toSubCell = fromSubCell = info.SharesCell ? SubCell.Center : SubCell.FullCell;
if (init.Contains<SubCellInit>()) if (init.Contains<SubCellInit>())
{ {
this.__fromSubCell = this.__toSubCell = init.Get<SubCellInit, SubCell>(); this.fromSubCell = this.toSubCell = init.Get<SubCellInit, SubCell>();
} }
if (init.Contains<LocationInit>()) if (init.Contains<LocationInit>())
{ {
this.__fromCell = this.__toCell = init.Get<LocationInit, int2>(); this.__fromCell = this.__toCell = init.Get<LocationInit, int2>();
this.PxPosition = Util.CenterOfCell(fromCell) + info.SubCellOffsets[__fromSubCell]; this.PxPosition = Util.CenterOfCell(fromCell) + info.SubCellOffsets[fromSubCell];
} }
this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit, int>() : info.InitialFacing; this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit, int>() : info.InitialFacing;
@@ -178,15 +178,15 @@ namespace OpenRA.Mods.RA.Move
public void SetPosition(Actor self, int2 cell) public void SetPosition(Actor self, int2 cell)
{ {
SetLocation(cell,__fromSubCell, cell,__fromSubCell); SetLocation(cell,fromSubCell, cell,fromSubCell);
PxPosition = Util.CenterOfCell(fromCell) + Info.SubCellOffsets[__fromSubCell]; PxPosition = Util.CenterOfCell(fromCell) + Info.SubCellOffsets[fromSubCell];
FinishedMoving(self); FinishedMoving(self);
} }
public void SetPxPosition(Actor self, int2 px) public void SetPxPosition(Actor self, int2 px)
{ {
var cell = Util.CellContaining(px); var cell = Util.CellContaining(px);
SetLocation(cell,__fromSubCell, cell,__fromSubCell); SetLocation(cell,fromSubCell, cell,fromSubCell);
PxPosition = px; PxPosition = px;
FinishedMoving(self); FinishedMoving(self);
} }
@@ -287,13 +287,13 @@ namespace OpenRA.Mods.RA.Move
public IEnumerable<Pair<int2, SubCell>> OccupiedCells() public IEnumerable<Pair<int2, SubCell>> OccupiedCells()
{ {
if (fromCell == toCell) if (fromCell == toCell)
yield return Pair.New(fromCell, __fromSubCell); yield return Pair.New(fromCell, fromSubCell);
else if (CanEnterCell(toCell)) else if (CanEnterCell(toCell))
yield return Pair.New(toCell, __toSubCell); yield return Pair.New(toCell, toSubCell);
else else
{ {
yield return Pair.New(fromCell, __fromSubCell); yield return Pair.New(fromCell, fromSubCell);
yield return Pair.New(toCell, __toSubCell); yield return Pair.New(toCell, toSubCell);
} }
} }
@@ -303,7 +303,7 @@ namespace OpenRA.Mods.RA.Move
return SubCell.FullCell; return SubCell.FullCell;
// Prioritise the current subcell // Prioritise the current subcell
return new[]{ __fromSubCell, SubCell.TopLeft, SubCell.TopRight, SubCell.Center, return new[]{ fromSubCell, SubCell.TopLeft, SubCell.TopRight, SubCell.Center,
SubCell.BottomLeft, SubCell.BottomRight}.First(b => SubCell.BottomLeft, SubCell.BottomRight}.First(b =>
{ {
var blockingActors = self.World.ActorMap.GetUnitsAt(a,b).Where(c => c != ignoreActor); var blockingActors = self.World.ActorMap.GetUnitsAt(a,b).Where(c => c != ignoreActor);

View File

@@ -133,11 +133,11 @@ namespace OpenRA.Mods.RA.Move
} }
else else
{ {
mobile.SetLocation( mobile.fromCell, mobile.__fromSubCell, nextCell.Value.First, nextCell.Value.Second ); mobile.SetLocation( mobile.fromCell, mobile.fromSubCell, nextCell.Value.First, nextCell.Value.Second );
var move = new MoveFirstHalf( var move = new MoveFirstHalf(
this, this,
Util.CenterOfCell( mobile.fromCell ) + mobile.Info.SubCellOffsets[mobile.__fromSubCell], Util.CenterOfCell( mobile.fromCell ) + mobile.Info.SubCellOffsets[mobile.fromSubCell],
Util.BetweenCells( mobile.fromCell, mobile.toCell ) + (mobile.Info.SubCellOffsets[mobile.__fromSubCell] + mobile.Info.SubCellOffsets[mobile.__toSubCell] ) / 2, Util.BetweenCells( mobile.fromCell, mobile.toCell ) + (mobile.Info.SubCellOffsets[mobile.fromSubCell] + mobile.Info.SubCellOffsets[mobile.toSubCell] ) / 2,
mobile.Facing, mobile.Facing,
mobile.Facing, mobile.Facing,
0 ); 0 );
@@ -316,41 +316,50 @@ namespace OpenRA.Mods.RA.Move
class MoveFirstHalf : MovePart class MoveFirstHalf : MovePart
{ {
public MoveFirstHalf( Move move, int2 from, int2 to, int fromFacing, int toFacing, int startingFraction ) public MoveFirstHalf( Move move, int2 from, int2 to, int fromFacing, int toFacing, int startingFraction )
: base( move, from, to, fromFacing, toFacing, startingFraction ) : base( move, from, to, fromFacing, toFacing, startingFraction ) { }
static bool IsTurn( Mobile mobile, int2 nextCell )
{ {
return nextCell - mobile.toCell !=
mobile.toCell - mobile.fromCell;
} }
protected override MovePart OnComplete( Actor self, Mobile mobile, Move parent ) protected override MovePart OnComplete( Actor self, Mobile mobile, Move parent )
{ {
var fromSubcellOffset = mobile.Info.SubCellOffsets[mobile.fromSubCell];
var toSubcellOffset = mobile.Info.SubCellOffsets[mobile.toSubCell];
var nextCell = parent.PopPath( self, mobile ); var nextCell = parent.PopPath( self, mobile );
if( nextCell != null ) if( nextCell != null )
{ {
if( ( nextCell.Value.First - mobile.toCell ) != ( mobile.toCell - mobile.fromCell ) ) if(IsTurn(mobile, nextCell.Value.First))
{ {
var nextSubcellOffset = mobile.Info.SubCellOffsets[nextCell.Value.Second];
var ret = new MoveFirstHalf( var ret = new MoveFirstHalf(
move, move,
Util.BetweenCells( mobile.fromCell, mobile.toCell ) + (mobile.Info.SubCellOffsets[mobile.__fromSubCell] + mobile.Info.SubCellOffsets[mobile.__toSubCell]) / 2, Util.BetweenCells( mobile.fromCell, mobile.toCell ) + (fromSubcellOffset + toSubcellOffset) / 2,
Util.BetweenCells( mobile.toCell, nextCell.Value.First ) + (mobile.Info.SubCellOffsets[mobile.__toSubCell] + mobile.Info.SubCellOffsets[nextCell.Value.Second]) / 2, Util.BetweenCells( mobile.toCell, nextCell.Value.First ) + (toSubcellOffset + nextSubcellOffset) / 2,
mobile.Facing, mobile.Facing,
Util.GetNearestFacing( mobile.Facing, Util.GetFacing( nextCell.Value.First - mobile.toCell, mobile.Facing ) ), Util.GetNearestFacing( mobile.Facing, Util.GetFacing( nextCell.Value.First - mobile.toCell, mobile.Facing ) ),
moveFraction - moveFractionTotal ); moveFraction - moveFractionTotal );
mobile.SetLocation( mobile.toCell, mobile.__toSubCell, nextCell.Value.First, nextCell.Value.Second); mobile.SetLocation( mobile.toCell, mobile.toSubCell, nextCell.Value.First, nextCell.Value.Second);
return ret; return ret;
} }
else
parent.path.Add( nextCell.Value.First ); parent.path.Add( nextCell.Value.First );
} }
var ret2 = new MoveSecondHalf( var ret2 = new MoveSecondHalf(
move, move,
Util.BetweenCells( mobile.fromCell, mobile.toCell ) + (mobile.Info.SubCellOffsets[mobile.__fromSubCell] + mobile.Info.SubCellOffsets[mobile.__toSubCell]) / 2, Util.BetweenCells( mobile.fromCell, mobile.toCell ) + (fromSubcellOffset + toSubcellOffset) / 2,
Util.CenterOfCell( mobile.toCell ) + mobile.Info.SubCellOffsets[mobile.__toSubCell], Util.CenterOfCell( mobile.toCell ) + toSubcellOffset,
mobile.Facing, mobile.Facing,
mobile.Facing, mobile.Facing,
moveFraction - moveFractionTotal ); moveFraction - moveFractionTotal );
mobile.EnteringCell(self); mobile.EnteringCell(self);
mobile.SetLocation( mobile.toCell, mobile.__toSubCell, mobile.toCell, mobile.__toSubCell ); mobile.SetLocation( mobile.toCell, mobile.toSubCell, mobile.toCell, mobile.toSubCell );
return ret2; return ret2;
} }
} }
@@ -365,7 +374,7 @@ namespace OpenRA.Mods.RA.Move
protected override MovePart OnComplete( Actor self, Mobile mobile, Move parent ) protected override MovePart OnComplete( Actor self, Mobile mobile, Move parent )
{ {
mobile.PxPosition = Util.CenterOfCell( mobile.toCell ); mobile.PxPosition = Util.CenterOfCell( mobile.toCell );
mobile.SetLocation( mobile.toCell, mobile.__toSubCell, mobile.toCell, mobile.__toSubCell ); mobile.SetLocation( mobile.toCell, mobile.toSubCell, mobile.toCell, mobile.toSubCell );
mobile.FinishedMoving(self); mobile.FinishedMoving(self);
return null; return null;
} }