Login / Sign up
Discover Bonzai
Terms of Use
Legal notice
Privacy
Region
Language
matyo91
matyo91
12
Subscribers
Facebook
X
Whatsapp
Telegram
👉 You must follow matyo91 to access chat.
Feed Shop About

🎼 Comprendre l’ECS : la brique invisible derriùre les jeux modernes

Facebook
Twitter
Whatsapp
Telegram
3 months ago

Quand on conçoit un jeu, surtout un jeu tactique ou systémique comme Darkwaar, on se retrouve vite à jongler entre :

  • des entitĂ©s (joueurs, ennemis, objets, cases),

  • des comportements (mouvement, attaque, effet),

  • et des systĂšmes (rendu, IA, collisions, effets de statut...).

Les approches orientées objet classiques finissent vite par créer des hiérarchies trop profondes : Player extends Character extends Entity extends Drawable extends Object
 Résultat : une usine à gaz.

C’est là qu’intervient l’ECS — Entity Component System.

⚙ L’idĂ©e de base

L’ECS part d’un principe simple :

sĂ©parer les donnĂ©es, le comportement, et l’exĂ©cution.

| ÉlĂ©ment | RĂŽle | Exemple | | ------------- | ------------------------------------------- | --------------------------------------------------------- | | Entity | Identifiant unique | #23 = Guerrier sur la case (3,2) | | Component | DonnĂ©es brutes (pas de logique) | Position(3,2), Vie(10), Attaque(3) | | System | Comportement (agit sur certains composants) | SystemeDeMouvement, SystemeDeCombat, SystemeDeRendu |

L’ECS ne remplace pas la programmation orientĂ©e objet — il la dĂ©structure pour la rendre Ă©volutive. Au lieu d’écrire ce que fait chaque classe, on dĂ©finit comment les donnĂ©es interagissent.

đŸ§© Exemple concret

Prenons un exemple simplifié en GDScript (Godot) :

# Composant Position class_name CPosition extends Resource @export var q:int @export var r:int # Composant Vie class_name CVie extends Resource @export var hp:int = 10 # SystĂšme de rendu extends Node const CPosition = preload("res://components/CPosition.gd") func process_system(dt): for entity in get_entities_with([CPosition]): var pos = entity.get_component(CPosition) draw_unit(pos.q, pos.r)

Ici :

  • l’entitĂ© ne “fait” rien — elle contient des composants ;

  • les systĂšmes se dĂ©clenchent sur les entitĂ©s qui possĂšdent un certain ensemble de composants.

C’est une approche data-driven : tout est pilotĂ© par les donnĂ©es.

🧼 Pourquoi c’est puissant

L’ECS n’est pas juste un design pattern Ă  la mode. C’est une approche structurante qui rĂ©sout trois problĂšmes majeurs :

1. ÉvolutivitĂ©

Tu peux ajouter de nouveaux comportements sans casser les anciens :

Ajouter un composant CInvisible suffit pour qu’un systĂšme “Rendu” ignore ton entitĂ©.

2. Rejeu et simulation

Tu peux rejouer une partie en appliquant la mĂȘme sĂ©quence d’évĂ©nements, car tout l’état du jeu est pur data, sĂ©rialisable, diffable et testable.

3. Performance

Les ECS modernes (comme Flecs, EnTT ou Unity DOTS) stockent les données en mémoire contiguë. Le CPU adore ça :

moins d’appels, moins de cache-miss, plus de vitesse.

đŸ§± Dans Darkwaar 5

Darkwaar 5 repose sur un ECS lĂ©ger en GDScript, sans moteur externe. L’objectif est d’avoir :

  • un monde (World) central,

  • des entitĂ©s simples (un Node par personnage ou objet),

  • des composants (Resource) pour les donnĂ©es,

  • des systĂšmes (Node) pour la logique.

Exemple simplifié :

# GameRoot.gd @onready var world := $World func ready(): var unit = world.createentity() unit.add_component(CPosition.new()) unit.add_component(CVie.new())

Chaque frame :

  • le World passe sur les systĂšmes actifs ;

  • les systĂšmes parcourent les entitĂ©s qui les concernent ;

  • et la logique s’exĂ©cute sur les donnĂ©es brutes.

