Skip to content

Polish kill feed visuals and smoke overlay#41

Open
cupid00772 wants to merge 2 commits into
TuxCoding:mainfrom
cupid00772:feature/kill-feed-polish
Open

Polish kill feed visuals and smoke overlay#41
cupid00772 wants to merge 2 commits into
TuxCoding:mainfrom
cupid00772:feature/kill-feed-polish

Conversation

@cupid00772
Copy link
Copy Markdown

@cupid00772 cupid00772 commented May 13, 2026

Summary of your change

Related issue

Summary by CodeRabbit

  • New Features

    • Notification queue system for handling multiple events
    • Demo mode now requires ?demo URL parameter
  • Bug Fixes

    • Improved smoke video playback and preloading behavior
    • Enhanced destroy event parsing accuracy
  • Style

    • Redesigned notification panel with new gold/olive color scheme
    • Updated notification animations and visual effects
    • Added "DESTROYED" indicator to kill notifications
  • Documentation

    • Expanded setup instructions with detailed configuration steps
    • Clarified web server requirements and squad customization
  • Tests

    • Added notification queue behavior testing

Review Change Stack

Copilot AI review requested due to automatic review settings May 13, 2026 11:47
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 13, 2026

📝 Walkthrough

Walkthrough

This PR replaces ad-hoc notification timeouts with a FIFO queue and cancellable timers, refactors popup scheduling and smoke video restart, refreshes CSS theme and notification animations (new keyframes and styles), updates DESTROY_REGEX and per-event handling to be more flexible, gates the demo sample behind ?demo, replaces showNotification with addNotification, adds an end-to-end Jest test for the queue flow, and updates workspace/settings/specials/README data and formatting.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant NotificationQueue
  participant UIPopup
  participant SmokeVideo
  Client->>NotificationQueue: addNotification(payload)
  NotificationQueue->>UIPopup: dequeue & popup(payload)
  UIPopup->>UIPopup: schedule onShow timer
  UIPopup->>SmokeVideo: reset and play
  UIPopup->>UIPopup: schedule hide timer / clear previous timers
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description contains only template comment lines with no substantive information about the changes, motivation, or related issues. Add a meaningful summary of changes explaining the visual polish objectives, list any related issues, and provide context for the updates to styling, notification behavior, and smoke video handling.
Docstring Coverage ⚠️ Warning Docstring coverage is 45.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main visual changes in the pull request: CSS styling updates for kill notifications and smoke video element enhancements.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR updates the kill feed UI presentation (colors/animations), refines notification timing/queue behavior, and improves smoke overlay playback behavior while updating event parsing/mappings.

Changes:

  • Adjust notification queue behavior (FIFO) and refine animation/playback timers; restart smoke video from the beginning on each notification.
  • Update kill feed visuals (CSS + HTML) including a new “DESTROYED” label and video attributes.
  • Update event parsing/mappings (regex + special mappings) and change destroyed vehicle identifiers to asset paths.

Reviewed changes

Copilot reviewed 11 out of 14 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
tests/ui.test.ts Adds a UI test to validate notification queuing + smoke playback timing.
src/ui.ts Changes queue ordering/timings, adds timer cleanup, and resets smoke video playback.
src/thunder.ts Adjusts event loop control flow and switches vehicle identifiers to assetPath.
src/main.ts Uses addNotification for demos and fixes local lang loading promise resolution.
src/NotificationFeed.html Adds action text and updates smoke video attributes for autoplay behavior.
src/assets/style.css Overhauls notification styling, animations, and smoke/ammo visuals.
src/lang/locale.ts Updates destroy event regex to support more complex names/optional groups.
src/lang/mappings/specials.json Adds additional special-case vehicle mappings.
src/settings.json Replaces sample squad settings values and reformats JSON.
pnpm-workspace.yaml Adds allowBuilds configuration entries.
src/assets/img/APFSDS.svg Removes an SVG asset.
src/setting/settings.ts Adds trailing newline.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/ui.ts
Comment on lines +35 to +40
const NOTIFICATION_SHOW_INTERVAL = 2 * 1_000;
/** Queue of not delivered notifications */
const notificationQueue: Notification[] = [];

