コード例 #1
0
    /// <summary>
    /// ici effectue un simple jump
    /// </summary>
    private void SimpleJump()
    {
        //get la collision
        CollisionSimple collisionJump = worldCollision.GetSimpleCollisionSafe();

        switch (collisionJump)
        {
        case CollisionSimple.Ceilling:
            Debug.Log("jumpFromCeilling");
            JumpFromCeilling();
            break;

        case CollisionSimple.Ground:
            Debug.Log("jumpFromGround");
            JumpFromGround();
            break;

        case CollisionSimple.Wall:
            if (worldCollision.IsOnCoinGround())
            {
                Jump(Vector3.up);
                break;
            }

            JumpFromWall();
            break;

        default:
            Debug.Log("alors la je sais pas...");
            break;
        }
    }
コード例 #2
0
    /// <summary>
    /// s'il y a plusieurs normal dans le tableau... si on est dans un coin, prendre toujours le wallJump
    /// (sauf si c'est un player !)
    /// </summary>
    private Vector3 DefineWhichNormalToChose()
    {
        bool    floor         = false;
        bool    wall          = false;
        Vector3 wallTmp       = Vector3.zero;
        int     numberNormals = 0;

        for (int i = 0; i < colliderNormalArray.Length; i++)
        {
            if (colliderNormalArray[i] != Vector3.zero)
            {
                //int collisionSimple = WhatKindOfNormalIsIt(colliderNormalArray[i]);
                CollisionSimple collisionSimple = WhatKindOfNormalItIs(colliderNormalArray[i]);
                //Debug.Log("ici: normal:" + colliderNormalArray[i] + ", collision : " + collisionSimple);
                switch (collisionSimple)
                {
                case CollisionSimple.Ground:
                    floor = true;
                    break;

                case CollisionSimple.Wall:
                    if (objectInCollision[i] != null && GameData.IsInList(listLayerExceptionGrounded, objectInCollision[i].layer))
                    {
                        //Debug.Log("ici on est sur un player...");
                        break;
                    }
                    wall    = true;
                    wallTmp = colliderNormalArray[i];
                    break;

                case CollisionSimple.Ceilling:
                    //Debug.Log("ceilling");
                    break;

                case CollisionSimple.InAir:
                default:
                    break;
                }
                numberNormals++;
            }
        }
        if (floor && wall)
        {
            //Debug.Log("on est un wall");
            isOnCoinGround = true;
            return(wallTmp);
        }
        isOnCoinGround = false;

        if (numberNormals == 0)
        {
            //Debug.Log("i ln'y a aucune normal");
            return(Vector3.zero);
        }

        //Debug.Log("retourne juste la some des normals actuells: " + normalSumCollide);

        return(normalSumCollide);
    }
コード例 #3
0
 public EntityStack(int id, int count)
 {
     this.Id         = id;
     this.count      = count;
     AABB            = new AxisAlignedBoundingBox(new Vector3(-0.25f, -0.25f, -0.25f), new Vector3(0.25f, 0.25f, 0.25f));
     collisionSystem = new CollisionSimple(this);
     EntityType      = EntityTypeEnum.EntityStackFullUpdate;
 }
コード例 #4
0
 /// <summary>
 /// ici grounded sur sol only !
 /// </summary>
 /// <returns></returns>
 public bool AreBothGroundedOn(CollisionSimple onFloor)
 {
     if (worldCollision[0].GetSimpleCollisionSafe() == onFloor && worldCollision[1].GetSimpleCollisionSafe() == onFloor)
     {
         return(true);
     }
     return(false);
 }
コード例 #5
0
    /// <summary>
    /// est-il sur le sol ?
    /// </summary>
    /// <returns></returns>
    public bool IsOnFloor()
    {
        CollisionSimple tmpCollision = GetSimpleCollisionSafe();

        if (tmpCollision == CollisionSimple.Ground)
        {
            return(true);
        }
        return(false);
    }
コード例 #6
0
ファイル: PlayerMove.cs プロジェクト: usernameHed/BackHome
    /// <summary>
    /// déplace horizontalement le player
    /// </summary>
    private void MoveHorizOnGround(Vector3 velocityChange)
    {
        if (playerPenduleMove.IsAirTenseOrInCoolDown())
        {
            return;
        }

        Vector3 targetVelocity = velocityChange;

        //si on est en collision avec wall, ou ceilling, gérer ça à part
        if (!CheckCollisionType(velocityChange))
        {
            return;
        }

        //si il n'y a pas d'input, gérer la décélération ??
        if (velocityChange.x == 0)
        {
            DoSlowDownWhenNoInput();
            //animController.NotMoving();
            return;
        }
        //animController.IsMoving(playerInput.Horiz);

        previousInput = velocityChange.x;

        //TODO: rotate, ou remplacer velocityChange par le right/left de la normal de collision...
        //TODO;
        Vector3 dirNormal    = worldCollision.GetSumNormalSafe();
        Vector3 dirReference = velocityChange;

        if (dirNormal != Vector3.zero && dirReference != Vector3.zero)
        {
            Vector3 dir = QuaternionExt.GetTheGoodRightAngleClosest(dirNormal, dirReference, 10f);

            Vector3 direction = dir.normalized;
            float   speed     = velocityChange.magnitude;

            velocityChange = direction * speed;


            Vector3         normalRight = QuaternionExt.CrossProduct(velocityChange, Vector3.forward);
            CollisionSimple rightNormal = worldCollision.WhatKindOfNormalItIs(normalRight);

            Vector3         normalLeft = -QuaternionExt.CrossProduct(velocityChange, Vector3.forward);
            CollisionSimple leftNormal = worldCollision.WhatKindOfNormalItIs(normalLeft);

            /*Vector3 newDir = (rightNormal == CollisionSimple.Ground) ? normalRight : normalLeft;*/

            if (rightNormal == CollisionSimple.Ground || leftNormal == CollisionSimple.Ground)
            {
                if (worldCollision.IsOnCoinGround())
                {
                    //ChooseIfAccelerateOrVelocityChange(velocityChange, ratioForceInCoin);
                    CoinCase(velocityChange);
                }
                else
                {
                    float angle = QuaternionExt.GetAngleFromVector(direction);
                    //Debug.Log("angleDirection: " + angle);

                    if (QuaternionExt.IsAngleCloseToOtherByAmount(90, angle, angleNotAcceptedForOrientedMoveFrom90))
                    {
                        //Debug.Log("ici pas de force orienté par la normal");
                        //Debug.DrawRay(transform.position, dirReference, Color.green, 1f);
                        ChooseIfAccelerateOrVelocityChange(dirReference, ratioForceInBadAngle);
                        return;
                    }

                    if (worldCollision.GetSimpleCollisionSafe() == CollisionSimple.Wall)
                    {
                        ChooseIfAccelerateOrVelocityChange(velocityChange, ratioOnWall);
                    }
                    else
                    {
                        ChooseIfAccelerateOrVelocityChange(velocityChange, 1);
                    }


                    //rb.AddForce(velocityChange, ForceMode.VelocityChange);
                    //Debug.DrawRay(transform.position, velocityChange, Color.green, 1f);
                }
            }
        }
    }