Ejemplo n.º 1
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;
                 }
             }
         }
     }
 }