Commit Graph
100 Commits
Author SHA1 Message Date
Adrien Ufferte c9bdedb576 Bold font for lesson buttons 2026-05-28 10:29:10 +02:00
Adrien Ufferte ba8646c1bd Place clouds behind UI buttons 2026-05-28 10:21:51 +02:00
Adrien Ufferte d55c05b53d Debug clouds "world bounds" 2026-05-28 09:31:11 +02:00
Adrien Ufferte 8f4a1be939 Cleaning code for cloud manager 2026-05-26 16:40:56 +02:00
Adrien Ufferte 606b87d1b2 Last 3 gardens 2026-05-26 15:56:41 +02:00
Adrien Ufferte ab1ad7f27e Red Parakeet garden (09) 2026-05-26 14:30:58 +02:00
Adrien Ufferte 847f04c5a7 Monkey garden (08) 2026-05-26 14:11:52 +02:00
Adrien Ufferte b16580094e Frog garden (07) 2026-05-26 13:47:58 +02:00
Adrien Ufferte e5d628897c Garden Caterpillar (06) 2026-05-26 11:32:46 +02:00
Adrien Ufferte fdd597f5d6 Yellow Parakeet garden (05) 2026-05-26 11:08:06 +02:00
Adrien Ufferte 942a3b47ec Gardens animals transform normalization 2026-05-26 10:55:25 +02:00
Adrien Ufferte 953260c31d crabs garden 2026-05-26 10:51:29 +02:00
Adrien Ufferte 7ce680d14c Ant garden (03) 2026-04-30 16:15:13 +02:00
Adrien Ufferte bebc449f56 cleaning 2026-04-30 16:15:13 +02:00
Adrien Ufferte 6f0163a8db Stratify garden clouds in scroll-space, not world-space
Initial spawning placed clouds uniformly across [0, spawn_width], which
broke down at the edges of the scroll range whenever the parallax factor
was anything other than exactly 1.0:

- With parallax < 1.0 (background feel), a cloud is only ever visible at
  scrolls in [(drift_x - screen_w) / parallax, drift_x / parallax]. So a
  far cloud at drift_x near spawn_width (e.g. 28000 with parallax 0.5)
  needs scroll ~56000 to be seen, far beyond max_scroll. About half the
  spawn range was a dead zone the user could never reach.

- With parallax > 1.0 (foreground feel — what the gardens scene now uses),
  the opposite happens: clouds visible at the right edge of the scroll
  range live at drift_x = max_scroll * parallax + screen_w, which is well
  past spawn_width. The right side of the gardens stayed empty because no
  cloud was ever spawned that far out.

Add a max_scroll parameter to configure_world() and stratify in scroll
space: each cloud gets a target_scroll value in its own slot of
[0, max_scroll], and its drift_x is placed at target_scroll * parallax +
horiz_jitter. The cloud's drift_x range now matches the scroll positions
where it can actually be visible, regardless of whether parallax is below
or above 1.0. _reset_cloud is updated correspondingly to wrap clouds to
the right edge of their individual visibility range rather than the
world's right edge.

Also have configure_world refresh screen_width every call so the manager
picks up the correct viewport size even when the parent invokes it later
in the ready sequence.
2026-04-30 16:15:13 +02:00
Adrien Ufferte ad571da545 Spread initial cloud spawn positions via stratified sampling
Replace pure randf_range across the spawn width with stratified placement:
the spawn range is split into N equal slots (N = number of clouds) and each
cloud is placed at a random position inside its own slot. This caps the
maximum gap between clouds at one slot width, eliminating the "all clouds
on one side" failure mode of independent random draws while keeping each
cloud's exact position random within its band so the layout still feels
natural rather than grid-regular.

The sprite list is shuffled before slot assignment so identical duplicated
templates don't end up in adjacent slots in scene-tree order.
2026-04-30 16:15:13 +02:00
Adrien Ufferte 63436f1782 Anchor garden clouds to world coordinates for recycling
Previously clouds in the gardens recycled based on their rendered (viewport)
position. When the user scrolled to the far right, parallax pushed every
cloud's rendered X far into the negative, triggering all of them to wrap
to the right viewport edge. Their drift_x was thus warped to roughly
scroll_offset + screen_width — so when the user scrolled back left, every
cloud sat in the world to the right of the visible area, leaving the left
side of the gardens empty.

