fix heli repusion from grounded helis. cleanup flight code

This commit is contained in:
Bob
2010-11-06 12:44:25 +13:00
parent 801aa1156f
commit 0f8d9d7fb3
5 changed files with 14 additions and 10 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}

View File

@@ -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>();

View File

@@ -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)

View File

@@ -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;
}