Ejemplo n.º 1
0
    public BattleMenuItem[] BattleMenuList(Character character)
    {
        BattleMenuItem[] list = new BattleMenuItem[0];
        this.LoadIcons();

        if(this.addBack && this.backFirst && DataHolder.BattleSystem().IsRealTime())
        {
            list = ArrayHelper.Add(this.GetBackItem(), list);
        }

        for(int i=0; i<this.order.Length; i++)
        {
            if(this.order[i] == BattleMenu.ATTACK && this.showAttack)
            {
                if(DataHolder.BattleControl().IsAutoUseOnTarget() &&
                    character.InAttackRange(DataHolder.BattleControl().partyTarget))
                {
                    list = ArrayHelper.Add(new BattleMenuItem(
                            new GUIContent(this.attackName[GameHandler.GetLanguage()].ToString(), this.attackIcon),
                            -1, BattleMenu.ATTACK, true, "",
                            new BattleAction(AttackSelection.ATTACK, character, BattleAction.PARTY_TARGET, -1, 0)), list);
                }
                else
                {
                    list = ArrayHelper.Add(new BattleMenuItem(
                            new GUIContent(this.attackName[GameHandler.GetLanguage()].ToString(), this.attackIcon),
                            -1, BattleMenu.ATTACK, true, ""), list);
                }
            }
            else if(this.order[i] == BattleMenu.SKILL && this.showSkills)
            {
                SkillLearn[] skills = character.GetSkills();
                if(this.combineSkills)
                {
                    if(skills.Length > 0)
                    {
                        list = ArrayHelper.Add(new BattleMenuItem(
                            new GUIContent(this.skillName[GameHandler.GetLanguage()].ToString(), this.skillIcon),
                            -1, BattleMenu.SKILL, false, ""), list);
                    }
                }
                else
                {
                    ArrayList types = new ArrayList();
                    for(int j=0; j<skills.Length; j++)
                    {
                        if(DataHolder.Skill(skills[j].skillID).useInBattle)
                        {
                            int st = DataHolder.Skill(skills[j].skillID).skilltype;
                            if(!types.Contains(st))
                            {
                                types.Add(st);
                            }
                        }
                    }
                    types.Sort(new SkillTypeSorter());
                    for(int j=0; j<types.Count; j++)
                    {
                        list = ArrayHelper.Add(new BattleMenuItem(DataHolder.SkillTypes().GetContent(
                                (int)types[j]), (int)types[j], BattleMenu.SKILL, false, ""), list);
                    }
                }
            }
            else if(this.order[i] == BattleMenu.ITEM && this.showItems)
            {
                if(this.combineItems)
                {
                    list = ArrayHelper.Add(new BattleMenuItem(
                        new GUIContent(this.itemName[GameHandler.GetLanguage()].ToString(), this.itemIcon),
                        -1, BattleMenu.ITEM, false, ""), list);
                }
                else
                {
                    ArrayList types = new ArrayList();
                    foreach(int key in GameHandler.Items().Keys)
                    {
                        if(DataHolder.Item(key).useInBattle)
                        {
                            int it = DataHolder.Item(key).itemType;
                            if(!types.Contains(it))
                            {
                                types.Add(it);
                            }
                        }
                    }
                    types.Sort(new ItemTypeSorter());
                    for(int j=0; j<types.Count; j++)
                    {
                        list = ArrayHelper.Add(new BattleMenuItem(DataHolder.ItemTypes().GetContent(
                                (int)types[j]), (int)types[j], BattleMenu.ITEM, false, ""), list);
                    }
                }
            }
            else if(this.order[i] == BattleMenu.DEFEND && this.showDefend)
            {
                list = ArrayHelper.Add(new BattleMenuItem(
                    new GUIContent(this.defendName[GameHandler.GetLanguage()].ToString(), this.defendIcon),
                    -1, BattleMenu.DEFEND, false, ""), list);
            }
            else if(this.order[i] == BattleMenu.ESCAPE && this.showEscape)
            {
                list = ArrayHelper.Add(new BattleMenuItem(
                    new GUIContent(this.escapeName[GameHandler.GetLanguage()].ToString(), this.escapeIcon),
                    -1, BattleMenu.ESCAPE, false, ""), list);
            }
            else if(this.order[i] == BattleMenu.ENDTURN && this.showEndTurn)
            {
                list = ArrayHelper.Add(new BattleMenuItem(
                    new GUIContent(this.endTurnName[GameHandler.GetLanguage()].ToString(), this.endTurnIcon),
                    -1, BattleMenu.ENDTURN, false, ""), list);
            }
        }

        if(this.addBack && !this.backFirst && DataHolder.BattleSystem().IsRealTime())
        {
            list = ArrayHelper.Add(this.GetBackItem(), list);
        }

        return list;
    }
