using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Saltosion.OneWeapon.Effects { public class CameraFX : MonoBehaviour { public Transform Player; public Transform ShakeHandle; public Transform CameraTransform; public Camera Camera; private Vector3 Offset; private float ScreenShakeTime = 0.0f; private float ScreenShakeIntensity = 0.0f; private float TimeStopCooldown = 0.0f; private Vector3 DummyPosition; private void Start() { Offset = CameraTransform.position; DummyPosition = Player.position + Offset; } private void Update() { if (TimeStopCooldown > 0) { TimeStopCooldown -= Time.deltaTime / Time.timeScale; if (TimeStopCooldown <= 0) { Time.timeScale = 1.0f; } } Vector2 TargetPosition = (Player.position * 2f + Camera.ScreenToWorldPoint(Input.mousePosition)) / 3.0f; DummyPosition = Vector3.Lerp(DummyPosition, TargetPosition, 5f * Time.deltaTime / Time.timeScale) + Offset; CameraTransform.position = new Vector3(Mathf.Floor(DummyPosition.x * 100) / 100, Mathf.Floor(DummyPosition.y * 100) / 100, Mathf.Floor(DummyPosition.z)); if (ScreenShakeTime > 0) { ScreenShakeTime -= Time.deltaTime; ShakeHandle.localPosition = new Vector2(Random.value, Random.value) * Mathf.Pow(ScreenShakeTime, 2f) * ScreenShakeIntensity * Random.value; } } public void StopFor(float seconds) { Time.timeScale = 0.01f; TimeStopCooldown = seconds; } public void SlowMotion(float timeScale, float seconds) { Time.timeScale = timeScale; TimeStopCooldown = seconds; } public void ScreenShake(float intensity) { ScreenShakeIntensity = intensity; ScreenShakeTime = 0.2f; } } }