コード例 #1
0
ファイル: BootSys.cs プロジェクト: asheraryam/Unary_Common
        public override void InitMod(Mod Mod)
        {
            if (Bootables.ContainsKey(Mod.ModID))
            {
                Sys.Ref.ConsoleSys.Error("Tried to init twice " + Mod.ModID);
                return;
            }

            ModSys      ModSys      = Sys.Ref.Shared.GetObject <ModSys>();
            AssemblySys AssemblySys = Sys.Ref.Shared.GetNode <AssemblySys>();

            string BootTarget = ModSys.GetManifest(Mod).Boot;

            if (BootTarget == null)
            {
                Sys.Ref.ConsoleSys.Error("Tried to init " + Mod.ModID + " without Boot target");
                return;
            }

            Type BootType = AssemblySys.GetType(BootTarget);

            if (BootType == null)
            {
                Sys.Ref.ConsoleSys.Error("Tried to init " + Mod.ModID + " with invalid Boot target");
                return;
            }

            IBoot NewBoot = (IBoot)Activator.CreateInstance(BootType);

            Bootables[Mod.ModID] = NewBoot;
            Bootables[Mod.ModID].AddShared();
        }
コード例 #2
0
ファイル: EntriesSys.cs プロジェクト: asheraryam/Unary_Common
        private void LoadEntries(string ModID, bool Core)
        {
            string EntriesDir = "res://" + ModID + "/Entries";

            if (!FilesystemUtil.GD.DirExists(EntriesDir))
            {
                ConsoleSys.Error("Failed to load entries at " + EntriesDir + " because folder does not exist");
                return;
            }

            List <string> EntriesFiles = FilesystemUtil.GD.DirGetFiles(EntriesDir);

            for (int i = EntriesFiles.Count - 1; i >= 0; --i)
            {
                if (!EntriesFiles[i].EndsWith(".json"))
                {
                    EntriesFiles.RemoveAt(i);
                }
            }

            for (int i = EntriesFiles.Count - 1; i >= 0; --i)
            {
                string EntryManifest = FilesystemUtil.GD.FileRead(EntriesFiles[i]);

                try
                {
                    var Entries = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, JObject> > >(EntryManifest);

                    foreach (var TypeName in Entries)
                    {
                        if (!ModIDUtil.Validate(TypeName.Key))
                        {
                            ConsoleSys.Error("Entry " + TypeName.Key + " is not a valid ModIDEntry");
                            continue;
                        }

                        string NewModID = ModIDUtil.ModID(TypeName.Key) + ".Entries." + ModIDUtil.ModIDEntry(TypeName.Key);

                        Type Type = AssemblySys.GetType(NewModID);

                        if (Type == null)
                        {
                            ConsoleSys.Error("Type " + TypeName.Key + " is not a valid type");
                            continue;
                        }

                        foreach (var Entry in TypeName.Value)
                        {
                            if (Core)
                            {
                                AddCoreEntry(NewModID, JsonConvert.DeserializeObject(Entry.Value.ToString(Formatting.None), Type));
                            }
                            else
                            {
                                AddModEntry(NewModID, JsonConvert.DeserializeObject(Entry.Value.ToString(Formatting.None), Type));
                            }
                        }
                    }
                }
                catch (Exception Exception)
                {
                    ConsoleSys.Error("Failed to parse entries manifest at " + EntriesFiles[i]);
                    ConsoleSys.Error(Exception.Message);
                    continue;
                }
            }
        }