Make EnterTransport more consistent with MoveAdjacentTo.

This commit is contained in:
Paul Chote
2014-01-09 20:23:05 +13:00
parent 3cdeea009b
commit 29e689178d

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information #region Copyright & License Information
/* /*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made * This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License * available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information, * as published by the Free Software Foundation. For more information,
@@ -8,31 +8,37 @@
*/ */
#endregion #endregion
using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
class EnterTransport : Activity class EnterTransport : Activity
{ {
public Actor transport; readonly Actor transport;
readonly Cargo cargo;
public EnterTransport(Actor self, Actor transport) public EnterTransport(Actor self, Actor transport)
{ {
this.transport = transport; this.transport = transport;
cargo = transport.Trait<Cargo>();
} }
public override Activity Tick(Actor self) public override Activity Tick(Actor self)
{ {
if (IsCanceled) return NextActivity; if (IsCanceled)
if (transport == null || !transport.IsInWorld) return NextActivity; return NextActivity;
if (transport == null || !transport.IsInWorld)
return NextActivity;
var cargo = transport.Trait<Cargo>();
if (!cargo.CanLoad(transport, self)) if (!cargo.CanLoad(transport, self))
return NextActivity; return NextActivity;
// TODO: Queue a move order to the transport? need to be // TODO: Queue a move order to the transport? need to be
// careful about units that can't path to the transport // careful about units that can't path to the transport
if ((transport.Location - self.Location).LengthSquared > 2) var cells = Util.AdjacentCells(Target.FromActor(transport));
if (!cells.Contains(self.Location))
return NextActivity; return NextActivity;
cargo.Load(transport, self); cargo.Load(transport, self);