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; } } } } }