コード例 #1
0
        private static DiContainer GetContainer(GameplayCoreInstaller gameplayCoreInstaller)
        {
            MonoInstallerBase monoInstaller = gameplayCoreInstaller;
            DiContainer       container     = GetDiContainer(ref monoInstaller);

            return(container);
        }
コード例 #2
0
ファイル: SaberBindPatch.cs プロジェクト: ErisApps/SiraUtil
            private static DiContainer GetContainer(GameCoreSceneSetup gameCoreSceneSetup)
            {
                MonoInstallerBase monoInstaller = gameCoreSceneSetup;
                DiContainer       container     = Zenject.Installer.AccessDiContainer(ref monoInstaller);

                return(container);
            }
コード例 #3
0
        internal static void Postfix(MultiplayerCoreInstaller __instance)
        {
            MonoInstallerBase         mib       = __instance;
            DiContainer               container = SiraUtil.Accessors.GetDiContainer(ref mib);
            MultiplayerPlayersManager manager   = container.Resolve <MultiplayerPlayersManager>();

            MultiplayerConnectedPlayerFacade playerFacade     = PlayerFacade(ref manager);
            MultiplayerConnectedPlayerFacade duelPlayerFacade = PlayerDuelFacade(ref manager);

            SetupPoseController(playerFacade);
            SetupPoseController(duelPlayerFacade);
        }
コード例 #4
0
ファイル: Installer.cs プロジェクト: ErisApps/SiraUtil
        internal static void InstallFromBase(MonoBehaviour source, HashSet <Type> installers, HashSet <ISiraInstaller> siraInstallers, bool isApp = false)
        {
            Plugin.Log.Debug("Install Analysis for " + source.name);
            Plugin.Log.Debug($"   --> NonSira Count: {installers.Count}");
            Plugin.Log.Debug($"   --> Sira Count: {siraInstallers.Count}");
            Plugin.Log.Debug($"   --> Is In App: {(isApp ? "Yes" : "No")}");
            // Convert the main installer to a MonoInstaller base
            MonoInstallerBase monoInstaller = source as MonoInstallerBase;

            // Store its DiContainer reference
            DiContainer container = AccessDiContainer(ref monoInstaller);

            // Inject the mono installers
            foreach (Type t in installers)
            {
                var attr = t.GetCustomAttribute <RequiresInstallerAttribute>();
                if (attr != null && attr is RequiresInstallerAttribute requireInstallerAttr)
                {
                    if (!_installedInstallers.Contains(requireInstallerAttr.RequiredInstaller))
                    {
                        Plugin.Log.Warn($"Not installing {t.FullName} since it's missing the installer dependency {requireInstallerAttr.RequiredInstaller.FullName}");
                        continue;
                    }
                }

                Plugin.Log.Debug("Installing: " + t.FullName);
                if (t.IsSubclassOf(typeof(MonoBehaviour)))
                {
                    Plugin.Log.Debug("   --> is a MonoInstaller");
                    // Create the mono installer's game object.
                    MonoInstallerBase injectingInstallerBase = source.gameObject.AddComponent(t) as MonoInstallerBase;

                    Plugin.Log.Debug("   --> is swapping container");
                    // Replace the container from the mod with the one from the source installer.
                    SetDiContainer(ref injectingInstallerBase, container);

                    Plugin.Log.Debug("   --> is forcing install");
                    // Force install their bindings with the source's DiContainer
                    injectingInstallerBase.InstallBindings();
                }
                else
                {
                    Plugin.Log.Debug("   --> is generic");
                    _installMethod.MakeGenericMethod(t).Invoke(container, null);
                }
                if (isApp && !_installedInstallers.Contains(t))
                {
                    _installedInstallers.Add(t);
                }
            }

            foreach (ISiraInstaller si in siraInstallers)
            {
                Plugin.Log.Debug("Installing: " + si.GetType().FullName);
                var attr = si.GetType().GetCustomAttribute <RequiresInstallerAttribute>();
                if (attr != null && attr is RequiresInstallerAttribute requireInstallerAttr)
                {
                    if (!_installedInstallers.Contains(requireInstallerAttr.RequiredInstaller))
                    {
                        Plugin.Log.Warn($"Not installing {si.GetType().FullName} since it's missing the installer dependency {requireInstallerAttr.RequiredInstaller.FullName}");
                        continue;
                    }
                }
                Plugin.Log.Debug("   --> is SiraInstaller");
                Plugin.Log.Debug("   --> is forcing install");
                si.Install(container, source.gameObject);
                if (isApp)
                {
                    _installedInstallers.Add(si.GetType());
                }
            }
        }