void Start()
 {
     instance = this;
     SetVisibility(false);
     currActionState = MonsterActionState.Rest;
     //SetVisibility(true);
 }
예제 #2
0
	protected override void ActionStateFSM(MonsterActionState _nextActionState)
	{
		switch (_nextActionState)
		{
			case MonsterActionState.Idle:
			case MonsterActionState.Walk:
			case MonsterActionState.Attack:
				StartAction(_nextActionState.ToString(), StopActionDelegate);
				break;
		}
	}
예제 #3
0
		/// <summary>action 초기화</summary>
		protected void InitActionState(MonsterActionState _initActionState)
		{
			mCurrentActoin = MonsterActionState.None;
			mNexttActoin = _initActionState;
		}
예제 #4
0
		/// <summary>다음 action을 설정하는 기본 Method (virtual)</summary>
		protected virtual void SetActionState(MonsterActionState _nextActionState)
		{
			mNexttActoin = _nextActionState;
		}
예제 #5
0
		IEnumerator ActionStateLoopFSM()
		{
			while (true)
			{
				yield return null;
				if (mCurrentActoin != mNexttActoin)
				{
					mCurrentActoin = mNexttActoin;
					ActionStateFSM(mNexttActoin);
				}
			}
		}
예제 #6
0
		/// <summary>action이 변경될 때 실행되는 부분 (abstract)\n이 Method로 직접 state를 변경하면 안 된다</summary>
		protected abstract void ActionStateFSM(MonsterActionState _nextActionState);
예제 #7
0
 /// <summary>
 /// 队伍执行下一个动作
 /// </summary>
 /// <param name="turn">当前回合数</param>
 /// <param name="enemy">敌人(玩家队伍)</param>
 /// <returns>本次行动日志</returns>
 public string DoNextAction(int turn, PlayerTeam enemy)
 {
     Unit nextActionUnit = null;
     double maxValue = 0;
     double randValue = 0;
     int count = 0;
     //根据队伍行动状态选取下一个行动单位并执行动作
     if (this.ActionState == MonsterActionState.AllReady)
     {
         //随机选取未行动的Boss
         for (int i = 0; i < Bosses.Length; i++)
         {
             if (Bosses[i].ActionState == UnitActionState.Ready)
             {
                 count++;
                 randValue = RandomBuilder.GetDouble();
                 if (randValue > maxValue)
                 {
                     nextActionUnit = Bosses[i];
                     maxValue = randValue;
                 }
             }
         }
         //最后一个Boss行动,修改队伍行动状态
         if (count <= 1)
         {
             this.ActionState = MonsterActionState.BossDone;
         }
     }
     //无Boss行动 选取精英行动
     if (nextActionUnit == null && this.ActionState == MonsterActionState.BossDone)
     {
         //随机选取未行动的精英
         for (int i = 0; i < Elites.Length; i++)
         {
             if (Elites[i].ActionState == UnitActionState.Ready)
             {
                 count++;
                 randValue = RandomBuilder.GetDouble();
                 if (randValue > maxValue)
                 {
                     nextActionUnit = Elites[i];
                     maxValue = randValue;
                 }
             }
         }
         //如果为最后一个精英行动,修改队伍行动状态
         if (count <= 1)
         {
             this.ActionState = MonsterActionState.ElitesDone;
         }
     }
     //无Boss和精英行动 选取喽啰行动
     if (nextActionUnit == null && this.ActionState == MonsterActionState.ElitesDone)
     {
         //随机选取未行动的喽啰
         for (int i = 0; i < Minions.Length; i++)
         {
             if (Minions[i].ActionState == UnitActionState.Ready)
             {
                 count++;
                 randValue = RandomBuilder.GetDouble();
                 if (randValue > maxValue)
                 {
                     nextActionUnit = Minions[i];
                     maxValue = randValue;
                 }
             }
         }
         //如果为最后一个喽啰动,修改队伍行动状态
         if (count <= 1)
         {
             this.ActionState = MonsterActionState.AllDone;
         }
     }
     //如果无可行动单位,返回空字符串
     if (nextActionUnit == null)
     {
         return "";
     }
     else
     {
         //执行该单位动作
         return nextActionUnit.Action(turn, enemy);
     }
 }
예제 #8
0
 /// <summary>
 /// 重置所有单位的行动状态
 /// </summary>
 public void ResetActionState()
 {
     if (this.ActionState != MonsterActionState.AllDead)
     {
         //重置Boss行动状态
         for (int i = 0; i < Bosses.Length; i++)
         {
             Bosses[i].ResetActionState();
         }
         //重置精英的行动状态
         for (int i = 0; i < Elites.Length; i++)
         {
             Elites[i].ResetActionState();
         }
         //重置喽啰的行动状态
         for (int i = 0; i < Minions.Length; i++)
         {
             Minions[i].ResetActionState();
         }
         //修改队伍行动状态
         this.ActionState = MonsterActionState.AllReady;
     }
 }
 public void PersecutionMode()
 {
     currActionState = MonsterActionState.Persecution;
 }