Example #1
0
    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();
    }
Example #2
0
    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);
    }
Example #3
0
 public void BindInstance(GameObject instance)
 {
     antInstance       = instance;
     antController     = instance.GetComponent <AntController>();
     antController.ant = this;
     antController.RegisterEvents();
 }
Example #4
0
 void Awake()
 {
     instance             = this;
     remainingAntsToSpawn = new List <AntController>();
     antLeaderToSpawn     = Instantiate(antLeaderPrefab).GetComponent <AntController>();
     SpawnAntLeader();
 }
Example #5
0
    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);
    }
Example #6
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);
    }
Example #8
0
    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();
            }
        }
    }
Example #9
0
    // Start is called before the first frame update
    void Start()
    {
        controller = GameObject.Find("AntController").GetComponent <AntController>();

        lastRotation = Time.time;
    }
Example #10
0
 public static void ReturnAntToActives(AntController ant)
 {
     ant.enabled          = true;
     ant.transform.parent = instance.transform;
 }