Set passenger facings when they are unloading
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using OpenRA.Traits;
|
||||
@@ -27,6 +28,9 @@ namespace OpenRA.Mods.RA
|
||||
public readonly string[] InitialUnits = { };
|
||||
public readonly bool EjectOnSell = true;
|
||||
|
||||
[Desc("Which direction the passenger will face (relative to the transport) when unloading.")]
|
||||
public readonly int PassengerFacing = 128;
|
||||
|
||||
public object Create(ActorInitializer init) { return new Cargo(init, this); }
|
||||
}
|
||||
|
||||
@@ -36,6 +40,7 @@ namespace OpenRA.Mods.RA
|
||||
readonly Actor self;
|
||||
readonly List<Actor> cargo = new List<Actor>();
|
||||
readonly HashSet<Actor> reserves = new HashSet<Actor>();
|
||||
readonly Lazy<IFacing> facing;
|
||||
|
||||
int totalWeight = 0;
|
||||
int reservedWeight = 0;
|
||||
@@ -82,6 +87,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
totalWeight = cargo.Sum(c => GetWeight(c));
|
||||
}
|
||||
facing = Exts.Lazy(self.TraitOrDefault<IFacing>);
|
||||
}
|
||||
|
||||
public void Created(Actor self)
|
||||
@@ -184,19 +190,38 @@ namespace OpenRA.Mods.RA
|
||||
public Actor Unload(Actor self)
|
||||
{
|
||||
var a = cargo[0];
|
||||
|
||||
cargo.RemoveAt(0);
|
||||
totalWeight -= GetWeight(a);
|
||||
|
||||
SetPassengerFacing(a);
|
||||
|
||||
foreach (var npe in self.TraitsImplementing<INotifyPassengerExited>())
|
||||
npe.PassengerExited(self, a);
|
||||
|
||||
var p = a.Trait<Passenger>();
|
||||
p.Transport = null;
|
||||
|
||||
foreach (var u in p.Info.GrantUpgrades)
|
||||
self.Trait<UpgradeManager>().RevokeUpgrade(self, u, p);
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
void SetPassengerFacing(Actor passenger)
|
||||
{
|
||||
if (facing.Value == null)
|
||||
return;
|
||||
|
||||
var passengerFacing = passenger.TraitOrDefault<IFacing>();
|
||||
if (passengerFacing != null)
|
||||
passengerFacing.Facing = facing.Value.Facing + Info.PassengerFacing;
|
||||
|
||||
var passengerTurreted = passenger.TraitOrDefault<Turreted>();
|
||||
if (passengerTurreted != null)
|
||||
passengerTurreted.TurretFacing = facing.Value.Facing + Info.PassengerFacing;
|
||||
}
|
||||
|
||||
public IEnumerable<PipType> GetPips(Actor self)
|
||||
{
|
||||
var numPips = Info.PipCount;
|
||||
|
||||
Reference in New Issue
Block a user