예제 #1
0
    private IEnumerator AutoGrip()
    {
        yield return(new WaitForEndOfFrame());

        if (playerManager.IsOtherIsGripped(playerController.IdPlayer) && !worldCollision.IsOnFloor())
        {
            SetHardGrip(true);
        }
    }
예제 #2
0
    /// <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);
    }
예제 #3
0
    /// <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);
    }
예제 #4
0
    /// <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);
    }
예제 #5
0
    /// <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);
        }
    }