public override void Hurt(Unit caster, int damage, TextureType type, Vector3 forceDirection, Action <Unit, Unit, Vector3> action = null) { base.Hurt(caster, damage, type, forceDirection, action); ResetFromCast(); if (State == UnitState.Lives) { UnitBoneAnimator.SetTrigger(BoneAnimator.AnimationState.Hit); } // @Temp: when it attacked in out of range, it would be tracking on you until you're in dead. if (CurrentPriorAggroUnit == null || CurrentPriorAggroUnit.State == UnitState.Dead) { CurrentPriorAggroUnit = caster; } SwitchActivity(Activity.Hunt); if (State == UnitState.Dead) { forceDirection *= (Math.Abs(CurrentHealthPoint) + 1) * 3; AddForce(forceDirection); } if (_uiEnemyStateView != null) { _uiEnemyStateView.UpdateState(); } }
public override void Move(Vector3 forceVector) { base.Move(GetNormDirectionToMove(forceVector)); if (UnitBoneAnimator.CurrentState != BoneAnimator.AnimationState.Move) { UnitBoneAnimator.SetTrigger(BoneAnimator.AnimationState.Move); } }
protected void SwitchActivity(Activity activity) { if (UnitActivity == activity && State == UnitState.Lives) { return; } switch (activity) { case Activity.Hunt: if (IsHealthBarVisibleOnlyHunt && !IsHealthBarVisibleWholeTime) { if (_uiEnemyStateView == null) { _uiEnemyStateView = ObjectManager.GetInstance.GetObject <UIEnemyStateView>(ObjectManager.PoolTag.General, HUDManager.GetInstance.EnemyHealthBarPrefab, null, GameManager.GetInstance.UIRootTransform); if (MaxLifeSpanCount != 0) { _uiEnemyStateView.SetType(UIEnemyStateView.GaugeType.LifeCount); } _uiEnemyStateView.SetTrigger(this); } } if (!IsAnyObstacleBetweenFocus) { UpdateTension(); } break; case Activity.Rest: if (IsHealthBarVisibleOnlyHunt && !IsHealthBarVisibleWholeTime) { if (_uiEnemyStateView != null) { ObjectManager.RemoveObject(_uiEnemyStateView); _uiEnemyStateView = null; } } UnitBoneAnimator.SetTrigger(BoneAnimator.AnimationState.Idle); _navMeshAgent.enabled = false; break; case Activity.Returntocamp: if (IsHealthBarVisibleOnlyHunt && !IsHealthBarVisibleWholeTime) { if (_uiEnemyStateView != null) { ObjectManager.RemoveObject(_uiEnemyStateView); _uiEnemyStateView = null; } } _ignoreFocusTime = IgnoreFocusUpdateTime; break; default: throw new ArgumentOutOfRangeException(nameof(activity), activity, null); } UnitActivity = activity; }