Dossier complet
This commit is contained in:
116
Droid 2/Assets/Droid.cs
Normal file
116
Droid 2/Assets/Droid.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user