Ejemplo n.º 1
0
    //Move up, down ladder
    //Called for every fixedupdate that this module is active
    public override void FixedUpdateModule()
    {
        if (m_CanPassThroughOneWayPlatforms)
        {
            TryDisablingPlatforms();
        }
        if (m_CanJumpFromLadder)
        {
            if (TryLadderJump())
            {
                EndModule();
                return;
            }
        }
        if (m_CanReleaseLadderWithButton)
        {
            if (DoesInputExist("ClimbRelease") && GetButtonInput("ClimbRelease").m_WasJustPressed)
            {
                m_ControlledCollider.SetVelocity(Vector2.zero);
                EndModule();
                return;
            }
        }

        Ladder ladder = FindLadder();

        if (ladder == null)
        {
            return;
        }
        Vector2 newVel = Vector2.zero;

        if (GetDirInput("Move").m_Direction == DirectionInput.Direction.Down || GetDirInput("Move").m_Direction == DirectionInput.Direction.Up)
        {
            newVel = ladder.GetUpDirection() * GetDirInput("Move").m_ClampedInput.y *m_Speed;
        }
        m_ControlledCollider.UpdateWithVelocity(newVel);
        Vector3 position = m_ControlledCollider.GetCapsuleTransform().GetPosition();

        if (!m_CanExitTopOfLadder)
        {
            if (ladder.HasExceededUpperBound(position))
            {
                Vector3 newPosition = ladder.GetClosestPointOnLadder(position);
                m_ControlledCollider.GetCapsuleTransform().SetPosition(newPosition);
                m_ControlledCollider.UpdateContextInfo();
            }
        }
        if (!m_CanExitBottomOfLadder)
        {
            if (ladder.HasExceededLowerBound(position))
            {
                Vector3 newPosition = ladder.GetClosestPointOnLadder(position);
                m_ControlledCollider.GetCapsuleTransform().SetPosition(newPosition);
                m_ControlledCollider.UpdateContextInfo();
            }
        }
    }
Ejemplo n.º 2
0
    //Called whenever this module is started (was inactive, now is active)
    protected override void StartModuleImpl()
    {
        if (m_CanPassThroughOneWayPlatforms)
        {
            TryDisablingPlatforms();
        }
        Ladder ladder = FindLadder();

        if (ladder)
        {
            Vector3 newPoint = ladder.GetClosestPointOnLadder(m_ControlledCollider.GetCapsuleTransform().GetPosition());
            m_ControlledCollider.GetCapsuleTransform().SetPosition(newPoint);
        }
    }
Ejemplo n.º 3
0
    //Character needs to be touching a Ladder object
    public override bool IsApplicable()
    {
        if (!m_IsActive && Time.time - m_LastLadderClimbTime < m_LadderClimbCoolDown)
        {
            return(false);
        }
        if (m_ControlledCollider.IsGrounded() && GetDirInput("Move").m_Direction != DirectionInput.Direction.Up)
        {
            if (!m_CanPassThroughOneWayPlatforms || !m_ControlledCollider.GetGroundedInfo().GetGroundTransform().GetComponentInChildren <OneWayPlatform>())
            {
                return(false);
            }
        }
        Ladder ladder = FindLadder();

        if (ladder)
        {
            if (!m_IsActive)
            {
                if (GetDirInput("Move").m_Direction == DirectionInput.Direction.Down || GetDirInput("Move").m_Direction == DirectionInput.Direction.Up)
                {
                    Vector3 newPoint = ladder.GetClosestPointOnLadder(m_ControlledCollider.GetCapsuleTransform().GetPosition());
                    if (m_ControlledCollider.GetCapsuleTransform().CanMove(newPoint - m_ControlledCollider.GetCapsuleTransform().GetPosition()))
                    {
                        return(true);
                    }
                }
            }
            else
            {
                if (m_CanExitSidesOfLadder && (GetDirInput("Move").m_Direction == DirectionInput.Direction.Left || GetDirInput("Move").m_Direction == DirectionInput.Direction.Right))
                {
                    return(false);
                }
                return(true);
            }
        }
        return(false);
    }