Fix overlapping mission markers on the world map

Manual test: "La clairière" and "La cabane" overlapped on screen.
Their fractional positions (0.8,0.65) and (0.92,0.78) were too close
given the marker size at the project's default window size — exactly
the risk flagged but unverified in the previous commit.

Repositioned all 9 missions (not just the new ones) onto a regular
3x3 grid with 0.35 spacing, well clear of marker dimensions at the
default resolution. Added a headless regression test
(tests/data/test_mission_positions.gd) that fails if any two
missions are closer than a 0.3 fractional gap on both axes — a
data-level guard, not a substitute for visually checking actual
on-screen layout.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Denis Defolie
2026-10-11 21:50:39 +02:00
parent 1c036658bc
commit 233cc26452
13 changed files with 49 additions and 10 deletions
+1 -1
View File
@@ -4,6 +4,6 @@
"narrative_context": "Les lutins du pré n'arrivent plus à accorder leurs mots entre eux. Aide-les à retrouver les bonnes terminaisons pour que leurs phrases retrouvent leur sens !",
"rule_id": "regle_accord_adjectif",
"exercise_type": "multiple_choice",
"map_position": { "x": 0.2, "y": 0.7 },
"map_position": { "x": 0.15, "y": 0.85 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Un pont de pierres portant chacune un mot s'est abîmé. Repère la pierre fautive et corrige-la pour que les voyageurs puissent traverser en toute sécurité.",
"rule_id": "regle_accord_adjectif",
"exercise_type": "sentence_correction",
"map_position": { "x": 0.5, "y": 0.4 },
"map_position": { "x": 0.5, "y": 0.5 },
"review_status": "draft"
}
+1 -1
View File
@@ -4,6 +4,6 @@
"narrative_context": "L'écho de la clairière répète fidèlement les phrases qu'on lui confie, mais seulement si elles sont bien écrites. Dicte-lui la phrase sans faute pour l'entendre résonner.",
"rule_id": "regle_accord_adjectif",
"exercise_type": "dictation",
"map_position": { "x": 0.8, "y": 0.65 },
"map_position": { "x": 0.85, "y": 0.85 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Dans la ruche, chaque mot veut savoir s'il doit rester seul ou se multiplier. Aide les abeilles a choisir la bonne forme avant que le miel ne deborde !",
"rule_id": "regle_pluriel_nom",
"exercise_type": "multiple_choice",
"map_position": { "x": 0.12, "y": 0.15 },
"map_position": { "x": 0.15, "y": 0.15 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Les paniers du verger portent des etiquettes, mais certaines se sont trompees de nombre. Trouve l'etiquette fautive et corrige-la avant la recolte.",
"rule_id": "regle_pluriel_nom",
"exercise_type": "sentence_correction",
"map_position": { "x": 0.38, "y": 0.12 },
"map_position": { "x": 0.5, "y": 0.15 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Les grenouilles de la mare chantent une phrase, une seule fois. Ecoute-les bien et ecris exactement ce qu'elles chantent.",
"rule_id": "regle_pluriel_nom",
"exercise_type": "dictation",
"map_position": { "x": 0.65, "y": 0.15 },
"map_position": { "x": 0.85, "y": 0.15 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Chaque mot du sentier cherche son compagnon : le bon petit mot qui l'accompagne toujours. Aide-les a se retrouver sans se tromper.",
"rule_id": "regle_accord_determinant",
"exercise_type": "multiple_choice",
"map_position": { "x": 0.9, "y": 0.3 },
"map_position": { "x": 0.15, "y": 0.5 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Dans la cabane, les etiquettes des objets ont ete melangees par le vent. Repere celle qui ne va pas et remets le bon petit mot devant.",
"rule_id": "regle_accord_determinant",
"exercise_type": "sentence_correction",
"map_position": { "x": 0.92, "y": 0.78 },
"map_position": { "x": 0.85, "y": 0.5 },
"review_status": "draft"
}
@@ -4,6 +4,6 @@
"narrative_context": "Le vieux rocher de la foret repete une phrase, une seule fois, avant de se rendormir. Ecoute bien et ecris-la sans faute.",
"rule_id": "regle_accord_determinant",
"exercise_type": "dictation",
"map_position": { "x": 0.45, "y": 0.88 },
"map_position": { "x": 0.5, "y": 0.85 },
"review_status": "draft"
}