Spécification Moteur : Production & Effets JSON

Documentation fonctionnelle du flux d'exécution et du schéma des données pour les bâtiments.

1. Flux d'Exécution par Tour (Algorithme)

1

Analyse & Prérequis

Le moteur vérifie l'ensemble des conditions sur l'astre avant toute modification :

  • check : La valeur minimum (Pop, Énergie...) est-elle présente ?
  • sup : La somme globale des ressources/énergie stockées couvre-t-elle le coût ?

Si UN SEUL critère manque → Statut penurie, aucun prélèvement, bâtiment suivant.

2

Prélèvement (Consommation)

Si tout est disponible, le moteur applique l'étape de prélèvement :

  • Déduction directe des stocks physiques (R001, R002...).
  • Déduction répartie sur les réserves des bâtiments/batteries actifs (Énergie, Bière...).

Le statut du bâtiment passe à ok.

3

Production & Gains

Application des effets bénéfiques du bâtiment :

  • add (Ressource) : Crédit dans le stock global.
  • add (Interne) : Recharge d'état (ex: Bouclier, Stock de bière), plafonné par keep.

2. Les 4 Opérations JSON d'un Bâtiment

check — Seuil / Prérequis

Vérifie la présence d'une valeur sans la consommer (ex: population minimale, technologie).

{
  "cible": "population",
  "type_objet": "POP",
  "operation": "check",
  "valeur": 100
}

sup — Consommation

Prélève une quantité donnée sur les ressources physiques ou les réserves des bâtiments (énergie, bière...).

{
  "cible": "biere",
  "type_objet": "consomation",
  "operation": "sup",
  "valeur": 10
}

add — Production ou Recharge

Produit une ressource physique ou remplit le stockage interne d'un bien jusqu'au plafond keep.

{
  "cible": "biere",
  "type_objet": "production",
  "operation": "add",
  "valeur": 10
}

keep — Capacité / Plafond

Définit le plafond maximal conservé sur l'astre et active la réserve dynamique.

{
  "cible": "biere",
  "type_objet": "stockage",
  "operation": "keep",
  "valeur": 100
}

3. Flux de Dépendance Inter-Bâtiments (Ex: Bière, Énergie, Eau...)

Lorsqu'un élément dynamique n'est pas une ressource brute globale, sa gestion repose sur la **correspondance exacte de la clé cible** entre trois bâtiments :

1. Capacité

Conteneur / Buffer

Déclare la capacité maximale hébergée sur l'astre pour cette cible.

{
  "cible": "biere",
  "type_objet": "stockage",
  "operation": "keep",
  "valeur": 100
}
2. Remplissage

Brasserie / Générateur

Génère du flux qui vient remplir le stock local (plafonné par le keep).

{
  "cible": "biere",
  "type_objet": "production",
  "operation": "add",
  "valeur": 10
}
3. Prélèvement

Taverne / Usine

Vérifie la présence puis consomme le flux disponible dans le conteneur.

{
  "cible": "biere",
  "type_objet": "consomation",
  "operation": "sup",
  "valeur": 10
}

Comment le moteur relie le tout :

  • Nom de la clé : Le lien se fait exclusivement par la valeur identique dans "cible" (ex: "biere", "energie", "oxygene").
  • Création du bassin : Dès qu'un bâtiment avec keep est actif sur l'astre, la réserve existe.
  • Cycle du tour : Le moteur remplit le bassin avec les effets add puis consomme avec les effets sup. Si le total stocké est inférieur à la demande sup, le bâtiment consommateur passe en penurie.

4. Exemples Concrets de Bâtiments

Usine de Transformation (R001 → R002)

Consomme du minerai brut pour fabriquer un alliage si 50 de population sont présents.

{
  "id": "B_RAFFINERIE",
  "nom": "Raffinerie d'alliage",
  "effets": [
    {
      "cible": "population",
      "type_objet": "POP",
      "operation": "check",
      "valeur": 50
    },
    {
      "cible": "prod_ressource",
      "type_objet": "R001",
      "operation": "sup",
      "valeur": 10
    },
    {
      "cible": "prod_ressource",
      "type_objet": "R002",
      "operation": "add",
      "valeur": 2
    }
  ]
}

Centrale Solaire / Batterie d'Énergie

Stocke jusqu'à 100 unités d'énergie et se recharge de 10 par tour.

{
  "id": "B_BATTERIE_SOLAIRE",
  "nom": "Centrale Batterie",
  "effets": [
    {
      "cible": "energie",
      "type_objet": "stockage",
      "operation": "keep",
      "valeur": 100
    },
    {
      "cible": "energie",
      "type_objet": "production",
      "operation": "add",
      "valeur": 10
    }
  ]
}