309 lines
7.0 KiB
C#
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);
|
|
}
|
|
}
|