diff --git a/resources/lang/en.json b/resources/lang/en.json index 5f6dac416..6f941c61c 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -575,6 +575,7 @@ }, "events_display": { "retreating": "retreating", + "retaliate": "Retaliate", "boat": "Boat", "alliance_request_status": "{name} {status} your alliance request", "alliance_accepted": "accepted", diff --git a/src/client/graphics/layers/EventsDisplay.ts b/src/client/graphics/layers/EventsDisplay.ts index 803f81e3f..c8276491e 100644 --- a/src/client/graphics/layers/EventsDisplay.ts +++ b/src/client/graphics/layers/EventsDisplay.ts @@ -35,6 +35,7 @@ import { CancelBoatIntentEvent, SendAllianceExtensionIntentEvent, SendAllianceReplyIntentEvent, + SendAttackIntentEvent, } from "../../Transport"; import { Layer } from "./Layer"; @@ -736,28 +737,54 @@ export class EventsDisplay extends LitElement implements Layer { } } + private handleRetaliate(attack: AttackUpdate) { + const attacker = this.game.playerBySmallID(attack.attackerID) as PlayerView; + if (!attacker) return; + + const myPlayer = this.game.myPlayer(); + if (!myPlayer) return; + + // Launch counterattack with the same number of troops as the incoming attack + this.eventBus.emit(new SendAttackIntentEvent(attacker.id(), attack.troops)); + } + private renderIncomingAttacks() { return html` ${this.incomingAttacks.length > 0 ? html` - ${this.incomingAttacks.map( - (attack) => html` - ${this.renderButton({ - content: html` - ${renderTroops(attack.troops)} - ${( - this.game.playerBySmallID(attack.attackerID) as PlayerView - )?.name()} - ${attack.retreating - ? `(${translateText("events_display.retreating")}...)` +