fix heli repusion from grounded helis. cleanup flight code
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
using System;
|
||||
|
||||
namespace OpenRA.Mods.RA.Air
|
||||
{
|
||||
@@ -96,5 +97,11 @@ namespace OpenRA.Mods.RA.Air
|
||||
int2[] noCells = new int2[] { };
|
||||
public IEnumerable<int2> OccupiedCells() { return noCells; }
|
||||
public int2 PxPosition { get { return center.ToInt2(); } }
|
||||
|
||||
public void TickMove( float speed, int facing )
|
||||
{
|
||||
var angle = facing / 128f * Math.PI;
|
||||
center += speed * -float2.FromAngle((float)angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,8 +58,7 @@ namespace OpenRA.Mods.RA.Air
|
||||
{
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
var speed = .2f * aircraft.MovementSpeed;
|
||||
var angle = aircraft.Facing / 128f * Math.PI;
|
||||
aircraft.center += speed * -float2.FromAngle((float)angle);
|
||||
aircraft.TickMove( speed, aircraft.Facing );
|
||||
aircraft.Altitude += Math.Sign(desiredAltitude - aircraft.Altitude);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,10 +26,7 @@ namespace OpenRA.Mods.RA.Air
|
||||
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo != null && !limitedAmmo.HasAmmo())
|
||||
{
|
||||
self.QueueActivity(new HeliReturn());
|
||||
return NextActivity;
|
||||
}
|
||||
return Util.SequenceActivities( new HeliReturn(), NextActivity );
|
||||
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
var info = self.Info.Traits.Get<HelicopterInfo>();
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace OpenRA.Mods.RA.Air
|
||||
.Where(a => a.HasTrait<Helicopter>());
|
||||
|
||||
var f = otherHelis
|
||||
.Select(h => self.Trait<Helicopter>().GetRepulseForce(self, h))
|
||||
.Select(h => self.Trait<Helicopter>().GetRepulseForce(self, h, h.Trait<Helicopter>()))
|
||||
.Aggregate(float2.Zero, (a, b) => a + b);
|
||||
|
||||
aircraft.center += rawSpeed * f;
|
||||
@@ -152,10 +152,12 @@ namespace OpenRA.Mods.RA.Air
|
||||
}
|
||||
|
||||
const float Epsilon = .5f;
|
||||
public float2 GetRepulseForce(Actor self, Actor h)
|
||||
public float2 GetRepulseForce(Actor self, Actor h, Aircraft hAir)
|
||||
{
|
||||
if (self == h)
|
||||
return float2.Zero;
|
||||
if( hAir.Altitude < Altitude )
|
||||
return float2.Zero;
|
||||
var d = self.CenterLocation - h.CenterLocation;
|
||||
|
||||
if (d.Length > Info.IdealSeparation)
|
||||
|
||||
@@ -39,9 +39,8 @@ namespace OpenRA.Mods.RA.Air
|
||||
var desiredFacing = Util.GetFacing(d, aircraft.Facing);
|
||||
aircraft.Facing = Util.TickFacing(aircraft.Facing, desiredFacing, aircraft.ROT);
|
||||
var speed = .2f * aircraft.MovementSpeed;
|
||||
var angle = aircraft.Facing / 128f * Math.PI;
|
||||
|
||||
aircraft.center += speed * -float2.FromAngle((float)angle);
|
||||
aircraft.TickMove( speed, aircraft.Facing );
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user