78 lines
2.4 KiB
JavaScript
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;
|
|
}
|
|
} |