Basic Agent state machine that can be modified as needed for simulations.
Basic Agent state machine that can be modified as needed for simulations.
AgentStateMachine sm = new AgentStateMachine(agent.agentName, animatorWrapper, agent, agentSystem, worldStateSystem);
// Idle
sm.Configure(IdleState)
.OnEnter(() => sm.animator.Play(IdleAnim01))
.Permit((int)Trigger.Move, MoveState)
;
// Move
m.Configure(MoveState)
.OnEnter(() => sm.animator.SetParameter(MoveParam, Mathf.Clamp01(agent.speed / agent.maxSpeed)))
.OnUpdate(() => sm.animator.SetParameter(MoveParam, Mathf.Clamp01(agent.speed / agent.maxSpeed)))
.OnExit(() => sm.animator.SetParameter(MoveParam, 0.0f))
.Permit((int)Trigger.Idle, IdleState)
;
// Dead
sm.Configure(DeadState)
.OnEnter(() => sm.animator.SetParameter(DeadParam, true))
.OnExit(() => sm.animator.SetParameter(DeadParam, false))
;
// Crouch
sm.Configure(CrouchState)
.OnEnter(() => sm.animator.SetParameter(StanceParam, 1))
.OnExit(() => sm.animator.SetParameter(StanceParam, 0))
;
// Combat Engage
sm.Configure(CombatEngageState)
.OnEnter(() => sm.animator.SetParameter(EngagedParam, true))
.OnExit(() => sm.animator.SetParameter(EngagedParam, false))
;
// FireTwoHandedGunState
sm.Configure(FireGunState)
.OnEnter(() => sm.animator.SetTrigger(FireParam))
.SubstateOf(CombatEngageState)
;
sm.SetDefault(IdleState);
sm.Transition(IdleState);
RidePlayerFiniteStateMachine.drawio
Globals.api.agentSystem.SetAgentState(agent, StateMachineUtils.CrouchState);
Assets/Ride/Examples/StateMachine/StateMachine.unity