예제 #1
0
        private void moveSubscription(MoveInputData i)
        {
            var wasGrounded = _characterController.isGrounded;

            // Vertical movement:
            var verticalVelocity = 0f;

            // The character is ...
            if (i.Jump && wasGrounded)
            {
                // ... grounded and wants to jump.

                verticalVelocity = jumpForceMagnitude;
                _jumped.OnNext(Unit.Default);
            }
            else if (!wasGrounded)
            {
                // ... in the air.

                verticalVelocity = _characterController.velocity.y + Physics.gravity.y * Time.deltaTime * 3.0f;
            }
            else
            {
                // ... otherwise grounded.

                verticalVelocity = -Mathf.Abs(stickToGroundForceMagnitude);
            }

            // Horizontal movement:
            var currentSpeed       = firstPersonControllerInput.Run.Value ? runSpeed : walkSpeed;
            var horizontalVelocity = i.Move * currentSpeed; //Calculate velocity (direction * speed).

            // Combine horizontal and vertical movement.
            var characterVelocity = transform.TransformVector(new Vector3(
                                                                  horizontalVelocity.x,
                                                                  verticalVelocity,
                                                                  horizontalVelocity.y));

            // Apply movement.
            var distance = characterVelocity * Time.deltaTime;

            _characterController.Move(distance);

            // Set ICharacterSignals output signals related to the movement.
            HandleLocomotionCharacterSignalsIteration(wasGrounded, _characterController.isGrounded);
        }
 public bool Validate(MoveInputData data)
 {
     return(ValidateEntityTwoHanded(data.SlotTo, data.EntitySource) &&
            ValidateEntityOneHanded(data.SlotTo, data.EntitySource));
 }
예제 #3
0
 public bool Validate(MoveInputData data) => ValidateStatsRequired(data.ToInventory, data.EntitySource);
예제 #4
0
 public bool Validate(MoveInputData data)
 {
     return(OnlyForIsHotBarItem(data.ToInventory, data.EntitySource) &&
            NoMoveFromInventory(data.FromInventory, data.ToInventory) &&
            NoMoveInHotBarIfHaveSameId(data.FromInventory, data.ToInventory, data.EntitySource));
 }
예제 #5
0
 public bool Validate(MoveInputData data)
 {
     return(MoveOnlyIntoGroup(data));
 }
 public bool Validate(MoveInputData data) => ValidateDamned(data);
예제 #7
0
 public bool Validate(MoveInputData data) => !(data.ToInventory == _dummy.DataInventory && data.AmountWantPut > 1);
 public bool Validate(MoveInputData data) =>
 ValidateBodyPart(data.ToInventory, data.EntitySource, data.SlotTo);