// Author: Lumikit
// Date:   08/01/2025
// Script: Fader chama cenas

const
  UI_PAGE_1 = 1;
  UI_SCENE_1 = 2;

  UI_PAGE_2 = 3;
  UI_SCENE_2 = 4;

  UI_PAGE_3 = 5;
  UI_SCENE_3 = 6;

  UI_PAGE_4 = 7;
  UI_SCENE_4 = 8;


var
  LastValue: integer;
  CenaAtual: integer;


procedure OnRegister;
begin
  // cria a caixa de texto para informar qual pagina/cena sera chamada,
  // quando o valor do fader estiver entre 0% e 25%
  RegisterUIValue(UI_PAGE_1, '0-25 Pagina', 1, 1, 100);
  RegisterUIValue(UI_SCENE_1, '0-25 Cena', 1, 1, 16);

  // ... quando o valor do fader estiver entre 26% e 50%
  RegisterUIValue(UI_PAGE_2, '26-50 Pagina', 1, 1, 100);
  RegisterUIValue(UI_SCENE_2, '26-50 Cena', 1, 1, 16);

  // ... quando o valor do fader estiver entre 51% e 75%
  RegisterUIValue(UI_PAGE_3, '51-75 Pagina', 1, 1, 100);
  RegisterUIValue(UI_SCENE_3, '51-75 Cena', 1, 1, 16);

  // ... quando o valor do fader estiver entre 76% e 100%
  RegisterUIValue(UI_PAGE_4, '76-100 Pagina', 1, 1, 100);
  RegisterUIValue(UI_SCENE_4, '76-100 Cena', 1, 1, 16);
end;


procedure OnStart;
begin
    CenaAtual := 0;
end;


procedure OnExecute;
var
  Dimmer100: integer;
begin
  // pegamos o valor do fader, e convertemos de 0-255 para 0-100
  Dimmer100 := Trunc(GetDimmer / 2.55);

  // se o valor mudou, vamos fazer alguma coisa
  if (LastValue <> Dimmer100) then
    begin
      LastValue := Dimmer100;

      // se o fader estiver entre 0 e 25 (e se a cena que queremos, nao esta selecionada)
      if ((LastValue >= 0) and (LastValue <= 25) and (CenaAtual <> 1)) then
        begin
          CenaAtual := 1;
          DoSceneChange(GetUIValue(UI_PAGE_1) - 1, GetUIValue(UI_SCENE_1) - 1);
        end
      else
        begin
          // se o fader estiver entre 26 e 50 ...
          if ((LastValue >= 26) and (LastValue <= 50) and (CenaAtual <> 2)) then
            begin
              CenaAtual := 2;
              DoSceneChange(GetUIValue(UI_PAGE_1) - 1, GetUIValue(UI_SCENE_2) - 1);
            end
          else
            begin
              // se o fader estiver entre 51 e 75 ...
              if ((LastValue >= 51) and (LastValue <= 75) and (CenaAtual <> 3)) then
                begin
                  CenaAtual := 3;
                  DoSceneChange(GetUIValue(UI_PAGE_1) - 1, GetUIValue(UI_SCENE_3) - 1);
                end
              else
                begin
                  // se o fader estiver entre 76 e 100 ...
                  if ((LastValue >= 76) and (LastValue <= 100) and (CenaAtual <> 4)) then
                    begin
                      CenaAtual := 4;
                      DoSceneChange(GetUIValue(UI_PAGE_1) - 1, GetUIValue(UI_SCENE_4) - 1);
                    end
                end
            end
        end
    end;
end;


procedure OnTerminate;
begin
  DoTerminate;
end;