public void Simulate(ref PlayerState state, PlayerInputContext input)
        {
            ApplyGravity(ref state);
            LimitFallSpeed(ref state);

            Physics.SyncTransforms();
            // TODO(james7132): Move this somewhere more sane.
            Platform.CollisionStatusCheckAll(CharacterController);

            if (state.IsGrabbingLedge)
            {
                SnapToLedge(ref state);
                state.GrabbedLedgeTimer--;
                if (state.GrabbedLedgeTimer <= 0)
                {
                    state.ReleaseLedge();
                }
            }
            else
            {
                var wasGrounded = IsCharacterGrounded(state);
                CharacterController.Move(state.Velocity * Time.fixedDeltaTime);
                state.Position = transform.position;
                if (wasGrounded)
                {
                    state = SnapToGround(state);
                }
                if (state.GrabbedLedgeTimer < 0)
                {
                    state.GrabbedLedgeTimer++;
                }
            }
        }
        public void Simulate(ref PlayerState state, PlayerInputContext input)
        {
            var matchHitboxes  = MatchHitboxSimulation.Instance?.ActiveHitboxes;
            var matchHurtboxes = MatchHitboxSimulation.Instance?.ActiveHurtboxes;

            if (matchHitboxes != null)
            {
                foreach (var hitbox in Hitboxes)
                {
                    if (!hitbox.IsActive)
                    {
                        continue;
                    }
                    matchHitboxes.Add(hitbox);
                }
            }
            if (matchHurtboxes != null)
            {
                foreach (var hurtbox in Hurtboxes)
                {
                    if (!hurtbox.isActiveAndEnabled)
                    {
                        continue;
                    }
                    matchHurtboxes.Add(hurtbox);
                }
            }
        }
        public PlayerState Simulate(PlayerState state, PlayerInputContext input)
        {
            //var machineState = GetState(state.StateHash);
            //var shieldActive = machineState != null && validStates.Contains(machineState);
            var wasActive    = false;
            var shieldActive = false;

            if (shieldActive)
            {
                state.ShieldDamage = Math.Min(MaxShieldHealth, state.ShieldDamage + DepletionRate);
                if (state.ShieldDamage <= 0f)
                {
                    //TODO(james7132): Do ShieldBreak check here.
                }
            }
            else
            {
                if (wasActive)
                {
                    state.ShieldRecoveryCooldown = RecoveryCooldown;
                }
                else
                {
                    state.ShieldRecoveryCooldown = (uint)Mathf.Max(0, state.ShieldRecoveryCooldown - 1);
                }
                if (state.ShieldRecoveryCooldown <= 0)
                {
                    state.ShieldDamage = Math.Max(0, state.ShieldDamage - RegenRate);
                }
            }
            return(state);
        }
Esempio n. 4
0
 public PlayerState Simulate(PlayerState state, PlayerInputContext input)
 {
     if (!state.IsGrabbingLedge)
     {
         var ledge = CheckForLedges(state);
         if (ledge != null)
         {
             bool occupied = false;
             for (uint i = 0; i < state.MatchState.PlayerCount; i++)
             {
                 var player = state.MatchState.GetPlayerState(i);
                 occupied |= player.GrabbedLedgeID == ledge?.Id;
             }
             if (!occupied && ledge != null)
             {
                 state.GrabbedLedgeID = ledge.Id;
             }
         }
         if (state.IsGrabbingLedge)
         {
             Debug.LogWarning("GRABBING LEDGE");
         }
     }
     return(state);
 }
Esempio n. 5
0
 public override void Move(ref PlayerState state, PlayerInputContext input)
 {
     if (input.Smash.Value.y < -DirectionalInput.DeadZone)
     {
         state.IsFastFalling = true;
     }
     Character.ApplyControlledMovement(ref state, input.Movement.Value);
 }
Esempio n. 6
0
 public override void Move(ref PlayerState state, PlayerInputContext input)
 {
     state.Velocity = Vector3.zero;
     if (input.Movement.Direction == Direction.Down)
     {
         state.ReleaseLedge();
     }
 }
Esempio n. 7
0
 public override void Move(ref PlayerState state, PlayerInputContext input)
 {
     state.Velocity = Vector3.zero;
     if (input.Movement.Direction != Direction.Neutral)
     {
         state.RespawnTimeRemaining = 0;
     }
 }
Esempio n. 8
0
 public void Simulate(ref PlayerState state, PlayerInputContext input)
 {
     foreach (var mover in Movers)
     {
         if (mover.ShouldMove(ref state))
         {
             mover.Move(ref state, input);
         }
     }
 }
Esempio n. 9
0
        public override void Move(ref PlayerState state, PlayerInputContext input)
        {
            var smashY = input.Smash.Value.y;

            if (smashY < 0 && InputUtil.OutsideDeadZone(smashY))
            {
                state.IsFastFalling = true;
            }
            Character.ApplyControlledMovement(ref state, input.Movement.Value);
        }
Esempio n. 10
0
 public void Simulate(ref PlayerState state, PlayerInputContext input)
 {
     if (!state.IsGrabbingLedge && state.GrabbedLedgeTimer >= 0)
     {
         var ledge = CheckForLedges(state);
         if (ledge?.IsOccupied(state.MatchState) == false)
         {
             state.GrabLedge(ledge);
         }
     }
 }
Esempio n. 11
0
 public void Simulate(ref PlayerState state, PlayerInputContext input)
 {
     if (state.RespawnTimeRemaining > 0)
     {
         state.RespawnTimeRemaining--;
     }
     else
     {
         state.RespawnTimeRemaining = 0;
     }
 }
