Пример #1
0
        /// <summary>
        /// save the last position on ground
        /// </summary>
        public void SaveLastPositionOnground()
        {
            if (entityController.GetMoveState() == EntityController.MoveState.InAir)
            {
                return;
            }

            worldLastNormal = playerGravity.GetMainAndOnlyGravity();   //avoir toujours une normal à jour
            float distForSave = (WorldLastPositionGetIndex(0) - entityController.rb.transform.position).sqrMagnitude;

            //Debug.Log("dist save: " + distForSave);
            //si la distance entre les 2 point est trop grande, dans tout les cas, save la nouvelle position !
            if (distForSave > sizeDistanceForSavePlayerPos)
            {
                WorldLastPositionSet(entityController.rb.transform.position); //save la position onGround
                                                                              //ExtDrawGuizmos.DebugWireSphere(WorldLastPositionGetIndex(0), Color.red, 0.5f, 1f);
            }
            //si la normal à changé, update la position + normal !
            else if (worldPreviousNormal != worldLastNormal)
            {
                //ici changement de position SEULEMENT si l'angle de la normal diffère de X
                float anglePreviousNormal = Vector3.Angle(worldPreviousNormal, entityController.rbRotateObject.up);
                float angleNormalPlayer   = Vector3.Angle(worldLastNormal, entityController.rbRotateObject.up);
                //ici gérer les normal à zero ??
                float diff;
                if (ExtVector3.IsAngleCloseToOtherByAmount(anglePreviousNormal, angleNormalPlayer, differenceAngleNormalForUpdatePosition, out diff))
                {
                    //Debug.Log("ici l'angle est trop proche, ducoup ne pas changer de position");

                    //ni de normal ??
                }
                else
                {
                    //ici change la normal, ET la position
                    WorldLastPositionSet(entityController.rb.transform.position); //save la position onGround
                    worldPreviousNormal = worldLastNormal;

                    //ExtDrawGuizmos.DebugWireSphere(WorldLastPositionGetIndex(0), Color.yellow, 0.5f, 1f);
                    //Debug.DrawRay(entityController.rb.transform.position, worldPreviousNormal, Color.yellow, 1f);
                }
            }
        }