Files
2026-03-04 10:03:45 +08:00

98 lines
3.6 KiB
C#

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<AquariumFish> aquariumFishList;
public List<AquariumFeedBait> feedList;
private PlayerResidence playerResidence;
private AudioSource audioSource;
public static event Action<Aquarium> OnPlayerStay;
public static event Action<Aquarium> OnPlayerExit;
private void Start()
{
audioSource = GetComponent<AudioSource>();
playerResidence = UnityEngine.Object.FindObjectOfType<PlayerResidence>();
aquariumFishList = new List<AquariumFish>();
feedList = new List<AquariumFeedBait>();
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<AquariumFeedBait>();
component.GetComponent<Rigidbody>().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<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish.Count; j++)
{
int uid = Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].uid;
GameManager.FishSpecies species = Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].species;
float weight = Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].weight;
float currentFeed = Singleton<SaveDataManager>.Instance.GetCurrentPlayerData().PlayerAquarium[id].fish[j].currentFeed;
float growthWeight = Singleton<SaveDataManager>.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<FFish>().baitContainer;
UnityEngine.Object.Destroy(obj.GetComponent<FFish>());
UnityEngine.Object.Destroy(obj.GetComponent<CCDIK>());
UnityEngine.Object.Destroy(obj.GetComponent<FFishRagDoll>());
UnityEngine.Object.Destroy(obj.GetComponent<Collider>());
AquariumFish aquariumFish = obj.AddComponent<AquariumFish>();
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);
}
}