mirror of
https://github.com/deunix-educ/aventuriers-des-mots.git
synced 2026-10-13 02:11:58 +02:00
Visual overhaul: theme, illustrations, redesigned screens (0.3.0)
Phase "habillage" of the post-0.1.0 plan. Rendering was reviewed on real screenshots (new tools/screenshot.gd, `make screenshot`), which also caught and fixed map markers overlapping and truncated titles. - Global Godot theme (Atkinson Hyperlegible font, cream/green/gold palette, raised buttons, rounded cards, thick keyboard focus). - Original vector art: forest/marsh backdrops, Plume the owl, stars, exercise-type icons, correct/try-again icons, 10 collection items. - Redesigned world map (markers as cards with icon, title and stars, responsive layout), profile screens, mission intro, exercise host, rule/feedback panels, reward screen and collection grid. - Motion helper (pop-in, fade) honouring an animations setting. - Settings: animations flag; base window 1152x648 with canvas_items. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,7 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="InstructionLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ var _pending_outcome := ""
|
||||
@onready var _exercise_container: Control = %ExerciseContainer
|
||||
@onready var _overlay_container: Control = %OverlayContainer
|
||||
@onready var _progress_label: Label = %ProgressLabel
|
||||
@onready var _progress_pill: Control = %ProgressPill
|
||||
@onready var _abandon_button: Button = %AbandonButton
|
||||
@onready var _abandon_confirm_dialog: ConfirmationDialog = %AbandonConfirmDialog
|
||||
|
||||
@@ -64,6 +65,7 @@ func _ready() -> void:
|
||||
_rule = ExerciseEngine.get_rule(_mission["rule_id"])
|
||||
_skill_id = _rule.get("skill", "")
|
||||
_current_difficulty = ProgressManager.next_difficulty_for_skill(_skill_id, 1)
|
||||
$Backdrop.kind = "marsh" if _rule.get("level", "CE1") == "CE2" else "forest"
|
||||
_show_rule_panel()
|
||||
|
||||
|
||||
@@ -114,6 +116,7 @@ func _load_next_exercise() -> void:
|
||||
## peut faire redonner le meme exercice d'une mission a l'autre tentative :
|
||||
## sans ce repere, ca ressemble a un blocage plutot qu'a une progression.
|
||||
func _update_progress_label() -> void:
|
||||
_progress_pill.visible = true
|
||||
_progress_label.text = "%s %d/%d" % [
|
||||
UIText.get_text("exercise_host.progress_label"), _completed_count + 1, MISSION_LENGTH
|
||||
]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3]
|
||||
[gd_scene load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/exercises/exercise_host.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://scenes/ui/backdrop.tscn" id="backdrop"]
|
||||
|
||||
[node name="ExerciseHost" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -11,12 +12,36 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="Backdrop" parent="." instance=ExtResource("backdrop")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="ContentCard" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 24.0
|
||||
offset_top = 64.0
|
||||
offset_right = -24.0
|
||||
offset_bottom = -24.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ExerciseContainer" type="Control" parent="."]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = 48.0
|
||||
offset_left = 40.0
|
||||
offset_top = 76.0
|
||||
offset_right = -40.0
|
||||
offset_bottom = -36.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
@@ -33,7 +58,7 @@ mouse_filter = 2
|
||||
[node name="HeaderBar" type="MarginContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchor_right = 1.0
|
||||
offset_bottom = 48.0
|
||||
offset_bottom = 56.0
|
||||
grow_horizontal = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
@@ -45,16 +70,24 @@ layout_mode = 2
|
||||
|
||||
[node name="AbandonButton" type="Button" parent="HeaderBar/HBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"SecondaryButton"
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Spacer" type="Control" parent="HeaderBar/HBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="ProgressLabel" type="Label" parent="HeaderBar/HBox"]
|
||||
[node name="ProgressPill" type="PanelContainer" parent="HeaderBar/HBox"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
theme_type_variation = &"Pill"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="ProgressLabel" type="Label" parent="HeaderBar/HBox/ProgressPill"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="AbandonConfirmDialog" type="ConfirmationDialog" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -21,7 +21,8 @@ func load_exercise(exercise: Dictionary) -> void:
|
||||
for i in answers.size():
|
||||
var button := Button.new()
|
||||
button.text = answers[i]
|
||||
button.custom_minimum_size = Vector2(0, 56)
|
||||
button.custom_minimum_size = Vector2(0, 64)
|
||||
button.add_theme_font_size_override("font_size", 28)
|
||||
button.pressed.connect(_on_answer_pressed.bind(i))
|
||||
_answers_box.add_child(button)
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="InstructionLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
@@ -36,7 +37,7 @@ autowrap_mode = 2
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
theme_override_font_sizes/font_size = 24
|
||||
theme_type_variation = &"CardTitle"
|
||||
|
||||
[node name="AnswersBox" type="VBoxContainer" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -33,6 +33,9 @@ func load_exercise(exercise: Dictionary) -> void:
|
||||
var button := Button.new()
|
||||
button.text = tokens[i]["text"]
|
||||
button.toggle_mode = true
|
||||
button.theme_type_variation = &"SecondaryButton"
|
||||
button.custom_minimum_size = Vector2(0, 60)
|
||||
button.add_theme_font_size_override("font_size", 30)
|
||||
button.toggled.connect(_on_token_toggled.bind(i))
|
||||
_tokens_box.add_child(button)
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ theme_override_constants/separation = 16
|
||||
|
||||
[node name="InstructionLabel" type="Label" parent="Margin/VBox"]
|
||||
unique_name_in_owner = true
|
||||
theme_type_variation = &"Emphasis"
|
||||
layout_mode = 2
|
||||
autowrap_mode = 2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user