98 lines
3.6 KiB
C#
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);
|
|
}
|
|
}
|