diff --git a/src/client/graphics/NameBoxCalculator.ts b/src/client/graphics/NameBoxCalculator.ts index 0fd1702e9..191a97ce0 100644 --- a/src/client/graphics/NameBoxCalculator.ts +++ b/src/client/graphics/NameBoxCalculator.ts @@ -1,5 +1,5 @@ import { Game, Player, Tile, Cell } from '../../core/game/Game'; -import { GameView } from '../../core/GameView'; +import { GameView, NameViewData } from '../../core/GameView'; import { calculateBoundingBox, within } from '../../core/Util'; export interface Point { @@ -15,7 +15,7 @@ export interface Rectangle { } -export function placeName(game: GameView, player: Player): [position: Cell, fontSize: number] { +export function placeName(game: Game, player: Player): NameViewData { const boundingBox = calculateBoundingBox(player.borderTiles()); const rawScalingFactor = (boundingBox.max.x - boundingBox.min.x) / 50 @@ -36,10 +36,14 @@ export function placeName(game: GameView, player: Player): [position: Cell, font const fontSize = calculateFontSize(largestRectangle, player.name()); center = new Cell(center.x, center.y - fontSize / 3) - return [center, fontSize] + return { + nameX: center.x, + nameY: center.y, + nameSize: fontSize, + } } -export function createGrid(game: GameView, player: Player, boundingBox: { min: Point; max: Point }, scalingFactor: number): boolean[][] { +export function createGrid(game: Game, player: Player, boundingBox: { min: Point; max: Point }, scalingFactor: number): boolean[][] { const scaledBoundingBox: { min: Point; max: Point } = { min: { x: Math.floor(boundingBox.min.x / scalingFactor), diff --git a/src/client/graphics/TransformHandler.ts b/src/client/graphics/TransformHandler.ts index fff819b02..860182ccf 100644 --- a/src/client/graphics/TransformHandler.ts +++ b/src/client/graphics/TransformHandler.ts @@ -89,7 +89,7 @@ export class TransformHandler { onGoToPlayer(event: GoToPlayerEvent) { let unused = null; this.clearTarget(); - [this.target, unused] = placeName(this.game, event.player); + // [this.target, unused] = placeName(this.game, event.player); this.intervalID = setInterval(() => this.goTo(), 1) } diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index b70a1540a..f31cfc865 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -153,9 +153,9 @@ export class NameLayer implements Layer { render.fontSize = 0 return } - const [cell, size] = placeName(this.game, render.player) - render.location = cell - render.fontSize = Math.max(1, Math.floor(size)) + // const [cell, size] = placeName(this.game, render.player) + // render.location = cell + // render.fontSize = Math.max(1, Math.floor(size)) } renderPlayerInfo(render: RenderInfo, context: CanvasRenderingContext2D, scale: number, uppperLeft: Cell, bottomRight: Cell) { diff --git a/src/core/GameRunner.ts b/src/core/GameRunner.ts index b2a2e28a2..8fa779307 100644 --- a/src/core/GameRunner.ts +++ b/src/core/GameRunner.ts @@ -1,3 +1,4 @@ +import { placeName } from "../client/graphics/NameBoxCalculator"; import { getConfig } from "./configuration/Config"; import { EventBus } from "./EventBus"; import { Executor } from "./execution/ExecutionManager"; @@ -5,7 +6,7 @@ import { WinCheckExecution } from "./execution/WinCheckExecution"; import { Game, MutableGame, MutableTile, PlayerID, Tile, TileEvent } from "./game/Game"; import { createGame } from "./game/GameImpl"; import { loadTerrainMap } from "./game/TerrainMapLoader"; -import { GameUpdateViewData, packTileData, PlayerViewData } from "./GameView"; +import { GameUpdateViewData, NameViewData, packTileData, PlayerViewData } from "./GameView"; import { GameConfig, Turn } from "./Schemas"; export async function createGameRunner(gameID: string, gameConfig: GameConfig, callBack: (gu: GameUpdateViewData) => void): Promise { @@ -25,6 +26,8 @@ export class GameRunner { private currTurn = 0 private isExecuting = false + private playerToName = new Map() + constructor( private game: MutableGame, private eventBus: EventBus, @@ -64,16 +67,26 @@ export class GameRunner { this.currTurn++ this.game.executeNextTick() + if (this.game.ticks() % 10 == 0) { + this.game.players() + .forEach(p => this.playerToName.set(p.id(), placeName(this.game, p))) + } + + const playerViewData = {} + for (const player of this.game.allPlayers()) { + const viewData = player.toViewData() + viewData.nameViewData = this.playerToName.get(player.id()) + playerViewData[player.id()] = viewData + } this.callBack({ tick: this.game.ticks(), units: this.game.units().map(u => u.toViewData()), packedTileUpdates: Array.from(this.updatedTiles).map(t => packTileData(t.toViewData())), - players: Object.fromEntries( - this.game.allPlayers().map(p => [p.id(), p.toViewData()]) - ) as Record + players: playerViewData }) + this.isExecuting = false } diff --git a/src/core/GameView.ts b/src/core/GameView.ts index 3d2e65029..db0cc3f20 100644 --- a/src/core/GameView.ts +++ b/src/core/GameView.ts @@ -98,7 +98,15 @@ export class UnitView { } } +export interface NameViewData { + nameX: number, + nameY: number, + nameSize: number, +} + export interface PlayerViewData extends ViewData { + nameViewData?: NameViewData, + clientID: ClientID, name: string, displayName: string,