86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| public class SoldierStateRun : BaseState<SoldierUnit>
 | |
| {
 | |
|     public override void EnterState(Type pLastState)
 | |
|     {
 | |
|         base.EnterState(pLastState);
 | |
| 
 | |
|         if (mMaster.AtkType == AttackType.Near)
 | |
|         {
 | |
|             mMaster.ClearDeadAtkTarget();
 | |
|             if (mMaster.HasAttackableTarget)
 | |
|             {
 | |
|                 ChangeState(typeof(SoldierStateAttack));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 mMaster.SetACTrigger(SoldierACTrigger.TriggerRun);
 | |
|             }
 | |
|         }
 | |
|         else if (mMaster.AtkType == AttackType.Far)
 | |
|         {
 | |
|             mMaster.ShootTarget = mMaster.AgainstGroup.GetNearestTarget(mMaster.transform.position, mMaster.AtkDistance);
 | |
|             if (mMaster.ShootTarget != null && !mMaster.ShootTarget.IsDead)
 | |
|             {
 | |
|                 ChangeState(typeof(SoldierStateShoot));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 mMaster.SetACTrigger(SoldierACTrigger.TriggerRun);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public override void ExecuteState(float pDeltaTime)
 | |
|     {
 | |
|         base.ExecuteState(pDeltaTime);
 | |
| 
 | |
|         if (mMaster.AtkType == AttackType.Near)
 | |
|         {
 | |
|             mMaster.ClearDeadAtkTarget();
 | |
|             if (mMaster.HasAttackableTarget)
 | |
|             {
 | |
|                 ChangeState(typeof(SoldierStateAttack));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 if (mMaster.MoveTarget != null && !mMaster.MoveTarget.IsDead)
 | |
|                 {
 | |
|                     mMaster.MoveToTarget(pDeltaTime);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     ChangeState(typeof(SoldierStateIdle));
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         else if (mMaster.AtkType == AttackType.Far)
 | |
|         {
 | |
|             mMaster.ShootTarget = mMaster.AgainstGroup.GetNearestTarget(mMaster.transform.position, mMaster.AtkDistance);
 | |
|             if (mMaster.ShootTarget != null && !mMaster.ShootTarget.IsDead)
 | |
|             {
 | |
|                 ChangeState(typeof(SoldierStateShoot));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 if (mMaster.MoveTarget != null && !mMaster.MoveTarget.IsDead)
 | |
|                 {
 | |
|                     mMaster.MoveToTarget(pDeltaTime);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     ChangeState(typeof(SoldierStateIdle));
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public override void ExitState(Type pNextState)
 | |
|     {
 | |
|         base.ExitState(pNextState);
 | |
|     }
 | |
| } |