From 24850294528918bede53df2fba71d885fb1b38f7 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Tue, 14 Nov 2017 15:41:24 +0100 Subject: [PATCH] Add Rearmable trait --- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + OpenRA.Mods.Common/Traits/Rearmable.cs | 46 ++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 OpenRA.Mods.Common/Traits/Rearmable.cs diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index b6a714d0cf..5a75d1ec1a 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -315,6 +315,7 @@ + diff --git a/OpenRA.Mods.Common/Traits/Rearmable.cs b/OpenRA.Mods.Common/Traits/Rearmable.cs new file mode 100644 index 0000000000..9b41cb0785 --- /dev/null +++ b/OpenRA.Mods.Common/Traits/Rearmable.cs @@ -0,0 +1,46 @@ +#region Copyright & License Information +/* + * Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; +using OpenRA.Traits; + +namespace OpenRA.Mods.Common.Traits +{ + public class RearmableInfo : ITraitInfo + { + [Desc("Actors that this actor can dock to and get rearmed by.")] + [FieldLoader.Require] + [ActorReference] public readonly HashSet RearmActors = new HashSet { }; + + [Desc("Name(s) of AmmoPool(s) that use this trait to rearm.")] + public readonly HashSet AmmoPools = new HashSet { "primary" }; + + public object Create(ActorInitializer init) { return new Rearmable(this); } + } + + public class Rearmable : INotifyCreated + { + public readonly RearmableInfo Info; + + public Rearmable(RearmableInfo info) + { + Info = info; + } + + public AmmoPool[] RearmableAmmoPools { get; private set; } + + void INotifyCreated.Created(Actor self) + { + RearmableAmmoPools = self.TraitsImplementing().Where(p => Info.AmmoPools.Contains(p.Info.Name)).ToArray(); + } + } +}