Skip to content

feat(minimap): pulse active radar and hydro detection circles#39

Open
BeauceAI wants to merge 6 commits into
landaire:mainfrom
BeauceAI:pulse-radar-hydro-circles
Open

feat(minimap): pulse active radar and hydro detection circles#39
BeauceAI wants to merge 6 commits into
landaire:mainfrom
BeauceAI:pulse-radar-hydro-circles

Conversation

@BeauceAI

Copy link
Copy Markdown

What

Make an active radar/hydro detection bubble on the minimap pulse so it cannot be missed: red for radar, green for hydro.

Why

Active radar/hydro circles were drawn faintly (alpha 0.15, static) and only while the casting ship stayed visible on the minimap. In practice an enemy radar was easy to miss at normal playback speed, and the circle disappeared the instant the ship blinked out, even though the consumable was still running.

Changes

  • New DetectionPulse { Radar, Hydro } carried on DrawCommand::ConsumableRadius, set by the renderer for radar / hydroacoustic search / hydrophone.
  • In wt-collab-egui, pulse the fill and outline over time (red for radar, green for hydro) and request a repaint while a pulse is active. Non-pulsing circles are unchanged.
  • Keep a detection bubble drawn for the consumable's full duration from the last known position even after the ship goes dark. Other consumables still require the ship to be visible.

The static PNG renderer path ignores the pulse (single frame), so its output is unchanged.

Notes

  • Inherent replay limitation: a consumable activation is only present in the replay if the casting ship was within the recording player's area of interest at that instant, so an enemy radar fired from full concealment still cannot be shown.
  • cargo fmt clean; the drawcommand_parity snapshot is unaffected (the new field is not part of the serialized summary).

BeauceAI and others added 6 commits June 11, 2026 23:39
Active radar and hydro bubbles were drawn faintly and only while the
casting ship stayed spotted, so an enemy radar was easy to miss and the
circle vanished the instant the ship blinked out.

Pulse the circle (red for radar, green for hydro) so it reads at a
glance, and keep it drawn for the consumable's full duration from the
last known position even after the ship goes dark. Other consumables
still require the ship to be visible.
Ajoute l'envoi automatique Discord en fin de partie (video du replay
acceleree + tableau de stats de l'equipe) via un webhook configurable.

Par defaut, seules les parties Clan Wars sont postees ; un controle visible
dans la barre du haut bascule entre OFF / Clan Wars / Toutes parties
(reglage discord_clan_only, defaut true). Egalement disponible dans l'onglet
Parametres.

Neutralise aussi le verificateur de mise a jour automatique au demarrage :
sinon la version officielle ecrase ce build modifie. Le bouton manuel
"Fichier -> Verifier les mises a jour" reste fonctionnel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Installeur autonome (Rust, embarque l'exe) qui copie le toolkit modifie
dans %LOCALAPPDATA% et cree un raccourci bureau, sans UAC. Source dans
_INSTALLEUR-TEAM/installer-src, binaire livre regenerable (gitignore).

Ajoute aussi le lanceur local (restaure notre build si ecrase + previent
si nouvelle version officielle), le brief mode d'emploi pour la team et la
fiche de distribution.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
En fin de partie, le jeu re-ecrit le fichier replay (evenement
ModifiedReplay), ce qui declenche un 2e parse et renvoyait vidéo + stats
une seconde fois sur Discord (~1 min apres). On saute desormais l'envoi si
la video du replay existe deja sur le disque (marqueur "deja poste").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The GPU and openh264 encoders can emit zero-byte skip frames over static
minimap content (for example the pre-battle phase). muxide rejected those
empty samples with EmptyVideoFrame and aborted the export partway through,
which users hit with some codecs. Skip empty packets and key AnnexB PTS to
the input frame index so the dropped frame extends the previous frame's
on-screen time instead of compressing the timeline.

(cherry picked from commit 5e6b79b)
Replace the String-carrying VideoError variants with payload-free
categories and attach the underlying muxide, gpu-video, openh264, rav1e,
and IO errors as rootcause children via context/attach. Callers can now
match the error category structurally instead of parsing a message, and
the real cause (for example muxide's EmptyVideoFrame) is preserved in the
report chain.

(cherry picked from commit 66cf6f9)
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.

2 participants