140 lines
3.7 KiB
C#

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
public class Droid : MonoBehaviour
{
private bool jumpKeyWasPressed;
private float horizontalInput;
private bool isGrounded;
private Rigidbody rigidbodyComponent;
private int energyDisksCollected = 0;
private float speedMultiplier = 1f;
private float jumpMultiplier = 1f;
private bool isInvincible = false; // Empêche les dégâts multiples
[SerializeField] private int life = 2; // Niveau de vie initial
[SerializeField] private GameObject fusee;
[SerializeField] private UIManager uiManager;
void Start()
{
rigidbodyComponent = GetComponent<Rigidbody>();
// Recherche automatique du UIManager
if (uiManager == null)
{
uiManager = FindObjectOfType<UIManager>();
if (uiManager == null)
{
Debug.LogError("UIManager is not assigned and could not be found in the scene!");
}
}
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
jumpKeyWasPressed = true;
}
horizontalInput = Input.GetAxis("Horizontal");
if (Input.GetKeyDown(KeyCode.S))
{
LaunchRocket();
}
// Vérifie si le droïde tombe sous -10 en Y
if (transform.position.y < -10)
{
TriggerGameOver();
}
}
private void FixedUpdate()
{
rigidbodyComponent.velocity = new Vector3(horizontalInput * 2 * speedMultiplier, rigidbodyComponent.velocity.y, 0);
if (jumpKeyWasPressed && isGrounded)
{
rigidbodyComponent.AddForce(Vector3.up * 5 * jumpMultiplier, ForceMode.VelocityChange);
jumpKeyWasPressed = false;
}
}
private void OnCollisionStay(Collision collision)
{
isGrounded = true;
}
private void OnCollisionExit(Collision collision)
{
isGrounded = false;
}
private IEnumerator InvincibilityDelay()
{
isInvincible = true; // Active l'invincibilité
yield return new WaitForSeconds(1.0f); // Attendre 1 seconde (modifiable)
isInvincible = false; // Désactive l'invincibilité
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.layer == 8) // Disques énergétiques
{
Destroy(other.gameObject);
energyDisksCollected++;
life++; // Augmente la vie
Debug.Log("Vie augmentée : " + life);
// Augmente les capacités après 3 disques collectés
if (energyDisksCollected == 3)
{
speedMultiplier = 2f;
jumpMultiplier = 2f;
}
}
if (other.gameObject.layer == 14) // Ennemis
{
life -= 2; // Réduit la vie
Debug.Log("Vie réduite : " + life);
Destroy(other.gameObject);
StartCoroutine(InvincibilityDelay());
if (life <= 0)
{
TriggerGameOver();
}
}
if (other.tag == "Exit")
{
SceneManager.LoadScene("scene1");
}
}
private void LaunchRocket()
{
GameObject rocket = Instantiate(fusee, transform.position, transform.rotation);
Rigidbody rocketRigidbody = rocket.GetComponent<Rigidbody>();
rocketRigidbody.velocity = new Vector3(20, rocketRigidbody.velocity.y, 0);
}
private void TriggerGameOver()
{
if (uiManager != null)
{
uiManager.TriggerGameOver();
}
Debug.Log("Game Over");
}
}