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