using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { [SerializeField] private int _lives = 3; [SerializeField] private GameObject _laserPrefab; [SerializeField] private GameObject _tripleShotPrefab; [SerializeField] private GameObject _fireLeft, _fireRight; private float _speed = 5; private float _speedMultipler = 1; private float _fireRate = 0.2f; private float _canFire; private bool _isTripleShootActive; private bool _isShieldActive; private int _score; private UIManager _uiManager; private GameObject _shieldVisualizer; private SpawnManager _spawnManager; private AudioSource[] _audioClip; void Start() { GameManager _gameManager = GameObject.Find("GameManager").GetComponent(); if (_gameManager.IsCoopMode == false) { transform.position = Vector3.zero; } _spawnManager = GameObject.Find("Spawn_manager").GetComponent(); _shieldVisualizer = GameObject.Find("ShieldVisualizer"); _uiManager = GameObject.Find("Canvas").GetComponent(); _audioClip = GetComponents(); if (_spawnManager == null) { Debug.LogError("The Spawn Manager is NULL."); } if (_shieldVisualizer != null) { _shieldVisualizer.SetActive(false); } else { Debug.LogError("The Shield Visualizer is NULL."); } if (_audioClip == null) { Debug.LogError("AudioClip component is NULL."); } _fireLeft.SetActive(false); _fireRight.SetActive(false); } void Update() { CalculateMovement(); if (Input.GetKeyDown(KeyCode.Space) && Time.time > _canFire) { FireLaser(); } } private void FireLaser() { _canFire = Time.time + _fireRate; if (_isTripleShootActive == true) { Instantiate(_tripleShotPrefab, transform.position + new Vector3(0, 0.8f, 0), Quaternion.identity); } else { Instantiate(_laserPrefab, transform.position + new Vector3(0, 0.8f, 0), Quaternion.identity); } _audioClip[0].Play(); } private void CalculateMovement() { float horizontalInput = Input.GetAxis("Horizontal"); float verticalInput = Input.GetAxis("Vertical"); Vector3 directions = new Vector3(horizontalInput, verticalInput, 0); transform.Translate(directions * _speed * _speedMultipler * Time.deltaTime); transform.position = new Vector3(transform.position.x, Mathf.Clamp(transform.position.y, -3.5f, 0), 0); if (transform.position.x > 11) { transform.position = new Vector3(-11, transform.position.y, 0); } else if (transform.position.x < -11) { transform.position = new Vector3(11, transform.position.y, 0); } } public void Damage() { if (_isShieldActive == true) { _isShieldActive = false; _shieldVisualizer.SetActive(false); return; } _lives--; _audioClip[1].Play(); if (_lives == 2) { _fireLeft.SetActive(true); } else { _fireRight.SetActive(true); } _uiManager.UpdateLives(_lives); if (_lives < 1) { _spawnManager.OnPlayerDeath(); Destroy(this.gameObject); } } public void SetTrippleShotActive() { _audioClip[2].Play(); _isTripleShootActive = true; StartCoroutine(UnsetTrippleShotActive()); } private IEnumerator UnsetTrippleShotActive() { yield return new WaitForSeconds(5); _isTripleShootActive = false; } public void SetSpeedBoostActive() { _audioClip[2].Play(); _speedMultipler = 2; StartCoroutine(UnsetSpeedBoostActive()); } private IEnumerator UnsetSpeedBoostActive() { yield return new WaitForSeconds(5); _speedMultipler = 1; } public void SetShieldActive() { _audioClip[2].Play(); _isShieldActive = true; _shieldVisualizer.SetActive(true); } public void AddScore(int score) { _score += score; _uiManager.UpdateScore(_score); } private void OnTriggerEnter2D(Collider2D other) { string colliderTag = other.tag; if (colliderTag == "EnemyLasers") { Damage(); Destroy(other.gameObject); } } }