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

309 lines
7.0 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class UIManageAquarium : MonoBehaviour
{
[SerializeField]
private Text _nameText;
[SerializeField]
private UIFish _fishPrefab;
[SerializeField]
private Transform _fishContainer;
[SerializeField]
private Dropdown _fishTypeDropdown;
[SerializeField]
private Toggle _waterFilterToggle;
[SerializeField]
private Toggle _fishMatchingToggle;
[SerializeField]
private UIFishInfo _fishInfo;
[SerializeField]
private GameObject _saltwaterToggleLabel;
[SerializeField]
private GameObject _freshwaterToggleLabel;
[SerializeField]
private Text _fishCountText;
[SerializeField]
private Text _fishMaxWeightText;
[SerializeField]
private GameObject _cheatButtons;
[SerializeField]
private int _defaultDropdownValue;
[SerializeField]
private bool _defaultWaterToggle;
private AquariumController _aquarium;
private List<UIFish> _fishKeep;
public void Initialize()
{
_cheatButtons.SetActive(GlobalSettings.Instance == null || GlobalSettings.Instance.turnOnCheats);
if (_fishKeep != null)
{
foreach (UIFish item in _fishKeep)
{
Object.Destroy(item.gameObject);
}
}
_fishKeep = new List<UIFish>();
foreach (FishManager.FishKept item2 in GlobalSettings.Instance.fishManager.fishKeep)
{
UIFish uIFish = Object.Instantiate(_fishPrefab, _fishContainer);
uIFish.Initialize(item2, OnFishClicked);
uIFish.gameObject.SetActive(false);
_fishKeep.Add(uIFish);
}
_fishTypeDropdown.ClearOptions();
List<string> list = new List<string>();
list.Add(Utilities.GetTranslation("GUI/AQUARIUM/ALL"));
list.Add(Utilities.GetTranslation("GUI/AQUARIUM/KEEP"));
list.Add(Utilities.GetTranslation("GUI/AQUARIUM/AQUARIUM"));
List<string> options = list;
_fishTypeDropdown.AddOptions(options);
_fishTypeDropdown.value = _defaultDropdownValue;
_waterFilterToggle.isOn = _defaultWaterToggle;
}
public void Show(AquariumController aquarium)
{
_aquarium = aquarium;
_nameText.text = aquarium.Settings.name;
_fishMaxWeightText.text = UtilitiesUnits.GetWeightString(aquarium.Settings.fishLimitWeight);
_saltwaterToggleLabel.SetActive(aquarium.Settings.waterType == AquariumWaterType.Saltwater);
_freshwaterToggleLabel.SetActive(aquarium.Settings.waterType == AquariumWaterType.Freshwater);
_fishInfo.Hide();
UpdateFishCount();
foreach (UIFish item in _fishKeep)
{
item.UpdateMatched(_aquarium.Settings);
}
FilterVisibleFish();
SortFish();
base.gameObject.SetActive(true);
}
public void SetAquarium(AquariumController aquarium)
{
_aquarium = aquarium;
}
public UIFish GetFish(FishManager.FishKept fish)
{
return _fishKeep.First((UIFish x) => x.FishKept.instanceID == fish.instanceID);
}
private void UpdateFishCount()
{
_fishCountText.text = string.Format("{0}/{1}", _aquarium.Settings.currentFishCount, _aquarium.Settings.fishLimitCount);
}
private void FilterVisibleFish()
{
foreach (UIFish item in _fishKeep)
{
item.gameObject.SetActive(IsFishTypeMatch(item));
}
}
private void SortFish()
{
_fishKeep.Sort(delegate(UIFish first, UIFish second)
{
int num = first.isMatched.CompareTo(second.isMatched);
if (num != 0)
{
return num;
}
bool flag = first.FishKept.aquarium == -1;
bool value = second.FishKept.aquarium == -1;
int num2 = flag.CompareTo(value);
if (num2 != 0)
{
return num2;
}
bool flag2 = ((!first.FishKept.isSaltwater) ? (_aquarium.Settings.waterType == AquariumWaterType.Freshwater) : (_aquarium.Settings.waterType == AquariumWaterType.Saltwater));
bool value2 = ((!second.FishKept.isSaltwater) ? (_aquarium.Settings.waterType == AquariumWaterType.Freshwater) : (_aquarium.Settings.waterType == AquariumWaterType.Saltwater));
int num3 = flag2.CompareTo(value2);
return (num3 != 0) ? num3 : first.FishKept.species.ToString().CompareTo(second.FishKept.species.ToString());
});
foreach (UIFish item in _fishKeep)
{
item.transform.SetAsFirstSibling();
}
}
private bool IsFishTypeMatch(UIFish fish)
{
switch (_fishTypeDropdown.value)
{
default:
return fish.FishKept.aquarium == _aquarium.Settings.id || fish.FishKept.aquarium == -1;
case 1:
return fish.isMatched && fish.FishKept.aquarium == -1;
case 2:
return fish.FishKept.aquarium == _aquarium.Settings.id;
}
}
private bool IsFishWaterMatch(FishManager.FishKept fish)
{
if (!_waterFilterToggle.isOn)
{
return true;
}
if (fish.isSaltwater)
{
return _aquarium.Settings.waterType == AquariumWaterType.Saltwater;
}
return _aquarium.Settings.waterType == AquariumWaterType.Freshwater;
}
private bool IsFishMatching(FishManager.FishKept fish)
{
if (!_fishMatchingToggle.isOn)
{
return true;
}
bool flag = ((!fish.isSaltwater) ? (_aquarium.Settings.waterType == AquariumWaterType.Freshwater) : (_aquarium.Settings.waterType == AquariumWaterType.Saltwater));
bool flag2 = fish.weight <= (float)_aquarium.Settings.fishLimitWeight;
return flag && flag2;
}
private bool IsAquariumMatch(FishManager.FishKept fish)
{
return fish.aquarium == _aquarium.Settings.id || fish.aquarium == -1;
}
public void Hide()
{
base.gameObject.SetActive(false);
}
public void OnFishTypeChanged(int value)
{
if (_aquarium != null)
{
FilterVisibleFish();
}
}
public void OnWaterFilterChanged(bool value)
{
if (_aquarium != null)
{
FilterVisibleFish();
}
}
public void OnMatchingFilterChanged(bool value)
{
if (_aquarium != null)
{
FilterVisibleFish();
}
}
public void OnEdit()
{
_aquarium.OnRemakeAquarium();
}
public void OnClose()
{
_aquarium.OnCloaseManageAquarium();
}
public void OnSellFish(UIFish fish)
{
_aquarium.OnSellFish(fish.FishKept);
_fishKeep.Remove(fish);
Object.Destroy(fish.gameObject);
UpdateFishCount();
}
public void OnRemoveFish(UIFish fish)
{
_aquarium.OnRemoveFromAquarium(fish.FishKept);
SortFish();
FilterVisibleFish();
UpdateFishCount();
fish.UpdateState();
_fishInfo.ShowFish(fish, _aquarium);
}
public void OnInspectFish(UIFish fish)
{
_aquarium.OnInspectFish(fish.FishKept);
}
public void OnInspectNextFish()
{
_aquarium.InspectNeighbourFish(true);
}
public void OnInspectPreviousFish()
{
_aquarium.InspectNeighbourFish(false);
}
public void OnPutInAquariumFish(UIFish fish)
{
_aquarium.OnPutInTheAquarium(fish.FishKept);
SortFish();
FilterVisibleFish();
UpdateFishCount();
fish.UpdateState();
_fishInfo.ShowFish(fish, _aquarium);
}
public void OnAddAllFishMaxSize()
{
AquariumUtilities.AddEachSpecie(1, 1f);
Initialize();
Show(_aquarium);
}
public void OnAddAllFishMinSize()
{
AquariumUtilities.AddEachSpecie(1, 0f);
Initialize();
Show(_aquarium);
}
public void OnAddAllFishRandomSize()
{
AquariumUtilities.AddEachSpecie(1, -1f);
Initialize();
Show(_aquarium);
}
public void OnRemoveAllFish()
{
AquariumUtilities.RemoveAllFish();
_aquarium.RemoveAllFish();
Initialize();
Show(_aquarium);
}
private void OnFishClicked(UIFish fish)
{
_fishInfo.ShowFish(fish, _aquarium);
}
}