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 fromDLC = new List(); } [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().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 fishDefinitions = new List(); public List fishKeep = new List(); public int fishKeptCount; public List aquariums = new List(); public int aquariumsCount; public List baitToFishSize = new List(); public List hookToFishWeight = new List(); public List lureToFishWeight = new List(); public List flyToFishWeight = new List(); 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(); } }