Componentes
Los componentes son estructuras de datos que definen las propiedades y el estado de una entidad.
Cada componente contiene datos específicos y NO contiene lógica (la lógica se maneja en los sistemas).
Por ejemplo, un componente Player
puede definir los puntos de vida, velocidad o estado del jugador.
📝 Nota: Cada entidad puede tener solo una instancia de cada tipo de componente.
Definir componentes personalizados
Puedes definir componentes personalizados como clases simples:
class Player {
health = 100;
speed = 50;
}
Luego puedes usarlos al crear entidades:
const entity = entityManager.createEntity([new Player(), new Transform({ position: new Vector2(0, 0) })]);
Acceder y modificar componentes
Obtener un componente de una entidad:
const player = entityManager.getComponent(entity, Player);
Actualizar datos de un componente:
entityManager.updateComponentData(entity, Player, { health: 80 });
📝 También puedes comprobar si una entidad tiene un componente usando
hasComponent
:
if (entityManager.hasComponent(entity, Player)) {
// La entidad tiene el componente Player
}
Deshabilitar y habilitar componentes
Puedes deshabilitar o habilitar componentes de una entidad:
entityManager.disableComponent(entity, Player);
entityManager.enableComponent(entity, Player);
Los componentes deshabilitados no serán procesados por los sistemas hasta que se habiliten.
Crear componentes deshabilitados al inicio
Puedes crear componentes deshabilitados desde el inicio usando disableComponent
:
const archetype = {
components: [disableComponent(new BoxCollider())],
};
Buscar entidades por componentes
Puedes buscar todas las entidades que tengan un componente específico:
const result = entityManager.search(Player);
result.forEach(({ entity, component }) => {
console.log(`Entidad ${entity} tiene vida: ${component.health}`);
});
También puedes buscar filtrando por atributos del componente:
const fastPlayers = entityManager.search(Player, { speed: 100 });
Componentes Built-in
Angry Pixel Engine incluye 19 componentes built-in listos para usar.
Estos componentes cubren aspectos generales, físicas y renderizado.
📦 Componentes de uso general
- Transform: Define la posición, rotación y escala de la entidad.
- TiledWrapper: Permite integrar objetos provenientes de Tiled.
- Button: Crea áreas clicables y botones de interfaz.
- AudioPlayer: Permite reproducir sonidos y música.
⚙️ Componentes de físicas
- TilemapCollider: Colisionador para mapas de tiles.
- RigidBody: Define propiedades físicas como velocidad y aceleración.
- EdgeCollider: Colisionador en forma de borde o línea.
- BoxCollider: Colisionador rectangular.
- BallCollider: Colisionador circular.
- PolygonCollider: Colisionador de polígonos convexos.
🎨 Componentes de renderizado
- Animator: Controla animaciones de sprites.
- VideoRenderer: Permite renderizar videos como parte del juego.
- TilemapRenderer: Renderiza mapas de tiles.
- TextRenderer: Muestra texto en pantalla.
- SpriteRenderer: Renderiza sprites.
- DarknessRenderer: Genera una capa de oscuridad que puede ser iluminada con el LightRenderer.
- MaskRenderer: Aplica máscaras de recorte a la entidad.
- LightRenderer: Renderiza luces.
- Camera: Define la cámara que observa la escena.
📝 Nota: Puedes combinar componentes built-in y personalizados en una misma entidad.
Nota importante
- Los componentes deben ser clases (no objetos literales).
- No deben contener lógica (la lógica se maneja en los sistemas).
- Puedes deshabilitar componentes temporalmente si quieres que la entidad deje de usar cierta funcionalidad sin eliminarla.
Resumen
✅ Los componentes definen datos y estado de una entidad.
✅ No contienen lógica.
✅ Se gestionan y buscan a través del EntityManager
.
✅ Puedes usar componentes built-in o crear los tuyos propios.