示例#1
0
文件: Golem.cs 项目: greasybear/golem
    // Update is called once per frame
    void Update()
    {
        pos = transform.position;
        if (state == GolemState.following)   //following
        {
            if (!isFollowing)
            {
                Debug.Log("set to follow");
                isFollowing  = true;
                playerOffset = pos - Player.i.pos;
                Debug.Log(playerOffset);
            }
            move.goalVector = Player.i.pos + playerOffset;
        }

        if (state == GolemState.moving)  //moving
        {
            if (Vector3.Distance(pos, move.goalVector) < .1f)
            {
                state = GolemState.following;
            }
        }
    }
示例#2
0
    void Update()
    {
        if (mState == GolemState.Dead)
        {
            return;
        }

        if (mState == GolemState.Idle)
        {
            mScanInterval -= Time.deltaTime;
            if (mScanInterval < 0)
            {
                mTarget = mCombat.Scan(mStats, AggroRange);
                if (mTarget == null)
                {
                    mScanInterval = Random.Range(1f, 3f);
                }
                else
                {
                    mState = GolemState.PissedOff;
                }
            }
            else
            {
                Vector3 mastPos = mMaster.transform.position;

                float dist = Vector3.Distance(transform.position, mastPos);

                if (dist > FollowRange)
                {
                    mState = GolemState.Following;
                }
            }
        }
        else if (mState == GolemState.Following)
        {
            Vector3 mastPos = mMaster.transform.position;

            float dist = Vector3.Distance(transform.position, mastPos);

            if (dist > FollowRange)
            {
                Vector3 move = mastPos - transform.position;

                move.Normalize();

                transform.rotation.SetLookRotation(move);

                move *= MoveSpeed * Time.deltaTime;

                transform.position += move;
            }
            else
            {
                mState = GolemState.Idle;
            }
        }
        else if (mState == GolemState.PissedOff)
        {
            if (mTarget == null)
            {
                mState = GolemState.Idle;
                return;
            }

            Vector3 targPos = mTarget.gameObject.transform.position;
            float   dist    = Vector3.Distance(transform.position, targPos);

            if (dist > AttackRange)
            {
                Vector3 move = targPos - transform.position;

                move.Normalize();

                transform.rotation.SetLookRotation(move);

                move *= MoveSpeed * Time.deltaTime;

                transform.position += move;
            }
            else
            {
                if (mStats.mCurGCD < 0)
                {
                    mCombat.Attack(mStats, mTarget);

                    mStats.mCurGCD = mStats.mGCD;

                    if (mTarget.mHealth <= 0)
                    {
                        mTarget = mCombat.Scan(mStats, AggroRange);
                    }
                }
            }
        }
    }
示例#3
0
文件: Golem.cs 项目: greasybear/golem
 public void SetState(GolemState s)
 {
     isFollowing = false;
     state       = s;
 }