const notificationTimers: ReturnType<typeof setTimeout>[] = [];
const NOTIFICATION_TOTAL_INTERVAL = 6 * 1_000;
Comment thread src/thunder.ts
Comment on lines 93 to +108
const destroyEvent = langService.parseEventFromRaw(event.msg);
if (!destroyEvent) {
// not a destroy message likely an award?
return;
continue;
}

const killerAvatar = getSquadAvatar(destroyEvent.killer);
const destroyerTank = destroyEvent.destroyerVehicle.localizedName;
const destroyedTank = destroyEvent.destroyedVehicle.localizedName;

const destroyerTank = destroyEvent.destroyerVehicle.assetPath ?? "";
const destroyedTank = destroyEvent.destroyedVehicle.assetPath ?? "";

logFailedMappings(destroyerTank, destroyedTank, killerAvatar, destroyEvent, event.msg);

if (!killerAvatar || !destroyerTank || !destroyedTank) {
// not squad member - ignore or couldn't find image
return;
if (!killerAvatar) {
// not squad member - ignore
continue;
Comment thread pnpm-workspace.yaml

# PNPM approved build scripts
ignoredBuiltDependencies:
- esbuild
Comment thread src/settings.json Outdated
Comment on lines +4 to +5
{ "username": "cupid00772", "avatar": "cardicon_norman_schwarzkopf" },
{ "username": "Akula0517", "avatar": "cardicon_metal_santa" }
Comment thread src/lang/locale.ts
const DESTROY_REGEX = "(.[^(]+) \\((.+)\\) (?:<groundDestroyed>|<planeDestroyed>) ([^(]+) \\((.+)\\)";

const DESTROY_REGEX = "(.[^(]+) \\((.+?(?:\\([^)]*\\))?)\\) (?:<groundDestroyed>|<planeDestroyed>) ([^(]+?)(?: \\(([^)]+(?:\\([^)]*\\))?)\\))?$";
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
src/settings.json (1)

3-6: 💤 Low value

Consider using generic placeholder names for default configuration.

The default squad members now include cupid00772 (the PR author) and Akula0517. For a public project, default configuration files typically use generic placeholder names (e.g., Player1, Player2, or YourUsername) rather than specific personal usernames.

💡 Suggested alternative with generic placeholders
   "squad": [
-    { "username": "cupid00772", "avatar": "cardicon_norman_schwarzkopf" },
-    { "username": "Akula0517", "avatar": "cardicon_metal_santa" }
+    { "username": "YourUsername", "avatar": "cardicon_default" },
+    { "username": "SquadMate", "avatar": "cardicon_default" }
   ]
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/settings.json` around lines 3 - 6, The default config currently hardcodes
personal usernames in the "squad" array (e.g., "cupid00772", "Akula0517");
replace those entries in src/settings.json with generic placeholders like
"Player1" and "Player2" (or "YourUsername") so the "squad" array contains
non-personal, example values; ensure the JSON structure and property names
("squad", "username", "avatar") remain unchanged and avatars can remain example
strings or be set to null/placeholder values.
src/assets/style.css (1)

309-341: 💤 Low value

Consider using percentage notation for consistency.

Stylelint suggests using 0% and 100% instead of from and to for consistency with the intermediate keyframes (24%, 64%).

♻️ Proposed fix for consistency
 `@keyframes` ammo-slide {
-    from {
+    0% {
         /* Do not hide it fully, because it causes a pop effect, but show it like it would appearing to the eye */
         opacity: 0.28;
         /* Start from left side */
         margin-right: 62%;
         transform: translateY(9px) scale(0.9);
         filter: brightness(0.9);
     }

     24% {
         opacity: 1;
         margin-right: 41%;
         transform: translateY(1px) scale(1.12);
         filter: brightness(1.42) drop-shadow(0 0 14px rgb(255 213 132 / 78%));
     }

     64% {
         opacity: 1;
         margin-right: 8%;
         margin-left: 57%;
         transform: translateY(-1px) scale(1.07);
         filter: brightness(1.24) drop-shadow(0 0 10px rgb(255 198 102 / 55%));
     }

-    to {
+    100% {
         opacity: 0.95;
         /* move it only slightly above center to not go over the tank */
         margin-right: 0;
         margin-left: 74%;
         transform: translateY(0) scale(1.03);
         filter: brightness(1.1);
     }
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/assets/style.css` around lines 309 - 341, Replace the keyframe selectors
"from" and "to" with percentage notation "0%" and "100%" to match the existing
intermediate keyframes (e.g., "24%", "64%"); update the "from" block to "0%" and
the "to" block to "100%" while preserving all declarations (opacity,
margin-right, margin-left, transform, filter) and spacing so the animation
behavior remains identical.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pnpm-workspace.yaml`:
- Around line 1-9: Remove the deprecated ignoredBuiltDependencies section and
migrate its intent into allowBuilds: delete the ignoredBuiltDependencies block
entirely and update the allowBuilds map so packages that should not run builds
(esbuild, unrs-resolver) are explicitly set to false while keeping '@swc/core'
set to true; update the allowBuilds entries (symbols: allowBuilds, esbuild,
unrs-resolver, '@swc/core', ignoredBuiltDependencies) accordingly.

In `@src/lang/mappings/specials.json`:
- Line 3: The key "Panczir'-SM-SV" in specials.json is misspelled; update that
object key to "Pantsir SM-SV" so it matches the English mapping and other
transliterations while keeping the same value
{"type":"ground","file":"ussr_pantsyr_sm_sv"}; locate the entry by the key
"Panczir'-SM-SV" and rename it to "Pantsir SM-SV" (no other changes to the
object or file path).

In `@src/thunder.ts`:
- Around line 101-109: The code builds destroyerTank and destroyedTank from
destroyEvent.destroyerVehicle.assetPath /
destroyEvent.destroyedVehicle.assetPath and proceeds to log and enqueue
notifications even when those are empty; update the logic in the block that
calls logFailedMappings and enqueues notifications (using destroyerTank,
destroyedTank, killerAvatar, destroyEvent, event.msg) to validate the asset
paths first — either skip creating the notification when destroyerTank or
destroyedTank is an empty string, or substitute a known default icon path before
logging/enqueuing; ensure the check occurs immediately after computing
destroyerTank/destroyedTank and before calling logFailedMappings or any
notification-enqueue code so incomplete notifications are not produced.

In `@src/ui.ts`:
- Line 35: Remove the unused constant NOTIFICATION_SHOW_INTERVAL from the file:
locate the declaration "const NOTIFICATION_SHOW_INTERVAL = 2 * 1_000;" and
delete it so the module only uses NOTIFICATION_TOTAL_INTERVAL for notification
timing; ensure no other references to NOTIFICATION_SHOW_INTERVAL remain (search
for the symbol) and run tests/lint to confirm no unused-variable warnings.

---

Nitpick comments:
In `@src/assets/style.css`:
- Around line 309-341: Replace the keyframe selectors "from" and "to" with
percentage notation "0%" and "100%" to match the existing intermediate keyframes
(e.g., "24%", "64%"); update the "from" block to "0%" and the "to" block to
"100%" while preserving all declarations (opacity, margin-right, margin-left,
transform, filter) and spacing so the animation behavior remains identical.

In `@src/settings.json`:
- Around line 3-6: The default config currently hardcodes personal usernames in
the "squad" array (e.g., "cupid00772", "Akula0517"); replace those entries in
src/settings.json with generic placeholders like "Player1" and "Player2" (or
"YourUsername") so the "squad" array contains non-personal, example values;
ensure the JSON structure and property names ("squad", "username", "avatar")
remain unchanged and avatars can remain example strings or be set to
null/placeholder values.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0205aff2-d27a-4549-867f-1e6ce1b54a90

📥 Commits

Reviewing files that changed from the base of the PR and between 8be3953 and 19bffc2.

⛔ Files ignored due to path filters (2)
  • src/assets/img/APFSDS.svg is excluded by !**/*.svg
  • src/assets/vid/smoke.webm is excluded by !**/*.webm
📒 Files selected for processing (12)
  • pnpm-workspace.yaml
  • src/NotificationFeed.html
  • src/assets/style.css
  • src/lang/locale.ts
  • src/lang/mappings/english.json
  • src/lang/mappings/specials.json
  • src/main.ts
  • src/setting/settings.ts
  • src/settings.json
  • src/thunder.ts
  • src/ui.ts
  • tests/ui.test.ts
📜 Review details
🧰 Additional context used
🪛 Stylelint (17.11.0)
src/assets/style.css

[error] 309-309: Expected "from" to be "0%" (keyframe-selector-notation)

(keyframe-selector-notation)


[error] 333-333: Expected "to" to be "100%" (keyframe-selector-notation)

(keyframe-selector-notation)

🔇 Additional comments (17)
src/setting/settings.ts (1)

83-83: LGTM!

src/ui.ts (6)

42-49: LGTM!


66-66: LGTM!


75-75: LGTM!


93-95: LGTM!


174-197: LGTM!


212-219: LGTM!

src/assets/style.css (4)

17-21: LGTM!

Also applies to: 34-36


79-137: LGTM!


140-189: LGTM!


193-372: LGTM!

src/NotificationFeed.html (2)

34-34: LGTM!


37-37: LGTM!

src/thunder.ts (1)

96-96: LGTM!

src/main.ts (1)

1-1: LGTM!

Also applies to: 50-50, 64-67, 81-81

tests/ui.test.ts (1)

1-137: LGTM!

src/lang/locale.ts (1)

15-16: Regex pattern verified against battle log samples.

The regex correctly matches all battle log destroy event patterns, including:

  • Messages with clan tags: "-GFF7- Somebody (IT-1) zerstört -GFF7- CassualTux (Magach 6M)"
  • Nested parentheses in vehicle names: "(XM1 (GM))" and "(Class 3 (P))"
  • Both ground and air destroy triggers: zerstört and abgeschossen
  • Optional killed player vehicle segments

Group extraction works correctly for all cases.

Comment thread pnpm-workspace.yaml
Comment on lines +1 to 9
allowBuilds:
'@swc/core': true
esbuild: true
unrs-resolver: true

# PNPM approved build scripts
ignoredBuiltDependencies:
- esbuild
- unrs-resolver
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

What is the difference between allowBuilds and ignoredBuiltDependencies in pnpm-workspace.yaml configuration?

💡 Result:

In pnpm-workspace.yaml, allowBuilds and ignoredBuiltDependencies are both about whether pnpm will run a package’s “build” scripts during install—but ignoredBuiltDependencies was an older/removed setting, while allowBuilds is the current one. 1) allowBuilds (current setting) - allowBuilds is a map of package matchers to explicitly allow (true) or disallow (false) script execution. [1] - Default behavior: packages not listed are disallowed by default, with an error printed (because strictDepBuilds is true by default). [1] - During install, pnpm may add placeholders for ignored builds that aren’t yet listed in allowBuilds into pnpm-workspace.yaml so you can decide what to do (set them to true/false). [1] - pnpm approve-builds writes entries into allowBuilds in pnpm-workspace.yaml (true for approved, false for unapproved). [2] 2) ignoredBuiltDependencies (older/removed setting) - pnpm’s documentation says that ignoredBuiltDependencies (along with other older settings like onlyBuiltDependencies / neverBuiltDependencies / ignoreDepScripts) was removed in v11 and replaced by allowBuilds. [1] So the practical difference is: - You should use allowBuilds going forward (v11+). It is the mechanism to “allow or deny builds per package” via a true/false map. [1] - ignoredBuiltDependencies is not the supported modern config key; it was replaced by allowBuilds in pnpm v11+. [1] If you were migrating an older pnpm-workspace.yaml that used ignoredBuiltDependencies, the equivalent is to put those same package matchers in allowBuilds with a false value (i.e., allowBuilds: { : false }). This equivalence is reflected by pnpm removing ignoredBuiltDependencies and documenting allowBuilds as its replacement. [1]

Citations:


Remove the deprecated ignoredBuiltDependencies configuration.

The ignoredBuiltDependencies section (lines 7-9) is deprecated and was removed in pnpm v11+. It has been replaced by allowBuilds.

To modernize this configuration, remove the ignoredBuiltDependencies section entirely. If esbuild and unrs-resolver should not run builds, set them to false in allowBuilds instead:

allowBuilds:
  '@swc/core': true
  esbuild: false
  unrs-resolver: false
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pnpm-workspace.yaml` around lines 1 - 9, Remove the deprecated
ignoredBuiltDependencies section and migrate its intent into allowBuilds: delete
the ignoredBuiltDependencies block entirely and update the allowBuilds map so
packages that should not run builds (esbuild, unrs-resolver) are explicitly set
to false while keeping '@swc/core' set to true; update the allowBuilds entries
(symbols: allowBuilds, esbuild, unrs-resolver, '@swc/core',
ignoredBuiltDependencies) accordingly.

}
}
"☢Canberra B Mk 6": { "type": "air", "file": "canberra_bimk6" },
"Panczir'-SM-SV": { "type": "ground", "file": "ussr_pantsyr_sm_sv" },
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for both spelling variations to understand which is used

