# Exile UI (native Linux) Réécriture native pour Linux de [Lailloken/Exile-UI](https://github.com/Lailloken/Exile-UI) (à l'origine un overlay AutoHotkey v1.1, Windows uniquement). Cible : **Path of Exile 2**, **X11 et Wayland** (KDE Plasma 6 testé). Stack : **Tauri v2** (backend Rust) + **SvelteKit/TypeScript** (frontend), livré en **AppImage**. ### Wayland Un overlay de jeu a besoin de capacités que Wayland interdit aux clients (se positionner soi-même, rester au-dessus, hotkeys globaux, détection de la fenêtre active). L'app **force donc le backend XWayland** au démarrage quand un serveur X (réel ou XWayland) est joignable — PoE2 tournant lui-même en XWayland (Proton), les deux partagent le même espace X11 et tout fonctionne. Rien à configurer. Pour les sessions X11 c'est sans effet. > Si le compositeur replace/ne garde pas l'overlay au-dessus, créer une **règle > de fenêtre KWin** pour « Exile UI Overlay » : *Garder au-dessus = Oui*, > position/taille forcées, *ignorer la barre des tâches*. Jouer en **plein écran > fenêtré** (borderless). ## Fonctionnalités Socle + **Act-Tracker / leveling**, **timer de run**, **profils de personnage** et **zone-layout viewer**. ### Act-Tracker / leveling - Lecture en continu du `Client.txt` du jeu (détection de zone et de niveau via les lignes `Generating level … area "…"` et `… is now level N`). - Détection automatique du chemin du log (installations Steam courantes + `libraryfolders.vdf`), ou saisie manuelle. - **Overlay transparent, click-through, toujours au-dessus** du jeu, affichant le guide de leveling pas-à-pas (données PoE2 du projet d'origine), avec rendu du langage de balisage (`(img:)`, `(color:)`, `(quest:)`, `areaid… ;; nom`, `||`). - **Progression automatique** : le guide avance quand on entre dans la zone cible d'une étape ; resynchronisation si on dévie. - **Hotkeys globaux** configurables (suivant / précédent / afficher-masquer). - Branche **league-start** vs non-league-start du guide. - L'overlay n'apparaît que lorsque le jeu est au premier plan (optionnel). ### Timer de run - Chronomètre de speedrun campagne : temps total + **splits par acte**, calqué sur le timer de l'outil d'origine. - **Pause automatique** en ville/hideout et sur **inactivité (AFK)** — la détection AFK se fait par polling de la souris via `xdotool` (les API d'idle sont absentes sous Wayland/XWayland). - Pause manuelle distincte de la pause automatique. ### Profils de personnage - Profils créés manuellement, **liés à un personnage in-game par son nom** (reconnu dans le log) — pas d'API GGG (OAuth réservé). - Chaque profil garde sa **propre progression**, sa branche de guide et son **timer** (avec splits par acte). ### Zone-layout viewer - Sélecteur de layouts de zone interactif, **porté de l'`act-decoder`** AHK : arbre de décision sur les images groupées par `areaID`, qu'on affine manuellement selon ce qu'on voit à l'écran (aucune capture d'écran — ToS). - Images de layouts PoE2 embarquées dans `static/layouts/`. Réglages et profils persistés dans `~/.config/exile-ui/config.json`. ## Développement Prérequis : Rust, Node 18+, et les libs Tauri (`webkit2gtk-4.1`, `gtk3`, `libsoup-3.0`), plus `xdotool` (détection de la fenêtre active). ```bash cd exile-ui npm install npm run tauri dev # lancement en mode dev npm run tauri build # produit l'AppImage + .deb dans src-tauri/target/release/bundle/ ``` > Sur certains systèmes le bundling AppImage nécessite > `APPIMAGE_EXTRACT_AND_RUN=1 npm run tauri build` (FUSE). ## Architecture ``` src/ frontend (SvelteKit, SPA) lib/api.ts pont commandes/events Tauri lib/markup.ts parseur du langage de balisage du guide → HTML lib/StepView.svelte rendu d'une étape du guide (lignes + optionnels) lib/Overlay.svelte fenêtre overlay (label "overlay") lib/Settings.svelte fenêtre principale / réglages / profils (label "main") lib/Layouts.svelte fenêtre du zone-layout viewer (label "layout") lib/layouts.ts arbre de décision des layouts (manifest areaID → chemins) src-tauri/src/ lib.rs état partagé, commandes, fenêtres, hotkeys logwatch.rs tail du Client.txt → parsing → events + progression leveltracker.rs chargement du guide/zones, logique de progression timer.rs timer de run (total + splits par acte, pauses auto/AFK) poe.rs détection du log + fenêtre active (X11/xdotool) config.rs persistance config + profils de personnage src-tauri/data/ données PoE2 embarquées (guide2, areas2, gems2) static/layouts/ images de layouts de zone (zone-layout viewer) ``` Les fenêtres chargent le même bundle SPA ; la vue est choisie selon le label de la fenêtre (`overlay`, `main`, `layout`). ## Crédits Données de leveling, zones et gemmes dérivées du projet original [Lailloken/Exile-UI](https://github.com/Lailloken/Exile-UI). Ce fork n'est ni affilié ni approuvé par Grinding Gear Games.