using System.Collections.Generic; using BitStrap; using UnityEngine; using UnityEngine.UI; public class EncyclopediaGUI : MonoBehaviour { public EncyclopediaWidget encyclopediaWidgetPrefab; public Transform widgetsParent; public ScrollRect scrollRectWindow; public float scrollWidgetsOffset = 100f; private Vector2 scrollParentStartPos = Vector2.zero; public bool sortList; public ModelViewerManager modelViewerManager; [Space(10f)] public Text fishNameText; public Text fishDescriptionText; public Text bestMethodsText; public Text bestWeatherText; public Text caughtCountText; public Slider speciesLevelSlider; public Text biggestWeightText; public Text biggestLengthText; public Text biggestFisheryText; [HideInInspector] public FishManager fishManager; [HideInInspector] public List widgetsList = new List(); [HideInInspector] public FishManager.FishDefinition fishDefinition; [ReadOnly] public List fishDefinitions; public List fishSpeciesOrder = new List(); private void Start() { Initialize(FishScopeDropdown.FishScope.ALL); RefreshWidget(widgetsList[0].fishDefinition); } private void OnEnable() { Refresh(); if ((bool)fishManager) { RefreshWidget(widgetsList[0].fishDefinition); } } public void Initialize(FishScopeDropdown.FishScope fishScope) { fishManager = GlobalSettings.Instance.fishManager; foreach (EncyclopediaWidget widgets in widgetsList) { Object.Destroy(widgets.gameObject); } widgetsList.Clear(); speciesLevelSlider.maxValue = FishManager.maxSpeciesLevel; scrollParentStartPos = scrollRectWindow.content.localPosition; scrollRectWindow.content.localPosition = scrollParentStartPos; Canvas.ForceUpdateCanvases(); scrollRectWindow.verticalScrollbar.value = 1f; Canvas.ForceUpdateCanvases(); if (sortList) { fishDefinitions = new List(); for (int i = 0; i < fishSpeciesOrder.Count; i++) { FishManager.FishDefinition fishDefinition = fishManager.GetFishDefinition(fishSpeciesOrder[i]); if (fishDefinition.fromDLC.Count > 0) { if (fishScope == FishScopeDropdown.FishScope.UFS || (fishScope == FishScopeDropdown.FishScope.MORAINE_LAKE && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.MORAINE_LAKE) || (fishScope == FishScopeDropdown.FishScope.KARIBA_DAM && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.KARIBA_DAM) || (fishScope == FishScopeDropdown.FishScope.GREENLAND && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.GREENLAND) || (fishScope == FishScopeDropdown.FishScope.AMAZON_RIVER && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.AMAZON_RIVER) || (fishScope == FishScopeDropdown.FishScope.JAPAN && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.JAPAN) || (fishScope == FishScopeDropdown.FishScope.THAILAND && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.THAILAND) || (fishScope == FishScopeDropdown.FishScope.TANGARIRO && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.TANGARIRO) || (fishScope == FishScopeDropdown.FishScope.FISH_DLC_01 && fishDefinition.fromDLC[0] != DLCManager.DLC_ID.FISH_01)) { continue; } } else if (fishScope != FishScopeDropdown.FishScope.ALL && fishScope != FishScopeDropdown.FishScope.UFS) { continue; } fishDefinitions.Add(fishDefinition); } } else { fishDefinitions = new List(fishManager.fishDefinitions); } int num = 0; for (int j = 0; j < fishDefinitions.Count; j++) { if ((!GlobalSettings.Instance.isDemo || fishDefinitions[j].isInDemo) && (GlobalSettings.Instance.isBeta || !fishDefinitions[j].onlyInBeta) && (fishDefinitions[j].isAvailable || GlobalSettings.Instance.turnOnCheats || fishDefinitions[j].onlyInBeta) && (fishDefinitions[j].isAvailable || fishDefinitions[j].isAvailableFromDLCs || GlobalSettings.Instance.turnOnMyCheats)) { EncyclopediaWidget encyclopediaWidget = Object.Instantiate(encyclopediaWidgetPrefab); encyclopediaWidget.transform.SetParent(widgetsParent); RectTransform component = encyclopediaWidget.GetComponent(); component.localPosition = Vector3.zero + new Vector3(0f, (float)num * (0f - scrollWidgetsOffset), 0f); component.localRotation = Quaternion.identity; component.localScale = Vector3.one; encyclopediaWidget.encyclopediaGUI = this; encyclopediaWidget.SetFish(fishManager.GetFishDefinition(fishDefinitions[j].species)); num++; widgetsList.Add(encyclopediaWidget); } } if (fishDefinitions != null) { fishDefinitions.Clear(); } scrollRectWindow.content.sizeDelta = new Vector2(scrollRectWindow.content.sizeDelta.x, scrollWidgetsOffset * (float)num + scrollWidgetsOffset * 0.25f); Refresh(); scrollRectWindow.verticalNormalizedPosition = 1f; } public void RefreshWidget(FishManager.FishDefinition fishDef) { fishDefinition = fishDef; fishNameText.transform.parent.gameObject.SetActive(fishDefinition != null); if (fishDefinition == null) { return; } fishNameText.text = Utilities.GetTranslation(fishDefinition.fishPrefab.fishName); fishDescriptionText.text = Utilities.GetTranslation(fishDefinition.fishPrefab.fishDescription, true); fishDescriptionText.GetComponent().Fix(); bool flag = false; bestMethodsText.text = Utilities.GetTranslation("GUI/BEST_LURING_METHOD") + ": "; for (int i = 0; i < fishDefinition.fishPrefab.spinningMethodFactor.Count; i++) { if (fishDefinition.fishPrefab.spinningMethodFactor[i] >= 0.5f) { if (flag) { bestMethodsText.text += ", "; } Text text = bestMethodsText; text.text = text.text + string.Empty + SpinningMethodController.GetSpinningMethodName((SpinningMethodController.SpinningMethod)i); flag = true; } } if (!flag) { bestMethodsText.text += Utilities.GetTranslation("GUI/NONE"); } bestWeatherText.text = Utilities.GetTranslation("GUI/WEATHER/BEST_CONDITIONS") + ": "; float num = 0.8f; if (fishDefinition.fishPrefab.timeCurve.Evaluate(5f) >= num) { Text text2 = bestWeatherText; text2.text = text2.text + Utilities.GetTranslation("GUI/WEATHER/MORNING") + ", "; } if (fishDefinition.fishPrefab.timeCurve.Evaluate(12f) >= num) { Text text3 = bestWeatherText; text3.text = text3.text + Utilities.GetTranslation("GUI/WEATHER/NOON") + ", "; } if (fishDefinition.fishPrefab.timeCurve.Evaluate(19f) >= num) { Text text4 = bestWeatherText; text4.text = text4.text + Utilities.GetTranslation("GUI/WEATHER/EVENING") + ", "; } if (fishDefinition.fishPrefab.timeCurve.Evaluate(0f) >= num) { Text text5 = bestWeatherText; text5.text = text5.text + Utilities.GetTranslation("GUI/WEATHER/NIGHT") + ", "; } float num2 = fishDefinition.fishPrefab.windCurve.Evaluate(0f); float num3 = fishDefinition.fishPrefab.windCurve.Evaluate(1f); if (num2 - num3 > 0.3f) { Text text6 = bestWeatherText; text6.text = text6.text + Utilities.GetTranslation("GUI/WEATHER/LIGHT_WIND") + ", "; } else if (num3 - num2 > 0.3f) { Text text7 = bestWeatherText; text7.text = text7.text + Utilities.GetTranslation("GUI/WEATHER/STRONG_WIND") + ", "; } float num4 = fishDefinition.fishPrefab.cloudinessCurve.Evaluate(0f); float num5 = fishDefinition.fishPrefab.cloudinessCurve.Evaluate(1f); if (num4 - num5 > 0.3f) { Text text8 = bestWeatherText; text8.text = text8.text + Utilities.GetTranslation("GUI/WEATHER/CLEAR_SKY") + ", "; } else if (num5 - num4 > 0.3f) { Text text9 = bestWeatherText; text9.text = text9.text + Utilities.GetTranslation("GUI/WEATHER/CLOUDED_SKY") + ", "; } float num6 = fishDefinition.fishPrefab.rainCurve.Evaluate(0f); float num7 = fishDefinition.fishPrefab.rainCurve.Evaluate(1f); if (num6 - num7 > 0.3f) { Text text10 = bestWeatherText; text10.text = text10.text + Utilities.GetTranslation("GUI/WEATHER/NO_RAIN") + ", "; } else if (num7 - num6 > 0.3f) { Text text11 = bestWeatherText; text11.text = text11.text + Utilities.GetTranslation("GUI/WEATHER/RAIN") + ", "; } if (bestWeatherText.text.Length > 2) { bestWeatherText.text = bestWeatherText.text.Remove(bestWeatherText.text.Length - 2, 2); } bestWeatherText.text += "\n"; bestWeatherText.text += bestMethodsText.text; fishDescriptionText.text += "\n\n"; fishDescriptionText.text += bestWeatherText.text; caughtCountText.text = string.Empty + fishDefinition.caughtCount; speciesLevelSlider.value = fishDefinition.caughtCount; speciesLevelSlider.fillRect.gameObject.SetActive((float)fishDefinition.caughtCount > 0f); biggestWeightText.text = string.Empty + ((fishDefinition.length != 0f) ? UtilitiesUnits.GetWeightString(fishDefinition.weight) : " -"); biggestLengthText.text = string.Empty + ((fishDefinition.length != 0f) ? UtilitiesUnits.GetLengthString(fishDefinition.length) : " -"); biggestFisheryText.text = string.Empty + ((fishDefinition.length != 0f) ? Utilities.GetTranslation(fishDefinition.fishery) : " -"); modelViewerManager.InstantiateObject(fishDefinition.fishPrefab.GetComponent(), fishDefinition.fishPrefab.fishName); } public void Refresh() { if (!(fishManager == null)) { for (int i = 0; i < widgetsList.Count; i++) { widgetsList[i].RefreshWidget(); } } } public void ShowFish() { MenuManager.Instance.ChangeState(MenuManager.MenuState.MODEL_VIEWER); } }