예제 #1
0
    /// <summary>
    /// Se llama cuando llegamos al punto de entrega de un paquete
    /// </summary>
    void DeliverCurrentParcel()
    {
        try
        {
            var validAddress    = _isAddressValid;
            var targetAvailable = _isTargetAvailable;

            CurrentParcel.Attempts++;

            // Comprobamos que el punto de entrega sea válido (existe una casa en el lugar)
            if (validAddress)
            {
                // La dirección es correcta, ahora comprobamos el usuario se encuentre en casa
                if (targetAvailable)
                {
                    // Podemos entregar el paquete
                    CurrentParcel.Deliver();
                    CurrentParcel = null;
                }
                else
                {
                    // El destinatario estaba ausente, no podemos entregar el paquete
                    Debug.LogWarning(gameObject.name + ": Error en la entrega del paquete " + CurrentParcel.name + ". Motivo: Destinatario ausente");
                    throw new RecipientMissingException();
                }
            }
            else
            {
                // Dirección incorrecta
                Debug.LogWarning(gameObject.name + ": Error en la entrega del paquete " + CurrentParcel.name + ". Motivo: Dirección incorrecta");
                throw new InvalidAddressException();
            }
        }
        catch (InvalidAddressException)
        {
            CurrentParcel.AddInvalidAddressIncidence();
            CurrentParcel.MarkAsReturnToSender();
        }
        catch (RecipientMissingException)
        {
            CurrentParcel.AddRecipientMissingIncidence();
        }
    }