diff options
Diffstat (limited to 'Assets/Scripts/Controllers/AIController.cs')
-rw-r--r-- | Assets/Scripts/Controllers/AIController.cs | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/Assets/Scripts/Controllers/AIController.cs b/Assets/Scripts/Controllers/AIController.cs index 1b7fba8..0edffb7 100644 --- a/Assets/Scripts/Controllers/AIController.cs +++ b/Assets/Scripts/Controllers/AIController.cs @@ -23,6 +23,8 @@ namespace Controllers public Rigidbody2D Rigidbody => _rigidbody != null ? _rigidbody : _rigidbody = GetComponent<Rigidbody2D>(); private Rigidbody2D _rigidbody; + + private float animationStep; public BoxCollider2D BoxCollider => _boxCollider != null ? _boxCollider : _boxCollider = GetComponent<BoxCollider2D>(); private BoxCollider2D _boxCollider; @@ -36,7 +38,7 @@ namespace Controllers 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. + if (!game.player.HasBall || Random.Range(0, 100) > 70) // 30% 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)); @@ -45,41 +47,35 @@ namespace Controllers private void Update() { + var movement = transform.position; + if (!game.enemy.HasBall) // Move towards the ball to grab it. { - 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. + if (Vector2.Distance(player.root.transform.position, transform.position) < 2f) // Repel from the player if they get too close. + { + // transform.position += new Vector3(-(player.transform.position - transform.position).normalized.x, 0, 0) * (Time.deltaTime * speed / 2f); + transform.position = new Vector2(Vector2.MoveTowards(transform.position, player.root.transform.position, -1.5f * speed * Time.deltaTime).x, transform.position.y); + } + else { - transform.position += (player.transform.position - transform.position).normalized * (Time.deltaTime * speed / 2f); + // transform.position += new Vector3(game.ball.transform.position.x - transform.position.x, 0f, 0f).normalized * (Time.deltaTime * speed); + transform.position = new Vector2(Vector2.MoveTowards(transform.position, game.ball.transform.position, speed * Time.deltaTime).x, transform.position.y); } } else // Otherwise, move toward the basket, and then once we get within range, take the shot. { } + movement -= transform.position; + 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 - ); + leftLeg.top.transform.localRotation = Quaternion.Euler(0, 0, maxLegAngle * Mathf.Sin(animationStep * legSpeed)); + leftLeg.bottom.transform.localRotation = Quaternion.Euler(0, 0, maxLegAngle + maxLegAngle * Mathf.Sin(animationStep * legSpeed)); + rightLeg.top.transform.localRotation = Quaternion.Euler(0, 0, maxLegAngle * Mathf.Sin(animationStep * -legSpeed)); + rightLeg.bottom.transform.localRotation = Quaternion.Euler(0, 0, maxLegAngle + maxLegAngle * Mathf.Sin(animationStep * -legSpeed)); + + animationStep += Time.deltaTime * Mathf.Abs(movement.x); } [Serializable] |