void UpdateVelocityUnit(PlayerControllerStateInfo stateInfo, float deltaTime) { if (stateInfo.Input.VerticalInput > 0) { stateInfo.Speed += stateInfo.Acceleration * Time.fixedDeltaTime * stateInfo.Input.VerticalInput; stateInfo.Speed = Mathf.Min(stateInfo.Speed, stateInfo.MaxSpeed); } else if (stateInfo.Input.VerticalInput < 0) { stateInfo.Speed += stateInfo.Deceleration * Time.fixedDeltaTime * stateInfo.Input.VerticalInput; stateInfo.Speed = Mathf.Max(stateInfo.Speed, 0f); } if (stateInfo.Input.HorizontalInput > 0) { stateInfo.TurnRate = Mathf.Min(stateInfo.TurnRate + (stateInfo.TurnDelta * deltaTime * stateInfo.Input.HorizontalInput), stateInfo.MaxTurnRate); } else if (stateInfo.Input.HorizontalInput < 0) { stateInfo.TurnRate = Mathf.Max(stateInfo.TurnRate + (stateInfo.TurnDelta * deltaTime * stateInfo.Input.HorizontalInput), stateInfo.MaxTurnRate * -1); } else // no input - Turn Rate should go to zero { stateInfo.TurnRate = stateInfo.TurnRate > 0 ? Mathf.Min(stateInfo.TurnRate + stateInfo.TurnDelta * deltaTime * stateInfo.Input.HorizontalInput, 0f): Mathf.Max(stateInfo.TurnRate - stateInfo.TurnDelta * deltaTime * stateInfo.Input.HorizontalInput, 0f); } }
public override void CheckTransitions(Transform transform, PlayerControllerStateInfo stateInfo) { if (stateInfo.Input.SpacebarInput > 0) { ChangeState(transform, stateInfo, ControlStateMachine.StateNames.JumpState); } }
public override void CheckTransitions(Transform transform, PlayerControllerStateInfo stateInfo) { if (stateInfo.Speed <= stateInfo.MaxSpeed) { ChangeState(transform, stateInfo, ControlStateMachine.StateNames.DefaultState); } }
public override void Update(Transform transform, PlayerControllerStateInfo stateInfo, float deltaTime) { stateInfo.Speed -= stateInfo.BoostDegredation * deltaTime; var Velocity = transform.forward * stateInfo.Speed * deltaTime; transform.Translate(Velocity, Space.World); }
public override void Update(Transform transform, PlayerControllerStateInfo stateInfo, float deltaTime) { UpdateVelocityUnit(stateInfo, Time.fixedDeltaTime); var Velocity = transform.forward * stateInfo.Speed * deltaTime; transform.Translate(Velocity, Space.World); transform.Rotate(transform.up, stateInfo.TurnRate, Space.World); }
// Start is called before the first frame update void Start() { VelocityUnit = Vector3.forward; // attach the properties of the PlayerController to a StateInfoObject StateInfo = new PlayerControllerStateInfo { Acceleration = GasAcceleration, Deceleration = BreakAcceleration, Speed = Speed, MaxSpeed = MaxSpeed, MinSpeed = 0f, MaxTurnRate = MaxTurnRate, BaseTurnDelta = BaseTurnDelta, Input = new BaseInputStateInfo(), BoostSpeed = BoostSpeed, BoostDegredation = BoostDegredation, BaseTurnRateSpeedAdjustmentConstant = BaseTurnRateSpeedAdjustmentConstant }; ControlStateMachine = new ControlStateMachine(); ControlStateMachine.AddState(ControlStateMachine.StateNames.DefaultState, new MovementControlState()); ControlStateMachine.AddState(ControlStateMachine.StateNames.JumpState, new BoostControlState()); ControlStateMachine.SetInitialState(ControlStateMachine.StateNames.DefaultState); }
public override void OnEnter(Transform transform, PlayerControllerStateInfo stateInfo) { // no-op }
public override void OnEnter(Transform transform, PlayerControllerStateInfo stateInfo) { stateInfo.Speed = stateInfo.BoostSpeed; }