Beispiel #1
0
    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();
        }
    }
Beispiel #2
0
 public override void Move(Vector3 forceVector)
 {
     base.Move(GetNormDirectionToMove(forceVector));
     if (UnitBoneAnimator.CurrentState != BoneAnimator.AnimationState.Move)
     {
         UnitBoneAnimator.SetTrigger(BoneAnimator.AnimationState.Move);
     }
 }
Beispiel #3
0
 public override void OnCreated()
 {
     base.OnCreated();
     _isCheckInvincible    = false;
     _isValid              = true;
     _uiEnemyStateView     = null;
     CurrentPriorAggroUnit = null;
     CurrentAggroUnit      = null;
     UnitActivity          = Activity.Rest;
     UnitBoneAnimator.Initialize();
     _navMeshAgent.enabled = true;
     MaxLifeSpanCount      = inner_LifespanCount = 0;
     ReservationActionList.Clear();
     SpellTransactionFlag = false;
     CurrentPattern       = null;
     FixLookForwardFlag   = false;
 }
Beispiel #4
0
    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;
    }