Files
SpaceDroid/Droid 2/Assets/Droid.cs

117 lines
3.8 KiB
C#
Raw Permalink Normal View History

2025-01-17 13:04:56 +01:00
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());
}
}
}