Add world coord overloads to IOccupySpace and IPositionable.

This commit is contained in:
Paul Chote
2013-07-21 12:04:00 +12:00
parent 3e9bc63d4e
commit 19165d259d
8 changed files with 37 additions and 3 deletions

View File

@@ -100,6 +100,7 @@ namespace OpenRA.Traits
public interface IOccupySpace public interface IOccupySpace
{ {
PPos PxPosition { get; } PPos PxPosition { get; }
WPos CenterPosition { get; }
CPos TopLeft { get; } CPos TopLeft { get; }
IEnumerable<Pair<CPos, SubCell>> OccupiedCells(); IEnumerable<Pair<CPos, SubCell>> OccupiedCells();
@@ -144,6 +145,9 @@ namespace OpenRA.Traits
void SetPosition(Actor self, CPos cell); void SetPosition(Actor self, CPos cell);
void SetPxPosition(Actor self, PPos px); void SetPxPosition(Actor self, PPos px);
void AdjustPxPosition(Actor self, PPos px); /* works like SetPxPosition, but visual only */ void AdjustPxPosition(Actor self, PPos px); /* works like SetPxPosition, but visual only */
void SetPosition(Actor self, WPos pos);
void SetVisualPosition(Actor self, WPos pos);
} }
public interface INotifyBlockingMove { void OnNotifyBlockingMove(Actor self, Actor blocking); } public interface INotifyBlockingMove { void OnNotifyBlockingMove(Actor self, Actor blocking); }

View File

@@ -30,6 +30,7 @@ namespace OpenRA.Traits
public CPos TopLeft { get { return location; } } public CPos TopLeft { get { return location; } }
public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { yield break; } public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { yield break; }
public WPos CenterPosition { get { return location.CenterPosition; } }
public PPos PxPosition { get { return Util.CenterOfCell(location); } } public PPos PxPosition { get { return Util.CenterOfCell(location); } }
public int Altitude { get { return 0; } set { } } public int Altitude { get { return 0; } set { } }
} }

View File

