void ConstructStateMachine() { _fsm.AddState(States.Idle, new State() { enter = () => { // get some offset in the animation. _animator.Play("Idle", -1, Random.value); }, update = () => { DoMovementStuff(); }, }); _fsm.AddState(States.Walking, new State() { enter = () => _animator.Play("Walking"), update = () => { UpdateAnimatorSpeed(); DoMovementStuff(); }, exit = () => _animator.speed = 1f, }); _fsm.AddState(States.Flying, new State() { enter = () => _animator.Play("FlyingWalking"), update = () => { UpdateAnimatorSpeed(); DoMovementStuff(); }, exit = () => _animator.speed = 1f, }); _fsm.AddState(States.FollowingIdle, new State() { enter = () => { // Tell the bird set that we've been got! _birdSet.Add(_channel); // Disable the offset driver! _driveChannelByOffset.enabled = false; // Tell the fader to fade in all the way. StartCoroutine(_channel.FadeIn(_fadeInTime)); _animator.Play("Idle"); }, update = () => DoFollowStuff(), }); _fsm.AddState(States.FollowingWalking, new State() { enter = () => _animator.Play("Walking"), update = () => { UpdateAnimatorSpeed(); DoFollowStuff(); }, exit = () => _animator.speed = 1f, }); _fsm.AddState(States.FollowingFlying, new State() { enter = () => _animator.Play("FlyingWalking"), update = () => { UpdateAnimatorSpeed(); DoFollowStuff(); }, exit = () => _animator.speed = 1f, }); _fsm.AddState(States.Disabled, new State()); _fsm.AddTransition(States.Idle, States.Walking, Triggers.Moving); _fsm.AddTransition(States.Idle, States.Flying, Triggers.Airborne); _fsm.AddTransition(States.Idle, States.FollowingIdle, Triggers.FollowingTarget); _fsm.AddTransition(States.Walking, States.Idle, Triggers.NotMoving); _fsm.AddTransition(States.Walking, States.Flying, Triggers.Airborne); _fsm.AddTransition(States.Walking, States.FollowingIdle, Triggers.FollowingTarget); _fsm.AddTransition(States.Flying, States.Idle, Triggers.Grounded); _fsm.AddTransition(States.Flying, States.FollowingIdle, Triggers.FollowingTarget); _fsm.AddTransition(States.FollowingIdle, States.FollowingWalking, Triggers.Moving); _fsm.AddTransition(States.FollowingIdle, States.FollowingFlying, Triggers.Airborne); _fsm.AddTransition(States.FollowingWalking, States.FollowingIdle, Triggers.NotMoving); _fsm.AddTransition(States.FollowingWalking, States.FollowingFlying, Triggers.Airborne); _fsm.AddTransition(States.FollowingFlying, States.FollowingIdle, Triggers.Grounded); _fsm.AddTransitionAll(States.Disabled, Triggers.Disable, false); }
void ConstructStateMachine() { // States. _fsm.AddState(States.Idle, new State() { enter = () => _animator.Play("Idle"), update = DoMovementStuff, }); _fsm.AddState(States.Walking, new State() { enter = () => _animator.Play("Walking"), update = () => { DoMovementStuff(); var speed = NonVerticalMovement.magnitude / _speed; _animator.speed = speed; }, exit = () => _animator.speed = 1f, }); _fsm.AddState(States.MaybeFlying, new TimerState(0.2f) { update = () => DoMovementStuff(), timeout = () => _fsm.SetTrigger(Triggers.ForceExit), }); _fsm.AddState(States.Flying, new State() { enter = () => _animator.Play("FlyingWalking"), update = () => { DoMovementStuff(); var speed = NonVerticalMovement.magnitude / _speed; _animator.speed = speed; }, exit = () => { // Add camera trauma // var normalizedVelocity = Mathf.Lerp(_minFallVel, _maxFallVel, Mathf.Abs(_moveDirection.y)); // _trauma.AddTrauma(normalizedVelocity * _cameraTrauma); _trauma.AddTrauma(_cameraTrauma); // Set animator speed back. _animator.speed = 1f; }, }); _fsm.AddState(States.Disabled, new State() { }); // Transitions. _fsm.AddTransition(States.Idle, States.Walking, Triggers.Moving); _fsm.AddTransition(States.Idle, States.MaybeFlying, Triggers.Airborne); _fsm.AddTransition(States.Walking, States.Idle, Triggers.NotMoving); _fsm.AddTransition(States.Walking, States.MaybeFlying, Triggers.Airborne); _fsm.AddTransition(States.MaybeFlying, States.Idle, Triggers.Grounded, Triggers.NotMoving); _fsm.AddTransition(States.MaybeFlying, States.Walking, Triggers.Grounded); _fsm.AddTransition(States.MaybeFlying, States.Flying, Triggers.ForceExit); _fsm.AddTransition(States.Flying, States.Idle, Triggers.Grounded); _fsm.AddTransitionAll(States.Disabled, Triggers.Disable, false); }