412 lines
11 KiB
C#
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();
|
|
}
|
|
}
|