Exemple #1
0
 public IEnumerator PerformSubAttacks(GameInstanceManager gameInstanceManager, BossAttackController bossAttackController)
 {
     foreach (IAction action in actionsList)
     {
         action.Perform(gameInstanceManager);
         yield return(new WaitForSeconds(action.GetTotalDelay()));
     }
     //Debug.Log("finish an attack : "+ gameObject.name);
     bossAttackController.nextAttackReady = true;
     yield return(null);
 }
Exemple #2
0
    void Awake()
    {
        bossAttackController   = GetComponent <BossAttackController>();
        bossMovementController = GetComponent <BossMovementController>();
        currentHealth          = maxHealth;

        if (hpText)
        {
            hpText.text = currentHealth + "/" + maxHealth;
        }
    }
Exemple #3
0
    public GameObject GenerateABoss(int markNumber)
    {
        GameObject generatedBoss = Instantiate(bossTemplate, transform);

        gameInstanceManager.AssignBossToThisInstance(generatedBoss);
        BossAttackController bossAttackCon = generatedBoss.GetComponent <BossAttackController>();

        //myGeneratedBoss = generatedBoss;

        for (int i = 0; i < ATTACK_SIZE; i++)
        {
            GameObject anAttackGameObject = GenerateAnAttack();
            bossAttackCon.attackList.Add(anAttackGameObject.GetComponent <Attack>());
            anAttackGameObject.transform.SetParent(generatedBoss.transform);
            anAttackGameObject.name = "Attack " + i;
        }
        generatedBoss.name = "Initial " + markNumber;
        // set active false is in GA.cs
        return(generatedBoss);
    }
Exemple #4
0
    public List <GameObject> GenerateOffSprings(GameObject boss1, GameObject boss2, int amount)
    {
        string[]          boss1_nameSplited = boss1.name.Split(null);
        string[]          boss2_nameSplited = boss2.name.Split(null);
        string            boss1_mark        = boss1_nameSplited[boss1_nameSplited.Length - 1];
        string            boss2_mark        = boss2_nameSplited[boss2_nameSplited.Length - 1];
        List <GameObject> offSprings        = new List <GameObject>();
        GameObject        offspring1        = Instantiate(boss1);
        GameObject        offspring2        = Instantiate(boss2);

        offspring1.SetActive(false);
        offspring2.SetActive(false);
        offspring1.name = $"Generation[{generation_Number}]+P[{boss1_mark}_{boss2_mark}] {mark_number}";
        offspring2.name = $"Generation[{generation_Number}]+P[{boss1_mark}_{boss2_mark}] {mark_number+1}";
        mark_number    += 2;
        BossAttackController offspring1Script = offspring1.GetComponent <BossAttackController>();
        BossAttackController offspring2Script = offspring2.GetComponent <BossAttackController>();

        List <IAction> offspring1ActionList = new List <IAction>();
        List <IAction> offspring2ActionList = new List <IAction>();

        foreach (Attack atk in offspring1Script.attackList)
        {
            offspring1ActionList.AddRange(atk.actionsList);
        }
        foreach (Attack atk in offspring2Script.attackList)
        {
            offspring2ActionList.AddRange(atk.actionsList);
        }

        int        iterator       = 0;
        List <int> crossoverPoint = new List <int>();

        crossoverPoint = crossoverPoint.TunRandomRanges(Generator.ATTACK_SIZE * Generator.SIZE_OF_ACTION_IN_ATTACK, CROSSOVER_POINT_AMOUNT);
        int  crossoverPointIterator = 0;
        bool isCrossing             = true;

        //string print = "";
        //foreach( var e in crossoverPoint)
        //{
        //    print += e + " ";
        //}
        //Debug.Log(print);

        while (iterator < Generator.ATTACK_SIZE * Generator.SIZE_OF_ACTION_IN_ATTACK)
        {
            if (crossoverPointIterator != crossoverPoint.Count && iterator >= crossoverPoint[crossoverPointIterator])
            {
                //Debug.Log("iterator" + iterator);
                //Debug.Log("crossoverPITR"+crossoverPointIterator);
                isCrossing              = !isCrossing;
                crossoverPointIterator += 1;
                //iterator = crossoverPoint[crossoverPointIterator];
            }
            if (isCrossing)
            {
                //Debug.Log("cross " + iterator);
                var tmp = offspring1ActionList[iterator];
                offspring1ActionList[iterator] = offspring2ActionList[iterator];
                offspring2ActionList[iterator] = tmp;
            }

            iterator += 1;
        }
        // MUTATION
        for (int i = 0; i < offspring1ActionList.Count; i++)
        {
            if (Random.value < mutation_rate)
            {
                GameObject newAction = Generator.GenerateRandomAction();
                offspring1ActionList[i] = newAction.GetComponent <IAction>();
                newAction.name         += " M" + generation_Number;
            }
            if (Random.value < mutation_rate)
            {
                GameObject newAction = Generator.GenerateRandomAction();
                offspring2ActionList[i] = newAction.GetComponent <IAction>();
                newAction.name         += " M" + generation_Number;
            }
        }


        for (int i = 0; i < Generator.ATTACK_SIZE; i++)
        {
            for (int j = 0; j < Generator.SIZE_OF_ACTION_IN_ATTACK; j++)
            {
                offspring1Script.attackList[i].actionsList[j] = offspring1ActionList[i * Generator.SIZE_OF_ACTION_IN_ATTACK + j];
                offspring2Script.attackList[i].actionsList[j] = offspring2ActionList[i * Generator.SIZE_OF_ACTION_IN_ATTACK + j];

                offspring1ActionList[i * Generator.SIZE_OF_ACTION_IN_ATTACK + j].transform.parent = offspring1Script.attackList[i].transform;
                offspring2ActionList[i * Generator.SIZE_OF_ACTION_IN_ATTACK + j].transform.parent = offspring2Script.attackList[i].transform;
            }
        }

        if (amount == 1)
        {
            offSprings.Add(offspring1);
            Destroy(offspring2);
        }
        else
        {
            offSprings.Add(offspring1);
            offSprings.Add(offspring2);
        }

        return(offSprings);
    }