117 lines
3.8 KiB
C#
117 lines
3.8 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEngine.SceneManagement;
|
||
|
|
||
|
public class Droid : MonoBehaviour
|
||
|
{
|
||
|
private bool jumpKeyWasPressed;
|
||
|
private float horizontalInput;
|
||
|
private bool isGrounded;
|
||
|
private Rigidbody rigidbodyComponent;
|
||
|
private int energyDisksCollected = 0; // Nombre de disques énergétiques collectés
|
||
|
private float speedMultiplier = 1f; // Multiplicateur de vitesse
|
||
|
private float jumpMultiplier = 1f; // Multiplicateur de saut
|
||
|
private int life = 1;
|
||
|
private int nbFusee = 1;
|
||
|
[SerializeField] private GameObject fusee ;
|
||
|
private UIManager UIManager;
|
||
|
|
||
|
// Start est appelée une fois avant le premier frame
|
||
|
void Start()
|
||
|
{
|
||
|
rigidbodyComponent = GetComponent<Rigidbody>();
|
||
|
UIManager = FindObjectOfType<UIManager>();
|
||
|
}
|
||
|
|
||
|
void Update()
|
||
|
{
|
||
|
// Détection de l'input pour sauter
|
||
|
if (Input.GetKeyDown(KeyCode.Space))
|
||
|
{
|
||
|
jumpKeyWasPressed = true;
|
||
|
}
|
||
|
// Capture de l'input horizontal
|
||
|
horizontalInput = Input.GetAxis("Horizontal");
|
||
|
|
||
|
if (nbFusee > 0) {
|
||
|
if (Input.GetKeyDown(KeyCode.S)) {
|
||
|
nbFusee -= 1;
|
||
|
GameObject ball = Instantiate(fusee, transform.position,new Quaternion(90,90,0,0));
|
||
|
ball.GetComponent<Rigidbody>().velocity = new Vector3(20,ball.GetComponent<Rigidbody>().velocity.y, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
StartCoroutine(UIManager.UpdateLifeText(life));
|
||
|
StartCoroutine(UIManager.UpdateFuseeText(nbFusee));
|
||
|
|
||
|
if (life <= 0) {
|
||
|
StartCoroutine(UIManager.GameOverSequence());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void FixedUpdate()
|
||
|
{
|
||
|
// Applique une vélocité horizontale ajustée par le multiplicateur de vitesse
|
||
|
rigidbodyComponent.velocity = new Vector3(horizontalInput * 2 * speedMultiplier, rigidbodyComponent.velocity.y, 0);
|
||
|
|
||
|
// Applique une force verticale ajustée par le multiplicateur de saut
|
||
|
if (jumpKeyWasPressed && isGrounded)
|
||
|
{
|
||
|
rigidbodyComponent.AddForce(Vector3.up * 5 * jumpMultiplier, ForceMode.VelocityChange);
|
||
|
jumpKeyWasPressed = false; // Réinitialise l'état de saut
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Détection des collisions avec d'autres objets pour gérer isGrounded
|
||
|
private void OnCollisionStay(Collision collision)
|
||
|
{
|
||
|
isGrounded = true;
|
||
|
}
|
||
|
|
||
|
private void OnCollisionExit(Collision collision)
|
||
|
{
|
||
|
isGrounded = false;
|
||
|
}
|
||
|
|
||
|
private void OnCollisionEnter(Collision collision) {
|
||
|
if (collision.gameObject.layer == 8) {
|
||
|
life = life - 2;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void OnTriggerEnter(Collider other)
|
||
|
{
|
||
|
if (other.gameObject.layer == 3)
|
||
|
{
|
||
|
life += 1;
|
||
|
nbFusee += 1;
|
||
|
Destroy(other.gameObject); // Détruit le disque énergétique
|
||
|
energyDisksCollected++; // Incrémente le compteur
|
||
|
|
||
|
// Double la vitesse et la puissance de saut après 5 disques collectés
|
||
|
if (energyDisksCollected == 5)
|
||
|
{
|
||
|
speedMultiplier = 2f; // Double la vitesse
|
||
|
jumpMultiplier = 1.5f; // Double la puissance de saut
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Gestion des obstacles qui retournent la caméra
|
||
|
if (other.gameObject.layer == 6) {
|
||
|
Transform[] transforms = gameObject.GetComponentsInChildren<Transform>();
|
||
|
Transform cameraTransform = transforms[1]; // La caméra est le 1er enfant du droïde
|
||
|
|
||
|
// Ajoute une rotation supplémentaire de 180° à chaque collision
|
||
|
cameraTransform.rotation *= Quaternion.Euler(0, 0, 180);
|
||
|
}
|
||
|
|
||
|
if (other.tag == "Exit") {
|
||
|
SceneManager.LoadScene("Scene2");
|
||
|
}
|
||
|
|
||
|
if (other.tag == "Game Over") {
|
||
|
StartCoroutine(UIManager.GameOverSequence());
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|