Switch CloudsManager to use world-anchored recycling whenever spawn_width
is set: a cloud is only recycled when its drift_x (its world coordinate)
falls past the world's left edge, and it respawns at the world's right edge
rather than the viewport's. The legacy viewport-anchored path is preserved
for the minigames that don't set spawn_width.
2026-04-30 16:15:13 +02:00
Adrien Ufferte de395ab036 Add scrolling clouds to the gardens scene
Extend CloudsManager with optional scroll-driven parallax and auto-population:

- New scroll_offset property feeds an external horizontal scroll value;
  each cloud's rendered X is drift_x - scroll_offset * parallax_factor.
- min_parallax_factor / max_parallax_factor are interpolated by the same
  depth factor that drives speed and scale, so closer clouds parallax more.
- spawn_width + clouds_per_screen + configure_world() let the manager
  duplicate its template children to cover wider scrollable worlds.
- Defaults preserve the previous behavior, so parakeets / penguin / monkeys
  / boss minigames keep their existing per-frame drift unchanged.

In gardens.tscn, add a CloudsLayer (CanvasLayer, layer = 1) on top of the
existing UI with three template cloud sprites (transparent via modulate
alpha, mouse passthrough by virtue of being Sprite2D). gardens.gd configures
the cloud world width to garden_count * GARDEN_SIZE after lessons are set
up, then forwards scroll_container.scroll_horizontal to clouds.scroll_offset
each frame so clouds drift naturally and parallax with garden scrolling.
2026-04-30 16:15:13 +02:00
Adrien Ufferte a58e59f656 New garden 02 (and cleaning) 2026-04-30 16:15:13 +02:00
Adrien Ufferte 5553394a2c Merge pull request #317 from Excello-Recherche-Education/prof-tools-bug
Prof tool 1.4.1 export settings
2026-04-30 16:09:19 +02:00
Adrien Ufferte e6a8655bb8 Prof tool 1.4.1 export settings 2026-04-30 16:07:49 +02:00
Adrien Ufferte e35b3766e1 Merge pull request #316 from Excello-Recherche-Education/prof-tools-bug
Debug save sentences modified
2026-04-30 15:52:42 +02:00
Adrien Ufferte 750fe21da2 Debug save sentences modified 2026-04-30 15:50:11 +02:00
Adrien Ufferte 728819cac1 Fix ScrollContainer single-child warning in gardens scene
Move BossButtons, LockedLine and UnlockedLine out of the ScrollContainer
so it only contains the HBoxContainer that drives its scroll size.
BossButtons now tracks scrolling via a manual position offset in _process,
mirroring what the lines and parallax background already do.
2026-04-28 14:00:45 +02:00
Adrien Ufferte 6b86d35dfe Penguin text alignment 2026-04-28 12:06:34 +02:00
Adrien Ufferte 512038313c debug-coconut-text 2026-04-27 15:53:22 +02:00
Adrien Ufferte c4f59ef274 Merge pull request #315 from Excello-Recherche-Education/penguin-signs
Take opener and terminator sign in sentences for the penguin minigame
2026-04-27 13:57:59 +02:00
Adrien Ufferte 810f504a16 Take opener and terminator sign in sentences for the penguin minigame 2026-04-27 13:45:45 +02:00
Adrien Ufferte a6455cbbe5 Merge pull request #314 from Excello-Recherche-Education/turtle-text-center
Centers text on turtles, and make font a little smaller to fit double…
2026-04-27 11:10:02 +02:00
Adrien Ufferte f95ff50c15 Centers text on turtles, and make font a little smaller to fit double letters 2026-04-27 11:06:48 +02:00
Adrien Ufferte 6f00c4cc4b Merge pull request #313 from Excello-Recherche-Education/turtles-disappear-speed
Turtles disappear quickly when colliding with each other
2026-04-27 10:49:33 +02:00
Adrien Ufferte 91f4d57ef7 Turtles disappear quickly when colliding with each other 2026-04-27 10:46:11 +02:00
Adrien Ufferte f1b16cde17 Merge pull request #312 from Excello-Recherche-Education/parakeets-letters
Parakeets maximum letters = 1
2026-04-24 16:07:27 +02:00
Adrien Ufferte 06019e97d2 Parakeets maximum letters = 1 2026-04-24 15:57:26 +02:00
Adrien Ufferte b80eac1313 Merge pull request #311 from Excello-Recherche-Education/debug-highlight
Debug highlight fx system
2026-04-24 15:44:22 +02:00
Adrien Ufferte cf46d84b56 Debug highlight fx system 2026-04-24 12:06:13 +02:00
Adrien Ufferte a37dbd9dd7 Merge pull request #310 from Excello-Recherche-Education/debug-difficulty
Debug difficulty system
2026-04-24 11:09:07 +02:00
Adrien Ufferte 1d387d1ea6 Debug difficulty system 2026-04-24 10:41:40 +02:00
Adrien Ufferte a1faf7e154 Merge pull request #309 from Excello-Recherche-Education/add-moving-clouds
Add moving clouds
2026-04-24 09:24:18 +02:00
Adrien Ufferte d4c883da47 Add moving clouds to penguin minigame 2026-04-23 17:09:06 +02:00
Adrien Ufferte 9c6ffa1b28 Add clouds to monkeys minigame 2026-04-23 17:03:11 +02:00
Adrien Ufferte 0a51a42410 Merge pull request #308 from Excello-Recherche-Education/optimize-monkeys-minigame
Optimize monkeys minigame
2026-04-23 16:54:39 +02:00
Adrien Ufferte 3c4d85f032 Nomenclature 2026-04-23 16:43:33 +02:00
Adrien Ufferte 915b6c45ee Further optimize monkeys initialization 2026-04-23 16:33:24 +02:00
Adrien Ufferte d2b406da06 Optimize monkey architecture for coconut and fx 2026-04-23 16:09:35 +02:00
Adrien Ufferte bac87eb46a Add frame delay in _setup_minigame() to optimize minigame loading and avoid ram overload 2026-04-23 15:49:36 +02:00
Adrien Ufferte 3d8399a341 Merge pull request #307 from Excello-Recherche-Education/Improve-boss-score-gauge
Better color and special effect when victory threshold reached
2026-04-23 15:17:35 +02:00
Adrien Ufferte 72c01cc338 Better color and special effect when victory threshold reached 2026-04-23 15:15:01 +02:00
Adrien Ufferte 00face5e26 Merge pull request #306 from Excello-Recherche-Education/ants-sentence-position
Ants sentence position
2026-04-23 13:56:24 +02:00
Adrien Ufferte d9a1a35e13 Debug long sentences and background positioning 2026-04-23 12:02:33 +02:00
Adrien Ufferte 8e58ad537f Center sentence 2026-04-23 12:02:14 +02:00
Adrien Ufferte 195f2305d5 Position lower and more to the right 2026-04-23 11:30:56 +02:00
Adrien Ufferte a71f451ecc Merge pull request #305 from Excello-Recherche-Education/ants-travel-together
Ants spawn all at once and travel together
2026-04-23 11:22:10 +02:00
Adrien Ufferte b307c86e4f Ants spawn all at once and travel together 2026-04-23 11:19:50 +02:00
Adrien Ufferte 9bc76488c0 Merge pull request #304 from Excello-Recherche-Education/debug-sparks-fx
Sparks fx now appears correctly on the "first" video button of look a…
2026-04-23 10:40:19 +02:00
Adrien Ufferte 9d518d038f Sparks fx now appears correctly on the "first" video button of look and learn. 2026-04-23 10:36:35 +02:00
Adrien Ufferte 193ac84e15 Merge pull request #303 from Excello-Recherche-Education/dev-option-larger-input
Larger button for developer menu
2026-04-20 12:09:34 +02:00
Adrien Ufferte 9afd95213a Larger button for developer menu 2026-04-20 12:00:47 +02:00
Adrien Ufferte 32ecaf698a Merge pull request #302 from Excello-Recherche-Education/readable-login-error
Readable login error
2026-04-20 11:10:48 +02:00
Adrien Ufferte 5e6ddf3f53 Debug gut tests 2026-04-20 10:53:25 +02:00
Adrien Ufferte 5e8807a664 GUT tests 2026-04-20 10:36:17 +02:00
Adrien Ufferte f61639f9ae Reset password button only show if password is invalid and hides in other cases 2026-04-20 09:51:41 +02:00
Adrien Ufferte 5797c040d7 Make login error readable for frontend/backend 2026-04-20 09:32:07 +02:00
Adrien Ufferte bbc0cd449a Merge pull request #301 from Excello-Recherche-Education/reset-language
Add CHANGE_LANGUAGE feature to teacher settings
2026-04-20 09:09:00 +02:00
Adrien Ufferte 790260e2fd Add CHANGE_LANGUAGE feature to teacher settings
Reorders the left sidebar so risky actions sit at the bottom with a gap:
Dashboard, Synchronize, Logout | Change Language (red), Delete Account.

