예제 #1
0
 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);
     }
 }
예제 #2
0
 public override void CheckTransitions(Transform transform, PlayerControllerStateInfo stateInfo)
 {
     if (stateInfo.Input.SpacebarInput > 0)
     {
         ChangeState(transform, stateInfo, ControlStateMachine.StateNames.JumpState);
     }
 }
예제 #3
0
 public override void CheckTransitions(Transform transform, PlayerControllerStateInfo stateInfo)
 {
     if (stateInfo.Speed <= stateInfo.MaxSpeed)
     {
         ChangeState(transform, stateInfo, ControlStateMachine.StateNames.DefaultState);
     }
 }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
    // 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);
    }
예제 #7
0
 public override void OnEnter(Transform transform, PlayerControllerStateInfo stateInfo)
 {
     // no-op
 }
예제 #8
0
 public override void OnEnter(Transform transform, PlayerControllerStateInfo stateInfo)
 {
     stateInfo.Speed = stateInfo.BoostSpeed;
 }