Harvester voices / cursors / flashes
This commit is contained in:
@@ -9,7 +9,8 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using OpenRA.Effects;
|
||||||
using OpenRA.Mods.RA.Activities;
|
using OpenRA.Mods.RA.Activities;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
using OpenRA.Traits.Activities;
|
using OpenRA.Traits.Activities;
|
||||||
@@ -26,7 +27,7 @@ namespace OpenRA.Mods.RA
|
|||||||
public object Create(ActorInitializer init) { return new Harvester(init.self, this); }
|
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>();
|
Dictionary<ResourceTypeInfo, int> contents = new Dictionary<ResourceTypeInfo, int>();
|
||||||
|
|
||||||
@@ -91,14 +92,14 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
if (underCursor != null
|
if (underCursor != null
|
||||||
&& underCursor.Owner == self.Owner
|
&& underCursor.Owner == self.Owner
|
||||||
&& underCursor.traits.Contains<IAcceptOre>() && !IsEmpty)
|
&& underCursor.traits.Contains<IAcceptOre>())
|
||||||
{
|
{
|
||||||
return new Order("Deliver", self, underCursor);
|
return new Order("Deliver", self, underCursor);
|
||||||
}
|
}
|
||||||
var res = self.World.WorldActor.traits.Get<ResourceLayer>().GetResource(xy);
|
var res = self.World.WorldActor.traits.Get<ResourceLayer>().GetResource(xy);
|
||||||
var info = self.Info.Traits.Get<HarvesterInfo>();
|
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 new Order("Harvest", self, xy);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -106,22 +107,29 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
public string CursorForOrder(Actor self, Order order)
|
public string CursorForOrder(Actor self, Order order)
|
||||||
{
|
{
|
||||||
return (order.OrderString == "Deliver") ? "enter" :
|
if (order.OrderString == "Harvest") return "attackmove";
|
||||||
(order.OrderString == "Harvest") ? "attackmove" : null;
|
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)
|
public void ResolveOrder(Actor self, Order order)
|
||||||
{
|
{
|
||||||
if (order.OrderString == "Harvest")
|
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.CancelActivity();
|
||||||
self.QueueActivity(new Move(order.TargetLocation, 0));
|
self.QueueActivity(new Move(order.TargetLocation, 0));
|
||||||
self.QueueActivity(new Harvest());
|
self.QueueActivity(new Harvest());
|
||||||
}
|
}
|
||||||
else if (order.OrderString == "Deliver")
|
else if (order.OrderString == "Deliver")
|
||||||
{
|
{
|
||||||
self.CancelActivity();
|
|
||||||
|
|
||||||
if (order.TargetActor != LinkedProc)
|
if (order.TargetActor != LinkedProc)
|
||||||
{
|
{
|
||||||
if (LinkedProc != null)
|
if (LinkedProc != null)
|
||||||
@@ -129,7 +137,14 @@ namespace OpenRA.Mods.RA
|
|||||||
LinkedProc = order.TargetActor;
|
LinkedProc = order.TargetActor;
|
||||||
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
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());
|
self.QueueActivity(new DeliverResources());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user