From fe94b7686e131087d0fe69f4e55fc807733995ea Mon Sep 17 00:00:00 2001 From: penev92 Date: Sat, 4 Jul 2015 16:12:56 +0300 Subject: [PATCH] Introduce IWarhead and move Warhead to Mods.Common --- OpenRA.Game/GameRules/WeaponInfo.cs | 6 +++--- OpenRA.Game/OpenRA.Game.csproj | 2 -- OpenRA.Game/Traits/Health.cs | 12 +++++------- OpenRA.Game/Traits/TraitsInterfaces.cs | 14 ++++++++++---- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 2 ++ .../Warheads}/DamageWarhead.cs | 2 +- .../Warheads}/Warhead.cs | 7 +++---- 7 files changed, 24 insertions(+), 21 deletions(-) rename {OpenRA.Game/GameRules => OpenRA.Mods.Common/Warheads}/DamageWarhead.cs (98%) rename {OpenRA.Game/GameRules => OpenRA.Mods.Common/Warheads}/Warhead.cs (96%) diff --git a/OpenRA.Game/GameRules/WeaponInfo.cs b/OpenRA.Game/GameRules/WeaponInfo.cs index 448c5f8ec7..0204db6ebf 100644 --- a/OpenRA.Game/GameRules/WeaponInfo.cs +++ b/OpenRA.Game/GameRules/WeaponInfo.cs @@ -62,7 +62,7 @@ namespace OpenRA.GameRules public readonly IProjectileInfo Projectile; [FieldLoader.LoadUsing("LoadWarheads")] - public readonly List Warheads = new List(); + public readonly List Warheads = new List(); readonly HashSet validTargetSet; readonly HashSet invalidTargetSet; @@ -86,10 +86,10 @@ namespace OpenRA.GameRules static object LoadWarheads(MiniYaml yaml) { - var retList = new List(); + var retList = new List(); foreach (var node in yaml.Nodes.Where(n => n.Key.StartsWith("Warhead"))) { - var ret = Game.CreateObject(node.Value.Value + "Warhead"); + var ret = Game.CreateObject(node.Value.Value + "Warhead"); FieldLoader.Load(ret, node.Value); retList.Add(ret); } diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index c625a254f2..dd44c4ef27 100644 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -100,7 +100,6 @@ - @@ -235,7 +234,6 @@ - diff --git a/OpenRA.Game/Traits/Health.cs b/OpenRA.Game/Traits/Health.cs index e1da9abb44..42f35781e3 100755 --- a/OpenRA.Game/Traits/Health.cs +++ b/OpenRA.Game/Traits/Health.cs @@ -8,9 +8,7 @@ */ #endregion -using System; using System.Linq; -using OpenRA.GameRules; namespace OpenRA.Traits { @@ -88,7 +86,7 @@ namespace OpenRA.Traits { Attacker = repairer, Damage = -MaxHP, - DamageState = this.DamageState, + DamageState = DamageState, PreviousDamageState = DamageState.Dead, Warhead = null, }; @@ -106,9 +104,9 @@ namespace OpenRA.Traits nd.AppliedDamage(repairer, self, ai); } - public void InflictDamage(Actor self, Actor attacker, int damage, DamageWarhead warhead, bool ignoreModifiers) + public void InflictDamage(Actor self, Actor attacker, int damage, IWarhead warhead, bool ignoreModifiers) { - // Overkill! don't count extra hits as more kills! + // Overkill! Don't count extra hits as more kills! if (IsDead) return; @@ -177,7 +175,7 @@ namespace OpenRA.Traits public class HealthInit : IActorInit { [FieldFromYamlKey] readonly int value = 100; - readonly bool allowZero = false; + readonly bool allowZero; public HealthInit() { } public HealthInit(int init, bool allowZero = false) { @@ -205,7 +203,7 @@ namespace OpenRA.Traits return (health == null) ? DamageState.Undamaged : health.DamageState; } - public static void InflictDamage(this Actor self, Actor attacker, int damage, DamageWarhead warhead) + public static void InflictDamage(this Actor self, Actor attacker, int damage, IWarhead warhead) { if (self.Disposed) return; var health = self.TraitOrDefault(); diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index d612675bec..07d0fef2ca 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -12,9 +12,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Drawing; -using System.Linq; using OpenRA.Activities; -using OpenRA.GameRules; using OpenRA.Graphics; using OpenRA.Network; using OpenRA.Primitives; @@ -48,9 +46,9 @@ namespace OpenRA.Traits public class AttackInfo { - public Actor Attacker; - public DamageWarhead Warhead; public int Damage; + public Actor Attacker; + public IWarhead Warhead; public DamageState DamageState; public DamageState PreviousDamageState; } @@ -353,4 +351,12 @@ namespace OpenRA.Traits void OnObjectiveCompleted(Player player, int objectiveID); void OnObjectiveFailed(Player player, int objectiveID); } + + public interface IWarhead + { + int Delay { get; } + bool IsValidAgainst(Actor victim, Actor firedBy); + bool IsValidAgainst(FrozenActor victim, Actor firedBy); + void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers); + } } diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index f7ee60da4c..85172ae35e 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -539,11 +539,13 @@ + + diff --git a/OpenRA.Game/GameRules/DamageWarhead.cs b/OpenRA.Mods.Common/Warheads/DamageWarhead.cs similarity index 98% rename from OpenRA.Game/GameRules/DamageWarhead.cs rename to OpenRA.Mods.Common/Warheads/DamageWarhead.cs index f76171bee1..8abeec4f1f 100644 --- a/OpenRA.Game/GameRules/DamageWarhead.cs +++ b/OpenRA.Mods.Common/Warheads/DamageWarhead.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using OpenRA.Traits; -namespace OpenRA.GameRules +namespace OpenRA.Mods.Common.Warheads { public abstract class DamageWarhead : Warhead { diff --git a/OpenRA.Game/GameRules/Warhead.cs b/OpenRA.Mods.Common/Warheads/Warhead.cs similarity index 96% rename from OpenRA.Game/GameRules/Warhead.cs rename to OpenRA.Mods.Common/Warheads/Warhead.cs index 5d2c0bac67..cff1414ad0 100644 --- a/OpenRA.Game/GameRules/Warhead.cs +++ b/OpenRA.Mods.Common/Warheads/Warhead.cs @@ -9,14 +9,12 @@ #endregion using System.Collections.Generic; -using System.Linq; -using OpenRA.Effects; using OpenRA.Traits; -namespace OpenRA.GameRules +namespace OpenRA.Mods.Common.Warheads { [Desc("Base warhead class. This can be used to derive other warheads from.")] - public abstract class Warhead + public abstract class Warhead : IWarhead { [Desc("What types of targets are affected.")] public readonly string[] ValidTargets = { "Ground", "Water" }; @@ -32,6 +30,7 @@ namespace OpenRA.GameRules [Desc("Delay in ticks before applying the warhead effect.", "0 = instant (old model).")] public readonly int Delay = 0; + int IWarhead.Delay { get { return Delay; } } HashSet validTargetSet; HashSet invalidTargetSet;