don't use Move directly

This commit is contained in:
Bob
2010-10-22 11:10:32 +13:00
parent f933e3de3f
commit 6513bd5fe0
20 changed files with 67 additions and 43 deletions

View File

@@ -41,10 +41,11 @@ namespace OpenRA.Mods.RA.Activities
if (!Target.IsValid)
return NextActivity;
var mobile = self.Trait<Mobile>();
var targetCell = Util.CellContaining(Target.CenterLocation);
if ((targetCell - self.Location).LengthSquared >= Range * Range)
return Util.SequenceActivities( new Move( Target, Range ), this );
return Util.SequenceActivities( mobile.MoveTo( Target, Range ), this );
var desiredFacing = Util.GetFacing((targetCell - self.Location).ToFloat2(), 0);
var renderUnit = self.TraitOrDefault<RenderUnit>();

View File

@@ -27,6 +27,7 @@ namespace OpenRA.Mods.RA.Activities
if( NextActivity != null )
return NextActivity;
var mobile = self.Trait<Mobile>();
var harv = self.Trait<Harvester>();
if (harv.LinkedProc == null || !harv.LinkedProc.IsInWorld)
@@ -39,7 +40,7 @@ namespace OpenRA.Mods.RA.Activities
if( self.Location != proc.Location + proc.Trait<IAcceptOre>().DeliverOffset )
{
return Util.SequenceActivities( new Move(proc.Location + proc.Trait<IAcceptOre>().DeliverOffset, 0), this );
return Util.SequenceActivities( mobile.MoveTo(proc.Location + proc.Trait<IAcceptOre>().DeliverOffset, 0), this );
}
else if (!isDocking)
{

View File

@@ -8,6 +8,7 @@
*/
#endregion
using System.Linq;
using OpenRA.Effects;
using OpenRA.Traits;
@@ -15,20 +16,21 @@ namespace OpenRA.Mods.RA.Activities
{
class Demolish : CancelableActivity
{
Target target;
Actor target;
public Demolish( Actor target ) { this.target = Target.FromActor(target); }
public Demolish( Actor target ) { this.target = target; }
public override IActivity Tick(Actor self)
{
if( IsCanceled ) return NextActivity;
if (!target.IsValid) return NextActivity;
if ((target.Actor.Location - self.Location).Length > 1)
if (IsCanceled) return NextActivity;
if (target == null || !target.IsInWorld || target.IsDead()) return NextActivity;
if (target.Owner == self.Owner) return NextActivity;
if( !target.Trait<IOccupySpace>().OccupiedCells().Any( x => x == self.Location ) )
return NextActivity;
self.World.AddFrameEndTask(w => w.Add(new DelayedAction(25 * 2,
() => { if (target.IsValid) target.Actor.Kill(self); })));
() => { if (target.IsInWorld) target.Kill(self); })));
return NextActivity;
}
}

View File

@@ -28,10 +28,10 @@ namespace OpenRA.Mods.RA.Activities
var mobile = self.Trait<Mobile>();
var nearest = target.Trait<IOccupySpace>().NearestCellTo( mobile.toCell );
if( ( nearest - mobile.toCell ).LengthSquared >= 2 )
if( ( nearest - mobile.toCell ).LengthSquared > 2 )
return Util.SequenceActivities( new MoveAdjacentTo( target ), this );
return Util.SequenceActivities( new Move( nearest, target ), NextActivity );
return Util.SequenceActivities( mobile.MoveTo( nearest, target ), NextActivity );
}
}
}

View File

@@ -33,9 +33,8 @@ namespace OpenRA.Mods.RA.Activities
if( inRange ) return this;
var ret = new Move( Target, Range );
ret.Queue( this );
return ret;
var mobile = self.Trait<Mobile>();
return Util.SequenceActivities( mobile.MoveTo( Target, Range ), this );
}
}
}

View File

@@ -60,10 +60,11 @@ namespace OpenRA.Mods.RA.Activities
void FindMoreResource(Actor self)
{
var mobile = self.Trait<Mobile>();
var res = self.World.WorldActor.Trait<ResourceLayer>();
var harv = self.Info.Traits.Get<HarvesterInfo>();
var mobileInfo = self.Info.Traits.Get<MobileInfo>();
self.QueueActivity(new Move(
self.QueueActivity(mobile.MoveTo(
() =>
{
return self.World.PathFinder.FindPath(PathSearch.Search(self.World, mobileInfo, true)

View File

@@ -23,6 +23,7 @@ namespace OpenRA.Mods.RA.Activities
{
if (IsCanceled) return NextActivity;
var mobile = self.Trait<Mobile>();
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
if (!limitedAmmo.HasAmmo())
{
@@ -54,7 +55,7 @@ namespace OpenRA.Mods.RA.Activities
{
var p = ml.minefield.Random(self.World.SharedRandom);
if (ShouldLayMine(self, p))
return Util.SequenceActivities( new Move(p, 0), this );
return Util.SequenceActivities( mobile.MoveTo(p, 0), this );
}
// todo: return somewhere likely to be safe (near fix) so we're not sitting out in the minefield.

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Mods.RA.Activities
var ret = self.World.PathFinder.FindBidiPath( ps1, ps2 );
if( ret.Count > 0 )
ret.RemoveAt( 0 );
return Util.SequenceActivities( new Move( () => ret ), this );
return Util.SequenceActivities( mobile.MoveTo( () => ret ), this );
}
}
}

View File

@@ -67,9 +67,11 @@ namespace OpenRA.Mods.RA.Activities
{
if (actor.Destroyed) return;
w.Add(actor);
actor.TraitsImplementing<IMove>().FirstOrDefault().SetPosition(actor, self.Location);
var mobile = self.Trait<Mobile>();
mobile.SetPosition(actor, self.Location);
actor.CancelActivity();
actor.QueueActivity(new Move(exitTile.Value, 0));
actor.QueueActivity(mobile.MoveTo(exitTile.Value, 0));
if (actor.Owner == self.World.LocalPlayer)
{
var line = actor.TraitOrDefault<DrawLineToTarget>();