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.
Interfaces
Seção intitulada “Interfaces”| 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; |
Elementos
Seção intitulada “Elementos”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; |
Observações
Seção intitulada “Observações”- 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,mouseHeldemouseReleaseddevolvemfalsepara 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,direitaeconfirmar. - Trocar de room (ou recomeçar) tira a pausa.
onClicksemownertambém existe, e vale até umUi::reset. Prefira passarthis.
