using System; using System.Collections; using System.Collections.Generic; using RootMotion.FinalIK; using UnityEngine; public class Aquarium : MonoBehaviour { public int id; public Transform fishContainer; public Transform[] fishDstPoints; public Transform feedingSpot; public List aquariumFishList; public List feedList; private PlayerResidence playerResidence; private AudioSource audioSource; public static event Action OnPlayerStay; public static event Action OnPlayerExit; private void Start() { audioSource = GetComponent(); playerResidence = UnityEngine.Object.FindObjectOfType(); aquariumFishList = new List(); feedList = new List(); StartCoroutine(SpawnFish()); } private void OnTriggerStay(Collider other) { if (other.gameObject.layer == LayerMask.NameToLayer("Player")) { Aquarium.OnPlayerStay?.Invoke(this); } } private void OnTriggerExit(Collider other) { if (other.gameObject.layer == LayerMask.NameToLayer("Player")) { Aquarium.OnPlayerExit?.Invoke(this); } } public void SpawnFeeding() { AquariumFeedBait component = UnityEngine.Object.Instantiate(position: new Vector3(feedingSpot.position.x + UnityEngine.Random.Range(0f, 1f), feedingSpot.position.y, feedingSpot.position.z + UnityEngine.Random.Range(0f, 1f)), original: playerResidence.feedingPrefab, rotation: Quaternion.identity, parent: fishContainer).GetComponent(); component.GetComponent().AddTorque(Vector3.forward * UnityEngine.Random.Range(50, 300)); feedList.Add(component); audioSource.Play(); } private IEnumerator SpawnFish() { yield return null; for (int j = 0; j < Singleton.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish.Count; j++) { int uid = Singleton.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].uid; GameManager.FishSpecies species = Singleton.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].species; float weight = Singleton.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].weight; float currentFeed = Singleton.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].currentFeed; float growthWeight = Singleton.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].growthWeight; AddFish(species, weight, uid, currentFeed, growthWeight); yield return null; } } public void AddFish(GameManager.FishSpecies fishSpecies, float fishWeight, int uid, float feedLevel, float growthWeight) { GameObject obj = UnityEngine.Object.Instantiate(GameManager.Instance.gameFish[(int)fishSpecies].GetFishModel(fishWeight + growthWeight), fishContainer); obj.transform.localScale = GameManager.Instance.gameFish[(int)fishSpecies].GetFishScale(fishWeight + growthWeight); Transform baitContainer = obj.GetComponent().baitContainer; UnityEngine.Object.Destroy(obj.GetComponent()); UnityEngine.Object.Destroy(obj.GetComponent()); UnityEngine.Object.Destroy(obj.GetComponent()); UnityEngine.Object.Destroy(obj.GetComponent()); AquariumFish aquariumFish = obj.AddComponent(); aquariumFish.fishSpecies = fishSpecies; aquariumFish.fishWeight = fishWeight; aquariumFish.growthWeight = growthWeight; aquariumFish.feedLevel = feedLevel; aquariumFish.currentAquarium = this; aquariumFish.uid = uid; aquariumFish.baitContainer = baitContainer; aquariumFish.playerResidence = playerResidence; aquariumFishList.Add(aquariumFish); } }