Fablewood/src/cycle.js

78 lines
2.4 KiB
JavaScript

export class CycleManager {
constructor(scene) {
this.scene = scene;
this.currentCycle = 'day';
this.cycleTimer = 0;
this.cycleDuration = 120; // 3 minutes
this.cycles = ['day', 'evening', 'night', 'morning'];
// Cycle tint values
this.tintValues = {
'day': 0xffffff, // White (no tint)
'evening': 0xffb085, // Orange tint
'night': 0x222244, // Dark blue tint
'morning': 0xffffaa // Light yellow tint
};
// Cycle tint values
this.playerTintValues = {
'day': 0xffffff, // White (no tint)
'evening': 0xffccaa, // Orange tint
'night': 0x8888ff, // Dark blue tint
'morning': 0xffffdd // Light yellow tint
};
this.cycleText = null;
}
init() {
// Create cycle display text in upper right corner
this.cycleText = this.scene.add.text(
40,
40,
'Time of Day: Day',
{
fontSize: '36px',
fill: '#ffffff',
fontFamily: 'eraserDust, arial'
}
).setShadow(3,3, '#333', 5).setScrollFactor(0);
}
update(delta) {
// Handle cycle timing
this.cycleTimer += delta / 1000; // Convert ms to seconds
if (this.cycleTimer >= this.cycleDuration) {
this.nextCycle();
this.cycleTimer = 0;
}
}
nextCycle() {
const currentIndex = this.cycles.indexOf(this.currentCycle);
const nextIndex = (currentIndex + 1) % this.cycles.length;
this.currentCycle = this.cycles[nextIndex];
// Update display text
if (this.cycleText) {
this.cycleText.setText('Time of Day: ' + this.currentCycle.charAt(0).toUpperCase() + this.currentCycle.slice(1));
}
// Apply tint to the terrain layer
this.applyTint(this.scene.mainLayer);
}
applyTint(layer) {
if (layer && this.tintValues[this.currentCycle]) {
layer.setTint(this.tintValues[this.currentCycle]);
this.scene.player.setTint(this.playerTintValues[this.currentCycle]);
this.scene.objects.setTint(this.playerTintValues[this.currentCycle]);
}
}
getCurrentCycle() {
return this.currentCycle;
}
}