using System.Collections; using System.Collections.Generic; using UnityEngine; using Cinemachine; using TMPro; public class PlayerComponent : MonoBehaviour { [SerializeField] private float health = 5f; [SerializeField] private float maxHealth = 5f; [SerializeField] private float stamina = 20f; [SerializeField] private float maxStamina = 20f; [SerializeField] private NoiseVisibilitySettingsManager noiseManager; [SerializeField] private PlayerMovementController movementController; public NoiseVisibilitySettingsManager NoiseManager { get { return this.noiseManager; } } public PlayerMovementController MovementController { get { return movementController; } } [SerializeField] private PlayerAnimationController animationController; [HideInInspector] public FlareRegister flareRegister; [SerializeField] private CinemachineFreeLook cameraFreeLook; private float shakeTimer = 0; CinemachineBasicMultiChannelPerlin perlin; [SerializeField] private float knockbackDuration = 1f; [SerializeField] private float knockbackDistance = 5f; [SerializeField] private StatsOutputScreen statsOutput; [HideInInspector] public bool IsAlive { get { return this.health > 0; } } private void Awake() { flareRegister = GameObject.FindObjectOfType(); } // Start is called before the first frame update void Start() { perlin = cameraFreeLook.GetRig(1).GetCinemachineComponent(); } // Update is called once per frame void Update() { NoiseManager.SetRunning(MovementController.IsRunning); statsOutput.health = this.health; statsOutput.stamina = 20f; statsOutput.oxygen = 100f; if (shakeTimer > 0) { shakeTimer -= Time.deltaTime; // perlin.m_AmplitudeGain = 0; perlin.m_AmplitudeGain = Mathf.Lerp(perlin.m_AmplitudeGain, 0, .1f); if (shakeTimer <= 0f) { perlin.m_AmplitudeGain = 0; } } if (!IsAlive) { PlayerInteractionHandler.instance.isDead = true; movementController.isDead = true; } } public void ShakeCamera(float intensity, float time) { CinemachineBasicMultiChannelPerlin perlin = cameraFreeLook.GetRig(1).GetCinemachineComponent(); perlin.m_AmplitudeGain= intensity; shakeTimer = time; } public void Damage(float damage,bool applyShake=false) { this.health-=damage; if (applyShake) { ShakeCamera(15, 5); } } private void OnTriggerEnter(Collider other) { if (other.CompareTag("Damaging")) { MonsterComponent monster = other.GetComponentInParent(); this.Damage(monster.AttackDamage, monster.ShakeCameraOnHit); animationController.Hit(this.health<=0); this.movementController.PhysicalForceMove((transform.position - monster.transform.position)*knockbackDistance); this.movementController.LockMovement(this.knockbackDuration); } } }