Files
AppleHillsProduction/Assets/Scripts/DamianExperiments/SoundBirdPuzzleSection/cameraSwitcher.cs

82 lines
2.9 KiB
C#
Raw Normal View History

using UnityEngine;
using Unity.Cinemachine;
using System.Collections;
2025-11-05 13:48:25 +01:00
using Core.SaveLoad;
using Pixelplacement;
public class cameraSwitcher : MonoBehaviour
{
[SerializeField] private CinemachineCamera virtualCamera;
[SerializeField] private CinemachineConfiner2D confiner2D;
[SerializeField] private float zoomOutOrthoSize = 27f;
[SerializeField] private float normalOrthoSize = 20f;
[SerializeField] private float transitionDuration = 0.5f; // Duration of the transition
[SerializeField] private soundBird_FlyingBehaviour flyingBehaviour;
2025-11-04 16:26:33 +01:00
[SerializeField] private soundBird_TakeOffBehaviour takeOffBehaviour; // New reference
2025-11-05 13:48:25 +01:00
[SerializeField] private AppleMachine birdStateMachine;
private int playerInsideCount = 0;
private Coroutine zoomCoroutine;
private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
playerInsideCount++;
if (playerInsideCount == 1 && virtualCamera != null)
{
if (zoomCoroutine != null) StopCoroutine(zoomCoroutine);
zoomCoroutine = StartCoroutine(SmoothOrthoSize(virtualCamera, zoomOutOrthoSize, transitionDuration));
}
}
}
private void OnTriggerExit2D(Collider2D other)
{
2025-11-05 13:48:25 +01:00
if (!gameObject.activeInHierarchy)
return;
if (other.CompareTag("Player"))
{
playerInsideCount--;
if (playerInsideCount == 0 && virtualCamera != null)
{
if (zoomCoroutine != null) StopCoroutine(zoomCoroutine);
zoomCoroutine = StartCoroutine(SmoothOrthoSize(virtualCamera, normalOrthoSize, transitionDuration));
2025-11-04 16:26:33 +01:00
if (birdStateMachine.currentState != null)
{
2025-11-04 16:26:33 +01:00
if (birdStateMachine.currentState.name == "SoundBirdFlyAround" && flyingBehaviour != null)
{
flyingBehaviour.StartLanding();
}
else if (birdStateMachine.currentState.name == "SoundBirdTakeoff" && takeOffBehaviour != null)
{
takeOffBehaviour.StartLanding();
}
}
}
}
}
private IEnumerator SmoothOrthoSize(CinemachineCamera cam, float targetSize, float duration)
{
float startSize = cam.Lens.OrthographicSize;
float elapsed = 0f;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
cam.Lens.OrthographicSize = Mathf.Lerp(startSize, targetSize, elapsed / duration);
if (confiner2D != null)
{
confiner2D.InvalidateBoundingShapeCache();
}
yield return null;
}
cam.Lens.OrthographicSize = targetSize;
if (confiner2D != null)
{
confiner2D.InvalidateBoundingShapeCache();
}
}
}