//***************************************************************************** // AI can change it's formation to a new one after it deliver or receive a goal. //***************************************************************************** public IEnumerator changeFormation(int _formationIndex, float _speed) { //cache the initial position of all units List <Vector3> unitsSartingPosition = new List <Vector3>(); foreach (var unit in myTeam) { unitsSartingPosition.Add(unit.transform.position); //get the initial postion of this unit for later use. unit.GetComponent <MeshCollider>().enabled = false; //no collision for this unit till we are done with re positioning. } float t = 0; while (t < 1) { t += Time.deltaTime * _speed; for (int cnt = 0; cnt < myTeam.Length; cnt++) { myTeam[cnt].transform.position = new Vector3(Mathf.SmoothStep(unitsSartingPosition[cnt].x, FormationManager.getPositionInFormation(_formationIndex, cnt).x * -1, t), Mathf.SmoothStep(unitsSartingPosition[cnt].y, FormationManager.getPositionInFormation(_formationIndex, cnt).y, t), FormationManager.fixedZ); /* * myTeam[cnt].transform.position.x = Mathf.SmoothStep( unitsSartingPosition[cnt].x, * FormationManager.getPositionInFormation(_formationIndex, cnt).x * -1, * t); * myTeam[cnt].transform.position.y = Mathf.SmoothStep( unitsSartingPosition[cnt].y, * FormationManager.getPositionInFormation(_formationIndex, cnt).y, * t); * myTeam[cnt].transform.position.z = FormationManager.fixedZ; */ } yield return(0); } if (t >= 1) { canChangeFormation = true; foreach (var unit in myTeam) { unit.GetComponent <MeshCollider>().enabled = true; //collision is now enabled. } } }