Repository navigation
Draw High Tide's wall on the canvas and let it be shaped - #458
Merged
Merged
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 1 minute. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
A new High Tide lands with a straight 30 m wall. Hovering it shows a white dot on each point and a pale dot between them: drag a white dot to move a point, a pale one to add a bend, right-click a white dot to remove it. It stops at 60 m and holds six bends. A High Tide saved before this stays an icon on the same pixel, and offers "Draw wall". The wall and its dots are their own canvas layers, so the icon's box and every saved position stay as they were.
…in the limit A dot's draft and an icon's carried wall outlive a gesture whose widget has gone, because Flutter ends those without a callback. A bend pulled from a full-length wall started at the pointer, past the limit, so it now starts on the wall. Dots stay when a mouse lets go on one, and a drag rebuilds only its own wall.
…e the dots after a dropped drag
SunkenInTime
force-pushed
the
t3/high-tide-wall-editor
branch
from
November 2, 2026 01:57
f1659e1 to
e8fbdab
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ci: test web
Third of four PRs. Players asked for "a 1:1 harbor wall that you can curve too instead of just the icon", and to "show were you want the wall to stop". A High Tide has been a lone icon on the canvas since the first release. This draws the wall and lets you shape it. Dara picked the curved wall with up to 6 bends, handles rather than drawing, and a new High Tide that lands with a straight 30 m wall.
What a user does
Max2D_Distance, and the tag says "60 m, the longest".The band is the #424 replay look, and both now share
paintWallStroke. A wall doesn't cut view cones in the editor. Nothing does there today, smokes included.How it's built
GuidedWallAbilityextendsBaseAbility, so High Tide's box and anchor are unchanged. The wall isn't inside that box. Flutter only delivers hits inside a widget's box, and growing the box would move every saved High Tide, so the wall and its dots are canvas layers of their own:PlacedWallListunder the abilities,PlacedWallHandleListover everything. Only the band itself is hit, so items beside it stay reachable.lib/const/wall_path.dartholds the geometry, a centripetal curve that passes through every point and can't loop where points bunch up.Saved data is #454's
wallPath, which #449 protects from older clients. This PR adds no format change.Ground truth
All in a release driver build of
00177fec, the head.Old-build round trip, cloud, real 5.1.3 on dev. One strategy, three runs, stored rows read between each:
Saved pixel.
test/high_tide_wall_test.dartrenders a saved High Tide with the oldBaseAbilityand with this PR, on attack and defense: same box, same pixels. #454's run showed 5.1.3 and this data match pixel for pixel.Sessions.
tool/drive/scripts/high-tide-wall.jsondrags Harbor and High Tide from the real panels, bends the wall, hits 60 m, carries the icon and switches sides.high-tide-wall-menu.jsoncovers "Draw wall" on a saved icon, adding and removing a bend, Ctrl+Z (the logged wall proves the key landed), a second page, and picture and video export.high-tide-wall-reopen.jsonreopens the store and deletes with E, and the log shows 1 ability going to 0. All CLEAN on Lotus. The video's frames show the wall morphing across the page change:test/high_tide_wall_test.darthas 36 tests that drive real pointers through the layers, including drags interrupted by a page change or a delete, and a bend added to 300 seeded walls. Of 26 mutations, 23 fail a test, one showed a guard was dead code, which I removed, and two survive. Taking the wall away under the pointer still cleared the delete target in the test harness, so that line isn't proven there; I kept it because a removedMouseRegionreports no exit. Starting a new bend at the pointer instead of on the wall also survives, because the limit guard covers that case too.On web, real Edge against dev, same head
A release web build in headless Edge with the GPU on, at 1600 by 900, on a cloud strategy against dev. Playwright sent pointer and key events at human speed:
dragstart, no text selection, no scroll. Right-click on a dot and on blank canvas both left the browser menu off, and the app's own right-click still worked. Frames stayed at 6.9 ms median and about 7 ms at p99 during drags, the display's limit in this run.MP4 export
The earlier missing MP4 was the rig, not the app. Driver builds ship no
ffmpegfolder, so plain MP4 stops at "Video encoder not found. Reinstalling Icarus should fix this." Transparent.movuses a Dart encoder, which is why it ran. On a copy of this build with theffmpegfolder from the installed 5.0.0 app added, a two-page wall exported a 1080p H.264 MP4 of 1.7 MB, with the wall morphing across the page change.What isn't covered
Merge
On main, not stacked. #449 and #454 are merged, and
convex/isn't touched, so merging deploys nothing. PR 4, replay capture, comes after this.