Comportamientos
Introducción
Un comportamiento es una función que se ejecuta en el Mundo cada tick.
Definir un comportamiento
El siguiente código es un ejemplo de cómo definir un comportamiento personalizado:
const behavior = (world) => {
if (world.time.elapsed % 5000 - world.time.delta < 0) {
const eid = world.createEntity()
Enemy.set(world, eid, {health: 100})
}
}
Registrar un comportamiento
El siguiente código es un ejemplo de cómo registrar un comportamiento personalizado:
ecs.registerBehavior(comportamiento)
Desactivar un comportamiento
El siguiente código es un ejemplo de cómo desactivar un comportamiento personalizado:
ecs.unregisterBehavior(comportamiento)
Consulta de comportamiento
Los comportamientos pueden ejecutar consultas, que devuelven listas de ID de entidades.
const query = ecs.defineQuery([Enemigo, Salud])
const enemyDieBehavior = (mundo) => {
const enemigos = query(mundo)
for (const enemyId in enemigos) {
if (Salud.get(mundo, enemyId).hp <= 0) {
mundo.destruirEntidad(enemyId)
}
}
}
ecs.registerBehavior(enemyDieBehavior)
Sistemas
Los comportamientos también pueden estructurarse como Sistemas, que se ejecutan en entidades que coinciden con consultas específicas y permiten un acceso eficiente a los datos.
consejo
Este enfoque mejora el rendimiento porque los datos como "enemigo" y "salud" están preconfigurados, lo que hace que la iteración sea más rápida.
const enemyDieSystem = ecs.defineSystem([Enemigo, Salud],
(mundo, eid, [enemigo, salud]) => {
if (salud.hp <= 0) {
mundo.destruirEntidad(eid)
}
}
)
ecs.registerBehavior(enemyDieSystem)