Ir al contenido
Descargar

Instancias

Estas funciones trabajan con las instancias de la room actual. El <T> es el objeto: spawn<Enemy>, count<Coin>.

Función Qué hace Ejemplo
T* spawn<T>(float atX, float atY, std::string_view layer) Crea una instancia de T en la posición dada, en la capa layer. Su onSpawn se ejecuta al momento. Devuelve la instancia creada (o nullptr si la room ya está terminando). spawn<Bullet>(x, y - 8, "Tiros");
void each<T>(fn) Llama a fn para cada instancia viva de T. Las creadas durante la llamada no entran. each<Enemy>([](Enemy& e) { e.destroy(); });
int count<T>() Cuántas instancias vivas de T existen. if (count<Enemy>() == 0) goTo("Victoria");
bool any<T>() true si existe al menos una instancia de T. if (!any<Player>()) restart();
T* closest<T>() La instancia de T más cercana (sin contar esta), o nullptr. if (Player* p = closest<Player>()) moveToward(p->x, p->y, 1);
void destroyAll<T>() Destruye todas las instancias de T. destroyAll<Bullet>();
T* instance<T>() La primera instancia viva de T (puede ser esta misma), o nullptr. Hecha para objetos que solo tienen una instancia, como un controlador global. instance<Controle>()->moedas++;

each, count, any y destroyAll también aceptan el nombre del objeto entre comillas. Sirve para los objetos sin código, que no tienen clase. El each recibe un Entity&.

Función Ejemplo
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");

El nombre del objeto de una instancia está en objectName().

  • “Vivas” quiere decir que todavía no fueron destruidas.
  • Las subclases cuentan: si Boss hereda de Enemy, count<Enemy>() cuenta también a los jefes.
  • Comprueba siempre que el puntero devuelto no sea nullptr antes de usarlo, como en los ejemplos con if (... = ...).
  • Para guardar una referencia a una instancia durante más de un paso, usa un Handle.