From a2e1fe3d4f3ae75d5c1b0b42342af2dd2f93fcb6 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sun, 17 Jan 2010 09:57:58 +1300 Subject: [PATCH] minelayer works in mod dll --- OpenRa.Game/GameRules/NewUnitInfo.cs | 26 +++++++++++++++++++------- OpenRa.Game/OpenRa.Game.csproj | 3 --- OpenRa.Game/Traits/Mine.cs | 8 -------- OpenRa.Game/Traits/MineImmune.cs | 5 ----- OpenRa.Game/Traits/Minelayer.cs | 5 ----- OpenRa.Mods.RA/Mine.cs | 9 ++------- OpenRa.Mods.RA/MineImmune.cs | 7 +++++++ OpenRa.Mods.RA/Minelayer.cs | 13 ++----------- OpenRa.Mods.RA/OpenRa.Mods.RA.csproj | 5 +++++ mods/ra/OpenRa.Mods.RA.dll | Bin 0 -> 9216 bytes 10 files changed, 35 insertions(+), 46 deletions(-) delete mode 100644 OpenRa.Game/Traits/Mine.cs delete mode 100644 OpenRa.Game/Traits/MineImmune.cs delete mode 100644 OpenRa.Game/Traits/Minelayer.cs create mode 100644 OpenRa.Mods.RA/MineImmune.cs create mode 100644 mods/ra/OpenRa.Mods.RA.dll diff --git a/OpenRa.Game/GameRules/NewUnitInfo.cs b/OpenRa.Game/GameRules/NewUnitInfo.cs index 6611b48fb0..b69d5e8745 100755 --- a/OpenRa.Game/GameRules/NewUnitInfo.cs +++ b/OpenRa.Game/GameRules/NewUnitInfo.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; using System.Linq; using OpenRa.FileFormats; using OpenRa.Traits; +using System.Reflection; +using IjwFramework.Types; +using System.IO; namespace OpenRa.GameRules { @@ -49,16 +52,25 @@ namespace OpenRa.GameRules return node; } + // todo: use mod metadata to do this + static Pair[] ModAssemblies = + { + Pair.New( typeof(ITraitInfo).Assembly, typeof(ITraitInfo).Namespace ), + Pair.New( Assembly.LoadFile(Path.GetFullPath(@"mods\ra\OpenRa.Mods.RA.dll")), "OpenRa.Mods.RA" ) + }; + static ITraitInfo LoadTraitInfo(string traitName, MiniYaml my) { - var fullTypeName = typeof(ITraitInfo).Namespace + "." + traitName + "Info"; - var info = (ITraitInfo)typeof(ITraitInfo).Assembly.CreateInstance(fullTypeName); + foreach (var mod in ModAssemblies) + { + var fullTypeName = mod.Second + "." + traitName + "Info"; + var info = (ITraitInfo)mod.First.CreateInstance(fullTypeName); + if (info == null) continue; + FieldLoader.Load(info, my); + return info; + } - if (info == null) - throw new NotImplementedException("Missing traitinfo type `{0}`".F(fullTypeName)); - - FieldLoader.Load(info, my); - return info; + throw new InvalidOperationException("Cannot locate trait: {0}".F(traitName)); } } } diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 4f3afcfc26..8e756e5a09 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -206,7 +206,6 @@ - @@ -237,8 +236,6 @@ - - diff --git a/OpenRa.Game/Traits/Mine.cs b/OpenRa.Game/Traits/Mine.cs deleted file mode 100644 index 34188ff23f..0000000000 --- a/OpenRa.Game/Traits/Mine.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using OpenRa.Effects; - -namespace OpenRa.Traits -{ - -} diff --git a/OpenRa.Game/Traits/MineImmune.cs b/OpenRa.Game/Traits/MineImmune.cs deleted file mode 100644 index 79f1140290..0000000000 --- a/OpenRa.Game/Traits/MineImmune.cs +++ /dev/null @@ -1,5 +0,0 @@ - -namespace OpenRa.Traits -{ - -} diff --git a/OpenRa.Game/Traits/Minelayer.cs b/OpenRa.Game/Traits/Minelayer.cs deleted file mode 100644 index 6909689b24..0000000000 --- a/OpenRa.Game/Traits/Minelayer.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System.Linq; - -namespace OpenRa.Traits -{ -} diff --git a/OpenRa.Mods.RA/Mine.cs b/OpenRa.Mods.RA/Mine.cs index f38d61fc9c..e9f85bb1cf 100644 --- a/OpenRa.Mods.RA/Mine.cs +++ b/OpenRa.Mods.RA/Mine.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using OpenRa.Traits; using OpenRa.Effects; +using OpenRa.Traits; namespace OpenRa.Mods.RA { @@ -54,7 +52,4 @@ namespace OpenRa.Mods.RA public IEnumerable OccupiedCells() { yield return self.Location; } } - - class MineImmuneInfo : StatelessTraitInfo { } - class MineImmune { } } diff --git a/OpenRa.Mods.RA/MineImmune.cs b/OpenRa.Mods.RA/MineImmune.cs new file mode 100644 index 0000000000..1f4b51edb3 --- /dev/null +++ b/OpenRa.Mods.RA/MineImmune.cs @@ -0,0 +1,7 @@ +using OpenRa.Traits; + +namespace OpenRa.Mods.RA +{ + class MineImmuneInfo : StatelessTraitInfo { } + class MineImmune { } +} diff --git a/OpenRa.Mods.RA/Minelayer.cs b/OpenRa.Mods.RA/Minelayer.cs index 6dd7a915e6..3280c3f72f 100644 --- a/OpenRa.Mods.RA/Minelayer.cs +++ b/OpenRa.Mods.RA/Minelayer.cs @@ -1,20 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Linq; using OpenRa.Traits; -using OpenRa; namespace OpenRa.Mods.RA { - class MinelayerInfo : ITraitInfo + class MinelayerInfo : StatelessTraitInfo { public readonly string Mine = "minv"; - - public object Create(Actor self) - { - return new Minelayer(); - } } class Minelayer : IIssueOrder, IResolveOrder diff --git a/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj b/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj index 0054171f18..88746d0e66 100644 --- a/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj +++ b/OpenRa.Mods.RA/OpenRa.Mods.RA.csproj @@ -46,6 +46,7 @@ + @@ -67,4 +68,8 @@ --> + + mkdir "$(SolutionDir)mods/ra/" +copy "$(TargetPath)" "$(SolutionDir)mods/ra/" + \ No newline at end of file diff --git a/mods/ra/OpenRa.Mods.RA.dll b/mods/ra/OpenRa.Mods.RA.dll new file mode 100644 index 0000000000000000000000000000000000000000..eabdbe9fd0cdda04314a9416d3d791640fb625aa GIT binary patch literal 9216 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