echo "=== Searching for 'Panczir' ==="
rg -i "panczir" --type=json --type=ts

echo "=== Searching for 'Pantsir' ==="
rg -i "pantsir" --type=json --type=ts

echo "=== Searching for 'Pantsyr' ==="
rg -i "pantsyr" --type=json --type=ts

Repository: TuxCoding/ThunderOverlay

Length of output: 3153


Update the vehicle name key to match the English translation.

The key "Panczir'-SM-SV" in specials.json should be "Pantsir SM-SV" to match the English translation in english.json. Both map to the same file path ussr_pantsyr_sm_sv, but the spelling should be consistent across language mappings. "Pantsir" is the standard transliteration used for all other variants of this weapon system in the codebase.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lang/mappings/specials.json` at line 3, The key "Panczir'-SM-SV" in
specials.json is misspelled; update that object key to "Pantsir SM-SV" so it
matches the English mapping and other transliterations while keeping the same
value {"type":"ground","file":"ussr_pantsyr_sm_sv"}; locate the entry by the key
"Panczir'-SM-SV" and rename it to "Pantsir SM-SV" (no other changes to the
object or file path).

Comment thread src/thunder.ts
Comment on lines +101 to 109
const destroyerTank = destroyEvent.destroyerVehicle.assetPath ?? "";
const destroyedTank = destroyEvent.destroyedVehicle.assetPath ?? "";

logFailedMappings(destroyerTank, destroyedTank, killerAvatar, destroyEvent, event.msg);

if (!killerAvatar || !destroyerTank || !destroyedTank) {
// not squad member - ignore or couldn't find image
return;
if (!killerAvatar) {
// not squad member - ignore
continue;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Consider validating tank asset paths before creating notifications.

The code now derives tank identifiers from assetPath with empty-string fallbacks and only checks killerAvatar before creating notifications. This means notifications can be enqueued with missing tank icons (destroyerTank or destroyedTank as empty strings), which may result in incomplete visual displays.

While ui.ts has error handlers that hide broken images, users might still see notifications with missing vehicle icons. Consider whether this is the intended behavior or if tank asset validation should be added.

🛡️ Optional validation to prevent incomplete notifications
     logFailedMappings(destroyerTank, destroyedTank, killerAvatar, destroyEvent, event.msg);

-    if (!killerAvatar) {
+    if (!killerAvatar || !destroyerTank || !destroyedTank) {
         // not squad member - ignore
         continue
     }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/thunder.ts` around lines 101 - 109, The code builds destroyerTank and
