SetTargetSilently for DrawLineToTarget

This commit is contained in:
alzeih
2010-07-26 13:57:53 +12:00
parent 526bb3e042
commit 925ca2bb73
10 changed files with 89 additions and 7 deletions

View File

@@ -38,6 +38,12 @@ namespace OpenRA.Traits
this.c = c; this.c = c;
} }
public void SetTargetSilently(Actor self, Target target, Color c)
{
this.target = target;
this.c = c;
}
public void Render (Actor self) public void Render (Actor self)
{ {
var force = Game.controller.GetModifiers().HasModifier(Modifiers.Alt); var force = Game.controller.GetModifiers().HasModifier(Modifiers.Alt);

View File

@@ -286,6 +286,13 @@ namespace OpenRA.Traits
if (moveTo.HasValue) if (moveTo.HasValue)
{ {
self.CancelActivity(); self.CancelActivity();
if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask(w =>
{
var line = self.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(self, Target.FromCell(moveTo.Value), Color.Green);
});
self.QueueActivity(new Move(moveTo.Value, 0)); self.QueueActivity(new Move(moveTo.Value, 0));
} }
} }

View File

@@ -11,6 +11,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using System.Drawing;
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
@@ -63,11 +64,28 @@ namespace OpenRA.Traits
var mobile = newUnit.traits.GetOrDefault<Mobile>(); var mobile = newUnit.traits.GetOrDefault<Mobile>();
if (mobile != null) if (mobile != null)
{ {
int2? target = null;
if (pi.ExitOffset != null) if (pi.ExitOffset != null)
newUnit.QueueActivity(new Activities.Move(ExitLocation(self, producee).Value, 1)); {
target = ExitLocation(self, producee).Value;
newUnit.QueueActivity(new Activities.Move(target.Value, 1));
}
if (rp != null) if (rp != null)
newUnit.QueueActivity(new Activities.Move(rp.rallyPoint, 1)); {
target = rp.rallyPoint;
newUnit.QueueActivity(new Activities.Move(target.Value, 1));
}
if (target != null && newUnit.Owner == self.World.LocalPlayer)
{
self.World.AddFrameEndTask(w =>
{
var line = newUnit.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(newUnit, Target.FromCell(target.Value), Color.Green);
});
}
} }
} }

View File

@@ -49,6 +49,7 @@
</Reference> </Reference>
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Drawing" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="CriticalBuildingState.cs" /> <Compile Include="CriticalBuildingState.cs" />

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System.Linq; using System.Linq;
using System.Drawing;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Mods.RA; using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
@@ -62,6 +63,12 @@ namespace OpenRA.Mods.Cnc
actor.CancelActivity(); actor.CancelActivity();
actor.QueueActivity(new Move(self.Location + exitOffset, self)); actor.QueueActivity(new Move(self.Location + exitOffset, self));
actor.QueueActivity(new Move(rp.rallyPoint, 0)); actor.QueueActivity(new Move(rp.rallyPoint, 0));
if (actor.Owner == self.World.LocalPlayer)
{
var line = actor.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(actor, Target.FromCell(rp.rallyPoint), Color.Green);
}
foreach (var t in self.traits.WithInterface<INotifyProduction>()) foreach (var t in self.traits.WithInterface<INotifyProduction>())
t.UnitProduced(self, actor); t.UnitProduced(self, actor);

View File

@@ -8,6 +8,7 @@
*/ */
#endregion #endregion
using System.Drawing;
using OpenRA.Mods.RA; using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Render; using OpenRA.Mods.RA.Render;
@@ -51,7 +52,16 @@ namespace OpenRA.Mods.Cnc
harv.QueueActivity( new Drag(endDock, startDock, 12) ); harv.QueueActivity( new Drag(endDock, startDock, 12) );
harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) ); harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) );
if (harvester.LastHarvestedCell != int2.Zero) if (harvester.LastHarvestedCell != int2.Zero)
{
harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) ); harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) );
if (harv.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask( w =>
{
var line = harv.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green);
});
}
} }
harv.QueueActivity( new Harvest() ); harv.QueueActivity( new Harvest() );
}) ); }) );

View File

@@ -12,6 +12,7 @@ using System.Linq;
using OpenRA.Mods.RA.Render; using OpenRA.Mods.RA.Render;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using System.Drawing;
namespace OpenRA.Mods.RA.Activities namespace OpenRA.Mods.RA.Activities
{ {
@@ -71,6 +72,12 @@ namespace OpenRA.Mods.RA.Activities
actor.traits.WithInterface<IMove>().FirstOrDefault().SetPosition(actor, self.Location); actor.traits.WithInterface<IMove>().FirstOrDefault().SetPosition(actor, self.Location);
actor.CancelActivity(); actor.CancelActivity();
actor.QueueActivity(new Move(exitTile.Value, 0)); actor.QueueActivity(new Move(exitTile.Value, 0));
if (actor.Owner == self.World.LocalPlayer)
{
var line = actor.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(self, Target.FromCell(exitTile.Value), Color.Green);
}
}); });
return this; return this;

View File

@@ -12,6 +12,7 @@ using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Render; using OpenRA.Mods.RA.Render;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using System.Drawing;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -40,7 +41,16 @@ namespace OpenRA.Mods.RA
harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) ); harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) );
if (harvester.LastHarvestedCell != int2.Zero) if (harvester.LastHarvestedCell != int2.Zero)
{
harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) ); harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) );
if (harv.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask( w =>
{
var line = harv.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green);
});
}
harv.QueueActivity( new Harvest() ); harv.QueueActivity( new Harvest() );
}); });
})); }));

View File

@@ -12,6 +12,7 @@ using System.Linq;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using System.Drawing;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -47,6 +48,13 @@ namespace OpenRA.Mods.RA
{ {
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new Move(order.TargetActor, 1)); self.QueueActivity(new Move(order.TargetActor, 1));
if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask( w =>
{
var line = self.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green);
});
self.QueueActivity(new Repair(order.TargetActor)); self.QueueActivity(new Repair(order.TargetActor));
} }
} }

View File

@@ -11,6 +11,7 @@
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using System.Drawing;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -39,6 +40,13 @@ namespace OpenRA.Mods.RA
{ {
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new Move(order.TargetActor, 1)); self.QueueActivity(new Move(order.TargetActor, 1));
if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask( w =>
{
var line = self.traits.GetOrDefault<DrawLineToTarget>();
if (line != null)
line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green);
});
self.QueueActivity(new Infiltrate(order.TargetActor)); self.QueueActivity(new Infiltrate(order.TargetActor));
} }
} }