public void LoadContents() { for (int i = 0; i < Party.Instance.characters.Count; i++) { Hero hero = Party.Instance.characters[i].archetype; HeroesImages[i].sprite = hero.Portrait; foreach (SkillsMenuSkillItem item in SkillsContents[i].transform.GetComponentsInChildren <SkillsMenuSkillItem>()) { Destroy(item.gameObject); } AIIManager manager = SkillsContents[i]; AxisInteractableItem lastItem = null; foreach (PlayerSkill skill in hero.skills) { GameObject newSkill = Instantiate(SkillItem, SkillsContents[i].transform); newSkill.GetComponent <SkillsMenuSkillItem>().LoadSkill(skill, loader, SkillsContents[i].GetComponent <HeroSkillsContent>()); AxisInteractableItem newItem = newSkill.GetComponent <AxisInteractableItem>(); if (lastItem == null) { manager.firstItem = newItem; } else { lastItem.downItem = newItem; newItem.upItem = lastItem; } lastItem = newItem; } } }
private void RemoveUnitFromContent(BattleUnit unit, Transform content, AIIManager manager) { UnitItem[] units = content.GetComponentsInChildren <UnitItem>(); for (int i = 0; i < units.Length; i++) { if (units[i].unit == unit) { AxisInteractableItem item = units[i].GetComponent <AxisInteractableItem>(); if (item == manager.firstItem) { manager.firstItem = item.downItem; } if (item.downItem != null) { item.downItem.upItem = item.upItem; } if (item.upItem != null) { item.upItem.downItem = item.downItem; } if (item == manager.lastItem) { manager.lastItem = item.upItem; } } } }
private IEnumerator HeroSkill(int heroIndex) { heroesImages[heroIndex].sprite = changes.heroes[heroIndex].Portrait; heroesImages[heroIndex].GetComponent <Animator>().runtimeAnimatorController = HeroImageAnimator; AIIManager manager = skillsContents[heroIndex].GetComponent <AIIManager>(); AxisInteractableItem lastItem = null; for (int i = 0; i < changes.skillReferences[heroIndex].Count; i++) { UpdatedSkill newSkill = Instantiate(UpdatedSkill, skillsContents[heroIndex]).GetComponent <UpdatedSkill>(); newSkill.LoadUpdatedSkill(changes.heroSkills[heroIndex][i], changes.skillReferences[heroIndex][i]); newSkill.GetComponent <VictorySkillListItem>().loader = Loader; AxisInteractableItem newItem = newSkill.GetComponent <AxisInteractableItem>(); if (lastItem != null) { newItem.upItem = lastItem; lastItem.downItem = newItem; } else { manager.firstItem = newItem; } lastItem = newItem; yield return(new WaitForSeconds(timeBetweenSkillsShown)); newSkill.StartAnimation(); } for (int i = 0; i < changes.newSkills[heroIndex].Count; i++) { UpdatedSkill newSkill = Instantiate(UpdatedSkill, skillsContents[heroIndex]).GetComponent <UpdatedSkill>(); newSkill.LoadNewSkill(changes.newSkills[heroIndex][i]); AxisInteractableItem newItem = newSkill.GetComponent <AxisInteractableItem>(); if (lastItem != null) { newItem.upItem = lastItem; lastItem.downItem = newItem; } else { manager.firstItem = newItem; } lastItem = newItem; yield return(new WaitForSeconds(timeBetweenSkillsShown)); newSkill.StartAnimation(); } }
/// <summary> /// Carrega todas as skills ativas do heroi que está em seu turno no menu de skills. /// </summary> /// <param name="skills"> Lista com todas as skills do heroi. </param> public void UpdateSkillsContent(List <Skill> skills) { // Deleta todos os itens previamente alocados no content foreach (SkillElement element in skillsContent.GetComponentsInChildren <SkillElement>()) { Destroy(element.gameObject); } // Variável auxiliar para a ordenação dos itens AxisInteractableItem lastItem = null; // Passa por todas as skills da lista, adicionando as ativas no menu e as ordenando foreach (PlayerSkill skill in skills) { if (skill.active) { // Instancia um novo item e o coloca no content GameObject newSkill = Instantiate(skillObject, skillsContent); newSkill.GetComponent <SkillElement>().skill = skill; newSkill.GetComponent <Image>().sprite = skill.skillImage; // Define este script como responsável pelo item criado SkillListItem newSkillListItem = newSkill.GetComponent <SkillListItem>(); newSkillListItem.skillList = this; // Adiciona a decisão de clique no item criado ClickableItem newClickableItem = newSkill.GetComponent <ClickableItem>(); newClickableItem.BCD = clickDecision; // Adiciona a skill no item que a ativará SkillItem newSkillItem = newSkill.GetComponent <SkillItem>(); newSkillItem.skill = skill; // Ordena o item na lista AxisInteractableItem newItem = newSkill.GetComponent <AxisInteractableItem>(); if (lastItem != null) { newItem.upItem = lastItem; lastItem.downItem = newItem; } else { manager.firstItem = newItem; } lastItem = newItem; } } manager.Active(); }
public BattleUnit LoadUnit(Unit unit) { GameObject newUnit = Instantiate(unitPrefab, (unit.IsHero)? heroesContent : enemiesContent); int sortingLayer = 0; foreach (Transform child in ((unit.IsHero)? heroesContent : enemiesContent)) { sortingLayer++; sortingLayer++; } BattleUnit battleUnit = newUnit.GetComponentInChildren <BattleUnit>(); battleUnit.GetComponent <SpriteRenderer>().sortingOrder = sortingLayer; battleUnit.Configure(unit); Sprite unitSprite = battleUnit.GetComponent <SpriteRenderer>().sprite; AxisInteractableItem newItem = battleUnit.GetComponent <AxisInteractableItem>(); AIIManager manager = (unit.IsHero)? heroesManager : enemiesManager; battleUnit.battleItem = battleUnit.GetComponent <UnitItem>(); battleUnit.battleItem.layout.preferredWidth = unit.BoundsSizeX * 64; battleUnit.battleItem.layout.preferredHeight = unit.BoundsSizeY * 64; newUnit.transform.rotation = Quaternion.identity; Image[] unitImages = newUnit.GetComponentsInChildren <Image>(); unitImages[0].sprite = (unit.GetType() == typeof(Hero))? heroIndicator : enemyIndicator; unitImages[1].sprite = unitSprite; // Ordena o item na lista if (manager.lastItem != null) { newItem.upItem = manager.lastItem; manager.lastItem.downItem = newItem; } else { manager.firstItem = newItem; } manager.lastItem = newItem; return(battleUnit); }
private void ReinsertUnitInContent(BattleUnit unit, Transform content, AIIManager manager) { UnitItem[] units = content.GetComponentsInChildren <UnitItem>(); AxisInteractableItem thisItem = null; foreach (UnitItem item in units) { if (item.unit == unit) { thisItem = item.GetComponent <AxisInteractableItem>(); break; } } AxisInteractableItem previousItem = null; AxisInteractableItem nextItem = manager.firstItem; while (nextItem != manager.lastItem && (System.Array.IndexOf(units, nextItem.GetComponent <UnitItem>()) < System.Array.IndexOf(units, thisItem.GetComponent <UnitItem>()))) { previousItem = nextItem; nextItem = nextItem.downItem; } thisItem.upItem = previousItem; if (previousItem == null) { manager.firstItem = thisItem; } else { previousItem.downItem = thisItem; } thisItem.downItem = nextItem; if (nextItem == null) { manager.lastItem = thisItem; } else { thisItem.downItem = nextItem; } }
private void LoadTeam(UnitType team, Transform content, AIIManager manager) { List <BattleUnit> units = BattleManager.instance.GetTeam(team); foreach (AxisInteractableItem item in content.GetComponentsInChildren <AxisInteractableItem>()) { Destroy(item.gameObject); } // Variável auxiliar para a ordenação dos itens AxisInteractableItem lastItem = null; // Passa por todas as unidades da lista, adicionando-as no menu e as ordenando foreach (BattleUnit unit in units) { // Instancia um novo item e o coloca no content GameObject newUnit = Instantiate(unitPrefab, content); newUnit.transform.rotation = Quaternion.identity; unit.battleItem = newUnit.GetComponent <UnitItem>(); unit.battleItem.unit = unit; newUnit.GetComponent <Image>().color = unit.unit.color; unit.Configure(unit.unit); // Ordena o item na lista AxisInteractableItem newItem = newUnit.GetComponent <AxisInteractableItem>(); if (lastItem != null) { newItem.upItem = lastItem; lastItem.downItem = newItem; } else { manager.firstItem = newItem; } lastItem = newItem; } }
/// <summary> /// Carrega todos os efeitos aplicados pela skill selecionada. /// </summary> /// <param name="effects"> Lista com todos os efeitos aplicados pela skill. </param> private void UpdateEffectsContent(List <SkillEffectTuple> effects) { // Deleta todos os itens previamente alocados no content foreach (EffectElement EE in effectsContent.GetComponentsInChildren <EffectElement>()) { Destroy(EE.gameObject); } // Variável auxiliar para a ordenação dos itens AxisInteractableItem lastItem = null; // Passa por todas os efeitos da lista, adicionando no menu e ordenando foreach (SkillEffectTuple effect in effects) { // Instancia um novo item e o coloca no content GameObject newEffect = Instantiate(effectObject, effectsContent); newEffect.GetComponent <EffectElement>().UpdateEffect(effect); // Define este script como responsável pelo item criado EffectListItem newEffectItem = newEffect.GetComponent <EffectListItem>(); newEffectItem.skillList = this; // Ordena o item na lista AxisInteractableItem newItem = newEffect.GetComponent <AxisInteractableItem>(); if (lastItem != null) { newItem.leftItem = lastItem; lastItem.rightItem = newItem; } else { effectsManager.firstItem = newItem; } lastItem = newItem; } }