destroyedTank from destroyEvent.destroyerVehicle.assetPath /
destroyEvent.destroyedVehicle.assetPath and proceeds to log and enqueue
notifications even when those are empty; update the logic in the block that
calls logFailedMappings and enqueues notifications (using destroyerTank,
destroyedTank, killerAvatar, destroyEvent, event.msg) to validate the asset
paths first — either skip creating the notification when destroyerTank or
destroyedTank is an empty string, or substitute a known default icon path before
logging/enqueuing; ensure the check occurs immediately after computing
destroyerTank/destroyedTank and before calling logFailedMappings or any
notification-enqueue code so incomplete notifications are not produced.

Comment thread src/ui.ts

const NOTIFICATION_SHOW_INTERVAL = 10 * 1_000;

const NOTIFICATION_SHOW_INTERVAL = 2 * 1_000;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Remove unused constant.

NOTIFICATION_SHOW_INTERVAL is defined but never used in the file. The notification timing now uses NOTIFICATION_TOTAL_INTERVAL exclusively.

🧹 Proposed fix
-const NOTIFICATION_SHOW_INTERVAL = 2 * 1_000;
 /** Queue of not delivered notifications */
 const notificationQueue: Notification[] = [];
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const NOTIFICATION_SHOW_INTERVAL = 2 * 1_000;
/** Queue of not delivered notifications */
const notificationQueue: Notification[] = [];
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/ui.ts` at line 35, Remove the unused constant NOTIFICATION_SHOW_INTERVAL
from the file: locate the declaration "const NOTIFICATION_SHOW_INTERVAL = 2 *
1_000;" and delete it so the module only uses NOTIFICATION_TOTAL_INTERVAL for
notification timing; ensure no other references to NOTIFICATION_SHOW_INTERVAL
remain (search for the symbol) and run tests/lint to confirm no unused-variable
warnings.

@TuxCoding TuxCoding added the enhancement New feature or request label May 13, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
README.md (1)

108-109: ⚡ Quick win

Use cross-platform relative paths in setup steps.

Lines 108-109 use leading \... paths, which can be read as absolute paths on Unix-like systems and are less portable in docs.

Suggested doc fix
-3. Configure your squad members by editing `\src\settings.json`
-4. add all kinds of warthunder vehicle into `\src\assets\img\vehicles`(AI is very useful)
+3. Configure your squad members by editing `src/settings.json`
+4. Add vehicle images to `src/assets/img/vehicles` (AI upscaling/search tools can help)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 108 - 109, The README setup steps use Windows-style
leading backslash paths ("\src\settings.json" and "\src\assets\img\vehicles")
which are non-portable; update those entries to use cross-platform relative
paths with forward slashes (e.g., "src/settings.json" and
"src/assets/img/vehicles") so the instructions work on Unix-like and Windows
environments and avoid being interpreted as absolute paths.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@README.md`:
- Line 26: Update the README.md documentation to reference the correct mappings
filename: replace the incorrect "special.json" string with "specials.json" so
links and instructions point to the existing mappings file; ensure the textual
mention in README.md now matches the actual file name "specials.json".

