255 lines
9.3 KiB
C#
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);
|
|
}
|
|
}
|