revival/game/Assets/Scripts/Traps/FallawayFloor.cs

74 lines
1.7 KiB
C#
Raw Normal View History

2021-03-05 17:24:50 +01:00
using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using Ktyl.Util;
using UnityEngine;
2021-03-10 18:41:09 +01:00
[RequireComponent(typeof(Rigidbody))]
public class FallawayFloor : MonoBehaviour
{
// // Speed at which the object moves towards the ground.
public float speed;
2021-03-02 20:47:28 +01:00
// Time it takes for ogjecct to begin moving towards the ground.
public float fallAwayTime;
public Material dissolve;
2021-03-10 18:41:09 +01:00
2021-03-05 17:24:50 +01:00
[SerializeField] private Renderer _renderer;
[SerializeField] private TrapSettings _settings;
[SerializeField] private GameObject _graphics;
2021-03-05 17:24:50 +01:00
private Rigidbody rb;
private Vector3 initialPosition;
private bool _triggered = false;
private void Start()
{
initialPosition = transform.position;
2021-03-02 20:47:28 +01:00
// Get Rigidbody component.
rb = GetComponent<Rigidbody>();
}
private void LateUpdate()
{
if (!_triggered) return;
if (_settings.FallawayFloor.CanRespawn)
{
Reset();
}
}
private void OnTriggerEnter(Collider other)
{
if (!_triggered && other.CompareTag("Player"))
{
StartCoroutine(Fall());
}
}
private IEnumerator Fall()
{
_graphics.transform.DOShakePosition(
fallAwayTime,
_settings.FallawayFloor.ShakeStrength);
FMODUnity.RuntimeManager.PlayOneShot(_settings.FallawayFloor.FMODEvent);
_triggered = true;
// wait a moment
2021-03-02 20:47:28 +01:00
yield return new WaitForSeconds(fallAwayTime);
2021-03-10 18:41:09 +01:00
// fall
rb.velocity = Vector3.down * speed;
2021-03-10 18:41:09 +01:00
}
public void Reset()
{
_triggered = false;
transform.position = initialPosition;
rb.velocity = Vector3.zero;
}
}