Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/EagleEyesController.cs
2026-03-04 10:03:45 +08:00

217 lines
6.5 KiB
C#

using UFS2.Gameplay;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
public class EagleEyesController : MonoBehaviour
{
public Material eyeFishMaterial;
public CoolDownEagle coolDownEaglePrefab;
public AudioSource audioSourceHearth;
public AudioSource audioSourceFalcon;
private CoolDownEagle coolDownEagleInstance;
private PostProcessVolume postProcessVolume;
private ColorGrading colorGrading;
private Vignette vignette;
private bool isView;
private float currentViewTimer;
private float eagleAffectProgress;
private float vignetteStartValue;
private float startCameraFov;
private float cameraFovMultiplier = 0.7f;
private void Start()
{
if (!GameObject.FindGameObjectWithTag("ScenePostProcessing").TryGetComponent<PostProcessVolume>(out postProcessVolume))
{
Debug.LogError("EagleEye nie widzi Postprocesing");
}
else
{
if (!postProcessVolume.profile.TryGetSettings<ColorGrading>(out colorGrading))
{
Debug.LogError("EagleEye nie widzi Colorgrading");
}
if (!postProcessVolume.profile.TryGetSettings<Vignette>(out vignette))
{
Debug.LogError("EagleEye nie widzi Vignette");
}
else
{
vignetteStartValue = vignette.intensity.value;
}
}
if (GameManager.Instance._playerData.eagleEyesCoolDown > 0f)
{
StartCoolDown();
}
}
private void Update()
{
if ((bool)FScriptsHandler.Instance)
{
if (Singleton<SaveDataManager>.Instance.HasCurrentPlayerSkill(GameManager.Skills.eagle_sens))
{
GameManager.Instance._playerData.eagleEyesViewTimer = 10f;
}
else if (Singleton<SaveDataManager>.Instance.HasCurrentPlayerSkill(GameManager.Skills.Eagle_eye))
{
GameManager.Instance._playerData.eagleEyesViewTimer = 5f;
}
else
{
GameManager.Instance._playerData.eagleEyesViewTimer = 0f;
}
bool flag = true;
FRod currentRod = FScriptsHandler.Instance.m_PlayerMain.currentRod;
if ((bool)currentRod && (currentRod.CheckIsInUse() || (bool)currentRod.currentFishEntity))
{
flag = false;
}
bool flag2 = true;
if ((bool)Singleton<GameCameraController>.Instance && (Singleton<GameCameraController>.Instance.IsCameraZoomIn || Singleton<GameCameraController>.Instance.IsZoomPlaying))
{
flag2 = false;
}
isView = InputManager.isEagleEye && flag && flag2 && !coolDownEagleInstance && GameManager.Instance._playerData.eagleEyesViewTimer > 0f;
if (isView)
{
ShowFishes();
}
else
{
HideFishes();
}
if ((bool)audioSourceHearth)
{
audioSourceHearth.volume = eagleAffectProgress * 0.2f;
}
if ((bool)audioSourceFalcon)
{
audioSourceFalcon.volume = eagleAffectProgress * 0.3f;
}
FollowMainCamera();
}
}
private void ShowFishes()
{
if (!FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.enabled)
{
FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.enabled = true;
startCameraFov = GameCameraController.GetCurrentFov();
if (currentViewTimer == 0f)
{
currentViewTimer = GameManager.Instance._playerData.eagleEyesViewTimer;
}
if ((bool)audioSourceFalcon && !audioSourceFalcon.isPlaying)
{
audioSourceFalcon.Play();
}
}
eagleAffectProgress = Mathf.MoveTowards(eagleAffectProgress, 1f, Time.unscaledDeltaTime);
foreach (FishEntity allFish in Singleton<FishEntityManager>.Instance.AllFishes)
{
allFish.EagleEyeRender(isEagleEyeEnabled: true, eyeFishMaterial, eagleAffectProgress);
}
colorGrading.saturation.value = 0f - eagleAffectProgress * 100f;
vignette.intensity.value = Mathf.Lerp(vignette.intensity.value, 0.5f, eagleAffectProgress * 0.5f);
float num = Mathf.Lerp(startCameraFov, startCameraFov * cameraFovMultiplier, eagleAffectProgress);
GameCameraController.SetCameraFov(num);
FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.fieldOfView = num;
if ((bool)audioSourceHearth && !audioSourceHearth.isPlaying)
{
audioSourceHearth.Play();
}
currentViewTimer = Mathf.MoveTowards(currentViewTimer, 0f, Time.unscaledDeltaTime);
if (currentViewTimer == 0f)
{
StartCoolDown();
}
}
private void HideFishes()
{
eagleAffectProgress = Mathf.MoveTowards(eagleAffectProgress, 0f, Time.unscaledDeltaTime);
if (eagleAffectProgress > 0f)
{
foreach (FishEntity allFish in Singleton<FishEntityManager>.Instance.AllFishes)
{
allFish.EagleEyeRender(isEagleEyeEnabled: true, eyeFishMaterial, eagleAffectProgress);
}
colorGrading.saturation.value = 0f - eagleAffectProgress * 100f;
vignette.intensity.value = Mathf.Lerp(vignette.intensity.value, vignetteStartValue, (1f - eagleAffectProgress) * 0.5f);
float num = Mathf.Lerp(startCameraFov * cameraFovMultiplier, startCameraFov, 1f - eagleAffectProgress);
GameCameraController.SetCameraFov(num);
FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.fieldOfView = num;
}
else
{
if (!FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.enabled)
{
return;
}
FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.enabled = false;
GameCameraController.SetCameraFov(startCameraFov);
FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.fieldOfView = startCameraFov;
foreach (FishEntity allFish2 in Singleton<FishEntityManager>.Instance.AllFishes)
{
allFish2.EagleEyeRender();
}
if (audioSourceHearth.isPlaying)
{
audioSourceHearth.Stop();
}
if (audioSourceFalcon.isPlaying)
{
audioSourceFalcon.Stop();
}
colorGrading.saturation.value = 0f;
vignette.intensity.value = vignetteStartValue;
}
}
private void FollowMainCamera()
{
if (FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera.enabled)
{
Camera camera = FScriptsHandler.Instance.m_PlayerMain.m_Camera;
Camera eagleCamera = FScriptsHandler.Instance.m_PlayerMain.m_EagleCamera;
eagleCamera.transform.position = camera.transform.position;
eagleCamera.transform.rotation = camera.transform.rotation;
eagleCamera.fieldOfView = camera.fieldOfView;
eagleCamera.nearClipPlane = camera.nearClipPlane;
eagleCamera.farClipPlane = camera.farClipPlane;
}
}
private void StartCoolDown()
{
if (coolDownEagleInstance == null)
{
coolDownEagleInstance = Object.Instantiate(coolDownEaglePrefab, FScriptsHandler.Instance.m_Canvas.transform).GetComponent<CoolDownEagle>();
}
if (Singleton<SaveDataManager>.Instance.HasCurrentPlayerSkill(GameManager.Skills.eagle_sens))
{
coolDownEagleInstance.StartCooldown(CoolDownEagle.Type.Falcon);
}
else if (Singleton<SaveDataManager>.Instance.HasCurrentPlayerSkill(GameManager.Skills.Eagle_eye))
{
coolDownEagleInstance.StartCooldown(CoolDownEagle.Type.Eagle);
}
}
}