@@ -54,11 +54,12 @@ namespace OpenRA.Mods.RA.Air
UnReserve(); UnReserve();
} }
protected readonly Actor self; protected readonly Actor self;
[Sync] public int Facing { get; set; } [Sync] public int Facing { get; set; }
[Sync] public int Altitude { get; set; } [Sync] public int Altitude { get; set; }
[Sync] public PSubPos SubPxPosition; [Sync] public PSubPos SubPxPosition;
public WPos CenterPosition { get { return PxPosition.ToWPos(Altitude); } }
public PPos PxPosition { get { return SubPxPosition.ToPPos(); } } public PPos PxPosition { get { return SubPxPosition.ToPPos(); } }
public CPos TopLeft { get { return PxPosition.ToCPos(); } } public CPos TopLeft { get { return PxPosition.ToCPos(); } }
@@ -110,6 +111,14 @@ namespace OpenRA.Mods.RA.Air
public void AdjustPxPosition(Actor self, PPos px) { SetPxPosition(self, px); } public void AdjustPxPosition(Actor self, PPos px) { SetPxPosition(self, px); }
public void SetPosition(Actor self, WPos pos)
{
// TODO: Handle altitude
SubPxPosition = PPos.FromWPos(pos).ToPSubPos();
}
public void SetVisualPosition(Actor self, WPos pos) { SetPosition(self, pos); }
public bool AircraftCanEnter(Actor a) public bool AircraftCanEnter(Actor a)
{ {
if (self.AppearsHostileTo(a)) return false; if (self.AppearsHostileTo(a)) return false;

View File

@@ -110,6 +110,7 @@ namespace OpenRA.Mods.RA.Buildings
public void Unlock() { Locked = false; } public void Unlock() { Locked = false; }
public CPos TopLeft { get { return topLeft; } } public CPos TopLeft { get { return topLeft; } }
public WPos CenterPosition { get { return PxPosition.ToWPos(0); } }
public PPos PxPosition { get { return pxPosition; } } public PPos PxPosition { get { return pxPosition; } }
public int Altitude { get { return 0; } set { } } public int Altitude { get { return 0; } set { } }

View File

@@ -85,16 +85,20 @@ namespace OpenRA.Mods.RA
public CPos TopLeft { get { return Location; } } public CPos TopLeft { get { return Location; } }
public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { yield return Pair.New( Location, SubCell.FullCell); } public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { yield return Pair.New( Location, SubCell.FullCell); }
public WPos CenterPosition { get { return PxPosition.ToWPos(Altitude); } }
public PPos PxPosition { get; private set; } public PPos PxPosition { get; private set; }
public int Altitude { get { return 0; } set { } } public int Altitude { get { return 0; } set { } }
public void SetPxPosition(Actor self, PPos px) public void SetPxPosition(Actor self, PPos px)
{ {
SetPosition( self, px.ToCPos() ); SetPosition(self, px.ToCPos());
} }
public void AdjustPxPosition(Actor self, PPos px) { SetPxPosition(self, px); } public void AdjustPxPosition(Actor self, PPos px) { SetPxPosition(self, px); }
public void SetPosition(Actor self, WPos pos) { SetPosition(self, pos.ToCPos()); }
public void SetVisualPosition(Actor self, WPos pos) { SetPosition(self, pos.ToCPos()); }
public bool CanEnterCell(CPos cell) public bool CanEnterCell(CPos cell)
{ {
if (!self.World.Map.IsInMap(cell.X, cell.Y)) return false; if (!self.World.Map.IsInMap(cell.X, cell.Y)) return false;

View File

@@ -26,7 +26,8 @@ namespace OpenRA.Mods.RA
{ {
[Sync] CPos location; [Sync] CPos location;
[Sync] public PPos PxPosition { get; set; } public WPos CenterPosition { get { return PxPosition.ToWPos(0); } }
[Sync] public PPos PxPosition { get; private set; }
public int Altitude { get { return 0; } set { } } public int Altitude { get { return 0; } set { } }
[Sync] public int Facing { get; set; } [Sync] public int Facing { get; set; }

View File

@@ -61,6 +61,7 @@ namespace OpenRA.Mods.RA
public CPos TopLeft { get { return location; } } public CPos TopLeft { get { return location; } }
public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { yield return Pair.New(TopLeft, SubCell.FullCell); } public IEnumerable<Pair<CPos, SubCell>> OccupiedCells() { yield return Pair.New(TopLeft, SubCell.FullCell); }
public WPos CenterPosition { get { return PxPosition.ToWPos(0); } }
public PPos PxPosition { get { return Util.CenterOfCell( location ); } } public PPos PxPosition { get { return Util.CenterOfCell( location ); } }
public int Altitude { get { return 0; } set { } } public int Altitude { get { return 0; } set { } }
} }

View File

@@ -167,6 +167,7 @@ namespace OpenRA.Mods.RA.Move
public int ROT { get { return Info.ROT; } } public int ROT { get { return Info.ROT; } }
public WPos CenterPosition { get { return PxPosition.ToWPos(Altitude); } }
[Sync] public PPos PxPosition { get; private set; } [Sync] public PPos PxPosition { get; private set; }
[Sync] public CPos fromCell { get { return __fromCell; } } [Sync] public CPos fromCell { get { return __fromCell; } }
[Sync] public CPos toCell { get { return __toCell; } } [Sync] public CPos toCell { get { return __toCell; } }
@@ -231,6 +232,18 @@ namespace OpenRA.Mods.RA.Move
PxPosition = px; PxPosition = px;
} }
public void SetPosition(Actor self, WPos pos)
{
// TODO: Handle altitude
SetPxPosition(self, PPos.FromWPos(pos));
}
public void SetVisualPosition(Actor self, WPos pos)
{
// TODO: Handle altitude
AdjustPxPosition(self, PPos.FromWPos(pos));
}
public IEnumerable<IOrderTargeter> Orders { get { yield return new MoveOrderTargeter(Info); } } public IEnumerable<IOrderTargeter> Orders { get { yield return new MoveOrderTargeter(Info); } }
// Note: Returns a valid order even if the unit can't move to the target // Note: Returns a valid order even if the unit can't move to the target