private static void Awake_Postfix(LookupDirector @this, Dictionary <Identifiable.Id, GameObject> p_identifiablePrefabDict,
                                   Dictionary <Gadget.Id, GadgetDefinition> p_gadgetDefinitionDict, Dictionary <Identifiable.Id, VacItemDefinition> p_vacItemDict)
 {
     //& Injects main game content
     IdentifiableRegistry.InjectPrefabs(p_identifiablePrefabDict);
     GadgetRegistry.InjectGadgets(p_gadgetDefinitionDict);
     IdentifiableRegistry.InjectVacEntries(p_vacItemDict);
 }
示例#2
0
        /// <summary>
        /// Called before GameContext.Awake()
        /// </summary>
        internal static void PreLoad()
        {
            if (isPreInitialized)
            {
                return;
            }
            isPreInitialized = true;
            Debug.Log("SRML has successfully invaded the game!");

            prefabParent = new GameObject("PrefabParent").transform;
            prefabParent.gameObject.SetActive(false);
            GameObject.DontDestroyOnLoad(prefabParent.gameObject);
            foreach (var v in Assembly.GetExecutingAssembly().GetTypes())
            {
                System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(v.TypeHandle);
            }

            HarmonyPatcher.PatchAll();

            try
            {
                SRModLoader.InitializeMods();
            }
            catch (Exception e)
            {
                Debug.LogError(e);
                ErrorGUI.CreateError($"{e.GetType().Name}: {e.Message}");
                return;
            }
            FileLogger.Init();
            Console.Console.Init();
            HarmonyOverrideHandler.PatchAll();
            try
            {
                SRModLoader.PreLoadMods();
            }
            catch (Exception e)
            {
                Debug.LogError(e);
                ErrorGUI.CreateError($"{e.Message}");
                return;
            }
            IdentifiableRegistry.CategorizeAllIds();
            GadgetRegistry.CategorizeAllIds();
            ReplacerCache.ClearCache();

            HarmonyPatcher.Instance.Patch(typeof(GameContext).GetMethod("Start"),
                                          prefix: new HarmonyMethod(typeof(Main).GetMethod("Load", BindingFlags.NonPublic | BindingFlags.Static)));
        }
示例#3
0
 internal static void PreLoadMods()
 {
     CurrentLoadingStep      = LoadingStep.PRELOAD;
     Console.Console.Reload += Main.Reload;
     foreach (var modid in loadOrder)
     {
         var mod = Mods[modid];
         try
         {
             EnumHolderResolver.RegisterAllEnums(mod.EntryType.Module);
             ConfigManager.PopulateConfigs(mod);
             mod.PreLoad();
         }
         catch (Exception e)
         {
             throw new Exception($"Error pre-loading mod '{modid}'!\n{e.GetType().Name}: {e}");
         }
     }
     IdentifiableRegistry.CategorizeAllIds();
     GadgetRegistry.CategorizeAllIds();
 }
        /// <summary>Registers the item into it's registry</summary>
        public override GadgetItem Register()
        {
            Definition                  = ScriptableObject.CreateInstance <GadgetDefinition>();
            Definition.id               = ID;
            Definition.prefab           = Prefab;
            Definition.icon             = Icon;
            Definition.pediaLink        = PediaID;
            Definition.blueprintCost    = BlueprintCost;
            Definition.craftCosts       = CraftCosts;
            Definition.buyCountLimit    = BuyLimit;
            Definition.countLimit       = CountLimit;
            Definition.countOtherIds    = CountIDs;
            Definition.destroyOnRemoval = DestroyOnRemoval;
            Definition.buyInPairs       = BuyInPairs;

            Build();

            if (IsDefault)
            {
                GadgetRegistry.RegisterDefaultBlueprint(ID);
            }

            if (StartAvailable)
            {
                GadgetRegistry.RegisterDefaultAvailableBlueprint(ID);
            }
            else
            {
                GadgetRegistry.RegisterBlueprintLock(ID, CreateBlueprintLocker);
            }

            GadgetRegistry.ClassifyGadget(ID, Classification);
            LookupRegistry.RegisterGadget(Definition);

            return(this);
        }
示例#5
0
 private static bool IsGuuGadget(Gadget.Id id) => GadgetRegistry.IsGadgetRegistered(id);
示例#6
0
 private static bool IsGuuGadget <V>(KeyValuePair <Gadget.Id, V> pair) => GadgetRegistry.IsGadgetRegistered(pair.Key);