Darkwood Blog Blog
  • Articles
  • Auto
  • Releases
fr
  • de
  • en
Connexion
  • Blog
  • Articles
  • Auto
  • Releases

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

le 13 octobre 2025

Connectez-vous pour réagir à cet article

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.create_entity()
    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.

Connectez-vous pour réagir à cet article

Site

  • Plan du Site
  • Contact
  • Mentions lĂ©gales

Network

  • Hello
  • Blog
  • Apps
  • Photos

Social

Darkwood 2026, tous droits réservés