public static GameData LoadFromAssembly(string filepath) { if (!File.Exists(filepath)) { filepath = Path.Combine(ROOTDIR, filepath); if (!File.Exists(filepath)) { throw new Exception($"File {filepath} does not exist!"); } } Console.WriteLine($"Loading assembly: \"{filepath}\""); // System.Threading.Thread.Sleep(-1); var re = new GameDataCollector(); var ass = Assembly.UnsafeLoadFrom(filepath); foreach (var target in ass.GetTypes()) { if (target.IsAbstract || target.IsSealed) { continue; } re.Add(target); } #if sdebug print_ids(re); #endif //Register.Loaded = true; return(new GameData(re)); }
static void print_ids(GameDataCollector re) { Console.WriteLine("Modificators:"); foreach (var m in re.Modificators) { line(m); } Console.WriteLine(); Console.WriteLine("Spells:"); foreach (var m in re.Spells) { line(m); } Console.WriteLine(); Console.WriteLine("Minions:"); foreach (var m in re.Minions) { line(m); } Console.WriteLine(); void line(Type m) { Console.WriteLine($"[{(int)m.GetField("id", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null)}] {m.Name}"); } }
internal GameData(GameDataCollector c) { Spells = c.Spells.ToArray(); Minions = c.Minions.ToArray(); Heroes = c.Heroes.ToArray(); Modificators = c.Modificators.ToArray(); RandomEvents = c.RandomEvents.ToArray(); Players = c.Players.ToArray(); Reg = c.Registry; }