From ab183e4f59d509d6e035f3ac2fa12bbb51936a85 Mon Sep 17 00:00:00 2001 From: evanpelle Date: Tue, 21 Jan 2025 16:47:18 -0800 Subject: [PATCH] show alliance icon --- src/client/graphics/layers/NameLayer.ts | 12 +----------- src/client/graphics/layers/PlayerInfoOverlay.ts | 12 ++++++++++-- src/core/GameRunner.ts | 7 +++++-- src/core/GameView.ts | 2 +- src/core/configuration/DevConfig.ts | 3 +-- src/core/game/Game.ts | 3 ++- src/core/game/PlayerImpl.ts | 3 ++- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index a267bf195..b45eec776 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -1,6 +1,5 @@ import { AllPlayers, Cell, Game, Player, PlayerType } from "../../../core/game/Game" import { PseudoRandom } from "../../../core/PseudoRandom" -import { calculateBoundingBox } from "../../../core/Util" import { Theme } from "../../../core/configuration/Config" import { Layer } from "./Layer" import { TransformHandler } from "../TransformHandler" @@ -28,7 +27,6 @@ class RenderInfo { export class NameLayer implements Layer { private canvas: HTMLCanvasElement - private context: CanvasRenderingContext2D private lastChecked = 0 @@ -50,11 +48,6 @@ export class NameLayer implements Layer { private firstPlace: Player | null = null - private lastUpdate = 0 - private updateFrequency = 250 - - private lastRect = null; - constructor(private game: GameView, private theme: Theme, private transformHandler: TransformHandler, private clientID: ClientID) { this.traitorIconImage = new Image(); this.traitorIconImage.src = traitorIcon; @@ -83,9 +76,6 @@ export class NameLayer implements Layer { public init() { // this.canvas = document.createElement('canvas'); this.canvas = createCanvas() - this.context = this.canvas.getContext("2d") - - window.addEventListener('resize', () => this.resizeCanvas()); this.resizeCanvas(); @@ -293,7 +283,7 @@ export class NameLayer implements Layer { if (this.myPlayer != null) { return this.myPlayer } - this.myPlayer = this.game.players().find(p => p.clientID() == this.clientID) + this.myPlayer = this.game.playerViews().find(p => p.clientID() == this.clientID) return this.myPlayer } } \ No newline at end of file diff --git a/src/client/graphics/layers/PlayerInfoOverlay.ts b/src/client/graphics/layers/PlayerInfoOverlay.ts index cabe8ff9e..404185b15 100644 --- a/src/client/graphics/layers/PlayerInfoOverlay.ts +++ b/src/client/graphics/layers/PlayerInfoOverlay.ts @@ -61,6 +61,8 @@ export class PlayerInfoOverlay extends LitElement implements Layer { private _isActive = false; + private lastMouseUpdate = 0 + init() { this.eventBus.on(MouseMoveEvent, (e: MouseMoveEvent) => this.onMouseEvent(e)); this._isActive = true; @@ -68,6 +70,13 @@ export class PlayerInfoOverlay extends LitElement implements Layer { } private onMouseEvent(event: MouseMoveEvent) { + const now = Date.now() + if (now - this.lastMouseUpdate < 100) { + return + } + this.lastMouseUpdate = now + + this.setVisible(false); this.unit = null; this.player = null; @@ -85,7 +94,6 @@ export class PlayerInfoOverlay extends LitElement implements Layer { if (owner && owner.isPlayer()) { this.player = owner; (this.player as PlayerView).profile().then(p => { - console.log(`got profile ${JSON.stringify(p)}`); this.playerProfile = p; }); this.setVisible(true); @@ -136,7 +144,7 @@ export class PlayerInfoOverlay extends LitElement implements Layer { private renderPlayerInfo(player: Player) { const myPlayer = this.myPlayer(); - const isAlly = (myPlayer?.isAlliedWith(player) || player == this.myPlayer()) ?? false; + const isAlly = myPlayer.isAlliedWith(player) let relationHtml = null; if (player.type() == PlayerType.FakeHuman && myPlayer != null) { let classType = ''; diff --git a/src/core/GameRunner.ts b/src/core/GameRunner.ts index 983e63672..245f296d3 100644 --- a/src/core/GameRunner.ts +++ b/src/core/GameRunner.ts @@ -119,12 +119,15 @@ export class GameRunner { throw new Error(`player with id ${playerID} not found`); } - return { + const rel = { relations: Object.fromEntries( player.allRelationsSorted() .map(({ player, relation }) => [player.smallID(), relation]) - ) + ), + alliances: player.alliances().map(a => a.other(player).smallID()) }; + console.log(`got relations: ${JSON.stringify(rel)}`) + return rel } private canBoat(myPlayer: Player, tile: TileRef): boolean { diff --git a/src/core/GameView.ts b/src/core/GameView.ts index 1ece68000..fd551da65 100644 --- a/src/core/GameView.ts +++ b/src/core/GameView.ts @@ -127,7 +127,7 @@ export class PlayerView implements Player { } isAlliedWith(other: Player): boolean { - return false + return this.data.alliances.some(n => other.smallID() == n) } allianceWith(other: Player): Alliance | null { return null diff --git a/src/core/configuration/DevConfig.ts b/src/core/configuration/DevConfig.ts index 9243c59a9..653bad2ee 100644 --- a/src/core/configuration/DevConfig.ts +++ b/src/core/configuration/DevConfig.ts @@ -30,8 +30,7 @@ export class DevConfig extends DefaultConfig { return info } - // tradeShipSpawnRate(): number { - // return 10 + // tradeShipSpawnRate(): number { // return 10 // } // boatMaxDistance(): number { // return 5000 diff --git a/src/core/game/Game.ts b/src/core/game/Game.ts index 6038de35f..a62aabffc 100644 --- a/src/core/game/Game.ts +++ b/src/core/game/Game.ts @@ -370,7 +370,7 @@ export interface PlayerActions { export interface PlayerProfile { relations: Record - // TODO: add alliances etc + alliances: number[] } export interface PlayerInteraction { @@ -428,6 +428,7 @@ export interface PlayerUpdate { workers: number, troops: number, targetTroopRatio: number + alliances: number[] } diff --git a/src/core/game/PlayerImpl.ts b/src/core/game/PlayerImpl.ts index ba6bdbea5..f3101a260 100644 --- a/src/core/game/PlayerImpl.ts +++ b/src/core/game/PlayerImpl.ts @@ -75,7 +75,8 @@ export class PlayerImpl implements MutablePlayer { population: this.population(), workers: this.workers(), troops: this.troops(), - targetTroopRatio: this.targetTroopRatio() + targetTroopRatio: this.targetTroopRatio(), + alliances: this.alliances().map(a => a.other(this).smallID()) } }