Skip to content
Snippets Groups Projects
GameManager.cs 4.94 KiB
Newer Older
william's avatar
william committed
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    [SerializeField] private int turnDuration;
william's avatar
william committed
    [SerializeField] private GameObject ball;
    [SerializeField] private GameObject playerPrefab;
    [SerializeField] private GameObject opponentPrefab;
    [SerializeField] private Transform[] targets;
    [SerializeField] private Transform[] spawPoints;
    private float currentTime;
    private bool inTurn;
    private GameObject player;
    private PlayerController playerController;
    private GameObject npc;
    private OpponentController npcController;

    private void Start()
    {
        BallController.ballContact += verifyEndTurn;

        player = Instantiate(playerPrefab, spawPoints[0].position, spawPoints[0].rotation) as GameObject;
        npc = Instantiate(opponentPrefab, spawPoints[1].position, spawPoints[1].rotation) as GameObject;
        playerController = player.GetComponent<PlayerController>();
        npcController = npc.GetComponent<OpponentController>();
        playerController.setListenner(npcController);
        npcController.setListenner(playerController);
        npc.GetComponent<IAMovementScript>().setPlayerTransform(player.transform);
        FindObjectOfType<ForceBarController>().setPlayer(player);
        playerController.setTarget(targets[0]);
        npcController.setTarget(targets[1]);
    }

    private void Update()
    {
        if (inTurn)
        {
            currentTime += Time.deltaTime;
            //Debug.Log(currentTime);
        }
        //Debug.Log(1.0f/Time.deltaTime);
        if (currentTime >= turnDuration)
        {
            StartCoroutine(endTurn());
        }
    }

    private IEnumerator endTurn()
    {
        inTurn = false;
        currentTime = 0;
        npcController.enabled = false;
        playerController.enabled = false;
        player.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
        npc.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
        yield return new WaitForSecondsRealtime(1);
        //do something
        StartCoroutine(setupTurn());
    }

    private IEnumerator setupTurn()
    {
        npcController.enabled = true;
        playerController.enabled = true;
        playerController.moveToPosition(spawPoints[0], spawPoints[2]);
        npcController.moveToPosition(spawPoints[3], spawPoints[1]);
        yield return new WaitForSecondsRealtime(1);
        //do something
        StartCoroutine(startTurn());
    }

    private IEnumerator startTurn()
    {
        inTurn = true;
        playerController.changeTurn();
        npcController.changeTurn();
        FindObjectOfType<ForceBarController>().enabled = true;
        threw = false;
    public void shoot(float force, Transform throwPoint, Transform target)
william's avatar
william committed
    {
        if (!threw)
        {
            threw = true;
            float xdistance;
            float time = 0.8f + force;
            xdistance = target.position.x - throwPoint.position.x;
            float ydistance;
            ydistance = target.position.y - throwPoint.position.y;

            float throwAngle; 
            throwAngle = Mathf.Atan((ydistance + calculateGravity() * (time * time)) / xdistance);
            float totalVelo = xdistance / (Mathf.Cos(throwAngle) * time);

            float xVelo, yVelo;
            xVelo = totalVelo * Mathf.Cos(throwAngle);
            yVelo = totalVelo * Mathf.Sin(throwAngle);

            GameObject bulletInstance = Instantiate(ball, throwPoint.position, throwPoint.rotation) as GameObject;
            bulletInstance.GetComponent<Rigidbody2D>().velocity = new Vector2(xVelo, yVelo);
            StartCoroutine(setupEndTurn());
        }
    }

    private IEnumerator setupEndTurn()
    {
        inTurn = false;
        currentTime = 0;
        npcController.enabled = false;
        playerController.enabled = false;
        stopAnimations();
        player.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
        npc.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
        yield return new WaitUntil(() => currentTime > turnDuration);
william's avatar
william committed
    }

    private float calculateGravity()
    {
        return Physics2D.gravity.y / -2;
    }

    public float getCurrentTime()
    {
        return currentTime;
    }
    public float getTurnDuration()
    {
        return turnDuration;
    }

    private void stopAnimations()
    {
        if (player.GetComponent<Animation>() != null)
        {
            player.GetComponent<Animation>().Stop();
        }
        if (npc.GetComponent<Animation>() != null)
        {
            npc.GetComponent<Animation>().Stop();
        }
    }

    public void verifyEndTurn(GameObject ball)
        //verificar se fez ponto
        //alterar placar
        currentTime = 50f;
william's avatar
william committed
}