diff --git a/server/src/game/GameLoop.ts b/server/src/game/GameLoop.ts index b1469f6..5c98f88 100644 --- a/server/src/game/GameLoop.ts +++ b/server/src/game/GameLoop.ts @@ -1,4 +1,4 @@ -import { TICK_RATE, BROADCAST_EVERY_N_TICKS } from '@dflike/shared'; +import { TICK_RATE, BROADCAST_EVERY_N_TICKS, ENERGY_DECAY_PER_TICK, DAY_NIGHT_RATIO } from '@dflike/shared'; import { World } from '../ecs/World.js'; import { GameMap } from '../map/GameMap.js'; import { generateMap } from '../map/mapGenerator.js'; @@ -32,6 +32,7 @@ export class GameLoop { // Load terrain and decorations this.map.terrain = generated.terrain; this.map.decorations = generated.decorations; + this.map.trunkDecorations = generated.trunkDecorations; this.map.loadObstacles(generated.obstacles); // Points of interest from generator @@ -86,4 +87,11 @@ export class GameLoop { getTick(): number { return this.tick; } + + getGameTime(): number { + const dayTicks = 100 / ENERGY_DECAY_PER_TICK; + const nightTicks = dayTicks / DAY_NIGHT_RATIO; + const cycleTicks = dayTicks + nightTicks; + return (this.tick % cycleTicks) / cycleTicks; + } } diff --git a/server/src/network/SocketServer.ts b/server/src/network/SocketServer.ts index c39006d..1d1ca0d 100644 --- a/server/src/network/SocketServer.ts +++ b/server/src/network/SocketServer.ts @@ -23,7 +23,7 @@ export class SocketServer { private setupBroadcast(): void { this.gameLoop.setBroadcastHandler(() => { - const update = serializeStateUpdate(this.gameLoop.world, this.gameLoop.getTick()); + const update = serializeStateUpdate(this.gameLoop.world, this.gameLoop.getTick(), this.gameLoop.getGameTime()); this.io.emit('state-update', update); }); } diff --git a/server/src/network/stateSerializer.ts b/server/src/network/stateSerializer.ts index 326af69..dc844cf 100644 --- a/server/src/network/stateSerializer.ts +++ b/server/src/network/stateSerializer.ts @@ -80,10 +80,11 @@ export function serializeWorldState(world: World, map: GameMap): WorldState { pointsOfInterest: map.getPointsOfInterest(), terrain: map.terrain, decorations: map.decorations, + trunkDecorations: map.trunkDecorations, }; } -export function serializeStateUpdate(world: World, tick: number): StateUpdate { +export function serializeStateUpdate(world: World, tick: number, gameTime: number): StateUpdate { const entities = world.query('position').map(id => serializeEntity(world, id)); - return { entities, tick }; + return { entities, tick, gameTime }; }