Pular para o conteúdo
Baixar

Interface

As interfaces são montadas na aba de interface do editor. No código, uma interface e os elementos dela são indicados pelo nome:

Ui::Element loja = Ui::get("Loja");
loja["Moedas"].setText("Moedas: 12");
loja["Fechar"].onClick(this, [] { Ui::hide("Loja"); });
loja.show();

Ui::Element é só um endereço: é leve de copiar e de guardar, e cada chamada procura o elemento de novo. Um nome que não existe dá um erro na Saída (uma vez) e a chamada não faz nada.

Função O que faz Exemplo
Ui::Element Ui::get(std::string_view ui) A interface com esse nome. Ui::Element hud = Ui::get("Hud");
void Ui::show(std::string_view ui) Mostra a interface, por cima das que já estão na tela. Ui::show("Pausa");
void Ui::hide(std::string_view ui) Esconde a interface. O que o código mudou nela continua valendo. Ui::hide("Pausa");
bool Ui::visible(std::string_view ui) true se a interface está na tela. if (Ui::visible("Loja")) ...
void Ui::reset(std::string_view ui) Volta a interface a como está no editor e tira os onClick. Ui::reset("Loja");
bool Ui::mouseOver() true se o mouse está em cima de um botão ou painel da interface. if (!Ui::mouseOver()) atirar = true;

Os métodos de Ui::Element. Os que começam com set podem ser encadeados: botao.setText("Comprado").setEnabled(false);

Função O que faz Exemplo
Element operator[](std::string_view name) Um elemento de dentro, pelo nome: primeiro os filhos diretos, depois os de dentro deles. hud["Moedas"]
bool exists() true se a interface ou o elemento existe. if (loja["Item3"].exists()) ...
setText(std::string_view text) e text() O texto de um Texto ou de um Botão. hud["Moedas"].setText("12");
setValue(float value) e value() O quanto uma Barra está cheia, de 0 a 1. hud["Vida"].setValue(0.5f);
setVisible(bool visible), show(), hide() e visible() Mostra ou esconde a interface inteira ou um elemento (com o que tem dentro). hud["Chave"].show();
setEnabled(bool enabled) e enabled() Botão: desativado, fica apagado e não responde. botao.setEnabled(moedas >= 10);
setSprite(std::string_view sprite, int frame = 0) e setFrame(int frame) Troca o sprite de uma Imagem (ou o fundo de um Painel ou Botão) e o frame. linha["Icone"].setSprite("espada");
setColor(Color color) A cor principal: o fundo do Painel e do Botão, a parte cheia da Barra, as letras do Texto. hud["Vida"].setColor(colors::red);
setTextColor(Color color) e setBorderColor(Color color) A cor das letras e a da borda. botao.setTextColor(colors::yellow);
setFont(std::string_view font, int size = 0) e setTextSize(int size) A fonte (uma fonte do projeto; "" é a embutida) e o tamanho em pixels. titulo.setFont("Titulos", 24);
setPosition(float x, float y) e setSize(float width, float height) A posição (a partir da âncora) e o tamanho, em pixels do jogo. hud["Seta"].setPosition(10, 40);
Element clone(std::string_view name) Copia o elemento (com o que tem dentro) para o mesmo painel, no fim da lista, visível. Com um nome que já existe, refaz a cópia. modelo.clone("Item0");
void remove() Tira o elemento da interface. loja["Itens"]["Item0"].remove();
onClick(const Entity* owner, std::function<void()> callback) Roda callback quando o Botão é apertado. Com owner (passe this), o registro some quando a instância é destruída. botao.onClick(this, [this] { restart(); });
setScroll(float pixels) e scroll() O quanto a lista de um Painel com Rolar está rolada, em pixels (0 = no começo). A roda do mouse já rola sozinha. lista.setScroll(0);
onMouseEnter(const Entity* owner, std::function<void()> callback) e onMouseLeave(...) Roda callback quando o mouse entra no elemento e quando sai dele. linha.onMouseEnter(this, [linha] { linha.setColor(colors::yellow); });
Função O que faz Exemplo
void setPaused(bool paused) Pausa ou continua o jogo. Pausado, as instâncias não rodam temporizadores, onUpdate, movimento nem colisões. setPaused(true);
bool paused() true se o jogo está pausado. if (paused()) ...
void onPausedUpdate() Evento das instâncias: uma vez por passo enquanto o jogo está pausado, no lugar do onUpdate. void onPausedUpdate() override;
  • Cada interface existe uma vez só enquanto o jogo roda. Esconder e mostrar não desfaz o que o código mudou; para isso, Ui::reset.
  • As interfaces marcadas em Interfaces, no Inspetor da room, abrem com ela e fecham ao sair dela. As que o código mostra ficam até o código esconder.
  • Com o mouse em cima de um botão ou de um painel com fundo, mousePressed, mouseHeld e mouseReleased devolvem false para o jogo.
  • O mouse vale para os botões de todas as interfaces visíveis; o que está na frente tapa o de trás. O teclado anda nos botões da interface da frente, com as ações cima, baixo, esquerda, direita e confirmar.
  • Trocar de room (ou recomeçar) tira a pausa.
  • onClick sem owner também existe, e vale até um Ui::reset. Prefira passar this.

Veja HUD e menu de pausa e Loja com lista de itens.