public void AcceptAntsToSpawn(AntController[] ants) { foreach (AntController ant in ants) { ant.transform.parent = transform; ant.gameObject.SetActive(false); if (ant.isLeader) { antLeaderToSpawn = ant; } else { remainingAntsToSpawn.Add(ant); } } while (remainingAntsToSpawn.Count < antHill.level) { AntController newAnt = Instantiate(antPrefab).GetComponent <AntController>(); newAnt.gameObject.SetActive(false); remainingAntsToSpawn.Add(newAnt); } SpawnAntLeader(); }
public AntController[] ReleaseAntsAndDestroy() { AntController[] ants = GetComponentsInChildren <AntController>(); foreach (AntController ant in ants) { ant.transform.parent = null; } if (attachedAntLeader != null) { attachedAntLeader.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic; attachedAntLeader = null; } if (tutorial) { tutorial.gameObject.SetActive(false); } gameObject.SetActive(false); Destroy(gameObject, 0.5f); destroyed = true; return(ants); }
public void BindInstance(GameObject instance) { antInstance = instance; antController = instance.GetComponent <AntController>(); antController.ant = this; antController.RegisterEvents(); }
void Awake() { instance = this; remainingAntsToSpawn = new List <AntController>(); antLeaderToSpawn = Instantiate(antLeaderPrefab).GetComponent <AntController>(); SpawnAntLeader(); }
private void SpawnAnt() { AntController ant = remainingAntsToSpawn[0]; ant.GetComponent <Collider2D>().enabled = true; ant.transform.position = transform.position; ant.gameObject.SetActive(true); AntsManager.ReturnAntToActives(ant); remainingAntsToSpawn.RemoveAt(0); }
private void SetAntPositionAndRotationAfterHit(AntController ant) { if (ant.isLeader) { ant.transform.DOLocalRotate(Quaternion.LookRotation(Vector3.forward, -ant.transform.localPosition).eulerAngles, TWEEN_DURATION * 0.3f).SetEase(Ease.InOutSine); return; } float xPos = Random.Range(-10f, 10f); float yPos = Random.Range(-10f, 10f); Vector3 position = new Vector3(xPos, yPos, 0); position.Normalize(); position *= (GetComponent <CircleCollider2D>().radius + (ant.GetComponent <BoxCollider2D>().size.y / 2) / transform.localScale.x); DOTween.Sequence() .Append(ant.transform.DOLocalRotate(Quaternion.LookRotation(Vector3.forward, position - ant.transform.localPosition).eulerAngles, TWEEN_DURATION * 0.3f).SetEase(Ease.InOutSine)) .AppendInterval(TWEEN_DURATION * 0.7f) .Append(ant.transform.DOLocalRotate(Quaternion.LookRotation(Vector3.forward, -position).eulerAngles, TWEEN_DURATION * 0.5f).SetEase(Ease.InOutSine)) .Play(); ant.transform.DOLocalMove(position, TWEEN_DURATION); }
IEnumerator GenGeneration() { for (int count = 0; count < GA.NB_ITERATION; ++count) { for (int i = 0; i < GA.NB_GENERATION; ++i) { ga = new GA(myMap); ga.initialize(); ga.selection(); ga.mutation(); ga.runAllAnt(); if (i == 0) { bestAnts[count] = ga.getBestAnt(); } else if (bestAnts[count].getScore() < ga.getBestAnt().getScore()) { bestAnts[count] = ga.getBestAnt(); } yield return(null); } } int maxIndex = 0, maxScore = 0; for (int j = 0; j < GA.NB_ITERATION; j++) { if (bestAnts[j].getScore() > maxScore) { maxScore = bestAnts[j].getScore(); maxIndex = j; } } Debug.Log("Best Score = " + bestAnts[maxIndex].getScore() + " DNA : " + bestAnts[maxIndex].getDna().toString()); firstAnt = new Ant(myMap, bestAnts[maxIndex]); firstAnt.run(); firstAnt.setMap(myMap); isGenFinish = true; AntController.setPath(firstAnt.path, gameObject.transform.localScale); }
private void OnCollisionEnter2D(Collision2D collision) { if (attachedAntLeader != null) { return; } AntController collidingAnt = collision.collider.GetComponent <AntController>(); if (collidingAnt == null || !collidingAnt.isLeader) { return; } AntSpawner.ForceSpawnOfAllAnts(); rb.bodyType = RigidbodyType2D.Dynamic; transform.parent = null; attachedAnts = AntsManager.GetActiveAnts(); foreach (AntController ant in attachedAnts) { ant.enabled = false; ant.transform.parent = transform; SetAntPositionAndRotationAfterHit(ant); ant.GetComponent <Collider2D>().enabled = false; if (ant.isLeader) { attachedAntLeader = ant; ant.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Kinematic; ant.PlayPickupSound(); } } }
// Start is called before the first frame update void Start() { controller = GameObject.Find("AntController").GetComponent <AntController>(); lastRotation = Time.time; }
public static void ReturnAntToActives(AntController ant) { ant.enabled = true; ant.transform.parent = instance.transform; }