Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/EncyclopediaGUI.cs
2026-02-21 16:45:37 +08:00

255 lines
9.3 KiB
C#

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<EncyclopediaWidget> widgetsList = new List<EncyclopediaWidget>();
[HideInInspector]
public FishManager.FishDefinition fishDefinition;
[ReadOnly]
public List<FishManager.FishDefinition> fishDefinitions;
public List<Fish.Species> fishSpeciesOrder = new List<Fish.Species>();
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<FishManager.FishDefinition>();
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.FishDefinition>(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<RectTransform>();
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<FixLineBreaks>().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<ModelViewerObject>(), 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);
}
}