Skip to content
Snippets Groups Projects
Select Git revision
  • f079495087b0f5bf59add7037ab50836e242ad1f
  • main default protected
2 results

BallBehavior.cs

Blame
  • BallBehavior.cs 2.45 KiB
    using System;
    using UnityEngine;
    using UnityEngine.InputSystem;
    using UnityEngine.Serialization;
    
    public class BallBehavior : MonoBehaviour
    {
        private PlayerInput _playerInput;
        private InputAction _horizontalAction;
        private float _horizontalAxis;
        public int moveForwardSpeed = 3;
        public float keyboardMoveSpeed = 15f;
        private int _isKeyboard = 0;
        private GameObject ball;
        private float ballRadius;
        private Vector3 ballBottomPos;
        private Boolean gameOver = false;
        
        // Ground Checks
        [Header("Ground Checks")]
        [SerializeField] private bool isGrounded;
        [SerializeField] private float groundCheckDistance = 0.17f;
        [SerializeField] private LayerMask groundMask = 0;
    
        void Awake()
        {
            _playerInput = GetComponent<PlayerInput>();
            _horizontalAction = _playerInput.currentActionMap.FindAction("Horizontal");
            _horizontalAction.performed += moveActionPerformed;
            _horizontalAction.canceled += _ => _horizontalAxis = 0;
        }
    
        void Start()
        {
            ball = GameObject.Find("Ball");
            ballRadius = ball.GetComponent<SphereCollider>().radius;
        }
    
        void Update()
        {
            if(!gameOver)
            {
                Vector3 position = transform.position;
                var deltaTime = Time.deltaTime;
                position += Vector3.forward * (moveForwardSpeed * deltaTime);
                position += Vector3.right * deltaTime * _horizontalAxis;
                transform.position = position;
            }
            
            ballBottomPos = ball.transform.position + Vector3.down * ballRadius;
            isGrounded = Physics.CheckSphere(ballBottomPos, groundCheckDistance, groundMask);
            
            Debug.Log(ball.transform.localPosition.y);
            if(ball.transform.position.y < 0.6f && !isGrounded)
            {
                Debug.Log("Game Over: " + ball.transform.position.y + " " + isGrounded);
                gameOver = true;
            }
        }
    
        private void moveActionPerformed(InputAction.CallbackContext context)
        {
            if (context.control.device.displayName.Contains("Keyboard"))
            {
                _isKeyboard = 1;
            }
            else
            {
                _isKeyboard = 0;
            }
    
            _horizontalAxis = context.ReadValue<float>() * (1 + keyboardMoveSpeed * _isKeyboard);
        }
        
        void OnDrawGizmosSelected()
        {
            // Dessine une boule rouge pour visualier goundCheckDistance
            Gizmos.color = Color.red;
            Gizmos.DrawSphere(ballBottomPos, groundCheckDistance);
        }
    }