Harvester voices / cursors / flashes

This commit is contained in:
Paul Chote
2010-07-23 19:56:22 +12:00
parent c90317fb35
commit 7a06ddb8d1

View File

@@ -9,7 +9,8 @@
#endregion
using System.Collections.Generic;
using System.Linq;
using System.Linq;
using OpenRA.Effects;
using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
using OpenRA.Traits.Activities;
@@ -26,7 +27,7 @@ namespace OpenRA.Mods.RA
public object Create(ActorInitializer init) { return new Harvester(init.self, this); }
}
public class Harvester : IIssueOrder, IResolveOrder, INotifyDamage, IPips, IRenderModifier, IExplodeModifier, IOrderCursor
public class Harvester : IIssueOrder, IResolveOrder, INotifyDamage, IPips, IRenderModifier, IExplodeModifier, IOrderCursor, IOrderVoice
{
Dictionary<ResourceTypeInfo, int> contents = new Dictionary<ResourceTypeInfo, int>();
@@ -91,14 +92,14 @@ namespace OpenRA.Mods.RA
if (underCursor != null
&& underCursor.Owner == self.Owner
&& underCursor.traits.Contains<IAcceptOre>() && !IsEmpty)
{
&& underCursor.traits.Contains<IAcceptOre>())
{
return new Order("Deliver", self, underCursor);
}
var res = self.World.WorldActor.traits.Get<ResourceLayer>().GetResource(xy);
var info = self.Info.Traits.Get<HarvesterInfo>();
if (underCursor == null && res != null && info.Resources.Contains(res.info.Name))
if (underCursor == null && res != null && info.Resources.Contains(res.info.Name) && !IsFull)
return new Order("Harvest", self, xy);
return null;
@@ -106,22 +107,29 @@ namespace OpenRA.Mods.RA
public string CursorForOrder(Actor self, Order order)
{
return (order.OrderString == "Deliver") ? "enter" :
(order.OrderString == "Harvest") ? "attackmove" : null;
if (order.OrderString == "Harvest") return "attackmove";
if (order.OrderString == "Deliver") return IsEmpty ? "enter-blocked" : "enter";
return null;
}
public string VoicePhraseForOrder(Actor self, Order order)
{
return (order.OrderString == "Harvest" || (order.OrderString == "Deliver" && !IsEmpty)) ? "Move" : null;
}
public void ResolveOrder(Actor self, Order order)
{
if (order.OrderString == "Harvest")
{
if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask(w => w.Add(new MoveFlash(self.World, order.TargetLocation)));
self.CancelActivity();
self.QueueActivity(new Move(order.TargetLocation, 0));
self.QueueActivity(new Harvest());
}
else if (order.OrderString == "Deliver")
{
self.CancelActivity();
if (order.TargetActor != LinkedProc)
{
if (LinkedProc != null)
@@ -129,7 +137,14 @@ namespace OpenRA.Mods.RA
LinkedProc = order.TargetActor;
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
}
if (IsEmpty)
return;
if (self.Owner == self.World.LocalPlayer)
self.World.AddFrameEndTask(w => w.Add(new FlashTarget(order.TargetActor)));
self.CancelActivity();
self.QueueActivity(new DeliverResources());
}
}