---

Nitpick comments:
In `@README.md`:
- Around line 108-109: The README setup steps use Windows-style leading
backslash paths ("\src\settings.json" and "\src\assets\img\vehicles") which are
non-portable; update those entries to use cross-platform relative paths with
forward slashes (e.g., "src/settings.json" and "src/assets/img/vehicles") so the
instructions work on Unix-like and Windows environments and avoid being
interpreted as absolute paths.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1b20a67f-a990-4e71-af60-3c822a45d81c

📥 Commits

Reviewing files that changed from the base of the PR and between 19bffc2 and 1af966a.

📒 Files selected for processing (2)
  • README.md
  • src/settings.json
📜 Review details
🧰 Additional context used
🪛 LanguageTool
README.md

[style] ~245-~245: Consider a more concise word here.
Context: ...nd is keyed out to add an alpha channel in order to make it transparent as well. ## Credit...

(IN_ORDER_TO_PREMIUM)

🔇 Additional comments (1)
src/settings.json (1)

2-20: LGTM!

Comment thread README.md
- Helicopter
- Navy
- Nukes and drones too ;)
- Nukes and drones too ;) (Manually added in `ThunderOverlay\src\lang\mappings\special.json`)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix incorrect mapping filename in docs.

Line 26 points to special.json, but the mappings file is specials.json. This will send users to a non-existent path.

Suggested doc fix
-    -   Nukes and drones too ;) (Manually added in `ThunderOverlay\src\lang\mappings\special.json`)
+    -   Nukes and drones too ;) (Manually added in `ThunderOverlay/src/lang/mappings/specials.json`)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Nukes and drones too ;) (Manually added in `ThunderOverlay\src\lang\mappings\special.json`)
- Nukes and drones too ;) (Manually added in `ThunderOverlay/src/lang/mappings/specials.json`)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` at line 26, Update the README.md documentation to reference the
correct mappings filename: replace the incorrect "special.json" string with
"specials.json" so links and instructions point to the existing mappings file;
ensure the textual mention in README.md now matches the actual file name
"specials.json".

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

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants