Skip to content

animaEngine 0.2.0 — UI/UX polish

Choose a tag to compare

@Alexandru2984 Alexandru2984 released this 02 Jun 20:34
· 688 commits to main since this release

animaEngine 0.2.0 — UI/UX polish

A twelve-step coherence pass on top of 0.1. The engine renders the
same content; the chrome around it is a different product.

TL;DR

Themes (4 of them, including high-contrast AAA), a tabbed settings
sidebar with collapsible inspector, a Ctrl+K command palette, six
bundled scene presets, ten UI languages, and an AccessKit screen-reader
bridge — all without leaving Rust, all under 9 MB on disk.

Highlights

🎨 Four themes

Dark and Light by default, plus two high-contrast siblings tuned to
WCAG AAA (≥ 7:1 text contrast, 3 px focus ring, zero animation time
for motion-sensitive users). Switch in Appearance → Theme — every
panel re-renders instantly, no restart, no flicker.

CI now refuses any colour change that drops the palette below its
threshold. Coherence is enforced, not hoped for.

🧭 Redesigned settings sidebar

Three tabs replace the long scroll:

  • Inspector — entity-specific controls in collapsible sections
    (Position / Appearance / Animation / Behavior) with the
    most-used quick-toggles pinned at top (Visible, Gravity)
  • Scene — entity list with a pulsing accent stripe on the
    selected row, plus the new preset gallery
  • Appearance — theme picker, language picker, and a read-only
    keyboard reference table covering all 21 actions

A sticky header carries the app icon, a sticky footer shows the
live entity count.

🚀 Ctrl+K command palette

A fuzzy-search popup centered near the top of the screen. Type
"halloween" to find a preset; type "light" to switch themes;
press Enter / click to execute. Closes on Esc or another Ctrl+K.

📚 Six bundled scene presets

One-click starting points using only the shipped demo assets — no
external paths, never fails out of the box:

Preset Vibe
Cozy Companion One gentle ghost wandering on the right edge
Productivity Zen Static slime + heart at low opacity in a corner
Halloween Party Three ghosts marching with mismatched speeds
Birthday Confetti Hearts and stars raining down with gravity
Studio Session All five demo characters with mixed behaviours
Cursor Follower A cat that tags along with the mouse

Each preset can Append (suffixes IDs so nothing collides) or
Replace (wipes the current scene first, styled destructive
so the choice feels deliberate).

🌍 Ten UI locales

English, Română, Español, Deutsch, Français, Italiano,
Português (BR), Polski, Nederlands, 日本語. The active locale auto-
detects from LANG / LC_ALL / LC_MESSAGES on startup; an
explicit override in Appearance → Language persists across
restarts. Backed by Project Fluent, English fallback at every lookup
so a missing translation never produces an empty label.

The language picker lists autonyms — your language in its own
script — so you can find yours without reading English first.

♿ Accessibility commitments

  • AccessKit + AT-SPI bridge enabled by default — Orca, Speakup,
    and other Linux ATs read every egui widget without further setup
  • High-contrast theme variants clear WCAG AAA on every text tier
  • Visible focus rings (2 px on standard themes, 3 px on HC) on
    every interactive widget
  • Read-only keyboard reference table documents all 21 actions in
    one place

Full commitments + deliberate non-goals in
docs/accessibility.md.

👻 New app icon

The "Ghost Mascot" — a friendly white ghost on a violet gradient
with motion-dot trails. Chosen from three exploratory variants
kept in the repo for future reference. Replaces the previous "a"
mark across the desktop file / hicolor theme.

Other changes

  • Toast notifications redesigned per the design system: bg.elevated
    surface, semantic-coloured severity icons (CheckCircle,
    Warning, XCircle, Info), slide-in fade-out animation timed
    off the toast's age
  • Three dismissible inline onboarding hints for fresh users (tabs,
    V/G shortcuts, theme instant-apply). Existing users skip
    everything via #[serde(default = "OnboardingProgress::all_seen")]
  • Settings sidebar default width: 280 → 320 px
  • Phosphor icon font wired through src/ui/icons.rs — every glyph
    in the UI is now a named constant

Tests

119 tests pass (up from 90 in 0.1.0). New coverage:

  • WCAG contrast assertions on every theme variant
  • FTL syntax + key-coverage parity across all ten locales
  • Preset roster shape (non-empty, under cap, unique IDs, demo-asset-only)
  • Action enum metadata completeness
  • Toast / spinner timing-curve helpers
  • Onboarding serde upgrade paths

Installing

Debian / Ubuntu (.deb)

wget https://github.com/Alexandru2984/animaEngine/releases/download/v0.2.0/anima-engine_0.2.0-1_amd64.deb
sudo apt install ./anima-engine_0.2.0-1_amd64.deb

AppImage (any distro)

wget https://github.com/Alexandru2984/animaEngine/releases/download/v0.2.0/animaEngine-0.2.0-x86_64.AppImage
chmod +x animaEngine-0.2.0-x86_64.AppImage
./animaEngine-0.2.0-x86_64.AppImage

From source

git clone https://github.com/Alexandru2984/animaEngine
cd animaEngine
git checkout v0.2.0
sudo apt install -y build-essential cmake libvulkan-dev \
    libx11-dev libxcb1-dev libxkbcommon-dev libwayland-dev libxrandr-dev
cargo build --release
./target/release/anima_engine

Verifying the build

SHA-256 checksums:

f60e611a411ad8da95cf1c3f15699f0d813f77b941ea48ca57fb0c7278eabccb  anima-engine_0.2.0-1_amd64.deb
cb1c0fa7d73239eb649efda988a42cb8245cf38525270484d64e177fa649422c  animaEngine-0.2.0-x86_64.AppImage
# .deb integrity + checksum
sha256sum -c SHA256SUMS-v0.2.0.txt
dpkg-deb --info anima-engine_0.2.0-1_amd64.deb
dpkg-deb --contents anima-engine_0.2.0-1_amd64.deb

Reproducing the build locally:

make deb        # produces build/anima-engine_0.2.0-1_amd64.deb
make appimage   # produces build/animaEngine-0.2.0-x86_64.AppImage

Known issues

  • paste crate flagged as unmaintained (RUSTSEC-2024-0436). Pulled
    in transitively by wgpu-hal (macOS metal backend) and
    accesskit_winit (Windows AT-SPI bridge). Neither path executes
    on the Linux X11 / Wayland targets we ship for, so no runtime
    exposure. Will land an upstream fix in a follow-up.
  • Romanian translations are native-quality; the other nine locales
    are best-effort technical translations awaiting native review.
    Pull requests against src/i18n/locales/*.ftl very welcome.

Upgrading from 0.1

Configs round-trip cleanly. The new fields (theme, locale,
onboarding) all carry #[serde(default = ...)] annotations tuned
so that upgrading users:

  • Keep their existing scene as-is
  • Default to Dark theme (matching 0.1's behaviour)
  • Default to environment locale (no UI change unless LANG
    is non-English)
  • Skip every onboarding hint (those are only for fresh installs)

Nothing in ~/.config/animaEngine/ needs manual editing.

What's next

  • 0.2.x patch series for translation fixes from native speakers
  • 0.3 plan: user-rebindable keyboard map; persistence for
    collapse-state per inspector section; multi-window for multi-
    monitor setups; opt-in sound on toast severity