The new Change Language button opens a warning popup with a language
dropdown. On confirm, if the selected locale differs from the current
one, the client calls POST /reset_language. On success it wipes the
local teacher folder (progression, remediation, confusion matrix…),
applies the new language to device and teacher settings, logs out and
reloads from the splash screen. On error the user sees an error popup
and nothing local changes.
2026-04-17 16:38:00 +02:00
Adrien Ufferte ee6d7d9626 Merge pull request #300 from Excello-Recherche-Education/new-gardens
New gardens
2026-04-17 10:22:57 +02:00
Adrien Ufferte c6f7ef833d Cleaning 2026-04-17 10:10:58 +02:00
Adrien Ufferte e169f066ac Clean github checks 2026-04-17 09:35:06 +02:00
Adrien Ufferte 9413c1fd89 reload base_step scene 2026-04-16 16:57:10 +02:00
Adrien Ufferte d3d5565b2a Debug unit test account creation language selection 2026-04-16 16:52:50 +02:00
Adrien Ufferte 5fc11072e5 Small fixes 2026-04-16 16:12:26 +02:00
Adrien Ufferte af6ae59120 Clean nomenclature 2026-04-16 15:57:40 +02:00
Adrien UfferteandClaude Opus 4.6 b1edce3fa4 Remove placeholder background colors from gardens 06-12
Background colors are set manually in the editor, not by code.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 15:45:31 +02:00
Adrien UfferteandClaude Opus 4.6 803e163de8 Set background color directly on Background node in garden scenes
Removed code-side background.modulate override from set_background() —
background tint is now baked into each scene's Background node. Gardens
06-12 use placeholder colors pending final design specs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 15:42:40 +02:00
Adrien UfferteandClaude Opus 4.6 e3dda5e8b0 Set correct colors and titles for gardens 01-05 from design specs
Blue Jellyfish, Purple Turtle, Ant, Crab, Yellow Parakeet gardens
now use the final color values from the design spreadsheet.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 15:38:10 +02:00
Adrien UfferteandClaude Opus 4.6 24d77e19e0 Replace single garden scene with 12 fixed garden scenes with per-garden colors
Each garden (garden_01.tscn through garden_12.tscn) now has its own color
palette for lesson buttons (unlocked/completed fill and text colors).
Lesson count is validated to be between 12 and 60. The old dynamic
duplication of a single garden.tscn is replaced by instantiating the
correct scene per garden index.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 15:35:45 +02:00
Adrien Ufferte 8d0a07f55c cleaning variables 2026-04-16 14:01:31 +02:00
Adrien UfferteandClaude Opus 4.6 cf49765d67 Fix path lines to read button positions from scene nodes
Path now reads actual button positions and sizes from the visible
LessonButton nodes instead of SLOT_CENTERS constants. This means
editing button positions in the Godot editor automatically updates
the path line.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien Ufferte 9b90ba6d00 Small fixes 2026-04-16 13:54:16 +02:00
Adrien Ufferte 2b5f5f2e28 Make gardens assets hard-placed instead of generated 2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 aa161cf21e Reduce lesson button size by 20% (300→240px)
Buttons, pivot offsets and font size scaled down proportionally.
Same center positions preserved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 884b481d30 Place plants and buttons directly in garden scene
All 8 plants are now TextureRect nodes in garden.tscn instead of being
instantiated at runtime. Positions, sizes and colors are editable
directly in the Godot editor. Buttons were already scene nodes.

