/// <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); } }
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); }
/// <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); }
/// <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); }
/// <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); }