Cette sĂ©paration permet d’ajouter facilement :

  • un systĂšme de buffs (effets temporaires),

  • un systĂšme de rĂ©solution de combat,

  • ou un systĂšme de puzzle pour les niveaux.

đŸ§© ECS ≠ magie

L’ECS ne fait pas “mieux” qu’une approche orientĂ©e objet : il fait plus simple Ă  maintenir.

Mais il y a un coĂ»t : il faut penser en flux de donnĂ©es, pas en hiĂ©rarchie d’objets.

  • Pas de “Player.move()”, mais un SystemMouvement qui lit les CPosition et CVitesse.

  • Pas de “Enemy.attack()”, mais un SystemCombat qui lit les CCombat et CVie.

C’est un changement de paradigme — mais une fois compris, tout devient plus clair.

🧭 Ce que Darkwood en retient

Chez Darkwood, l’ECS n’est pas qu’une architecture de jeu. C’est une façon de penser la modularitĂ© :

  • Dans Darkwaar, il structure le gameplay et les puzzles.

  • Dans Uniflow, il inspire la logique des “flows” de donnĂ©es.

  • Dans Flow, il sert de base pour la composition visuelle d’automatisations.

MĂȘme combat : sĂ©parer les donnĂ©es, les comportements et la logique d’exĂ©cution.

🔼 Et aprùs ?

La prochaine étape pour Darkwaar 5 :

  • intĂ©grer l’ECS au systĂšme de carte isomĂ©trique ;

  • lier chaque case Ă  une entitĂ© ;

  • et synchroniser les composants entre la vue (haut) et le HUD (bas).

Cela posera les fondations d’un moteur tactique isomĂ©trique open-source, pensĂ© pour la gĂ©nĂ©ration procĂ©durale, les puzzles et les systĂšmes Ă©mergents.

đŸ§© Ressources

  • ECS FAQ – Sander Mertens (Flecs)

  • Zeste de Savoir – L’Entity Component System

  • Bevy Engine – ECS in Rust

  • Unity DOTS documentation

Follow matyo91 to comment
matyo91

matyo91

Je t'aide Ă  automatiser tes process
12
Visit this Bonzai
Follow matyo91 to get the latest updates.

♟ DĂ©gĂąts de dĂ©fausse infini

2 days ago
13

📝 Gouvernance IT : reprendre le contrîle sans ralentir l’innovation

1 week ago
12

⭐ Monter LĂ©gende avec le Guerrier QuĂȘte (Enter the Lost City)

2 weeks ago
21

⭐ Monter lĂ©gende avec le deck Paladin Aggro Bubule

3 weeks ago
22

🎄 Offre de fin d’annĂ©e – Formation Flow (PHP)

3 weeks ago
24

⭐ Meetup AFUP Paris DĂ©cembre 2025

4 weeks ago
24

đŸ›ïž Open Source Experience 2025 : un Ă©cosystĂšme qui s’organise, s’affirme et accĂ©lĂšre

1 month ago
36

ai-PULSE 2025 : l'Europe de l'IA passe à la vitesse supérieure

1 month ago
33

đŸ§© Meetup AFUP Paris – Novembre 2025

1 month ago
43

đŸ€– L’IA CafĂ© Club #12 : CrĂ©ation, business, cinĂ©ma
 l’IA sous toutes ses formes Ă  la Monnaie de Paris

1 month ago
42

🚀 Uniflow 1.1.18

3 months ago
88

🎹 Programmation rĂ©cursive de pipes

3 months ago
87

🚀 Veille tech semaine 39

3 months ago
87

đŸŽ™ïžHttpChunk avec Flow

3 months ago
82

🔹 API Platform Conference 2025 : retour de l’écosystĂšme Symfony et PHP

3 months ago
107

✹ Rencontre SQLI

4 months ago
96

🎹 Pipe Programming : linĂ©ariser la complexitĂ© des graphes

4 months ago
155

🚀 Symfony AI Hackathon – Mon retour d’expĂ©rience en ligne

4 months ago
97

🚀 Veille tech semaine 37

4 months ago
179

đŸŽČ Pierre-Papier-Ciseaux : un modĂšle minimal d’équilibre et de stratĂ©gie

4 months ago
92
© 2026 Bonzai Privacy Legal notice Terms of Use