Beispiel #1
0
    public void setState(EUnitState state, object param1 = null)
    {
        if (currentState == state)
        {
            return;
        }

        switch (state)
        {
        case EUnitState.Idle: StartCoroutine("idle"); break;

        case EUnitState.Attack1: StartCoroutine("attack1"); break;

        case EUnitState.Attack2: StartCoroutine("attack2"); break;

        case EUnitState.Attack3: StartCoroutine("attack3"); break;

        case EUnitState.RangeAtk: StartCoroutine("rangeAtk"); break;

        case EUnitState.Run: StartCoroutine("run"); break;

        default:
            break;
        }

        currentState = state;
    }
Beispiel #2
0
    void Update()
    {
        switch (_state)
        {
        case EUnitState.Stop:
            break;

        case EUnitState.Move:
            MajActualFloor();
            _currentTileId = MajCurrentTileId(_currentTileId, _currentTile);
            _nextTile      = GetNexTile(_currentTileId);
            if (_nextTile != null)
            {
                MoveToTile(_nextTile);
            }
            break;

        case EUnitState.SearchPath:
            MajActualFloor();
            if (PathData != null && _currentTile != null)
            {
                _pathToFollow = FloorManager.Instance.GetPath(_currentTile, PathData.destinationTile);
                SetOnTopOfObject(_currentTile.transform);
                _state = EUnitState.Move;
            }
            else
            {
                Debug.Log("No path data or currentTile for this Unit : " + this.name);
            }
            break;
        }
    }
Beispiel #3
0
    //AnimatorController通知状态改变
    public void OnNotifyAnimationStateEnter(AnimatorStateInfo stateInfo)
    {
        string preStateName = CurrentAnimatorState;

        string StateName = string.Empty;

        if (!StateDic.TryGetValue(stateInfo.shortNameHash, out StateName))
        {
            return;
        }

        CurrentAnimatorState = StateName;

        EUnitState unitState = EUnitState.None;

        NameToStateDic.TryGetValue(StateName, out unitState);
        if (unitState != EUnitState.None)
        {
            EUnitState preState = UnitState;
            UnitState = unitState;
            UnitStateChanged?.Invoke(preState, UnitState);
        }

        AnimatorStateChanged?.Invoke(preStateName, CurrentAnimatorState);
    }
Beispiel #4
0
 internal void Interuptor(bool a_state)
 {
     if (!a_state)
     {
         _state = EUnitState.Stop;
     }
     if (a_state)
     {
         _state = EUnitState.SearchPath;
     }
 }
Beispiel #5
0
        protected void InitActUnit(GameObject go, Transform model)
        {
            mGameObject = go;
            mTransform  = go.transform;
            mModelTrans = model;

            if (null != mModelTrans)
            {
                mCachedAnimation = mModelTrans.GetComponent <Animation>();
            }

            // controller.
            mController = go.GetComponent <CharacterController>();
            if (mController)
            {
                mController.enabled = false;
                mRadius             = Mathf.Max(mRadius, mController.radius);
            }

            // setup radius.
            mCollider = go.GetComponent <Collider>();
            if (mCollider && mCollider is CapsuleCollider)
            {
                mRadius = (mCollider as CapsuleCollider).radius;
            }

            for (int i = 0; i < mVariables.Length; i++)
            {
                mVariables[i] = new CustomVariable();
            }

            // build the cache layer mask
            // for unit raycast params.
            for (int i = 0; i < 32; i++)
            {
                if (!Physics.GetIgnoreLayerCollision(go.layer, i))
                {
                    mCacheLayerMask |= (1 << i);
                }
            }

            mDead        = false;
            mOnGround    = false;
            mOnTouchWall = false;
            mOnHighest   = false;
            mDead        = false;
            mHitTarget   = null;

            mState        = EUnitState.Normal;
            mPosition     = mTransform.position;
            mOrientation  = mTransform.eulerAngles.y * Mathf.Deg2Rad;
            mActionStatus = new ActionStatus(this);
            mActionStatus.ChangeActionGroup(mActionGroupIdx);
        }
Beispiel #6
0
    public void SetState(EUnitState state)
    {
        if (UnitState == state)
        {
            return;
        }

        string StateName = string.Empty;

        //持续的状态才需要改变动作
        switch (state)
        {
        case EUnitState.Idle:
            StateName = "Idle";
            break;

        case EUnitState.Walk:
            StateName = "WalkFront";
            break;

        case EUnitState.Run:
            StateName = "RunFront";
            break;

        case EUnitState.StandDead:
            StateName = "StandDead";
            break;

        case EUnitState.AirDead:
            StateName = "StandDead";
            break;
        }

        if (!string.IsNullOrEmpty(StateName))
        {
            PlayAnimation(StateName);
        }
    }
Beispiel #7
0
 void Awake()
 {
     _state            = EUnitState.Stop;
     _currentLifePoint = lifePoint;
 }
Beispiel #8
0
    public int value; // 效果程度的数值

    #endregion Fields

    #region Constructors

    public UnitState(Skill _skill, EUnitState _state, int _value, bool _superposable = false)
    {
        skill = _skill;
        stateType = _state;
        value = _value;
        skillSuperposable = _superposable;
    }
Beispiel #9
0
 protected virtual void OnDead()
 {
     // disable the controller.
     mState = EUnitState.Die;
 }