Newer
Older
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] private int turnDuration;
[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]);
inTurn = true;
}
private void Update()
{
if (inTurn)
{
currentTime += Time.deltaTime;
//Debug.Log(currentTime);
}
}
private void FixedUpdate()
{
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;
yield return null;
}
public void shoot(float force, Transform throwPoint, Transform target)
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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);
}
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)
{
//do something
//verificar se fez ponto
//alterar placar
currentTime = 50f;
//Destroy(ball);