// 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; } } }
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); } } } } }
public void SetState(GolemState s) { isFollowing = false; state = s; }