Removed _create_plants(), PLANT_LAYOUTS, PLANT_PATH_MODEL and all
runtime instantiation code from garden.gd. Plants container is now
placed between Background and Buttons for correct z-ordering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 0a8a725625 Tint garden plants with dark teal (#0a555b) matching mockup
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 49d5fcd38b Replace old flower system with new plant assets and progressive reveal
- Add 8 garden plant assets (garden_plant_01 to 08) from victory assets
- Remove entire old flower system (FlowerSizes enum, flower generation,
  flower VFX transitions, flower_controls, flowers_visible, flowers_sizes)
- Remove Flower class from GardenLayout
- Plants are created programmatically in Garden._create_plants() at fixed
  positions matching the Explanation.png mockup layout
- All plants hidden by default, revealed progressively based on completed
  minigames ratio: 0 completed = 0 visible, all completed = all 8 visible
- Add lowercase file naming rule to CLAUDE.md
- Fix current_garden lookup to use _get_garden_index_for_lesson instead
  of removed flower_info system

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 17f5048eb7 Fix: replace removed get_lesson_button_scene with constant size
Button size is fixed at 300x300 in the scene, no need to instantiate
and measure at runtime.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 b13fe0638d Hard-place 5 lesson buttons in garden scene with show/hide logic
Replace dynamic button instantiation with 5 fixed LessonButton instances
(Slot1-Slot5) positioned at hardcoded coordinates in the garden scene.
Garden._configure_slots() shows/hides slots based on lesson count using
the SLOT_SELECTION mapping (5→all, 4→skip middle, 3→1,3,5, etc.).

- Add error log if lesson count exceeds MAX_LESSONS (5)
- Remove dynamic _ensure_button_controls_count from garden.gd
- Replace position generation functions with SLOT_CENTERS constant
- Buttons are clickable via existing _set_up_lessons signal wiring

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 d45318606b Implement fixed 5-slot diagonal layout for garden lesson buttons
Buttons are placed at 5 fixed positions on a diagonal from bottom-left
to upper-right. When fewer lessons exist, evenly spaced slots are selected.
Reduced spread radius to keep all buttons inside the circle.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 56f003d433 Simplify: remove dead code, unused exports, and duplicate colors
- Remove dead functions: _get_garden_background_image, _is_position_on_garden_texture,
  _get_garden_dimensions, and associated constants/caches
- Remove unused base_color/completed_color exports from LessonButton
  (colors now driven by constants in _update_visual_state)
- Use LessonButton.UNLOCKED_FILL_COLOR instead of duplicate Color("176d78")
- Inline garden dimensions as constant expression
- Remove unused color parameter from _handle_lesson_button
- Fix missing blank line in garden.gd constant block

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 dc83e7b4e2 Fix garden visuals: tint, sizing, button layout and colors
- Tint garden background #176d78 via modulate in set_background()
- Fix background as 1700x1700 centered square instead of stretched
- Make TextureButton self_modulate transparent so Center/Border are visible
- Diagonal lesson layout from bottom-left to upper-right matching mockup
- Center buttons on generated positions instead of top-left alignment
- Increase garden size back to 2400 with 850px circle radius

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien UfferteandClaude Opus 4.6 d9522bc922 Redesign gardens with circular layout and new ocean theme
Replace rectangular garden backgrounds with circular Garden_01.png asset,
arrange lesson buttons in a circular pattern instead of sine-wave layout,
and introduce three visual states for buttons (locked/unlocked/completed)
using the new lesson_circle.png texture. Add jellyfish mascot to gardens.

- Add new assets: Garden_01.png, lesson_circle.png, jellyfish.png
- Update garden background to use keep_aspect_centered circular display
- Implement circular lesson positioning with configurable radius
- Simplify position validation to circle-distance check
- Add layout cache versioning to invalidate old layouts
- Update boss_button.tscn to match new button design

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:54:16 +02:00
Adrien Ufferte 4cc67b0f83 Auto reimport 2026-04-16 13:54:16 +02:00
Adrien Ufferte 496b01b26b Merge pull request #299 from Excello-Recherche-Education/readme-release-desktop
Update FAQ
2026-04-02 16:48:39 +02:00
Adrien Ufferte 228eeccc1d Update FAQ 2026-04-02 16:46:44 +02:00
Adrien Ufferte 6f3f0e3c4e Project settings direct config instead of UID 2026-04-02 16:03:53 +02:00
Adrien Ufferte 38b26c6ebb Better pause system 2026-04-02 16:03:53 +02:00
Adrien UfferteandClaude Opus 4.6 58fe768457 Make Export All button dynamic based on selected tool
The button label and export presets now change depending on the
dropdown selection. Game exports to Autobuild/Kalulu_Game/<version>,
Prof Tool exports to Autobuild/Prof_Tool/<version>. Shows an alert
and aborts if the version folder already exists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 16:03:53 +02:00
Adrien UfferteandClaude Opus 4.6 b3566bdab4 Switch app config (name, icon, scene) from editor dropdown
The export_tool_manager dropdown now applies project settings
immediately when toggling between "Kalulu Game" and "Prof Tool",
replacing the need to manually apply prof_tool_patch.diff.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 16:03:53 +02:00
Adrien Ufferte 0a4984f0bb Add zoom possibility in Developer Settings 2026-04-02 16:03:53 +02:00
Adrien Ufferte ec70668d59 Merge pull request #298 from Excello-Recherche-Education/readme/add-related-repositories
Better readme
2026-04-02 16:02:03 +02:00
Adrien Ufferte b9ffb8accf Better readme 2026-04-02 15:59:41 +02:00