% =========================================================================
% SIATS 2.0 - Sistema Inteligente de Alerta Temprana de Tsunamis
% Archivo: principal.m - SECUENCIA DE ARRANQUE Y CARGA VISUAL
% =========================================================================

function principal()
    clc; close all; warning('off', 'all');

    % 1. Inicialización de Estructura de Datos Centralizada
    datos = struct();
    datos.ui.colores.fondo = [0.05, 0.08, 0.12];
    datos.ui.colores.texto = [0.8, 0.9, 0.95];
    datos.ui.colores.acento = [0.0, 0.8, 0.6];
    datos.ui.colores.alerta = [0.9, 0.2, 0.2];

    % Subsistemas inicializados
    datos.terremoto = struct('Mw', 0, 'profundidad', 0, 'energia', 0, 'lat', 0, 'lon', 0);
    datos.tsunami = struct('velocidad', 0, 'altura', 0, 'tiempoLlegada', 0, 'riesgo', 0);
    datos.alerta = struct('nivel', 'VERDE', 'mensaje', 'SISTEMA EN ESPERA');
    datos.sensores = struct('gps', true, 'boyas', true, 'satelites', true, 'sismografos', true);

    % 2. DESPLIEGUE DE PANTALLA DE BIENVENIDA (Factor WOW)
    % Crear figura de carga limpia, sin barras de menú ni herramientas
    fig_carga = figure('Name', 'Iniciando SIATS 2.0', 'NumberTitle', 'off', ...
                       'Color', datos.ui.colores.fondo, 'MenuBar', 'none', ...
                       'ToolBar', 'none', 'Position', [400, 300, 700, 400]);

    % Eje para la animación de la ola
    ax = axes('Parent', fig_carga, 'Color', datos.ui.colores.fondo, ...
              'XColor', 'none', 'YColor', 'none', 'Position', [0.1, 0.3, 0.8, 0.4]);
    hold(ax, 'on');



    % Elementos de texto en la interfaz gráfica
    text(0.5, 2.5, 'SIATS 2.0 - CENTRO NACIONAL DE MONITOREO', 'Parent', ax, ...
         'Color', datos.ui.colores.texto, 'FontSize', 16, 'FontWeight', 'bold', ...
         'HorizontalAlignment', 'center');

    txt_log = text(0.5, -2.5, 'Inicializando subsistemas...', 'Parent', ax, ...
                   'Color', datos.ui.colores.acento, 'FontSize', 11, ...
                   'HorizontalAlignment', 'center');

    % Imprimir log en consola simultáneamente
    fprintf('====================================================\n');
    fprintf('   SIATS 2.0 - CENTRO NACIONAL DE MONITOREO\n');
    fprintf('====================================================\n');

    % Tiempos de carga ajustados para que sea fluido
    secuencias = {
        'Cargando protocolos de seguridad y validación...', 0.6;
        'Estableciendo enlace con red sísmica de República Dominicana...', 0.8;
        'Calibrando boyas DART de alta mar...', 0.6;
        'Renderizando perfiles batimétricos y topografía costera...', 0.8;
        'Activando algoritmos de predicción geofísica...', 0.6;
        'SISTEMA LISTO PARA OPERACIONES.' , 0.5
    };

    % Configuración inicial de la ola matemática
    x = linspace(0, 6*pi, 300);
    h_ola = plot(ax, x, sin(x), 'Color', datos.ui.colores.acento, 'LineWidth', 2.5);
    axis(ax, [0, 6*pi, -3, 3]);

    % Bucle de carga interactiva (Consola + Gráfico)
    fase = 0; % Variable para desplazar la ola

    for i = 1:size(secuencias, 1)
        mensaje = secuencias{i,1};
        tiempo_pausa = secuencias{i,2};

        % Actualizar logs
        fprintf('>> %s\n', mensaje);
        if ishandle(txt_log)
            set(txt_log, 'String', sprintf('>> %s', mensaje));
        end

        % Animación fluida de la ola calculada en tiempo real
        pasos = round(tiempo_pausa / 0.05);
        for j = 1:pasos
            fase = fase + 0.15; % Velocidad de desplazamiento
            amplitud = 0.2 + (i * 0.3); % La ola crece conforme avanza la carga

            % Ecuación de la ola con un ligero ruido para realismo oceánico
            y = amplitud * sin(x - fase) + 0.05 * randn(1, length(x));

            % Actualizar solo los datos de Y (Método protegido)
            if ishandle(h_ola)
                set(h_ola, 'YData', y);
                drawnow;
            end
            pause(0.05);
        end
    end

    % Cerrar pantalla de carga elegantemente
    pause(0.5);
    if ishandle(fig_carga)
        close(fig_carga);
    end

    % 3. INICIALIZAR EL DASHBOARD PRINCIPAL
    try
        fprintf('\n[ÉXITO] Lanzando Interfaz Principal...\n');
        interfaz(datos); % <--- LÍNEA ACTIVADA PARA ABRIR EL DASHBOARD
    catch ME
        fprintf('\n[ERROR CRÍTICO] Fallo en el despliegue del Dashboard:\n%s\n', ME.message);
        fprintf('Asegúrate de que el archivo "interfaz.m" esté en esta misma carpeta y sin errores.\n');
    end
end

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: