From 7efd3d844cd7448872d49bd130e8cd79489ba5e5 Mon Sep 17 00:00:00 2001 From: Caleb Anderson Date: Fri, 1 Jan 2010 15:03:54 +0800 Subject: [PATCH 1/3] Don't crash on bad orders --- OpenRa.Game/Controller.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index a850cbd9e7..0cf12c1cb3 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -27,6 +27,7 @@ namespace OpenRa.Game if (orderGenerator == null) return; var orders = orderGenerator.Order(xy.ToInt2(), mi).ToArray(); + orders.Where(order => order.Validate()); recentOrders.AddRange( orders ); var voicedActor = orders.Select(o => o.Subject) From da9668ceb3311573e428dc28a3e34b6e1afab427 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Fri, 1 Jan 2010 20:08:38 +1300 Subject: [PATCH 2/3] let's actually fix that one :) --- OpenRa.Game/Controller.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 0cf12c1cb3..1b7ea5dc03 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -26,8 +26,8 @@ namespace OpenRa.Game { if (orderGenerator == null) return; - var orders = orderGenerator.Order(xy.ToInt2(), mi).ToArray(); - orders.Where(order => order.Validate()); + var orders = orderGenerator.Order(xy.ToInt2(), mi) + .Where(order => order.Validate()).ToArray(); recentOrders.AddRange( orders ); var voicedActor = orders.Select(o => o.Subject) From d0c00344044cfd36a3ae17ed107838f9071e429d Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Fri, 1 Jan 2010 20:18:38 +1300 Subject: [PATCH 3/3] added repair activity; not wired up for FIX yet --- OpenRa.Game/OpenRa.Game.csproj | 1 + OpenRa.Game/Traits/Activities/Repair.cs | 43 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 OpenRa.Game/Traits/Activities/Repair.cs diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 4f0bfbeb1e..20ad6b77ee 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -143,6 +143,7 @@ + diff --git a/OpenRa.Game/Traits/Activities/Repair.cs b/OpenRa.Game/Traits/Activities/Repair.cs new file mode 100644 index 0000000000..fa3019f5bc --- /dev/null +++ b/OpenRa.Game/Traits/Activities/Repair.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OpenRa.Game.Traits.Activities +{ + class Repair : IActivity + { + public IActivity NextActivity { get; set; } + bool isCanceled; + int remainingTicks = ticksPerPoint; + + const int ticksPerPoint = 15; + const int hpPerPoint = 8; + + public IActivity Tick(Actor self) + { + if (isCanceled) return NextActivity; + if (--remainingTicks == 0) + { + self.Health += hpPerPoint; + if (self.Health >= self.Info.Strength) + { + self.Health = self.Info.Strength; + return NextActivity; + } + + var hostBuilding = Game.FindUnits(self.CenterLocation, self.CenterLocation) + .FirstOrDefault(a => a.traits.Contains()); + + if (hostBuilding != null) + hostBuilding.traits.Get().PlayCustomAnim(hostBuilding, "active" ); + + remainingTicks = ticksPerPoint; + } + + return this; + } + + public void Cancel(Actor self) { isCanceled = true; NextActivity = null; } + } +}