mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 07:50:45 +00:00
use priority queue to store tile updates
This commit is contained in:
@@ -48,6 +48,10 @@
|
||||
* give time to (re) spawn at start of game DONE 8/25/2024
|
||||
* show bar for long to respawn DONE 8/26/2024
|
||||
* store & delay tile updates for lag compensation
|
||||
* BUG: error if don't spawn and then click after spawn mode
|
||||
* BUG: change player name after join lobby
|
||||
* REFACTOR: use new priority queue
|
||||
* BUG: players attack each other same time creates islands
|
||||
* add shader to dim border
|
||||
* REFACTOR: remove player.info()
|
||||
* REFACTOR: give terranullius an ID, game.player() returns terranullius
|
||||
|
||||
Generated
+16
@@ -6,6 +6,7 @@
|
||||
"": {
|
||||
"name": "warfront-client",
|
||||
"dependencies": {
|
||||
"@datastructures-js/priority-queue": "^6.3.1",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/google-protobuf": "^3.15.12",
|
||||
"@types/jimp": "^0.2.28",
|
||||
@@ -2162,6 +2163,21 @@
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@datastructures-js/heap": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@datastructures-js/heap/-/heap-4.3.3.tgz",
|
||||
"integrity": "sha512-UcUu/DLh/aM4W3C8zZfwxxm6/6FIZUlm3mcAXuNOCa6Aj4iizNvNXQyb8DjZQH2jKSQbMRyNlngP6TPimuGjpQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@datastructures-js/priority-queue": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@datastructures-js/priority-queue/-/priority-queue-6.3.1.tgz",
|
||||
"integrity": "sha512-eoxkWql/j0VJ0UFMFTpnyJz4KbEEVQ6aZ/JuJUgenu0Im4tYKylAycNGsYCHGXiVNEd7OKGVwfx1Ac3oYkuu7A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@datastructures-js/heap": "^4.3.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@discoveryjs/json-ext": {
|
||||
"version": "0.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
"webpack-dev-server": "^5.0.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@datastructures-js/priority-queue": "^6.3.1",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/google-protobuf": "^3.15.12",
|
||||
"@types/jimp": "^0.2.28",
|
||||
|
||||
@@ -6,8 +6,7 @@ import {NameRenderer} from "./NameRenderer";
|
||||
import {bfs, manhattanDist} from "../../core/Util";
|
||||
import {PseudoRandom} from "../../core/PseudoRandom";
|
||||
import {TerrainRenderer} from "./TerrainRenderer";
|
||||
|
||||
|
||||
import {MaxPriorityQueue, PriorityQueue} from "@datastructures-js/priority-queue";
|
||||
|
||||
export class GameRenderer {
|
||||
private territoryCanvas: HTMLCanvasElement
|
||||
@@ -25,6 +24,12 @@ export class GameRenderer {
|
||||
private nameRenderer: NameRenderer;
|
||||
private theme: Theme
|
||||
|
||||
private random = new PseudoRandom(123)
|
||||
|
||||
|
||||
private tileToRenderQueue: PriorityQueue<{tileEvent: TileEvent, lastUpdate: number}> = new PriorityQueue((a, b) => {return a.lastUpdate - b.lastUpdate})
|
||||
|
||||
|
||||
constructor(private gs: Game, private terrainRenderer: TerrainRenderer) {
|
||||
this.theme = gs.config().theme()
|
||||
this.nameRenderer = new NameRenderer(gs, this.theme)
|
||||
@@ -95,6 +100,7 @@ export class GameRenderer {
|
||||
);
|
||||
|
||||
this.terrainRenderer.draw(this.context)
|
||||
this.renderTerritory()
|
||||
|
||||
this.context.drawImage(
|
||||
this.territoryCanvas,
|
||||
@@ -115,6 +121,18 @@ export class GameRenderer {
|
||||
requestAnimationFrame(() => this.renderGame());
|
||||
}
|
||||
|
||||
renderTerritory() {
|
||||
let numToRender = Math.floor(this.tileToRenderQueue.size() / 10)
|
||||
|
||||
while (numToRender > 0) {
|
||||
numToRender--
|
||||
const event = this.tileToRenderQueue.pop().tileEvent
|
||||
this.paintTerritory(event.tile)
|
||||
event.tile.neighbors().forEach(t => this.paintTerritory(t))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
renderUIBar() {
|
||||
if (!this.gs.inSpawnPhase()) {
|
||||
return
|
||||
@@ -138,8 +156,7 @@ export class GameRenderer {
|
||||
}
|
||||
|
||||
tileUpdate(event: TileEvent) {
|
||||
this.paintTerritory(event.tile)
|
||||
event.tile.neighbors().forEach(t => this.paintTerritory(t))
|
||||
this.tileToRenderQueue.push({tileEvent: event, lastUpdate: this.gs.ticks() + this.random.nextFloat(0, .5)})
|
||||
}
|
||||
|
||||
playerEvent(event: PlayerEvent) {
|
||||
|
||||
@@ -4,7 +4,7 @@ import {DefaultConfig, DefaultPlayerConfig, defaultPlayerConfig} from "./Default
|
||||
|
||||
export const devConfig = new class extends DefaultConfig {
|
||||
numSpawnPhaseTurns(): number {
|
||||
return 100
|
||||
return 40
|
||||
}
|
||||
gameCreationRate(): number {
|
||||
return 3 * 1000
|
||||
|
||||
Reference in New Issue
Block a user