move ROT, InitialFacing and Speed to Mobile and Aircraft.
This commit is contained in:
@@ -39,7 +39,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
var desiredFacing = Util.GetFacing(d, unit.Facing);
|
||||
if (unit.Altitude == cruiseAltitude)
|
||||
Util.TickFacing(ref unit.Facing, desiredFacing,
|
||||
self.Info.Traits.Get<UnitInfo>().ROT);
|
||||
self.Info.Traits.Get<AircraftInfo>().ROT);
|
||||
|
||||
if (unit.Altitude < cruiseAltitude)
|
||||
++unit.Altitude;
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
var dist = target.CenterLocation - self.CenterLocation;
|
||||
|
||||
var desiredFacing = Util.GetFacing(dist, unit.Facing);
|
||||
Util.TickFacing(ref unit.Facing, desiredFacing, self.Info.Traits.Get<UnitInfo>().ROT);
|
||||
Util.TickFacing(ref unit.Facing, desiredFacing, self.Info.Traits.Get<AircraftInfo>().ROT);
|
||||
|
||||
var mobile = self.traits.WithInterface<IMove>().FirstOrDefault();
|
||||
var rawSpeed = .2f * mobile.MovementSpeedForCell(self, self.Location);
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
var desiredFacing = Util.GetFacing(dist, unit.Facing);
|
||||
Util.TickFacing(ref unit.Facing, desiredFacing,
|
||||
self.Info.Traits.Get<UnitInfo>().ROT);
|
||||
self.Info.Traits.Get<AircraftInfo>().ROT);
|
||||
|
||||
var mobile = self.traits.WithInterface<IMove>().FirstOrDefault();
|
||||
var rawSpeed = .2f * mobile.MovementSpeedForCell(self, self.Location);
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (isCanceled) return NextActivity;
|
||||
var dest = ChooseHelipad(self);
|
||||
|
||||
var initialFacing = self.Info.Traits.Get<UnitInfo>().InitialFacing;
|
||||
var initialFacing = self.Info.Traits.Get<AircraftInfo>().InitialFacing;
|
||||
|
||||
if (dest == null)
|
||||
return Util.SequenceActivities(
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
--unit.Altitude;
|
||||
|
||||
var desiredFacing = Util.GetFacing(d, unit.Facing);
|
||||
Util.TickFacing(ref unit.Facing, desiredFacing, self.Info.Traits.Get<UnitInfo>().ROT);
|
||||
Util.TickFacing(ref unit.Facing, desiredFacing, self.Info.Traits.Get<AircraftInfo>().ROT);
|
||||
var mobile = self.traits.WithInterface<IMove>().FirstOrDefault();
|
||||
var speed = .2f * mobile.MovementSpeedForCell(self, self.Location);
|
||||
var angle = unit.Facing / 128f * Math.PI;
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
var speed = .2f * mobile.MovementSpeedForCell(self, self.Location);
|
||||
|
||||
var approachStart = landPos - new float2(unit.Altitude * speed, 0);
|
||||
var turnRadius = (128f / self.Info.Traits.Get<UnitInfo>().ROT) * speed / (float)Math.PI;
|
||||
var turnRadius = (128f / self.Info.Traits.Get<AircraftInfo>().ROT) * speed / (float)Math.PI;
|
||||
|
||||
/* work out the center points */
|
||||
var fwd = -float2.FromAngle(unit.Facing / 128f * (float)Math.PI);
|
||||
|
||||
@@ -21,24 +21,33 @@ namespace OpenRA.Mods.RA
|
||||
public readonly string[] RepairBuildings = { "fix" };
|
||||
[ActorReference]
|
||||
public readonly string[] RearmBuildings = { "hpad", "afld" };
|
||||
public readonly int InitialFacing = 128;
|
||||
public readonly int ROT = 255;
|
||||
public readonly int Speed = 1;
|
||||
|
||||
public virtual object Create( ActorInitializer init ) { return new Aircraft( init ); }
|
||||
public virtual object Create( ActorInitializer init ) { return new Aircraft( init , this ); }
|
||||
}
|
||||
|
||||
public class Aircraft : IMove, IOccupySpace
|
||||
{
|
||||
[Sync]
|
||||
public int2 Location;
|
||||
AircraftInfo Info;
|
||||
|
||||
public Aircraft( ActorInitializer init )
|
||||
public Aircraft( ActorInitializer init , AircraftInfo info)
|
||||
{
|
||||
this.Location = init.location;
|
||||
Info = info;
|
||||
}
|
||||
|
||||
public int2 TopLeft
|
||||
{
|
||||
get { return Location; }
|
||||
}
|
||||
|
||||
public int ROT(Actor self){ return Info.ROT; }
|
||||
|
||||
public int InitialFacing(Actor self){ return Info.InitialFacing; }
|
||||
|
||||
public void SetPosition(Actor self, int2 cell)
|
||||
{
|
||||
@@ -48,9 +57,8 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public bool AircraftCanEnter(Actor self, Actor a)
|
||||
{
|
||||
var aircraft = self.Info.Traits.Get<AircraftInfo>();
|
||||
return aircraft.RearmBuildings.Contains( a.Info.Name )
|
||||
|| aircraft.RepairBuildings.Contains( a.Info.Name );
|
||||
return Info.RearmBuildings.Contains( a.Info.Name )
|
||||
|| Info.RepairBuildings.Contains( a.Info.Name );
|
||||
}
|
||||
|
||||
public virtual IEnumerable<float2> GetCurrentPath(Actor self)
|
||||
@@ -67,15 +75,11 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public float MovementSpeedForCell(Actor self, int2 cell)
|
||||
{
|
||||
var unitInfo = self.Info.Traits.GetOrDefault<UnitInfo>();
|
||||
if( unitInfo == null)
|
||||
return 0f;
|
||||
|
||||
var modifier = self.traits
|
||||
.WithInterface<ISpeedModifier>()
|
||||
.Select(t => t.GetSpeedModifier())
|
||||
.Product();
|
||||
return unitInfo.Speed * modifier;
|
||||
return Info.Speed * modifier;
|
||||
}
|
||||
|
||||
int2[] noCells = new int2[] { };
|
||||
|
||||
@@ -26,14 +26,18 @@ namespace OpenRA.Mods.RA
|
||||
public readonly int IdealSeparation = 40;
|
||||
public readonly bool LandWhenIdle = true;
|
||||
|
||||
public override object Create( ActorInitializer init ) { return new Helicopter( init ); }
|
||||
public override object Create( ActorInitializer init ) { return new Helicopter( init, this); }
|
||||
}
|
||||
|
||||
class Helicopter : Aircraft, ITick, IIssueOrder, IResolveOrder, IOrderCursor, IOrderVoice
|
||||
{
|
||||
public IDisposable reservation;
|
||||
HelicopterInfo Info;
|
||||
|
||||
public Helicopter( ActorInitializer init ) : base( init ) { }
|
||||
public Helicopter( ActorInitializer init, HelicopterInfo info) : base( init, info )
|
||||
{
|
||||
Info = info;
|
||||
}
|
||||
|
||||
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
|
||||
{
|
||||
@@ -86,9 +90,9 @@ namespace OpenRA.Mods.RA
|
||||
self.CancelActivity();
|
||||
self.QueueActivity(new HeliFly(Util.CenterOfCell(order.TargetLocation)));
|
||||
|
||||
if (self.Info.Traits.Get<HelicopterInfo>().LandWhenIdle)
|
||||
if (Info.LandWhenIdle)
|
||||
{
|
||||
self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing));
|
||||
self.QueueActivity(new Turn(Info.InitialFacing));
|
||||
self.QueueActivity(new HeliLand(true));
|
||||
}
|
||||
}
|
||||
@@ -115,9 +119,9 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
self.CancelActivity();
|
||||
self.QueueActivity(new HeliFly(order.TargetActor.CenterLocation + offsetVec));
|
||||
self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing));
|
||||
self.QueueActivity(new Turn(Info.InitialFacing));
|
||||
self.QueueActivity(new HeliLand(false));
|
||||
self.QueueActivity(self.Info.Traits.Get<HelicopterInfo>().RearmBuildings.Contains(order.TargetActor.Info.Name)
|
||||
self.QueueActivity(Info.RearmBuildings.Contains(order.TargetActor.Info.Name)
|
||||
? (IActivity)new Rearm() : new Repair(order.TargetActor));
|
||||
}
|
||||
}
|
||||
@@ -129,7 +133,6 @@ namespace OpenRA.Mods.RA
|
||||
if (unit.Altitude <= 0)
|
||||
return;
|
||||
|
||||
var Info = self.Info.Traits.Get<HelicopterInfo>();
|
||||
var mobile = self.traits.WithInterface<IMove>().FirstOrDefault();
|
||||
var rawSpeed = .2f * mobile.MovementSpeedForCell(self, self.Location);
|
||||
var otherHelis = self.World.FindUnitsInCircle(self.CenterLocation, Info.IdealSeparation)
|
||||
@@ -158,7 +161,7 @@ namespace OpenRA.Mods.RA
|
||||
return float2.Zero;
|
||||
var d = self.CenterLocation - h.CenterLocation;
|
||||
|
||||
if (d.Length > self.Info.Traits.Get<HelicopterInfo>().IdealSeparation)
|
||||
if (d.Length > Info.IdealSeparation)
|
||||
return float2.Zero;
|
||||
|
||||
if (d.LengthSquared < Epsilon)
|
||||
|
||||
@@ -19,14 +19,14 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
public class PlaneInfo : AircraftInfo
|
||||
{
|
||||
public override object Create( ActorInitializer init ) { return new Plane( init ); }
|
||||
public override object Create( ActorInitializer init ) { return new Plane( init, this ); }
|
||||
}
|
||||
|
||||
public class Plane : Aircraft, IIssueOrder, IResolveOrder, IOrderCursor, IOrderVoice, ITick
|
||||
{
|
||||
public IDisposable reservation;
|
||||
|
||||
public Plane( ActorInitializer init ) : base( init ) { }
|
||||
public Plane( ActorInitializer init, PlaneInfo info ) : base( init, info ) { }
|
||||
|
||||
bool firstTick = true;
|
||||
public void Tick(Actor self)
|
||||
|
||||
Reference in New Issue
Block a user