예제 #1
0
        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;
                }
            }
        }
예제 #2
0
        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;
                    }
                }
            }
        }
예제 #3
0
        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();
            }
        }
예제 #4
0
        /// <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();
        }
예제 #5
0
        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);
        }
예제 #6
0
        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;
            }
        }
예제 #7
0
        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;
            }
        }
예제 #8
0
        /// <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;
            }
        }