示例#1
0
    /// <summary>
    /// gère le saut depuis le sol
    /// </summary>
    private void JumpFromGround()
    {
        //si on ne bouge pas
        if (playerInput.NotMoving())
        {
            SimpleJumpMoving();
            //JumpFromNormal();   //saute par rapport à la normal au sol
        }
        //ici la corde n'est pas tendu
        else if (!ropeHandler.IsTenseForJump)
        {
            SimpleJumpMoving(); //jump normalement en faisant le milieu de vecteur up & direction input
        }
        else
        {
            //ici la corde est tendu, appliquer le jump normalisé par rapport à la corde
            //appliquer un boost de puissance par rapport à playerJump setting
            Vector3 dir = GetTheGoodAngleWhenRopeTense();
            //divisé par 2 ?
            dir = QuaternionExt.GetMiddleOf2Vector(dir, ropeHandler.GetVectorFromPlayer(playerController.IdPlayer));
            dir = QuaternionExt.GetMiddleOf2Vector(dir, ropeHandler.GetVectorFromPlayer(playerController.IdPlayer));

            //dir = QuaternionExt.GetMiddleOf2Vector(dir, playerPenduleMove.GetDirRopeFromPivot());
            //dir = QuaternionExt.GetMiddleOf2Vector(dir, playerPenduleMove.GetDirRopeFromPivot());
            //playerPenduleMove.GetDirRopeFromPivot();

            playerControlledAirJump.ControlledAirJumpSetup(true, dir, true, playerJump.JumpTenseFromGroundRatio);

            //Jump(dir, false, 0, boost);
        }
    }
示例#2
0
    private void WallJumpSimple()
    {
        Debug.Log("ici jump wall selon wallLeft/right et Up");
        Vector3 horiz = new Vector3(((worldCollision.GetCollisionSafe() == CollisionType.WallLeft) ? 1 : -1), 0, 0);
        Vector3 dir   = QuaternionExt.GetMiddleOf2Vector(Vector3.up, horiz);
        float   boost = playerJump.JumpBoostFromWall;

        Jump(dir, false, 0, boost);
    }
示例#3
0
    /// <summary>
    /// le jump de base, millieu de direction horizontal, Vecteur up
    /// </summary>
    private Vector3 GetVelocityAndUpDirection()
    {
        Vector3 dirInputPlayer = rb.velocity;

        dirInputPlayer.y = dirInputPlayer.z = 0;            //ne garder que l'horizontal
        Vector3 dir = QuaternionExt.GetMiddleOf2Vector(Vector3.up, dirInputPlayer);

        return(dir);
    }
示例#4
0
    /// <summary>
    /// le jump de base, millieu de direction horizontal, Vecteur up
    /// </summary>
    private Vector3 GetInputAndUpDirection()
    {
        Vector3 dirInputPlayer = playerInput.GetDirInput(); //input du player

        dirInputPlayer.y = dirInputPlayer.z = 0;            //ne garder que l'horizontal
        Vector3 dir = QuaternionExt.GetMiddleOf2Vector(Vector3.up, dirInputPlayer);

        return(dir);
    }
示例#5
0
    /// <summary>
    /// retourne la direction quand on saute...
    /// </summary>
    /// <returns></returns>
    private Vector3 GetDirWhenJumpAndMoving()
    {
        Vector3 finalVelocityDir = Vector3.zero;

        //get la direction du joystick
        Vector3 dirInputPlayer = playerInput.GetDirInput();

        //get le dot product normal -> dir Arrow
        float dotDirPlayer = QuaternionExt.DotProduct(worldCollision.GetSumNormalSafe(), dirInputPlayer);

        //si positif, alors on n'a pas à faire de mirroir
        if (dotDirPlayer > margeHoriz)
        {
            //direction visé par le joueur
            Debug.Log("Direction de l'arrow !" + dotDirPlayer);
            finalVelocityDir = dirInputPlayer.normalized;
        }
        else if (dotDirPlayer < -margeHoriz)
        {
            //ici on vise dans le négatif, faire le mirroir du vector par rapport à...
            Debug.Log("ici mirroir de l'arrow !" + dotDirPlayer);

            //récupéré le vecteur de DROITE de la normal
            Vector3 rightVector = QuaternionExt.CrossProduct(worldCollision.GetSumNormalSafe(), Vector3.forward) * -1;
            //Debug.DrawRay(transform.position, rightVector.normalized, Color.blue, 1f);

            //faire le mirroir entre la normal et le vecteur de droite
            Vector3 mirror = QuaternionExt.ReflectionOverPlane(dirInputPlayer, rightVector * -1) * -1;
            //Debug.DrawRay(transform.position, mirror.normalized, Color.yellow, 1f);

            //direction inverse visé par le joueur
            finalVelocityDir = mirror.normalized;
        }
        else
        {
            Debug.Log("ici on est proche du 90°, faire la bisection !");
            //ici l'angle normal - direction est proche de 90°, ducoup on fait le milieu des 2 axe
            //ici faire la moyenne des 2 vecteur normal, et direction arrow
            finalVelocityDir = QuaternionExt.GetMiddleOf2Vector(worldCollision.GetSumNormalSafe(), dirInputPlayer);
        }
        return(finalVelocityDir);
    }