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 float offsetDistance; private Rigidbody2D rb; private GameManager gameManager; private float elapsedTime; void Start() { setup(); inputs = new Inputs(); currentHand = 1; myTurn = false; canMove = true; canSkill = true; changeTurn(); elapsedTime = 0; } private void setup() { animatorController = GetComponent<Animator>(); rb = GetComponent<Rigidbody2D>(); gameManager = FindObjectOfType<GameManager>(); } private void Update() { elapsedTime += Time.deltaTime; } public override void changeTurn() { if (myTurn) { GetComponent<StepBackScript>().enabled = true; GetComponent<CrossOverScript>().enabled = true; GetComponent<BehindBackScript>().enabled = true; ForceBarController.shootAction -= block; BehindBackScript.action -= steal; animatorController.SetTrigger("AtkTurn"); myTurn = false; elapsedTime = 0; disableBallCollider(); StartCoroutine(atkTurn()); } else { 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()); } //do something } private IEnumerator atkTurn() { while (true) { if (elapsedTime > 0.5f) { elapsedTime = 0; yield return movement(Random.Range(0, 8)); } yield return null; } } private IEnumerator movement(int choice) { Debug.Log(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(); inputs.stepBack = 1; yield return null; break; //K - BehindBack case 5: inputs.resetInputs(); inputs.behindBack = 1; yield return null; break; //L - CrossOver case 6: inputs.resetInputs(); inputs.crossOver = 1; yield return null; break; //Space - Shoot default: inputs.resetInputs(); gameManager.shoot(Random.Range(0f, 1f), findThrowPoint(), target); yield return null; break; } } public virtual void OnDisable() { StopAllCoroutines(); GetComponent<StepBackScript>().enabled = false; GetComponent<CrossOverScript>().enabled = false; GetComponent<BehindBackScript>().enabled = false; GetComponent<RoubarBolaScript>().enabled = false; GetComponent<IAMovementScript>().enabled = false; GetComponent<BlockScript>().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; } }