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); }
void Awake() { bossAttackController = GetComponent <BossAttackController>(); bossMovementController = GetComponent <BossMovementController>(); currentHealth = maxHealth; if (hpText) { hpText.text = currentHealth + "/" + maxHealth; } }
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); }
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); }