Skip to content

Feat/fishing - #74

Open
tusharmalpani20 wants to merge 3 commits into
ChrisBuilds:mainfrom
tusharmalpani20:feat/fishing
Open

Feat/fishing#74
tusharmalpani20 wants to merge 3 commits into
ChrisBuilds:mainfrom
tusharmalpani20:feat/fishing

Conversation

@tusharmalpani20

Copy link
Copy Markdown

Summary

Adds a new fishing effect where concurrent fishing hooks catch scattered, swimming input characters and place them into their
correct final positions.

Animation

  • Scatters input characters across the canvas in water-inspired colors
  • Gives uncaught characters subtle swimming and bobbing movement
  • Casts multiple reusable fishing lines and distinct J hooks from the top
  • Shows a short bite wiggle and pooled ripple when a character is caught
  • Reels catches upward, transports them horizontally, and lowers them into place
  • Restores each character’s exact original symbol and intended final color
  • Reels hooks back and removes every line, ripple, and auxiliary character
  • Supports infrequent, bounded junk catches using auxiliary ?, #, and * symbols

Architecture

Each hook owns an independent state machine:

WAITING → CASTING → BITING → REELING → TRANSPORTING → LOWERING → RELEASING → RETURNING → FINISHED

Fishing lines, hooks, ripples, and junk catches are preallocated and reused. Target assignments are balanced into spatially
coherent column regions, allowing several hooks to progress concurrently.

Small canvases degrade to shortened routes without placing characters outside the canvas or preventing iterator termination.

Configuration

  • --hook-count — maximum concurrent hooks
  • --line-color — fishing line and hook color
  • --water-colors — temporary swimming colors
  • --cast-speed — casting speed
  • --reel-speed — reeling and transport speed
  • --cast-delay — delay between casts
  • --wrong-catch-chance — one-time junk-catch probability per hook
  • Standard final-gradient stops, steps, and direction options

Wrong catches default to a 5% chance, are limited to one per hook, and can be disabled with --wrong-catch-chance 0.

Additional fix

Whitespace-only library input now follows the established empty-input placeholder behavior instead of failing during canvas
anchoring.

Documentation

  • Adds a Fishing effect reference page
  • Adds the effect to the showroom and MkDocs navigation
  • Updates the README CLI listing
  • Adds a changelog entry

Testing

  • 40 focused Fishing, CLI, discovery, and whitespace regression tests
  • 15 generic Fishing smoke tests
  • Fishing Ruff lint and formatting checks
  • Strict MkDocs build
  • Manual single-character, multiline, and forced-wrong-catch CLI runs
  • Medium and large performance benchmarks
  • Full repository suite was not run

Demo

tte \
  -i ~/.config/omarchy/branding/screensaver.txt \
  --canvas-width 0 \
  --canvas-height 0 \
  --anchor-canvas c \
  --anchor-text c \
  --frame-rate 60 \
  fishing \
  --hook-count 6 \
  --cast-speed 2.5 \
  --reel-speed 3 \
  --cast-delay 0 \
  --wrong-catch-chance 0
 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant