Matou-Garou / patches /convex /aiTown /dayNightCycle.ts
Jofthomas's picture
push bulk 1
8cbe088
raw
history blame
1.91 kB
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<typeof dayNightCycleSchema>;
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,
};
}
}