Esempio n. 12
0
 public PlayerState Simulate(PlayerState state, PlayerInputContext input)
 {
     foreach (var mover in Movers)
     {
         if (mover.ShouldMove(state))
         {
             return(mover.Move(state, input));
         }
     }
     return(state);
 }
Esempio n. 13
0
 public PlayerState Simulate(PlayerState state, PlayerInputContext input)
 {
     if (state.RespawnTimeRemaining > 0)
     {
         state.RespawnTimeRemaining--;
     }
     else
     {
         state.RespawnTimeRemaining = 0;
     }
     return(state);
 }
        public PlayerState Simulate(PlayerState state, PlayerInputContext input)
        {
            ApplyGravity(ref state);
            LimitFallSpeed(ref state);

            Physics.SyncTransforms();
            // TODO(james7132): Move this somewhere more sane.
            Platform.CollisionStatusCheckAll(CharacterController);
            CharacterController.Move(state.Velocity * Time.fixedDeltaTime);
            state.Position = transform.position;
            return(state);
        }
Esempio n. 15
0
 public void Reset(MatchInput current)
 {
     if (PlayerInputs?.Length != current.PlayerCount)
     {
         PlayerInputs = new PlayerInputContext[current.PlayerCount];
     }
     for (int i = 0; i < PlayerInputs.Length; i++)
     {
         PlayerInputs[i] = new PlayerInputContext {
             Current = current[i]
         };
     }
 }
Esempio n. 16
0
        public PlayerState Simulate(PlayerState state, PlayerInputContext input)
        {
            context.State       = state;
            context.Input       = input;
            context.IsGrounded  = Physics.IsGrounded;
            context.CanJump     = state.RemainingJumps > 0;
            context.StateLength = StateController.CurrentState.Data.Length;

            StateController.UpdateState(context);

            state         = context.State;
            state.StateID = StateController.CurrentState.Id;
            return(state);
        }
Esempio n. 17
0
 public void Simulate(ref PlayerState state, PlayerInputContext input)
 {
     if (IsShieldActive(ref state))
     {
         state.ShieldDamage           = Math.Min(MaxShieldHealth, state.ShieldDamage + DepletionRate);
         state.ShieldRecoveryCooldown = RecoveryCooldown;
     }
     else
     {
         state.ShieldRecoveryCooldown = (uint)Mathf.Max(0, (int)state.ShieldRecoveryCooldown - 1);
         if (state.ShieldRecoveryCooldown <= 0)
         {
             state.ShieldDamage = (uint)Math.Max(0, (int)state.ShieldDamage - RegenRate);
         }
     }
 }
        public void Simulate(ref PlayerState state, PlayerInputContext input)
        {
            var controllerState = GetControllerState(ref state);

            context.State        = state;
            context.Input        = input;
            context.ShieldBroken = Shield.IsShieldBroken(ref state);
            context.IsGrounded   = Physics.IsGrounded;
            context.CanJump      = Movement.CanJump(state);
            context.StateLength  = controllerState.Data.Length;

            controllerState = StateController.UpdateState(controllerState, context);
            controllerState.Simulate(ref context.State, input);
            state = context.State;

            state.StateID = controllerState.Id;
        }
Esempio n. 19
0
 public void Simulate(ref PlayerState state, PlayerInputContext input)
 {
     if (state.IsTeetering)
     {
         if (state.Velocity != Vector2.zero)
         {
             state.IsTeetering = false;
         }
     }
     else
     {
         if (state.Velocity == Vector2.zero)
         {
             state.IsTeetering = CheckForTeeter(state);
         }
     }
 }
Esempio n. 20
0
        public override PlayerState Move(PlayerState state, PlayerInputContext input)
        {
            var inputMovement = input.Current.Movement;

            state.VelocityX      = inputMovement.x;
            state.IsFastFalling  = false;
            state.RemainingJumps = (uint)Character.MaxJumpCount;
            var horizontalMovement = input.Movement.Value.x;

            if (horizontalMovement > DirectionalInput.DeadZone)
            {
                state.Direction = true;
            }
            else if (horizontalMovement < -DirectionalInput.DeadZone)
            {
                state.Direction = false;
            }
            Character.ApplyControlledMovement(ref state, input.Movement.Value);
            if (input.Jump.WasPressed)
            {
                Character.Jump(ref state);
            }
            return(state);
        }
Esempio n. 21
0
 public abstract PlayerState Move(PlayerState state, PlayerInputContext input);
Esempio n. 22
0
 public override PlayerState Move(PlayerState state, PlayerInputContext input) => state;
 public void Simulate(ref PlayerState state, PlayerInputContext input)
 {
     state.StateTick++;
     ApplyState(ref state);
 }
 public PlayerState Simulate(PlayerState state, PlayerInputContext input)
 {
     state.StateTick++;
     ApplyState(state);
     return(state);
 }
Esempio n. 25
0
 public override PlayerState Move(PlayerState state, PlayerInputContext input)
 {
     state.Velocity = Vector3.zero;
     return(state);
 }
Esempio n. 26
0
 public void Simulate(ref PlayerState state, PlayerInputContext simulate)
 {
 }
Esempio n. 27
0
 public override void Move(ref PlayerState state, PlayerInputContext input)
 {
 }
Esempio n. 28
0
 public abstract void Move(ref PlayerState state, PlayerInputContext input);
Esempio n. 29
0
 public override void Move(ref PlayerState state, PlayerInputContext input)
 {
     state.IsFastFalling = false;
     state.JumpCount     = 0;
     Character.ApplyControlledMovement(ref state, input.Movement.Value);
 }