| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  | using System; | 
					
						
							|  |  |  |  | using System.Collections; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | public class SoldierStateShoot : BaseState<SoldierUnit> | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     private TimerUnit mShootTimer; | 
					
						
							|  |  |  |  |     private TimerUnit mActiveTimer; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private float mAtkAniLength = 1; | 
					
						
							|  |  |  |  |     private GameObject mArrowPrefab; | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     public override void EnterState(Type pLastState) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         base.EnterState(pLastState); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (mShootTimer == null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mShootTimer = TimerManager.Instance.CreateTimerUnit(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (mActiveTimer == null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mActiveTimer = TimerManager.Instance.CreateTimerUnit(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (mArrowPrefab == null) | 
					
						
							|  |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2022-07-04 11:17:39 +00:00
										 |  |  |  |             mArrowPrefab = ResourceManager.Instance.LoadRes<GameObject>(Const.Path.GetBullet(mMaster.BType, mMaster.Level, mMaster.Group == GroupType.Player)); | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |         mAtkAniLength = mMaster.MetaData.AtkAniLength; | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         ShootOnce(); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public override void ExecuteState(float pDeltaTime) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         base.ExecuteState(pDeltaTime); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     public override void ExitState(Type pNextState) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         base.ExitState(pNextState); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         mActiveTimer.CancelTimer(); | 
					
						
							|  |  |  |  |         mShootTimer.CancelTimer(); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void ShootOnce() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         mMaster.ShootTarget = mMaster.AgainstGroup.GetNearestTarget(mMaster.transform.position, mMaster.AtkDistance); | 
					
						
							|  |  |  |  |         if (mMaster.ShootTarget != null && !mMaster.ShootTarget.IsDead) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mMaster.LookToTarget(mMaster.ShootTarget.RelativePos(mMaster.RelativePos())); | 
					
						
							|  |  |  |  |             mMaster.SetACTrigger(SoldierACTrigger.TriggerAttack, Mathf.Max(mAtkAniLength / mMaster.AtkInterval, mAtkAniLength)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             mActiveTimer.StartTimer(ActiveOnce, Mathf.Min(mAtkAniLength * 0.6f, mMaster.AtkInterval * 0.6f)); | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  |             mShootTimer.StartTimer(ShootOnce, mMaster.AtkInterval); | 
					
						
							|  |  |  |  |             //mShootTimer.StartTimer(ShootOnce, Mathf.Min(mAtkAniLength, mMaster.AtkInterval)); | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  |         else | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             ChangeState(typeof(SoldierStateIdle)); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     private void ActiveOnce() | 
					
						
							|  |  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-07-04 11:17:39 +00:00
										 |  |  |  |         GameObject tAtkFx = ResourceManager.Instance.LoadRes<GameObject>(Const.Path.GetAtkFx(mMaster.BType, mMaster.Level, mMaster.Group == GroupType.Player)); | 
					
						
							| 
									
										
										
										
											2022-05-24 15:07:04 +00:00
										 |  |  |  |         if (tAtkFx != null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             Transform tFxTrans = mMaster.AtkTrans ? mMaster.AtkTrans : mMaster.transform; | 
					
						
							|  |  |  |  |             GameObject.Instantiate(tAtkFx, tFxTrans.position, tFxTrans.rotation); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |         Arrow tArrow = GameObject.Instantiate(mArrowPrefab).GetComponent<Arrow>(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         Vector3 tInitPos = mMaster.AtkTrans ? mMaster.AtkTrans.position : mMaster.RelativePos() + Vector3.up; | 
					
						
							| 
									
										
										
										
											2022-05-24 15:07:04 +00:00
										 |  |  |  |         Vector3 tTargetPos = mMaster.ShootTarget.HitTrans ? mMaster.ShootTarget.HitTrans.position : mMaster.ShootTarget.RelativePos() + Vector3.up; | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-24 15:07:04 +00:00
										 |  |  |  |         tArrow.Init(Utils.CountDamage(mMaster.Level, mMaster.ShootTarget.Level, mMaster.Damage), tInitPos, tTargetPos, mMaster.ShootTarget); | 
					
						
							| 
									
										
										
										
											2022-05-23 13:39:59 +00:00
										 |  |  |  |     } | 
					
						
							|  |  |  |  | } |