Pular para o conteúdo
Baixar

Instâncias

Estas funções trabalham com as instâncias da room atual. O <T> é o objeto: spawn<Enemy>, count<Coin>.

Função O que faz Exemplo
T* spawn<T>(float atX, float atY, std::string_view layer) Cria uma instância de T na posição dada, na camada layer. O onSpawn dela roda na hora. Devolve a instância criada (ou nullptr se a room já está acabando). spawn<Bullet>(x, y - 8, "Tiros");
void each<T>(fn) Chama fn para cada instância viva de T. As criadas durante a chamada não entram. each<Enemy>([](Enemy& e) { e.destroy(); });
int count<T>() Quantas instâncias vivas de T existem. if (count<Enemy>() == 0) goTo("Vitoria");
bool any<T>() true se existe pelo menos uma instância de T. if (!any<Player>()) restart();
T* closest<T>() A instância de T mais próxima (sem contar esta), ou nullptr. if (Player* p = closest<Player>()) moveToward(p->x, p->y, 1);
void destroyAll<T>() Destrói todas as instâncias de T. destroyAll<Bullet>();
T* instance<T>() A primeira instância viva de T (pode ser esta mesma), ou nullptr. Feito para objetos que só têm uma instância, como um controlador global. instance<Controle>()->moedas++;

each, count, any e destroyAll também aceitam o nome do objeto entre aspas. Serve para objetos sem código, que não têm classe. O each recebe um Entity&.

Função Exemplo
int count(std::string_view object) if (count("Moeda") == 0) goTo("Fase2");
bool any(std::string_view object) if (!any("Chave")) ...
void each(std::string_view object, fn) each("Caixa", [](Entity& caixa) { caixa.visible = false; });
void destroyAll(std::string_view object) destroyAll("Moeda");

O nome do objeto de uma instância está em objectName().

  • “Vivas” quer dizer que ainda não foram destruídas.
  • Subclasses contam: se Boss herda de Enemy, count<Enemy>() conta os chefes também.
  • Sempre confira se o ponteiro devolvido não é nullptr antes de usar, como nos exemplos com if (... = ...).
  • Para guardar uma referência a uma instância por mais de um passo, use um Handle.