/// <summary> /// 渡されたキャラクターをバトルから削除します /// </summary> /// <param name="bal">削除するキャラクター</param> private void removeBalFromJoinedCharacter(IBattleable bal) { if (!isBattleing) { throw new InvalidOperationException("battle isn't started"); } FieldPosition pos = searchCharacter(bal); joinedCharacter [pos].Remove(bal); joinedManager[bal.getUniqueId()].finished(); joinedManager.Remove(bal.getUniqueId()); }
/// <summary> /// BattleTaskを生成します /// </summary> /// <returns>生成したタスク</returns> private BattleTask creatTask() { if (!isReady) { throw new InvalidOperationException("manager hasn't readied yet"); } IActiveSkill skill = ai.decideSkill(); if (ActiveSkillSupporter.isAffectSkill(skill)) { Extent extent = ActiveSkillSupporter.searchExtent(skill); BattleTask returnTask; //効果範囲に応じてタスクを生成 switch (extent) { case Extent.SINGLE: IBattleable target = ai.decideSingleTarget(skill); List <IBattleable> singleTargetList = new List <IBattleable>() { target }; returnTask = new BattleTask(user.getUniqueId(), skill, singleTargetList, battletaskIdCount); break; case Extent.AREA: FieldPosition pos = ai.decideAreaTarget(skill); returnTask = new BattleTask(user.getUniqueId(), skill, pos, battletaskIdCount); break; case Extent.ALL: List <IBattleable> allTargetList = BattleManager.getInstance().getJoinedBattleCharacter(); returnTask = new BattleTask(user.getUniqueId(), skill, allTargetList, battletaskIdCount); break; default: throw new NotSupportedException("unkonwn extent"); } battletaskIdCount++; return(returnTask); } else if (skill.getActiveSkillType() == ActiveSkillType.MOVE) { MoveSkill moveSkill = (MoveSkill)skill; int move = ai.decideMove(moveSkill); BattleTask returnTask = new BattleTask(user.getUniqueId(), skill, move, battletaskIdCount); battletaskIdCount++; return(returnTask); } throw new InvalidOperationException("unknown skillType"); }
/// <summary> /// 引数に渡したキャラクターをバトルに参加させます /// </summary> /// <param name="bal">参加させるキャラクター</param> /// <param name="pos">参加させる位置</param> /// <param name="ai">キャラクターのAI</param> public void joinBattle(IBattleable bal, FieldPosition pos, IEnemyAI ai) { if (!isBattleing) { throw new InvalidOperationException("battle isn't started"); } loadContainer(bal); bal.setIsBattling(true); joinedCharacter[pos].Add(bal); bal.syncronizePositioin(field.getObjectPosition(pos, bal)); AIBattleTaskManager manager = MonoBehaviour.Instantiate((GameObject)Resources.Load("Prefabs/AIBattleManager")).GetComponent <AIBattleTaskManager>(); manager.transform.SetParent(bal.getContainer().transform); manager.setCharacter(bal, ai); joinedManager.Add(bal.getUniqueId(), manager); }