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 _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(); 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 list = new List(); list.Add(Utilities.GetTranslation("GUI/AQUARIUM/ALL")); list.Add(Utilities.GetTranslation("GUI/AQUARIUM/KEEP")); list.Add(Utilities.GetTranslation("GUI/AQUARIUM/AQUARIUM")); List 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); } }