]> git.cameronkatri.com Git - gmtk-gamejam.git/commitdiff
Resolve conflicts
authorCarson Katri <carson.katri@gmail.com>
Sat, 12 Jun 2021 20:57:05 +0000 (16:57 -0400)
committerCarson Katri <carson.katri@gmail.com>
Sat, 12 Jun 2021 20:57:05 +0000 (16:57 -0400)
1  2 
Assets/Scripts/Controllers/AIController.cs
Assets/Scripts/Controllers/GameController.cs

index 19a7d3e5cf9e386ed46083809137bd222779b090,9f115c20d908841d8302aa7ee71bb5cab4bbed37..1b7fba8667a1fda1dece138cbebfd5a93c7d6cbf
@@@ -1,83 -1,19 +1,92 @@@
 +using System;
 +using Controllers.Player;
  using UnityEngine;
 +using Random = UnityEngine.Random;
  
  namespace Controllers
  {
 +  [RequireComponent(typeof(Rigidbody2D))]
 +  [RequireComponent(typeof(BoxCollider2D))]
    public class AIController : MonoBehaviour
    {
-     
 +    [SerializeField] private float speed;
 +    
 +    [Header("Legs")]
 +    [SerializeField] private Leg leftLeg;
 +    [SerializeField] private Leg rightLeg;
 +    [SerializeField] private float maxLegAngle;
 +    [SerializeField] private float legSpeed;
 +
 +    [Header("References")]
 +    [SerializeField] private GameController game;
 +    [SerializeField] private PlayerController player;
 +
 +    public Rigidbody2D Rigidbody => _rigidbody != null ? _rigidbody : _rigidbody = GetComponent<Rigidbody2D>();
 +    private Rigidbody2D _rigidbody;
 +    
 +    public BoxCollider2D BoxCollider => _boxCollider != null ? _boxCollider : _boxCollider = GetComponent<BoxCollider2D>();
 +    private BoxCollider2D _boxCollider;
++
++    private void Start()
++    {
++      // Try to grab (steal) the ball every n seconds.
++      InvokeRepeating(nameof(GrabBall), 0, 0.5f);
++    }
++
++    private void GrabBall()
++    {
++      // Grab from the middle, and the bottom.
++      if (game.player.HasBall && Random.Range(0, 100) > 95) // 5% chance of them grabbing the ball from the player.
++      {
++        game.enemy.GrabBall(transform.position);
++        game.enemy.GrabBall(transform.position + new Vector3(0f, BoxCollider.size.y / 2, 0f));
++      }
++    }
++
      private void Update()
      {
 -      if (Input.GetKey(KeyCode.H))
 +      if (!game.enemy.HasBall) // Move towards the ball to grab it.
        {
 -        transform.position += Vector3.right * 0.01f;
 +        transform.position += new Vector3(game.ball.transform.position.x - transform.position.x, 0f, 0f).normalized * (Time.deltaTime * speed);
 +        
 +        if (Vector2.Distance(player.transform.position, transform.position) < 1f) // Repel from the player if they get too close.
 +        {
-           transform.position -= (player.transform.position - transform.position).normalized * (Time.deltaTime * speed / 2f);
-         }
-         
-         // Grab from the middle, and the bottom.
-         if (game.player.HasBall && Random.Range(0, 100) > 50) // 50% chance of them grabbing the ball from the player.
-         {
-           game.enemy.GrabBall(transform.position);
-           game.enemy.GrabBall(transform.position + new Vector3(0f, BoxCollider.size.y / 2, 0f));
++          transform.position += (player.transform.position - transform.position).normalized * (Time.deltaTime * speed / 2f);
 +        }
        }
 -      else if (Input.GetKey(KeyCode.F))
 +      else // Otherwise, move toward the basket, and then once we get within range, take the shot.
        {
 -        transform.position += Vector3.left * 0.01f;
        }
 +
 +      game.enemy.Move(transform.position + new Vector3(0f, BoxCollider.size.y / 2, 0f));
 +      
 +      leftLeg.top.transform.localRotation = Quaternion.Slerp(
 +        leftLeg.top.transform.localRotation,
 +        Quaternion.Euler(0, 0, maxLegAngle * Mathf.Sin(Time.time * legSpeed * (Rigidbody.velocity.magnitude / 5f))),
 +        Time.deltaTime * 50f
 +      );
 +      leftLeg.bottom.transform.localRotation = Quaternion.Slerp(
 +        leftLeg.bottom.transform.localRotation,
 +        Quaternion.Euler(0, 0, maxLegAngle + maxLegAngle * Mathf.Sin(Time.time * legSpeed * (Rigidbody.velocity.magnitude / 5f))),
 +        Time.deltaTime * 50f
 +      );
 +      rightLeg.top.transform.localRotation = Quaternion.Slerp(
 +        rightLeg.top.transform.localRotation,
 +        Quaternion.Euler(0, 0, maxLegAngle * Mathf.Sin(Time.time * -legSpeed * (Rigidbody.velocity.magnitude / 5f))),
 +        Time.deltaTime * 50f
 +      );
 +      rightLeg.bottom.transform.localRotation = Quaternion.Slerp(
 +        rightLeg.bottom.transform.localRotation,
 +        Quaternion.Euler(0, 0, maxLegAngle + maxLegAngle * Mathf.Sin(Time.time * -legSpeed * (Rigidbody.velocity.magnitude / 5f))),
 +        Time.deltaTime * 50f
 +      );
 +    }
 +
 +    [Serializable]
 +    private struct Leg
 +    {
 +      public GameObject top;
 +      public GameObject bottom;
      }
    }
  }
index 9ae0ce8c46e8bdbd5fedbfe95ab2cdfef3d9b2ab,b39199b5c998cde98f4d9506a8091eadd7fe2534..b9f65f2d60ef07f2a1e95d19ef4aae117534299c
@@@ -18,6 -18,9 +18,9 @@@ namespace Controller
      /// </summary>
      [SerializeField] public Ball ball;
  
+     [SerializeField] public Hoop PlayerHoop;
+     [SerializeField] public Hoop EnemyHoop;
      private void Awake()
      {
        player = new Player { isEnemy = false, controller = this };
        /// </summary>
        internal GameController controller;
        
+       internal int score;
+       private Vector2 lastShotPosition;
+       public void Score(Vector2 Rim) {
+         if (Vector2.Distance(lastShotPosition, Rim) >= 1)
+         {
+           score += 3;
+           Debug.Log("Three point");
+         } else
+           score += 2;
+           Debug.Log("Two point");
+       }
        private State dribble => isEnemy ? State.EnemyDribble : State.PlayerDribble;
        private State shoot => isEnemy ? State.EnemyShoot : State.PlayerShoot;
  
 +      public bool HasBall => controller.state == dribble;
 +
        /// <summary>
        /// When dribbling, move the ball with the player.
        /// </summary>
@@@ -80,6 -94,7 +96,7 @@@
          if (controller.state != dribble) return false; // We must be dribbling the ball to shoot it.
          controller.state = shoot;
          controller.ball.Shoot(playerTransform);
+         lastShotPosition = playerTransform.position;
          return true;
        }
      }