예제 #1
0
        /// <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());
        }
예제 #2
0
        /// <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");
        }
예제 #3
0
        /// <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);
        }