Files
2026-02-21 16:45:37 +08:00

412 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using BitStrap;
using UnityEngine;
public class FishManager : MonoBehaviour
{
[Serializable]
public class FishDefinition
{
public Fish.Species species = Fish.Species.AMBERJACK;
public Fish fishPrefab;
public Sprite icon;
public int caughtCount;
[ReadOnly]
public float caughtWeightSum;
public float weight;
public float length;
[ReadOnly]
public string fishery = string.Empty;
public string bait = string.Empty;
public string weather = string.Empty;
[ReadOnly]
public string equipment = string.Empty;
public bool isInDemo;
public bool onlyInBeta;
public bool isAvailable = true;
public bool isAvailableFromDLCs = true;
public List<DLCManager.DLC_ID> fromDLC = new List<DLCManager.DLC_ID>();
}
[Serializable]
public class FishKept
{
public Fish.Species species = Fish.Species.AMBERJACK;
public float weight;
public float length;
public string fishery = string.Empty;
public int aquarium = -1;
public bool isSaltwater { get; private set; }
public Guid instanceID { get; private set; }
public FishKept(Fish.Species species, float weight, float length, string fishery, int aquarium = -1)
{
this.species = species;
this.weight = weight;
this.length = length;
this.fishery = fishery;
this.aquarium = aquarium;
isSaltwater = GetFishDefinition().fishPrefab.GetComponent<Fish>().isSaltwater;
instanceID = Guid.NewGuid();
}
public FishDefinition GetFishDefinition()
{
return GlobalSettings.Instance.fishManager.GetFishDefinition(species);
}
}
[Serializable]
public class AquariumData
{
public int id = -1;
public string name = string.Empty;
public int waterType = -1;
public int enviroPreset = -1;
}
public static int maxSpeciesLevel = 20;
public List<FishDefinition> fishDefinitions = new List<FishDefinition>();
public List<FishKept> fishKeep = new List<FishKept>();
public int fishKeptCount;
public List<AquariumData> aquariums = new List<AquariumData>();
public int aquariumsCount;
public List<Vector2> baitToFishSize = new List<Vector2>();
public List<Vector2> hookToFishWeight = new List<Vector2>();
public List<Vector2> lureToFishWeight = new List<Vector2>();
public List<Vector2> flyToFishWeight = new List<Vector2>();
public FishDefinition GetFishDefinition(Fish.Species species)
{
for (int i = 0; i < fishDefinitions.Count; i++)
{
if (fishDefinitions[i].species == species)
{
return fishDefinitions[i];
}
}
return null;
}
public void AddSpeciesLevel(Fish fish)
{
FishDefinition fishDefinition = GetFishDefinition(fish.species);
fishDefinition.caughtCount++;
fishDefinition.caughtWeightSum += fish.Weight;
Save();
}
public bool IsFishBigger(Fish fish)
{
FishDefinition fishDefinition = GetFishDefinition(fish.species);
return fish.Weight > fishDefinition.weight;
}
public void ChangeFishBigger(Fish fish, string fishery)
{
FishDefinition fishDefinition = GetFishDefinition(fish.species);
if (!(fish.Weight <= fishDefinition.weight))
{
Debug.Log("New bigger fish: " + Utilities.GetTranslation(fish.fishName) + " fish.Weight: " + fish.Weight + " prev.Weight: " + fishDefinition.weight);
fishDefinition.weight = fish.Weight;
fishDefinition.length = fish.Length;
fishDefinition.fishery = fishery;
Save();
}
}
public Vector2 GetFishLevelSize(Fish.Species species)
{
float num = GetFishDefinition(species).caughtCount;
Vector2 one = Vector2.one;
one.x = Mathf.Lerp(0f, 0.1f, num / (float)maxSpeciesLevel);
one.y = Mathf.Lerp(0.7f, 1f, num / (float)maxSpeciesLevel);
return one;
}
public string GetFishName(Fish.Species species)
{
FishDefinition fishDefinition = GetFishDefinition(species);
if (fishDefinition != null && (bool)fishDefinition.fishPrefab)
{
return Utilities.GetTranslation(fishDefinition.fishPrefab.fishName);
}
return string.Empty;
}
[Button]
public void IncAllSpeciesLevels()
{
foreach (FishDefinition fishDefinition in fishDefinitions)
{
}
}
[Button]
public void DecAllSpeciesLevels()
{
foreach (FishDefinition fishDefinition in fishDefinitions)
{
}
}
public int GetTotalFishCount()
{
int num = 0;
for (int i = 0; i < fishDefinitions.Count; i++)
{
num += fishDefinitions[i].caughtCount;
}
return num;
}
public float GetTotalFishWeight()
{
float num = 0f;
for (int i = 0; i < fishDefinitions.Count; i++)
{
num += fishDefinitions[i].caughtWeightSum;
}
return num;
}
public FishDefinition GetBiggestFishDefinition()
{
FishDefinition fishDefinition = null;
float num = 0f;
for (int i = 0; i < fishDefinitions.Count; i++)
{
if (fishDefinitions[i].caughtCount > 0 && fishDefinitions[i].weight > num)
{
fishDefinition = fishDefinitions[i];
num = fishDefinitions[i].weight;
}
}
if (fishDefinition != null)
{
}
return fishDefinition;
}
public void KeepFish(Fish fish, string fishery)
{
FishKept item = new FishKept(fish.species, fish.Weight, fish.Length, fishery);
fishKeep.Add(item);
SaveFishKeep();
}
public void SaveAquarium(AquariumSettings aquariumSettings)
{
foreach (AquariumData aquarium in aquariums)
{
if (aquarium.id == aquariumSettings.id)
{
aquarium.name = aquariumSettings.name;
aquarium.waterType = (int)aquariumSettings.waterType;
aquarium.enviroPreset = aquariumSettings.enviroPreset;
SaveFishKeep();
return;
}
}
AquariumData aquariumData = new AquariumData();
aquariumData.id = aquariumSettings.id;
aquariumData.name = aquariumSettings.name;
aquariumData.waterType = (int)aquariumSettings.waterType;
aquariumData.enviroPreset = aquariumSettings.enviroPreset;
AquariumData item = aquariumData;
aquariums.Add(item);
SaveFishKeep();
}
[Button]
public void UpdateDLCSettings()
{
for (int i = 0; i < fishDefinitions.Count; i++)
{
if (fishDefinitions[i].fromDLC.Count > 0)
{
fishDefinitions[i].isAvailableFromDLCs = DLCManager.Instance.IsAnyDLCInstalled(fishDefinitions[i].fromDLC);
}
else
{
fishDefinitions[i].isAvailableFromDLCs = fishDefinitions[i].isAvailable;
}
}
}
[Button]
public void Save()
{
string currentProfilePrefix = GlobalSettings.Instance.saveManager.GetCurrentProfilePrefix();
if (string.IsNullOrEmpty(currentProfilePrefix))
{
Debug.LogError("Couldn't get current profile prefix", this);
return;
}
using (ES2Writer eS2Writer = ES2Writer.Create(currentProfilePrefix))
{
foreach (FishDefinition fishDefinition in fishDefinitions)
{
eS2Writer.Write(fishDefinition.weight, fishDefinition.species.ToString() + "_weight");
eS2Writer.Write(fishDefinition.length, fishDefinition.species.ToString() + "_length");
eS2Writer.Write(fishDefinition.fishery, fishDefinition.species.ToString() + "_fishery");
eS2Writer.Write(fishDefinition.caughtCount, fishDefinition.species.ToString() + "_caughtCount");
eS2Writer.Write(fishDefinition.caughtWeightSum, fishDefinition.species.ToString() + "_caughtWeightSum");
}
try
{
eS2Writer.Save();
}
catch (Exception exception)
{
Debug.LogException(exception, this);
}
Debug.Log("Save FishManager");
}
SaveFishKeep();
}
public void SaveFishKeep()
{
string currentProfilePrefix = GlobalSettings.Instance.saveManager.GetCurrentProfilePrefix();
if (string.IsNullOrEmpty(currentProfilePrefix))
{
Debug.LogError("Couldn't get current profile prefix", this);
return;
}
using (ES2Writer eS2Writer = ES2Writer.Create(currentProfilePrefix))
{
eS2Writer.Write(fishKeep.Count, "fishKept_count");
for (int i = 0; i < fishKeep.Count; i++)
{
eS2Writer.Write(fishKeep[i].length, "fishKept_length_" + i);
eS2Writer.Write(fishKeep[i].weight, "fishKept_weight_" + i);
eS2Writer.Write((int)fishKeep[i].species, "fishKept_species_" + i);
eS2Writer.Write(fishKeep[i].fishery, "fishKept_fishery_" + i);
eS2Writer.Write(fishKeep[i].aquarium, "fishKept_aquarium_" + i);
}
eS2Writer.Write(aquariums.Count, "aquariums_count");
for (int j = 0; j < aquariums.Count; j++)
{
eS2Writer.Write(aquariums[j].id, "aquarium_id_" + j);
eS2Writer.Write(aquariums[j].name, "aquarium_name_" + j);
eS2Writer.Write(aquariums[j].waterType, "aquarium_water_" + j);
eS2Writer.Write(aquariums[j].enviroPreset, "aquarium_enviro_" + j);
}
try
{
eS2Writer.Save();
}
catch (Exception exception)
{
Debug.LogException(exception, this);
}
Debug.Log("Save FishManager.SaveFishKeep");
}
}
[Button]
public void Load()
{
string currentProfilePrefix = GlobalSettings.Instance.saveManager.GetCurrentProfilePrefix();
if (string.IsNullOrEmpty(currentProfilePrefix))
{
Debug.LogError("Couldn't get current profile prefix", this);
return;
}
using (ES2Reader reader = ES2Reader.Create(currentProfilePrefix))
{
foreach (FishDefinition fishDefinition in fishDefinitions)
{
fishDefinition.weight = SaveManager.Read(reader, fishDefinition.species.ToString() + "_weight", 0f);
fishDefinition.length = SaveManager.Read(reader, fishDefinition.species.ToString() + "_length", 0f);
fishDefinition.fishery = SaveManager.Read(reader, fishDefinition.species.ToString() + "_fishery", string.Empty);
fishDefinition.caughtCount = SaveManager.Read(reader, fishDefinition.species.ToString() + "_caughtCount", 0);
fishDefinition.caughtWeightSum = SaveManager.Read(reader, fishDefinition.species.ToString() + "_caughtWeightSum", 0f);
if (fishDefinition.caughtCount > 0)
{
fishDefinition.weight = Mathf.Clamp(fishDefinition.weight, fishDefinition.fishPrefab.WeightMinMax.x, fishDefinition.fishPrefab.WeightMinMax.y);
fishDefinition.length = Mathf.Clamp(fishDefinition.length, fishDefinition.fishPrefab.LengthMinMax.x, fishDefinition.fishPrefab.LengthMinMax.y);
}
else
{
fishDefinition.weight = 0f;
fishDefinition.length = 0f;
}
}
fishKeep.Clear();
fishKeptCount = SaveManager.Read(reader, "fishKept_count", 0);
for (int i = 0; i < fishKeptCount; i++)
{
float length = SaveManager.Read(reader, "fishKept_length_" + i, 0f);
float weight = SaveManager.Read(reader, "fishKept_weight_" + i, 0f);
Fish.Species species = (Fish.Species)SaveManager.Read(reader, "fishKept_species_" + i, 0);
string fishery = SaveManager.Read(reader, "fishKept_fishery_" + i, string.Empty);
int aquarium = SaveManager.Read(reader, "fishKept_aquarium_" + i, -1);
FishKept item = new FishKept(species, weight, length, fishery, aquarium);
fishKeep.Add(item);
}
aquariums.Clear();
aquariumsCount = SaveManager.Read(reader, "aquariums_count", 0);
for (int j = 0; j < aquariumsCount; j++)
{
AquariumData aquariumData = new AquariumData();
aquariumData.id = SaveManager.Read(reader, "aquarium_id_" + j, -1);
aquariumData.name = SaveManager.Read(reader, "aquarium_name_" + j, string.Empty);
aquariumData.waterType = SaveManager.Read(reader, "aquarium_water_" + j, -1);
aquariumData.enviroPreset = SaveManager.Read(reader, "aquarium_enviro_" + j, -1);
AquariumData item2 = aquariumData;
aquariums.Add(item2);
}
}
UpdateDLCSettings();
}
public void Reset()
{
foreach (FishDefinition fishDefinition in fishDefinitions)
{
fishDefinition.weight = 0f;
fishDefinition.length = 0f;
fishDefinition.fishery = string.Empty;
fishDefinition.caughtCount = 0;
fishDefinition.caughtWeightSum = 0f;
}
Save();
}
}