101 lines
2.8 KiB
C#
101 lines
2.8 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using Cinemachine;
|
||
|
using DG.Tweening;
|
||
|
using Google.Apis.Util;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.InputSystem;
|
||
|
|
||
|
public class BazFinalSequence : MonoBehaviour
|
||
|
{
|
||
|
[Serializable]
|
||
|
private struct Baz
|
||
|
{
|
||
|
public Door door;
|
||
|
public Animator anim;
|
||
|
public float pauseTime;
|
||
|
public float scaleFactor;
|
||
|
|
||
|
public GameObject graphics;
|
||
|
public Transform scaleTarget;
|
||
|
public float hoverHeight;
|
||
|
}
|
||
|
|
||
|
[Serializable]
|
||
|
private struct Flickers
|
||
|
{
|
||
|
public float intensity;
|
||
|
public float period;
|
||
|
}
|
||
|
|
||
|
[SerializeField] private GameObject _player;
|
||
|
[SerializeField] private CinemachineFreeLook _camera;
|
||
|
[SerializeField] private Baz _baz;
|
||
|
[SerializeField] private GameObject _statue;
|
||
|
[SerializeField] private Flickers _flickers;
|
||
|
|
||
|
private WaitForSeconds _bazPauseForEffect;
|
||
|
private WaitForSeconds _bazWalk;
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
_bazPauseForEffect = new WaitForSeconds(_baz.pauseTime);
|
||
|
_bazWalk = new WaitForSeconds(_baz.door.AnimTime);
|
||
|
}
|
||
|
|
||
|
public void Trigger()
|
||
|
{
|
||
|
StartCoroutine(BazCR());
|
||
|
}
|
||
|
|
||
|
private IEnumerator BazCR()
|
||
|
{
|
||
|
// TODO: disable player movement/abilities
|
||
|
var input = _player.GetComponent<PlayerInput>();
|
||
|
input.enabled = false;
|
||
|
|
||
|
// _camera.LookAt = _baz.scaleTarget;
|
||
|
// _camera.Follow = _baz.scaleTarget;
|
||
|
|
||
|
var elapsed = 0f;
|
||
|
while (elapsed < _flickers.period)
|
||
|
{
|
||
|
elapsed += Time.deltaTime;
|
||
|
|
||
|
var t = Time.time * _flickers.intensity;
|
||
|
var p = Mathf.PerlinNoise(t, Mathf.Sin(t));
|
||
|
|
||
|
_statue.SetActive(p > elapsed/_flickers.period);
|
||
|
_baz.graphics.SetActive(!_statue.activeSelf);
|
||
|
|
||
|
yield return null;
|
||
|
}
|
||
|
|
||
|
// there is no xandar only baz
|
||
|
_statue.SetActive(false);
|
||
|
_baz.graphics.SetActive(true);
|
||
|
|
||
|
// wait a couple of moments
|
||
|
yield return _bazPauseForEffect;
|
||
|
|
||
|
// baz float-walks to the player
|
||
|
_baz.door.Open();
|
||
|
_baz.anim.SetBool("moving", true);
|
||
|
|
||
|
var ogScale = _baz.scaleTarget.localScale;
|
||
|
_baz.scaleTarget.DOScale(ogScale * _baz.scaleFactor, _baz.door.AnimTime);
|
||
|
|
||
|
yield return _bazWalk;
|
||
|
|
||
|
_baz.anim.SetBool("moving", false);
|
||
|
|
||
|
var pos = _baz.scaleTarget.position;
|
||
|
var playerPos = _player.transform.position;
|
||
|
pos.y = playerPos.y + _baz.hoverHeight;
|
||
|
_baz.scaleTarget.position = pos;
|
||
|
_baz.scaleTarget.LookAt(playerPos + _baz.hoverHeight * Vector3.up);
|
||
|
|
||
|
// roll credits!
|
||
|
}
|
||
|
}
|