private IEnumerator AutoGrip() { yield return(new WaitForEndOfFrame()); if (playerManager.IsOtherIsGripped(playerController.IdPlayer) && !worldCollision.IsOnFloor()) { SetHardGrip(true); } }
/// <summary> /// effectue des forces lorsqu'on est grounded, mais toujours en coolDown ! /// </summary> /// <returns></returns> private bool ForceGroundedInCoolDown() { //si on est grounded, alors effectuer un calcul supplémentaire pour savoir si on peut aller //dans ce sens ! if (worldCollision.IsGroundedSafe()) { if (coolDownStilAccrocheABitWhenEndTense.IsReady()) { Debug.Log("ici le cooldown est fini, ne rien faire"); return(false); } else { //Debug.Log("ici on peut se déplacer droite / gauche ??"); dirPlayerAirMove = jumpCalculation.GetTheGoodAngleWhenTenseInAirMove(dirPlayerAirMove); if (dirPlayerAirMove == Vector3.zero) { //ici on ne peux pas bouger ? //Debug.Log("ici on peut pas bouger dans ce sens ! définir le dirPlayer vers le mur"); //Debug.Log("player: " + playerController.IdPlayer + ", collision: " + worldCollision.GetCollisionSafe()); if (worldCollision.IsOnFloor()) { //Debug.Log("si on est spécifiquement onFloor, se déplacer normalement !"); coolDownStilAccrocheABitWhenEndTense.Reset(); return(false); } dirPlayerAirMove = worldCollision.GetSumNormalSafe(); //PhysicsExt.ApplyConstForce(rb, dirPlayerAirMove, externalForce.ForceOnWallWhenTense); //externalForce.LittleForceDir(dirPlayerAirMove, externalForce.ForceOnWallWhenTense); return(false); } else { //Debug.Log("ici aller... dans le sens de l'input ? on a fini le airMove, on passe au move classique"); if (worldCollision.GetPreviousPersistCollision() != CollisionSimple.Ground) { //Debug.Log("or not"); return(false); } Vector3 dirInput = playerInput.GetDirInput(); playerMove.MoveOnWallWhenAirMove(dirInput); return(false); } } } return(true); }
/// <summary> /// renvoi vrai ou faux si on a le droit de sauter /// </summary> /// <returns></returns> public bool CanJump() { //on touche pas à la touche saut if (!playerInput.JumpInput) { return(false); } //faux si on hold pas et quand a pas laché if (jumpStop && (!stayHold || (stayHold && playerInput.GripInput && ScoreManager.Instance.Data.GetSimplified()))) { return(false); } if (playerInput.GripInput && ScoreManager.Instance.Data.GetSimplified()) { return(false); } //faux si le cooldown n'est pas fini if (!coolDownJump.IsReady()) { return(false); } if (!worldCollision.IsGroundedSafe() && worldCollision.IsGroundeExeptionSafe() && playerManager.AreBothNotGrounded()) { Debug.Log("si les 2 joueurs sont en l'air, ne pas sauter !"); return(false); } if (!allowWallJump && !worldCollision.IsOnFloor()) { return(false); } //ici on est ok pour sauter (tester si onground pour jump ou double jump ou rien) Collider coll; if (!worldCollision.PlatformManager.IsJumpable(out coll)) { return(false); } return(true); }
/// <summary> /// peut on modifier en up / down ? /// </summary> /// <returns></returns> private bool CanModifyUpDown() { //si on n'appuis sur rien if (playerInput.Horiz == 0 && playerInput.Verti == 0) { return(false); } //si on est pas grounded... NE PAS AUTORISER if (!worldCollision.IsGroundedSafe() /* && timeWhenWeCanModifyRope.IsReady()*/) { if (!timeWhenWeCanModifyRope.IsReady()) { Debug.Log("ici on peut encore modifier, alors qu'on est en l'air"); } else { return(false); } } if (worldCollision.IsGroundedSafe() && worldCollision.IsOnFloor() /* && timeWhenWeCanModifyRope.IsReady()*/) { return(false); } //ici on peut modifier en temps normal... maintenant test la tension, et l'angle de l'input if (!ropeHandler.IsTenseForAirMove && timeWhenWeCanModifyRope.IsReady()) { return(false); } //ne pas changé si on est grippé if (playerGrip.Gripped) { return(false); } //si l'autre n'est pas grippé, ne rien faire if (!playerManager.IsOtherIsGripped(playerController.IdPlayer)) { return(false); } //ici les conditions sont bonnes ! return(true); }
/// <summary> /// défini si on est en grip, moving or not /// </summary> private void TryToTurn() { Vector3 inputOfPlayer = playerInput.GetDirInput(); if (playerGrip.Gripped) { IsGripped(); } else if (inputOfPlayer.x == 0) { NotMoving(); } else { IsMoving(inputOfPlayer.x); } if (!playerGrip.Gripped && playerPenduleMove.IsAirTenseOrInCoolDown()) { penduleMove = ropeHandler.GetVectorFromPlayer(playerController.IdPlayer); if (worldCollision.IsOnFloor()) { penduleMove = new Vector3(0, 1, 0); Debug.Log("ici on floor ?"); penduleMove = Vector3.up; //childAnim.localEulerAngles = new Vector3(0, 0, 0); penduleChildRotate = new Vector3(0, 0, 0); return; } //childAnim.localEulerAngles = new Vector3(0, 0, 0); Vector3 dirReference = playerInput.GetDirInput(); int rightMove = 0; dirMove = QuaternionExt.GetTheGoodRightAngleClosestNoClose(penduleMove, dirReference, 10f, out rightMove); if (dirMove == Vector3.zero) { rightMove = 0; dirMove = new Vector3(0, -1, 0); Debug.Log("ici no input en pendule..."); } //childAnim.rotation = Quaternion.Euler(new Vector3(0, 0, 0)); if (rightMove == -1) { //childAnim.localEulerAngles = new Vector3(0, -90, 0); penduleChildRotate = new Vector3(0, 270, 0); } else if (rightMove == 1) { //childAnim.localEulerAngles = new Vector3(0, 90, 0); penduleChildRotate = new Vector3(0, 90, 0); } else { //childAnim.localEulerAngles = new Vector3(0, 0, 0); penduleChildRotate = new Vector3(0, 0, 0); } } else { penduleMove = Vector3.up; //childAnim.localEulerAngles = new Vector3(0, 0, 0); penduleChildRotate = new Vector3(0, 0, 0); } }