示例#1
0
        public void attemptRopeGrab(string levelUid, int characterId)
        {
            CharacterMovementComponent characterMovementComponent = _entityManager.getComponent(levelUid, characterId, ComponentType.CharacterMovement) as CharacterMovementComponent;
            PhysicsComponent           physicsComponent           = _entityManager.getComponent(levelUid, characterId, ComponentType.Physics) as PhysicsComponent;

            attemptRopeGrab(levelUid, characterId, characterMovementComponent, physicsComponent, null);
        }
示例#2
0
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 void Start()
 {
     m_CachedCameraRaycaster   = Camera.main.GetComponent <CameraRayCaster>();
     m_CachedMovementComponent = GetComponent <CharacterMovementComponent>();
     m_CachedWeaponComponent   = GetComponent <WeaponComponent>();
     m_CachedDamageComponent   = GetComponent <DamageComponent>();
     m_CachedDamageComponent.SetCurrentTeam(CharacterTeamEnum.CharacterTeamEnum_Player);
 }
示例#3
0
        public void update(GameTime gameTime)
        {
            LevelSystem levelSystem = _systemManager.getSystem(SystemType.Level) as LevelSystem;
            string      levelUid    = LevelSystem.currentLevelUid;
            float       dt          = (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (levelSystem.finalized)
            {
                if (!_paused || _singleStep)
                {
                    List <int> characterRenderEntities = _entityManager.getEntitiesPosessing(levelUid, ComponentType.CharacterRender);

                    for (int i = 0; i < characterRenderEntities.Count; i++)
                    {
                        CharacterRenderComponent   characterRenderComponent   = _entityManager.getComponent(levelUid, characterRenderEntities[i], ComponentType.CharacterRender) as CharacterRenderComponent;
                        CharacterMovementComponent characterMovementComponent = _entityManager.getComponent(levelUid, characterRenderEntities[i], ComponentType.CharacterMovement) as CharacterMovementComponent;
                        float changeRate = 1f / _animationManager.getFPS(characterRenderComponent.character, characterRenderComponent.animation);

                        // Handle time
                        characterRenderComponent.time += dt;
                        if (characterRenderComponent.time >= changeRate)
                        {
                            int currentFrame = characterRenderComponent.currentFrame;
                            int totalFrames  = _animationManager.getFrameCount(characterRenderComponent.character, characterRenderComponent.animation);
                            int nextFrame    = currentFrame + 1;

                            characterRenderComponent.currentFrame = nextFrame == totalFrames ? 0 : nextFrame;
                            characterRenderComponent.time        -= changeRate;
                        }

                        // Update animation
                        if (characterMovementComponent.walkLeft)
                        {
                            if (characterRenderComponent.animation != "walk_left")
                            {
                                setAnimation(characterRenderComponent, "walk_left");
                            }
                        }
                        else if (characterMovementComponent.walkRight)
                        {
                            if (characterRenderComponent.animation != "walk_right")
                            {
                                setAnimation(characterRenderComponent, "walk_right");
                            }
                        }
                        else
                        {
                            if (characterRenderComponent.animation != "idle")
                            {
                                setAnimation(characterRenderComponent, "idle");
                            }
                        }
                    }
                }
                _singleStep = false;
            }
        }
示例#4
0
    public override void ApplyAbilityEffect()
    {
        CharacterMovementComponent ownerMovementComponent = m_AbilityOwner.GetComponent <CharacterMovementComponent>();

        if (ownerMovementComponent != null)
        {
            ownerMovementComponent.ApplyAttackSpeedModifier((m_AbilityConfig as FastAttackAbilityConfig).GetTimeActive());
        }
    }
示例#5
0
        public void update(GameTime gameTime)
        {
            if (!_paused || _singleStep)
            {
                if (_levelSystem.finalized)
                {
                    string     levelUid = LevelSystem.currentLevelUid;
                    List <int> wanderBehaviorEntities             = _entityManager.getEntitiesPosessing(levelUid, ComponentType.AIWanderBehavior);
                    List <WaypointsComponent> waypointsComponents = _entityManager.getComponents <WaypointsComponent>(levelUid, ComponentType.Waypoints);

                    for (int i = 0; i < wanderBehaviorEntities.Count; i++)
                    {
                        int entityId = wanderBehaviorEntities[i];
                        AIWanderBehaviorComponent  behaviorComponent = _entityManager.getComponent(levelUid, entityId, ComponentType.AIWanderBehavior) as AIWanderBehaviorComponent;
                        CharacterMovementComponent movementComponent = _entityManager.getComponent(levelUid, entityId, ComponentType.CharacterMovement) as CharacterMovementComponent;

                        if (behaviorComponent.currentDelay > 0)
                        {
                            movementComponent.walkLeft  = false;
                            movementComponent.walkRight = false;
                            behaviorComponent.currentDelay--;
                        }
                        else
                        {
                            WaypointsComponent waypointsComponent = getWaypointsComponent(behaviorComponent.waypointsUid, waypointsComponents);

                            if (waypointsComponent != null)
                            {
                                WorldPositionComponent worldPositionComponent = _entityManager.getComponent(levelUid, entityId, ComponentType.WorldPosition) as WorldPositionComponent;
                                Vector2 currentWaypoint = waypointsComponent.waypoints[behaviorComponent.currentWaypointIndex];
                                Vector2 relative        = currentWaypoint - worldPositionComponent.position;

                                movementComponent.speedLimit = behaviorComponent.walkSpeed;

                                if (relative.X > 0.25f)
                                {
                                    movementComponent.walkRight = true;
                                    movementComponent.walkLeft  = false;
                                }
                                else if (relative.X < -0.25f)
                                {
                                    movementComponent.walkLeft  = true;
                                    movementComponent.walkRight = false;
                                }
                                else
                                {
                                    behaviorComponent.currentWaypointIndex = _random.Next(waypointsComponent.waypoints.Count);
                                    behaviorComponent.currentDelay         = _random.Next(behaviorComponent.minDelay, behaviorComponent.maxDelay + 1);
                                }
                            }
                        }
                    }
                }
            }
            _singleStep = false;
        }
示例#6
0
    public void InfiniteDash()
    {
        Character[] c = FindObjectsOfType <Character>();

        foreach (Character p in c)
        {
            CharacterMovementComponent m = p.GetComponent <CharacterMovementComponent>();
            p.GetComponent <PhotonView>().RPC("NetworkDash", PhotonTargets.All, m.currentTile.position.x, m.currentTile.position.y, m._lastMoveDirection.x, m._lastMoveDirection.y, 100);
        }
    }
示例#7
0
///////////////////////////////////////////////////////////////////////////////////////////////////////
    void Start()
    {
        m_CachedPlayerGameObject        = GameObject.FindGameObjectWithTag("Player");//Replace with static helper?
        m_CachedMovementComponent       = GetComponent <CharacterMovementComponent>();
        m_CachedWeaponComponent         = GetComponent <WeaponComponent>();
        m_CachedAnimatorComponent       = GetComponent <Animator>();
        m_CachedDamageComponent         = GetComponent <DamageComponent>();
        m_CachedSpecialAbilityComponent = GetComponent <SpecialAbiltyComponent>();

        m_CachedWeaponComponent.SetCurrentTarget(m_CachedPlayerGameObject);//Target will always be player
        m_CurrentAIState = AIState.AIState_Idle;
        m_CachedDamageComponent.SetCurrentTeam(CharacterTeamEnum.CharacterTeamEnum_AI);
    }
示例#8
0
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    public override void ApplyAbilityEffect()
    {
        m_ZoneOfEffectCollisions = Physics.OverlapSphere(m_AbilityCurrentTarget.transform.position, 2f);
        foreach (Collider currentCollider in m_ZoneOfEffectCollisions)
        {
            DamageComponent            currentDamageComponent   = currentCollider.gameObject.GetComponent <DamageComponent>();
            CharacterMovementComponent currentMovementComponent = currentCollider.gameObject.GetComponent <CharacterMovementComponent>();

            if (currentDamageComponent != null && currentMovementComponent != null)
            {
                if (m_AbilityOwnerDamageComponent.GetCurrentTeam() != currentDamageComponent.GetCurrentTeam())
                {
                    AoeSlowAbilityConfig abilityConfig = m_AbilityConfig as AoeSlowAbilityConfig;
                    currentMovementComponent.ApplyMovementSpeedModifier(abilityConfig.GetAbilitySlowPercentage(), abilityConfig.GetAbilityDuration());
                }
            }
        }
    }
示例#9
0
        public void PostSolve(Contact contact, ContactConstraint contactConstraint)
        {
            string     levelUid          = LevelSystem.currentLevelUid;
            List <int> characterEntities = _entityManager.getEntitiesPosessing(levelUid, ComponentType.CharacterMovement);
            int        entityAId         = (int)contact.FixtureA.Body.UserData;
            int        entityBId         = (int)contact.FixtureB.Body.UserData;
            CharacterMovementComponent characterMovementComponent = null;
            FixedArray2 <Vector2>      points;
            Vector2 normal;

            characterMovementComponent = (_entityManager.getComponent(levelUid, entityAId, ComponentType.CharacterMovement) ?? _entityManager.getComponent(levelUid, entityBId, ComponentType.CharacterMovement)) as CharacterMovementComponent;
            if (characterMovementComponent != null)
            {
                if (contact.FixtureA == characterMovementComponent.feetFixture || contact.FixtureB == characterMovementComponent.feetFixture)
                {
                    contact.GetWorldManifold(out normal, out points);
                    characterMovementComponent.collisionNormals.Add(normal);
                    //if (characterMovementComponent.allowJumpResetOnCollision)
                    //    characterMovementComponent.alreadyJumped = false;
                }
            }
        }
示例#10
0
        public void attemptRopeGrab(string levelUid, int characterId, CharacterMovementComponent characterMovementComponent, PhysicsComponent physicsComponent, RopeGrabComponent existingRopeGrabComponent)
        {
            float    margin    = 0.5f;
            AABB     region    = new AABB();
            RopeNode ropeNode  = null;
            int      nodeCount = 0;

            region.LowerBound = physicsComponent.body.Position - new Vector2(margin, margin);
            region.UpperBound = physicsComponent.body.Position + new Vector2(margin, margin);

            if (physicsComponent == null)
            {
                return;
            }

            // Query the world for a body, and check to see if it's a rope
            physicsComponent.body.World.QueryAABB((fixture) =>
            {
                int ropeEntityId                    = (int)fixture.Body.UserData;
                RopeComponent ropeComponent         = (RopeComponent)_entityManager.getComponent(levelUid, ropeEntityId, ComponentType.Rope);
                RopeGrabComponent ropeGrabComponent = null;

                if (ropeComponent != null && !ropeComponent.doubleAnchor)
                {
                    RopeNode current = ropeComponent.ropeNodeHead;

                    characterMovementComponent.allowRopeGrab = false;

                    while (current != null)
                    {
                        if (current.body == fixture.Body)
                        {
                            ropeNode = current;
                            break;
                        }
                        nodeCount++;
                        current = current.next;
                    }

                    if (existingRopeGrabComponent != null)
                    {
                        RopeComponent existingRopeComponent = (RopeComponent)_entityManager.getComponent(levelUid, existingRopeGrabComponent.ropeEntityId, ComponentType.Rope);

                        if (existingRopeComponent.destroyAfterRelease)
                        {
                            existingRopeComponent.timeToLive = 100;
                        }

                        _ropeSystem.releaseRope(existingRopeGrabComponent, physicsComponent.body);
                        _entityManager.removeComponent(levelUid, characterId, existingRopeGrabComponent);
                    }

                    ropeGrabComponent = new RopeGrabComponent(ropeEntityId, ropeNode, (float)nodeCount, ropeComponent.reverseClimbDirection);
                    _ropeSystem.grabRope(ropeGrabComponent, physicsComponent.body);
                    _entityManager.addComponent(levelUid, characterId, ropeGrabComponent);

                    return(false);
                }
                return(true);
            },
                                                  ref region);
        }
示例#11
0
        public void update(GameTime gameTime)
        {
            if (!_paused || _singleStep)
            {
                LevelSystem levelSystem = _systemManager.getSystem(SystemType.Level) as LevelSystem;

                if (levelSystem.finalized)
                {
                    string     levelUid          = LevelSystem.currentLevelUid;
                    List <int> characterEntities = _entityManager.getEntitiesPosessing(levelUid, ComponentType.CharacterMovement);

                    for (int i = 0; i < characterEntities.Count; i++)
                    {
                        PhysicsComponent           physicsComponent           = _entityManager.getComponent(levelUid, characterEntities[i], ComponentType.Physics) as PhysicsComponent;
                        ParticleInfluenceComponent particleInfluenceComponent = _entityManager.getComponent(levelUid, characterEntities[i], ComponentType.ParticleInfluence) as ParticleInfluenceComponent;
                        CharacterMovementComponent characterMovementComponent = _entityManager.getComponent(levelUid, characterEntities[i], ComponentType.CharacterMovement) as CharacterMovementComponent;
                        RopeGrabComponent          ropeGrabComponent          = _entityManager.getComponent(levelUid, characterEntities[i], ComponentType.RopeGrab) as RopeGrabComponent;
                        Body  body         = physicsComponent.body;
                        float currentSpeed = body.LinearVelocity.Length();

                        // Handle fluid properties
                        characterMovementComponent.inFluid = particleInfluenceComponent.particleCount > 2;

                        // Handle rope grabs
                        if (characterMovementComponent.allowRopeGrab && characterMovementComponent.doRopeGrab)
                        {
                            attemptRopeGrab(levelUid, characterEntities[i], characterMovementComponent, physicsComponent, ropeGrabComponent);
                        }

                        // Calculate movement vector
                        if (characterMovementComponent.collisionNormals.Count > 0)
                        {
                            characterMovementComponent.movementUnitVector = Vector2.Zero;
                            for (int j = 0; j < characterMovementComponent.collisionNormals.Count; j++)
                            {
                                characterMovementComponent.movementUnitVector += characterMovementComponent.collisionNormals[j] / characterMovementComponent.collisionNormals.Count;
                            }
                            characterMovementComponent.movementUnitVector = new Vector2(characterMovementComponent.movementUnitVector.Y, -characterMovementComponent.movementUnitVector.X);
                            characterMovementComponent.movementUnitVector.Normalize();
                        }
                        else
                        {
                            characterMovementComponent.movementUnitVector = new Vector2(-1, 0);
                        }

                        // On surface movement
                        if (characterMovementComponent.onSurface)
                        {
                            if (characterMovementComponent.walkLeft || characterMovementComponent.walkRight)
                            {
                                // Adjust friction
                                if (body.LinearVelocity.X < -0.1f && characterMovementComponent.walkRight)
                                {
                                    body.Friction = 10f;
                                }
                                else if (body.LinearVelocity.X > 0.1f && characterMovementComponent.walkLeft)
                                {
                                    body.Friction = 10f;
                                }
                                else
                                {
                                    body.Friction = 0.1f;
                                }

                                // Walk
                                if (currentSpeed <= characterMovementComponent.speedLimit)
                                {
                                    Vector2 impulse = characterMovementComponent.movementUnitVector * _baseWalkMultiplier;

                                    if (characterMovementComponent.walkRight)
                                    {
                                        impulse *= -1;
                                    }
                                    if (characterMovementComponent.inFluid)
                                    {
                                        impulse *= 0.5f;
                                    }
                                    body.ApplyLinearImpulse(ref impulse);
                                }
                            }
                            else
                            {
                                body.Friction = 10f;
                            }
                        }
                        else  // In-air movement
                        {
                            if (characterMovementComponent.walkLeft || characterMovementComponent.walkRight)
                            {
                                if (ropeGrabComponent != null)
                                {
                                    // Swing
                                    Vector2 impulse = characterMovementComponent.movementUnitVector * _baseSwingMultiplier;

                                    if (characterMovementComponent.walkRight)
                                    {
                                        impulse *= -1;
                                    }

                                    body.ApplyLinearImpulse(ref impulse);
                                }
                                else
                                {
                                    // Air walk
                                    if ((body.LinearVelocity.X < 0 && characterMovementComponent.walkRight) ||
                                        (body.LinearVelocity.X > 0 && characterMovementComponent.walkLeft) ||
                                        (body.LinearVelocity.X > -characterMovementComponent.speedLimit && characterMovementComponent.walkLeft) ||
                                        (body.LinearVelocity.X < characterMovementComponent.speedLimit && characterMovementComponent.walkRight))
                                    {
                                        Vector2 impulse = characterMovementComponent.movementUnitVector * _baseAirWalkMultiplier;

                                        if (characterMovementComponent.walkRight)
                                        {
                                            impulse *= -1;
                                        }

                                        body.ApplyLinearImpulse(ref impulse);
                                    }
                                }
                            }
                        }

                        // Jump
                        if (characterMovementComponent.attemptJump)
                        {
                            // While holding rope
                            if (ropeGrabComponent != null)
                            {
                                RopeComponent ropeComponent = _entityManager.getComponent(levelUid, ropeGrabComponent.ropeEntityId, ComponentType.Rope) as RopeComponent;
                                Vector2       impulse       = new Vector2(0, -1.2f);

                                if (ropeComponent != null && ropeComponent.destroyAfterRelease)
                                {
                                    ropeComponent.timeToLive = 100;
                                }

                                _ropeSystem.releaseRope(ropeGrabComponent, physicsComponent.body);
                                _entityManager.removeComponent(levelUid, characterEntities[i], ropeGrabComponent);
                                ropeGrabComponent = null;

                                body.ApplyLinearImpulse(ref impulse);
                            }

                            if (characterMovementComponent.onSurface)
                            {
                                Vector2 impulse    = new Vector2(0, -2f);
                                float   adjustment = 0f;

                                // Try to limit the impulse based on the current y velocity.
                                // This is done to prevent jumps from contributing too much to the y velocity when
                                // the player is already moving upwards too fast (which results in a super-jump).
                                adjustment = (body.LinearVelocity.Y / 6f);
                                impulse.Y -= adjustment;

                                body.ApplyLinearImpulse(ref impulse);
                                characterMovementComponent.attemptJump = false;
                            }
                        }

                        // Swim
                        if (characterMovementComponent.inFluid && characterMovementComponent.swimUp)
                        {
                            Vector2 impulse = new Vector2(0, -0.25f);

                            body.ApplyLinearImpulse(ref impulse);
                        }

                        // Climbing
                        if (ropeGrabComponent != null)
                        {
                            float climbSpeed = characterMovementComponent.climbAmount * CLIMB_SPEED;
                            if (characterMovementComponent.climbUp)
                            {
                                _ropeSystem.moveAttachedBody(ropeGrabComponent, physicsComponent.body, climbSpeed);
                            }
                            else if (characterMovementComponent.climbDown)
                            {
                                _ropeSystem.moveAttachedBody(ropeGrabComponent, physicsComponent.body, -climbSpeed);
                            }
                        }
                    }
                }
            }
            _singleStep = false;
        }
示例#12
0
        public void update(GameTime gameTime)
        {
            if (_singleStep || !_paused)
            {
                LevelSystem levelSystem = _systemManager.getSystem(SystemType.Level) as LevelSystem;

                if (levelSystem.finalized)
                {
                    string      levelUid    = LevelSystem.currentLevelUid;
                    EventSystem eventSystem = _systemManager.getSystem(SystemType.Event) as EventSystem;
                    List <CharacterMovementComponent> movementComponents = _entityManager.getComponents <CharacterMovementComponent>(levelUid, ComponentType.CharacterMovement);
                    List <int> ropeGrabEntities  = _entityManager.getEntitiesPosessing(levelUid, ComponentType.RopeGrab);
                    List <int> prismaticEntities = _entityManager.getEntitiesPosessing(levelUid, ComponentType.Prismatic);
                    List <int> physicsEntities;

                    for (int i = 0; i < _bodiesToRemove.Count; i++)
                    {
                        getWorld(levelUid).RemoveBody(_bodiesToRemove[i]);
                    }
                    _bodiesToRemove.Clear();

                    for (int i = 0; i < movementComponents.Count; i++)
                    {
                        CharacterMovementComponent movementComponent = movementComponents[i];

                        movementComponent.collisionNormals.Clear();
                    }

                    for (int i = 0; i < prismaticEntities.Count; i++)
                    {
                        PrismaticJointComponent prismaticJointComponent = _entityManager.getComponent(levelUid, prismaticEntities[i], ComponentType.Prismatic) as PrismaticJointComponent;
                        LimitState limitState = prismaticJointComponent.prismaticJoint.LimitState;

                        if (prismaticJointComponent.previousLimitState != limitState)
                        {
                            if (limitState == LimitState.AtLower)
                            {
                                eventSystem.postEvent(new GameEvent(GameEventType.OnLowerLimitReached, prismaticEntities[i]));
                            }
                            else if (limitState == LimitState.AtUpper)
                            {
                                //eventSystem.postEvent(new GameEvent(GameEventType.OnUpperLimitReached, prismaticEntities[i]));
                            }
                        }

                        prismaticJointComponent.previousLimitState = limitState;
                    }

                    getWorld(levelUid).Step(_dt);

                    // Handle physic entities
                    physicsEntities = _entityManager.getEntitiesPosessing(levelUid, ComponentType.Physics);
                    for (int i = 0; i < physicsEntities.Count; i++)
                    {
                        PhysicsComponent       physicsComponent       = _entityManager.getComponent(levelUid, physicsEntities[i], ComponentType.Physics) as PhysicsComponent;
                        WorldPositionComponent worldPositionComponent = _entityManager.getComponent(levelUid, physicsEntities[i], ComponentType.WorldPosition) as WorldPositionComponent;
                        FollowMetamerComponent followMetamerComponent = _entityManager.getComponent(levelUid, physicsEntities[i], ComponentType.FollowMetamer) as FollowMetamerComponent;

                        // Set body position to the metamer being followed
                        if (followMetamerComponent != null)
                        {
                            physicsComponent.body.Position = followMetamerComponent.metamer.position;
                            physicsComponent.body.Rotation = followMetamerComponent.metamer.currentAngle + StasisMathHelper.halfPi;
                        }

                        // Update world position component
                        worldPositionComponent.position = physicsComponent.body.Position;
                    }
                }
            }
            _singleStep = false;
        }
示例#13
0
        // Handle player character movement
        private void handleCharacterMovement(string levelUid, PhysicsComponent playerPhysicsComponent, bool inDialogue)
        {
            if (playerPhysicsComponent != null)
            {
                CharacterMovementComponent characterMovementComponent = _entityManager.getComponent(levelUid, PLAYER_ID, ComponentType.CharacterMovement) as CharacterMovementComponent;
                RopeGrabComponent          ropeGrabComponent          = _entityManager.getComponent(levelUid, PLAYER_ID, ComponentType.RopeGrab) as RopeGrabComponent;

                if (InputSystem.usingGamepad)
                {
                    if (InputSystem.newGamepadState.ThumbSticks.Left.X < 0)
                    {
                        //characterMovementComponent.walkSpeedModifier = Math.Abs(InputSystem.newGamepadState.ThumbSticks.Left.X);
                        characterMovementComponent.walkLeft = true;
                    }
                    else if (InputSystem.newGamepadState.DPad.Left == ButtonState.Pressed)
                    {
                        characterMovementComponent.walkLeft = true;
                    }
                    else
                    {
                        characterMovementComponent.walkLeft = false;
                    }

                    if (InputSystem.newGamepadState.ThumbSticks.Left.X > 0)
                    {
                        //characterMovementComponent.walkSpeedModifier = InputSystem.newGamepadState.ThumbSticks.Left.X;
                        characterMovementComponent.walkRight = true;
                    }
                    else if (InputSystem.newGamepadState.DPad.Right == ButtonState.Pressed)
                    {
                        characterMovementComponent.walkRight = true;
                    }
                    else
                    {
                        characterMovementComponent.walkRight = false;
                    }

                    characterMovementComponent.climbAmount = 0f;
                    characterMovementComponent.climbDown   = false;
                    characterMovementComponent.climbUp     = false;
                    if (InputSystem.newGamepadState.ThumbSticks.Left.Y > 0)
                    {
                        characterMovementComponent.climbUp     = true;
                        characterMovementComponent.climbAmount = Math.Abs(InputSystem.newGamepadState.ThumbSticks.Left.Y);
                    }
                    else if (InputSystem.newGamepadState.ThumbSticks.Left.Y < 0)
                    {
                        characterMovementComponent.climbDown   = true;
                        characterMovementComponent.climbAmount = Math.Abs(InputSystem.newGamepadState.ThumbSticks.Left.Y);
                    }

                    characterMovementComponent.attemptJump = InputSystem.newGamepadState.Buttons.A == ButtonState.Pressed;
                }
                else
                {
                    //characterMovementComponent.walkSpeedModifier = 1f;
                    characterMovementComponent.walkLeft      = InputSystem.newKeyState.IsKeyDown(Keys.A) || InputSystem.newKeyState.IsKeyDown(Keys.Left);
                    characterMovementComponent.walkRight     = InputSystem.newKeyState.IsKeyDown(Keys.D) || InputSystem.newKeyState.IsKeyDown(Keys.Right);
                    characterMovementComponent.attemptJump   = InputSystem.newKeyState.IsKeyDown(Keys.Space) && InputSystem.oldKeyState.IsKeyUp(Keys.Space);
                    characterMovementComponent.swimUp        = InputSystem.newKeyState.IsKeyDown(Keys.Space);
                    characterMovementComponent.climbUp       = InputSystem.newKeyState.IsKeyDown(Keys.W);
                    characterMovementComponent.climbDown     = InputSystem.newKeyState.IsKeyDown(Keys.S);
                    characterMovementComponent.climbAmount   = 1f;
                    characterMovementComponent.doRopeGrab    = InputSystem.newKeyState.IsKeyDown(Keys.E) && InputSystem.oldKeyState.IsKeyUp(Keys.E);
                    characterMovementComponent.allowRopeGrab = characterMovementComponent.allowRopeGrab ? true : (InputSystem.newKeyState.IsKeyUp(Keys.E) && InputSystem.oldKeyState.IsKeyDown(Keys.E));
                }
            }
        }