From c253e59c572e02b01e523a91a3fea5cb77233f13 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 13 Sep 2012 06:52:27 +1200 Subject: [PATCH] take lock while capture in progress --- OpenRA.Mods.RA/Activities/CaptureActor.cs | 3 ++- OpenRA.Mods.RA/Capturable.cs | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/CaptureActor.cs b/OpenRA.Mods.RA/Activities/CaptureActor.cs index 623747ef0a..0dfb33f05d 100644 --- a/OpenRA.Mods.RA/Activities/CaptureActor.cs +++ b/OpenRA.Mods.RA/Activities/CaptureActor.cs @@ -40,7 +40,8 @@ namespace OpenRA.Mods.RA.Activities if (sellable != null && sellable.Selling) return NextActivity; - target.Trait().BeginCapture(target, self); + if (!target.Trait().BeginCapture(target, self)) + return NextActivity; var capturesInfo = self.Info.Traits.Get(); if (capturesInfo != null && capturesInfo.WastedAfterwards) diff --git a/OpenRA.Mods.RA/Capturable.cs b/OpenRA.Mods.RA/Capturable.cs index 3fa232ae55..a90f4c144c 100644 --- a/OpenRA.Mods.RA/Capturable.cs +++ b/OpenRA.Mods.RA/Capturable.cs @@ -11,6 +11,7 @@ using System.Linq; using OpenRA.Effects; using OpenRA.Traits; +using OpenRA.Mods.RA.Buildings; namespace OpenRA.Mods.RA { @@ -37,14 +38,19 @@ namespace OpenRA.Mods.RA this.Info = info; } - public void BeginCapture(Actor self, Actor captor) + public bool BeginCapture(Actor self, Actor captor) { + if (!self.Trait().Lock()) + return false; + CaptureProgressTime = 0; this.Captor = captor; if (self.Owner != self.World.WorldActor.Owner) self.ChangeOwner(self.World.WorldActor.Owner); + + return true; } public void Tick(Actor self) @@ -67,6 +73,7 @@ namespace OpenRA.Mods.RA t.Trait.OnActorCaptured(t.Actor, self, Captor, self.Owner, Captor.Owner); Captor = null; + self.Trait().Unlock(); }); } }