static bool Prefix(ref GameCoreSceneSetup __instance, ref GameplayCoreSceneSetupData ____sceneSetupData) { IDifficultyBeatmap difficultyBeatmap = ____sceneSetupData.difficultyBeatmap; IReadOnlyList <BeatmapEventData> beatmapEventData = difficultyBeatmap.beatmapData.beatmapEventsData; SpawnRotationProcessor rotProcessor = new SpawnRotationProcessor(); bool is360 = false; foreach (BeatmapEventData beatmapEvent in beatmapEventData) { if (beatmapEvent.type != BeatmapEventType.Event14 && beatmapEvent.type != BeatmapEventType.Event15) { continue; } if (rotProcessor.RotationForEventValue(beatmapEvent.value) != 0) { is360 = true; break; } } if (!is360) { IPAUtils.SetProperty <BeatmapData, int>(difficultyBeatmap.beatmapData, "spawnRotationEventsCount", 0); } return(true); }
private static DiContainer GetContainer(GameCoreSceneSetup gameCoreSceneSetup) { MonoInstallerBase monoInstaller = gameCoreSceneSetup; DiContainer container = Zenject.Installer.AccessDiContainer(ref monoInstaller); return(container); }
public static void Prefix(ref GameCoreSceneSetup __instance, ref BasicSaberModelController ____basicSaberModelControllerPrefab) { // Borrow the XWeaponTrail and expose it to Zenject ;) var trail = ____basicSaberModelControllerPrefab.GetField <XWeaponTrail, BasicSaberModelController>("_saberWeaponTrail"); var container = GetContainer(__instance); container.Bind <XWeaponTrail>().FromComponentOn(trail.gameObject).AsTransient(); }
private static void ConditionalModelControllerBind(GameCoreSceneSetup gameCoreSceneSetup) { if (SaberModelProvider.providers.Count == 0) { var modelController = gameCoreSceneSetup.GetField <BasicSaberModelController, GameCoreSceneSetup>("_basicSaberModelControllerPrefab"); if (modelController != null) { var container = GetContainer(gameCoreSceneSetup); container.Bind <ISaberModelController>().FromComponentInNewPrefab(modelController).AsTransient(); } } }
public static void Postfix(ref GameCoreSceneSetup __instance) { var container = GetContainer(__instance); var topProvider = SaberModelProvider.providers.OrderByDescending(q => q.Priority).FirstOrDefault(); if (topProvider != null) { if (topProvider.ModelController is MonoBehaviour mbtp) { container.Bind <ISaberModelController>().FromComponentInNewPrefab(mbtp).AsTransient(); } else { container.Bind <ISaberModelController>().FromInstance(topProvider.ModelController).AsTransient(); } } }