static void Postfix(GameplayModifiers gameplayModifiers, GameplayModifierParamsSO ____fasterSong, GameplayModifierParamsSO ____slowerSong, ref List <GameplayModifierParamsSO> __result) { if (gameplayModifiers is CustomGameplayModifiers) { ChallengeModifiers challenge = ((CustomGameplayModifiers)gameplayModifiers).challengeModifiers; if (challenge.songSpeed == GameplayModifiers.SongSpeed.Normal && challenge.speedMul != 1) { GameplayModifierParamsSO speedParamsSo = ScriptableObject.CreateInstance <GameplayModifierParamsSO>(); speedParamsSo.SetPrivateField("_modifierNameLocalizationKey", "Song Speed - " + (int)(challenge.speedMul * 100) + "%"); if (challenge.speedMul < 1) { speedParamsSo.SetPrivateField("_descriptionLocalizationKey", "Song will play slower."); speedParamsSo.SetPrivateField("_icon", ____slowerSong.icon); } else { speedParamsSo.SetPrivateField("_descriptionLocalizationKey", "Song will play faster."); speedParamsSo.SetPrivateField("_icon", ____fasterSong.icon); } __result.Add(speedParamsSo); } if (gameplayModifiers.failOnSaberClash) { __result.Add(APITools.CreateModifierParam(Assets.FailOnClashIcon, "Fail On Saber Clash", "If your sabers touch, you fail.")); } } }
static bool Prefix(MissionLevelDetailViewController __instance, MissionNode ____missionNode, TextMeshProUGUI ____missionText, TextMeshProUGUI ____songNameText, TextMeshProUGUI ____difficultyText, TextMeshProUGUI ____characteristicsText, ObjectiveListItemsList ____objectiveListItems, GameplayModifiersModelSO ____gameplayModifiersModel, GameObject ____modifiersPanelGO, GameplayModifierInfoListItemsList ____gameplayModifierInfoListItemsList) { if (____missionNode.missionData is CustomMissionDataSO) { CustomMissionDataSO missionData = (____missionNode.missionData as CustomMissionDataSO); CustomPreviewBeatmapLevel level = missionData.customLevel; ____missionText.text = Localization.Get("CAMPAIGN_MISSION") + " " + ____missionNode.formattedMissionNodeName; if (level == null) { ____songNameText.text = string.Format(Localization.Get("CAMPAIGN_SONG"), "SONG NOT FOUND"); ____difficultyText.text = string.Format(Localization.Get("CAMPAIGN_DIFFICULTY"), "NOT FOUND"); ____characteristicsText.text = string.Format(Localization.Get("CAMPAIGN_TYPE"), "NOT FOUND"); } else { ____songNameText.text = string.Format(Localization.Get("CAMPAIGN_SONG"), level.songName); ____difficultyText.text = string.Format(Localization.Get("CAMPAIGN_DIFFICULTY"), BeatmapDifficultyMethods.Name(missionData.beatmapDifficulty)); ____characteristicsText.text = string.Format(Localization.Get("CAMPAIGN_TYPE"), Localization.Get(missionData.beatmapCharacteristic.characteristicNameLocalizationKey)); } MissionObjective[] missionObjectives = missionData.missionObjectives; ____objectiveListItems.SetData((missionObjectives.Length == 0) ? 1 : missionObjectives.Length, delegate(int idx, ObjectiveListItem objectiveListItem) { if (idx == 0 && missionObjectives.Length == 0) { objectiveListItem.title = Localization.Get("CAMPAIGN_FINISH_LEVEL"); objectiveListItem.conditionText = ""; objectiveListItem.hideCondition = true; } else { MissionObjective missionObjective = missionObjectives[idx]; if (missionObjective.type.noConditionValue) { objectiveListItem.title = missionObjective.type.objectiveNameLocalized.Replace(" ", "\n"); objectiveListItem.hideCondition = true; } else { objectiveListItem.title = missionObjective.type.objectiveNameLocalized; objectiveListItem.hideCondition = false; ObjectiveValueFormatterSO objectiveValueFormater = missionObjective.type.objectiveValueFormater; objectiveListItem.conditionText = $"{MissionDataExtensions.Name(missionObjective.referenceValueComparisonType)} {objectiveValueFormater.FormatValue(missionObjective.referenceValue)}"; } } }); List <GameplayModifierParamsSO> modifierParamsList = ____gameplayModifiersModel.GetModifierParams(missionData.gameplayModifiers); ____modifiersPanelGO.SetActive(modifierParamsList.Count > 0); ____gameplayModifierInfoListItemsList.SetData(modifierParamsList.Count, delegate(int idx, GameplayModifierInfoListItem gameplayModifierInfoListItem) { GameplayModifierParamsSO gameplayModifierParamsSO = modifierParamsList[idx]; gameplayModifierInfoListItem.modifierIcon = gameplayModifierParamsSO.icon; gameplayModifierInfoListItem.modifierName = Localization.Get(gameplayModifierParamsSO.modifierNameLocalizationKey); gameplayModifierInfoListItem.modifierDescription = Localization.Get(gameplayModifierParamsSO.descriptionLocalizationKey); gameplayModifierInfoListItem.showSeparator = (idx != modifierParamsList.Count - 1); }); return(false); } return(true); }
public void UpdateModifiers() { _gameplayModifierInfoListItemsList.SetData(modifierParamsList.Count, delegate(int idx, GameplayModifierInfoListItem gameplayModifierInfoListItem) { GameplayModifierParamsSO gameplayModifierParamsSO = modifierParamsList[idx]; gameplayModifierInfoListItem.modifierIcon = gameplayModifierParamsSO.icon; gameplayModifierInfoListItem.hoverHintText = Localization.Get(gameplayModifierParamsSO.modifierNameLocalizationKey) + " - " + Localization.Get(gameplayModifierParamsSO.descriptionLocalizationKey); }); }
public static GameplayModifierParamsSO CreateModifierParam(Sprite icon, string title, string desc) { GameplayModifierParamsSO param = ScriptableObject.CreateInstance <GameplayModifierParamsSO>(); param.SetPrivateField("_modifierNameLocalizationKey", title); param.SetPrivateField("_descriptionLocalizationKey", desc); param.SetPrivateField("_icon", icon); return(param); }
static bool Prefix(MissionLevelDetailViewController __instance, MissionNode ____missionNode, LevelBar ____levelBar, ObjectiveListItemsList ____objectiveListItems, GameplayModifiersModelSO ____gameplayModifiersModel, GameObject ____modifiersPanelGO, GameplayModifierInfoListItemsList ____gameplayModifierInfoListItemsList) { if (____missionNode.missionData is CustomMissionDataSO) { CustomMissionDataSO missionData = (____missionNode.missionData as CustomMissionDataSO); CustomPreviewBeatmapLevel level = missionData.customLevel; if (level == null) { // TODO: Localization? ____levelBar.GetPrivateField <TextMeshProUGUI>("_songNameText").text = "SONG NOT FOUND"; ____levelBar.GetPrivateField <TextMeshProUGUI>("_difficultyText").text = "SONG NOT FOUND"; ____levelBar.GetPrivateField <TextMeshProUGUI>("_authorNameText").text = "SONG NOT FOUND"; } else { ____levelBar.Setup(level, missionData.beatmapCharacteristic, missionData.beatmapDifficulty); } MissionObjective[] missionObjectives = missionData.missionObjectives; ____objectiveListItems.SetData((missionObjectives.Length == 0) ? 1 : missionObjectives.Length, delegate(int idx, ObjectiveListItem objectiveListItem) { if (idx == 0 && missionObjectives.Length == 0) { objectiveListItem.title = Localization.Get("CAMPAIGN_FINISH_LEVEL"); objectiveListItem.conditionText = ""; objectiveListItem.hideCondition = true; } else { MissionObjective missionObjective = missionObjectives[idx]; if (missionObjective.type.noConditionValue) { objectiveListItem.title = missionObjective.type.objectiveNameLocalized.Replace(" ", "\n"); objectiveListItem.hideCondition = true; } else { objectiveListItem.title = missionObjective.type.objectiveNameLocalized; objectiveListItem.hideCondition = false; ObjectiveValueFormatterSO objectiveValueFormater = missionObjective.type.objectiveValueFormater; objectiveListItem.conditionText = $"{MissionDataExtensions.Name(missionObjective.referenceValueComparisonType)} {objectiveValueFormater.FormatValue(missionObjective.referenceValue)}"; } } }); List <GameplayModifierParamsSO> modifierParamsList = ____gameplayModifiersModel.GetModifierParams(missionData.gameplayModifiers); ____modifiersPanelGO.SetActive(modifierParamsList.Count > 0); ____gameplayModifierInfoListItemsList.SetData(modifierParamsList.Count, delegate(int idx, GameplayModifierInfoListItem gameplayModifierInfoListItem) { GameplayModifierParamsSO gameplayModifierParamsSO = modifierParamsList[idx]; gameplayModifierInfoListItem.modifierIcon = gameplayModifierParamsSO.icon; gameplayModifierInfoListItem.hoverHintText = Localization.Get(gameplayModifierParamsSO.modifierNameLocalizationKey) + " - " + Localization.Get(gameplayModifierParamsSO.descriptionLocalizationKey); }); return(false); } return(true); }
public override void Instantiate() { if (initialized) { return; } //We have to find our own target //TODO: Clean up time complexity issue. This is called for each new option SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First(); GameplaySetupViewController gsvc = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController"); RectTransform container = (RectTransform)gsvc.transform.Find("GameplayModifiers").Find("RightColumn"); gameObject = UnityEngine.Object.Instantiate(container.Find("NoFail").gameObject, container); gameObject.name = optionName; gameObject.layer = container.gameObject.layer; gameObject.transform.parent = container; gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localScale = Vector3.one; gameObject.transform.rotation = Quaternion.identity; gameObject.SetActive(false); var gmt = gameObject.GetComponent <GameplayModifierToggle>(); if (gmt != null) { gmt.toggle.isOn = GetValue; gmt.toggle.onValueChanged.RemoveAllListeners(); gmt.toggle.onValueChanged.AddListener((bool e) => { OnToggle?.Invoke(e); }); GameplayModifierParamsSO _gameplayModifier = new GameplayModifierParamsSO(); _gameplayModifier.SetPrivateField("_modifierName", optionName); _gameplayModifier.SetPrivateField("_hintText", hintText); _gameplayModifier.SetPrivateField("_multiplier", 0.0f); _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? gmt.GetPrivateField <GameplayModifierParamsSO>("_gameplayModifier").icon : optionIcon); gmt.SetPrivateField("_gameplayModifier", _gameplayModifier); if (hintText != String.Empty) { var hoverHint = gmt.GetPrivateField <HoverHint>("_hoverHint"); hoverHint.text = hintText; hoverHint.name = optionName; hoverHint.enabled = true; var hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); } } initialized = true; }
public override void Instantiate() { gameObject = UnityEngine.Object.Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifierToggle>().Where(g => g.transform.Find("BG"))?.Last().gameObject, Container); gameObject.name = optionName; gameObject.layer = Container.gameObject.layer; gameObject.transform.SetParent(Container); gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localScale = Vector3.one; gameObject.transform.rotation = Quaternion.identity; gameObject.SetActive(false); // Add a separator for this menu option AddSeparator(Container); // Remove the multiplier text if the toggle has no multiplier if (multiplier == 0) { gameObject.AddComponent <ToggleNameOverride>(); } var currentToggle = gameObject.GetComponent <GameplayModifierToggle>(); if (currentToggle != null) { currentToggle.toggle.isOn = GetValue; currentToggle.toggle.onValueChanged.RemoveAllListeners(); currentToggle.toggle.onValueChanged.AddListener((bool e) => OnToggle?.Invoke(e)); currentToggle.name = optionName; GameplayModifierParamsSO _gameplayModifier = ScriptableObject.CreateInstance <GameplayModifierParamsSO>(); _gameplayModifier.SetPrivateField("_modifierName", optionName); _gameplayModifier.SetPrivateField("_hintText", hintText); _gameplayModifier.SetPrivateField("_multiplier", multiplier); _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? UIUtilities.BlankSprite : optionIcon); currentToggle.SetPrivateField("_gameplayModifier", _gameplayModifier); if (hintText != String.Empty) { HoverHint hoverHint = currentToggle.GetPrivateField <HoverHint>("_hoverHint"); hoverHint.text = hintText; hoverHint.name = optionName; HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); } } initialized = true; }
public void UpdateModifiers() { _pageDownModifiersButton.gameObject.SetActive(modifierParamsPageNumber * 2 < modifierParamsList.Count - 1); if (modifierParamsList.Count <= 2) { _pageDownModifiersButton.gameObject.SetActive(false); } _pageUpModifiersButton.gameObject.SetActive(modifierParamsPageNumber != 0); _pageDownModifiersButton.interactable = true; _pageUpModifiersButton.interactable = true; _gameplayModifierInfoListItemsList.SetData(modifierParamsPageNumber * 2 == modifierParamsList.Count - 1? 1 : Math.Min(2, modifierParamsList.Count), delegate(int idx, GameplayModifierInfoListItem gameplayModifierInfoListItem) { GameplayModifierParamsSO gameplayModifierParamsSO = modifierParamsList[modifierParamsPageNumber * 2 + idx]; gameplayModifierInfoListItem.modifierIcon = gameplayModifierParamsSO.icon; gameplayModifierInfoListItem.hoverHintText = Localization.Get(gameplayModifierParamsSO.modifierNameLocalizationKey) + " - " + Localization.Get(gameplayModifierParamsSO.descriptionLocalizationKey); }); }
public override void Instantiate() { //We have to find our own target //TODO: Clean up time complexity issue. This is called for each new option SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First(); GameplaySetupViewController gsvc = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController"); RectTransform container = (RectTransform)gsvc.transform.Find(pageName).Find(panelName); gameObject = UnityEngine.Object.Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifierToggle>().Where(g => g.transform.Find("BG"))?.Last().gameObject, container); gameObject.name = optionName; gameObject.layer = container.gameObject.layer; gameObject.transform.SetParent(container); gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localScale = Vector3.one; gameObject.transform.rotation = Quaternion.identity; gameObject.SetActive(false); foreach (Transform t in container) { if (t.name.StartsWith("Separator")) { separator = UnityEngine.Object.Instantiate(t.gameObject, container); separator.name = "ExtraSeparator"; separator.SetActive(false); break; } } string ConflictText = "\r\n\r\n<size=60%><color=#ff0000ff><b>Conflicts </b></color>"; var currentToggle = gameObject.GetComponent <GameplayModifierToggle>(); if (currentToggle != null) { currentToggle.toggle.isOn = GetValue; currentToggle.toggle.onValueChanged.RemoveAllListeners(); currentToggle.toggle.onValueChanged.AddListener((bool e) => OnToggle?.Invoke(e)); currentToggle.name = optionName.Replace(" ", ""); GameplayModifierToggle[] gameplayModifierToggles = Resources.FindObjectsOfTypeAll <GameplayModifierToggle>(); if (conflicts.Count > 0) { hintText += ConflictText; foreach (string conflict in conflicts) { var conflictingModifier = gameplayModifierToggles.Where(t => t?.gameplayModifier?.modifierName == conflict).FirstOrDefault(); if (conflictingModifier) { if (!hintText.Contains(ConflictText)) { hintText += ConflictText; } hintText += Char.ConvertFromUtf32((char)0xE069) + conflict + Char.ConvertFromUtf32((char)0xE069); } } } GameplayModifierParamsSO _gameplayModifier = new GameplayModifierParamsSO(); _gameplayModifier.SetPrivateField("_modifierName", optionName); _gameplayModifier.SetPrivateField("_hintText", hintText); _gameplayModifier.SetPrivateField("_multiplier", multiplier); _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? UIUtilities.BlankSprite : optionIcon); currentToggle.SetPrivateField("_gameplayModifier", _gameplayModifier); string currentDisplayName = Char.ConvertFromUtf32((char)0xE069) + optionName + Char.ConvertFromUtf32((char)0xE069); foreach (string conflictingModifierName in conflicts) { GameplayModifierToggle conflictToggle = gameplayModifierToggles.Where(t => t?.gameplayModifier?.modifierName == conflictingModifierName).FirstOrDefault(); if (conflictToggle) { if (!conflictToggle.gameplayModifier.hintText.Contains(ConflictText)) { conflictToggle.gameplayModifier.SetPrivateField("_hintText", conflictToggle.gameplayModifier.hintText + ConflictText); } if (!conflictToggle.gameplayModifier.hintText.Contains(currentDisplayName)) { conflictToggle.gameplayModifier.SetPrivateField("_hintText", conflictToggle.gameplayModifier.hintText + currentDisplayName); } conflictToggle.toggle.onValueChanged.AddListener((e) => { if (e) { currentToggle.toggle.isOn = false; } }); currentToggle.toggle.onValueChanged.AddListener((e) => { if (e) { conflictToggle.toggle.isOn = false; } }); } } if (hintText != String.Empty) { HoverHint hoverHint = currentToggle.GetPrivateField <HoverHint>("_hoverHint"); hoverHint.text = hintText; hoverHint.name = optionName; HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First(); hoverHint.SetPrivateField("_hoverHintController", hoverHintController); } } initialized = true; }