import { v, Infer, ObjectType } from 'convex/values'; import { Game } from './game'; // Define the schema for DayNightCycle export const dayNightCycleSchema = { currentTime: v.number(), isDay: v.boolean(), dayDuration: v.number(), nightDuration: v.number(), }; export type SerializedDayNightCycle = ObjectType; export class DayNightCycle { currentTime: number; isDay: boolean; dayDuration: number; nightDuration: number; constructor(serialized: SerializedDayNightCycle) { const { currentTime, isDay, dayDuration, nightDuration } = serialized; this.currentTime = currentTime; this.isDay = isDay; this.dayDuration = dayDuration; this.nightDuration = nightDuration; } // Tick method to increment the counter tick(game: Game, tickDuration: number) { this.currentTime += tickDuration; if (this.isDay && this.currentTime >= this.dayDuration) { this.isDay = false; this.currentTime = 0; this.onNightStart(game); } else if (!this.isDay && this.currentTime >= this.nightDuration) { this.isDay = true; this.currentTime = 0; this.onDayStart(game); } } onDayStart(game: Game) { console.log("Day has started!"); for (const player of game.world.players.values()) { // player.onDayStart(game); } for (const agent of game.world.agents.values()) { // agent.onDayStart(game); } } onNightStart(game: Game) { console.log("Night has started!"); for (const player of game.world.players.values()) { // player.onNightStart(game); } for (const agent of game.world.agents.values()) { // agent.onNightStart(game); } } serialize(): SerializedDayNightCycle { const { currentTime, isDay, dayDuration, nightDuration } = this; return { currentTime, isDay, dayDuration, nightDuration, }; } }