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