Skip to content
Snippets Groups Projects
OpponentController.cs 6.78 KiB
Newer Older
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(StepBackScript))]
[RequireComponent(typeof(CrossOverScript))]
[RequireComponent(typeof(BehindBackScript))]
[RequireComponent(typeof(IAMovementScript))]
[RequireComponent(typeof(RoubarBolaScript))]
[RequireComponent(typeof(BlockScript))]
public class OpponentController : Controller
    private GameManager gameManager;
    private float elapsedTime;
        inputs = new Inputs();
        canMove = true;
        canSkill = true;
        changeTurn();
    }

    private void setup()
    {
        animatorController = GetComponent<Animator>();
        gameManager = FindObjectOfType<GameManager>();
        elapsedTime += Time.deltaTime;

        if (rb.velocity == Vector2.zero)
        {
            animatorController.SetBool("Moving", false);
        }
        else
        {
            animatorController.SetBool("Moving", true);
        }
    public override void changeTurn()
            GetComponent<StepBackScript>().enabled = true;
            GetComponent<CrossOverScript>().enabled = true;
            GetComponent<BehindBackScript>().enabled = true;
            GetComponent<BlockScript>().enabled = false;
            ForceBarController.shootAction -= block;
            BehindBackScript.action -= steal;
            animatorController.SetTrigger("AtkTurn");
            myTurn = false;
            disableBallCollider();
            StartCoroutine(atkTurn());    
            GetComponent<RoubarBolaScript>().enabled = true;
            GetComponent<IAMovementScript>().enabled = true;
            GetComponent<BlockScript>().enabled = true;
            ForceBarController.shootAction += block;
            BehindBackScript.action += steal;
            animatorController.SetTrigger("DefTurn");
            myTurn = true;
            enableBallCollider();
            StopCoroutine(atkTurn());  
            if (elapsedTime > 0.5f)
            {
                elapsedTime = 0;
                yield return movement(Random.Range(0, 8));
        }
    }

    private IEnumerator movement(int choice)
    {
        switch (choice)
        {
            //W - Move
            case 0:
                rb.velocity = Vector2.up * speed;
                transform.rotation = rb.velocity.x <= 0 ? Quaternion.AngleAxis(0, Vector3.up) : Quaternion.AngleAxis(180, Vector3.up);
                yield return null;
                break;
            //A - Move
            case 1:
                rb.velocity = Vector2.left * speed;
                transform.rotation = rb.velocity.x <= 0 ? Quaternion.AngleAxis(0, Vector3.up) : Quaternion.AngleAxis(180, Vector3.up);
                yield return null;
                break;
            //S - Move
            case 2:
                rb.velocity = Vector2.down * speed;
                transform.rotation = rb.velocity.x <= 0 ? Quaternion.AngleAxis(0, Vector3.up) : Quaternion.AngleAxis(180, Vector3.up);
                yield return null;
                break;
            //D - Move
            case 3:
                rb.velocity = Vector2.right * speed;
                transform.rotation = rb.velocity.x <= 0 ? Quaternion.AngleAxis(0, Vector3.up) : Quaternion.AngleAxis(180, Vector3.up);
                yield return null;
                break;
            //J - StepBack
            case 4:
                inputs.resetInputs();
                yield return new WaitUntil(() => rb.velocity == Vector2.zero);
                inputs.resetInputs();
                inputs.behindBack = 1;
                yield return null;
                break;
            //L - CrossOver
            case 6:
                //inputs.resetInputs();
                yield return new WaitUntil(() => rb.velocity == Vector2.zero);
                inputs.resetInputs();
                gameManager.shoot(Random.Range(0f, 1f), findThrowPoint(), target);
        StopAllCoroutines();
        GetComponent<StepBackScript>().enabled = false;
        GetComponent<CrossOverScript>().enabled = false;
        GetComponent<BehindBackScript>().enabled = false;
        GetComponent<RoubarBolaScript>().enabled = false;
        GetComponent<IAMovementScript>().enabled = false;
        animatorController.SetTrigger("Idle");
    private void block()
    {
        //do something
        if (GetComponent<Animation>() != null)
        {
            GetComponent<Animation>().Stop();
        }
        StartCoroutine(new WaitForSecondsRealtime(UnityEngine.Random.Range(0, 1)));
        inputs.block = 1;
    private void steal()
    {
        //do something
        if (GetComponent<Animation>() != null)
        {
            GetComponent<Animation>().Stop();
        }
        //StartCoroutine(new WaitForSecondsRealtime(UnityEngine.Random.Range(0, 1)));
        inputs.steal = UnityEngine.Random.Range(0, 2);
    }

    public void moveToPosition(Transform atkPosition, Transform defPosition)
    {
        if (myTurn)
        {
            rb.MovePosition(atkPosition.position);
        }
        else
        {
            rb.MovePosition(defPosition.position);
        }
    }

    private void disableBallCollider()
    {
        foreach (Transform t in GetComponentInChildren<Transform>())
        {
            if (t.CompareTag("BallCollider"))
            {
                t.GetComponent<BoxCollider2D>().enabled = false;
                return;
            }
        }
    }

    private void enableBallCollider()
    {
        foreach (Transform t in GetComponentInChildren<Transform>())
        {
            if (t.CompareTag("BallCollider"))
            {
                t.GetComponent<BoxCollider2D>().enabled = true;
                return;
            }
        }
    }

    private Transform findThrowPoint()
    {
        foreach (Transform t in GetComponentInChildren<Transform>())
        {
            if (t.CompareTag("ThrowPoint"))
            {
                return t;
            }
        }
        return null;
    }