Ejemplo n.º 2
0
 public void Tick(BattleControl control, Character c)
 {
     if(this.timeout > 0) this.timeout -= Time.deltaTime;
     else if(c.CanChooseAction() && !c.autoAttackStarted)
     {
         bool found = false;
         bool inAir = c.IsInAir();
         float speed = c.GetCurrentSpeed();
         // skill
         for(int i=0; i<this.skillID.Length; i++)
         {
             if(inAir == this.skillAir[i] && (this.skillAir[i] || speed >= this.skillSpeed[i]) &&
                 this.ControlAccepted(this.skillKey[i], this.skillAxis[i], this.skillTrigger[i]))
             {
                 if(c.HasSkill(this.skillID[i], 0))
                 {
                     SkillLearn sk = c.GetSkill(this.skillID[i]);
                     sk.SetHighestUseLevel(c);
                     if(sk.CanUse(c))
                     {
                         if(DataHolder.Skill(sk.skillID).TargetSelf())
                         {
                             c.AddSkillAction(sk.skillID, sk.GetLevel(), c.battleID, true);
                         }
                         else if(DataHolder.Skill(sk.skillID).TargetNone() &&
                             !DataHolder.Skill(sk.skillID).targetRaycast.NeedInteraction())
                         {
                             c.AddSkillAction(sk.skillID, sk.GetLevel(), BattleAction.NONE, true);
                         }
                         else if(DataHolder.Skill(sk.skillID).TargetAllyGroup())
                         {
                             c.AddSkillAction(sk.skillID, sk.GetLevel(), BattleAction.ALL_CHARACTERS, true);
                         }
                         else if(DataHolder.Skill(sk.skillID).TargetEnemyGroup())
                         {
                             c.AddSkillAction(sk.skillID, sk.GetLevel(), BattleAction.ALL_ENEMIES, true);
                         }
                         // party target
                         else if(DataHolder.Skill(sk.skillID).TargetSingleEnemy() &&
                             control.usePartyTarget && control.partyTarget != null)
                         {
                             c.AddSkillAction(sk.skillID, sk.GetLevel(), BattleAction.PARTY_TARGET, true);
                         }
                         // call target selection
                         else
                         {
                             c.CallTargetMenu(BattleMenu.SKILL, sk.skillID, sk.GetLevel());
                         }
                         // only if has and can be used, else go to the next skill
                         found = true;
                         break;
                     }
                 }
             }
         }
         // item
         if(!found && this.timeout <= 0)
         {
             for(int i=0; i<this.itemID.Length; i++)
             {
                 if(inAir == this.itemAir[i] && (this.itemAir[i] || speed >= this.itemSpeed[i]) &&
                     this.ControlAccepted(this.itemKey[i], this.itemAxis[i], this.itemTrigger[i]))
                 {
                     if(GameHandler.HasItem(this.itemID[i], 1))
                     {
                         if(DataHolder.Item(this.itemID[i]).useable)
                         {
                             if(DataHolder.Item(this.itemID[i]).TargetSelf())
                             {
                                 c.AddItemAction(this.itemID[i], c.battleID, true);
                             }
                             else if(DataHolder.Item(this.itemID[i]).TargetNone() &&
                                 !DataHolder.Item(this.itemID[i]).targetRaycast.NeedInteraction())
                             {
                                 c.AddItemAction(this.itemID[i], BattleAction.NONE, true);
                             }
                             else if(DataHolder.Item(this.itemID[i]).TargetAllyGroup())
                             {
                                 c.AddItemAction(this.itemID[i], BattleAction.ALL_CHARACTERS, true);
                             }
                             else if(DataHolder.Item(this.itemID[i]).TargetEnemyGroup())
                             {
                                 c.AddItemAction(this.itemID[i], BattleAction.ALL_ENEMIES, true);
                             }
                             // party target
                             else if(DataHolder.Item(this.itemID[i]).TargetSingleEnemy() &&
                                 control.usePartyTarget && control.partyTarget != null)
                             {
                                 c.AddItemAction(this.itemID[i], BattleAction.PARTY_TARGET, true);
                             }
                             // call target selection
                             else
                             {
                                 c.CallTargetMenu(BattleMenu.ITEM, this.itemID[i], 0);
                             }
                             // only if has and can be used, else go to the next item
                             found = true;
                             break;
                         }
                     }
                 }
             }
         }
         // attack
         if(!found && this.timeout <= 0)
         {
             for(int i=0; i<this.attackKey.Length; i++)
             {
                 if(inAir == this.attackAir[i] && (this.attackAir[i] || speed >= this.attackSpeed[i]) &&
                     this.ControlAccepted(this.attackKey[i], this.attackAxis[i], this.attackTrigger[i]))
                 {
                     if(c.baIndex == i || i == 0)
                     {
                         if(i == 0 && this.attackKey.Length > 1) c.ResetBaseAttack();
                         if(control.attackPartyTarget && control.partyTarget != null &&
                             (!control.aptRange || c.InAttackRange(control.partyTarget)))
                         {
                             c.AddAttackAction(BattleAction.PARTY_TARGET, true);
                         }
                         else c.AddAttackAction(BattleAction.NONE, true);
                     }
                     break;
                 }
             }
         }
     }
 }