Update sky.js

- Makes it use the whole canvas
- Adjusted some code
- Remove risk of mod crashing
This commit is contained in:
redbirdly 2025-02-23 08:42:55 +08:00 committed by GitHub
parent 382289f293
commit 6b61146f4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 53 additions and 51 deletions

View File

@ -2,7 +2,7 @@ if (!enabledMods.includes("mods/betterSettings.js")) { enabledMods.unshift("mods
var sky_settingsTab = new SettingsTab("Sky"); var sky_settingsTab = new SettingsTab("Sky");
var realtime_setting = new Setting("Use real life time for sky", "real_time", settingType.BOOLEAN, false, defaultValue=true); var realtime_setting = new Setting("Use real life time for sky", "real_time", settingType.BOOLEAN, false, defaultValue=false);
var initial_hour_setting = new Setting("Initial hour", "initial_hour", settingType.NUMBER, false, defaultValue=8); var initial_hour_setting = new Setting("Initial hour", "initial_hour", settingType.NUMBER, false, defaultValue=8);
var ticks_per_hour_setting = new Setting("Ticks per hour", "ticks_per_hour", settingType.NUMBER, false, defaultValue=150); var ticks_per_hour_setting = new Setting("Ticks per hour", "ticks_per_hour", settingType.NUMBER, false, defaultValue=150);
@ -12,10 +12,12 @@ sky_settingsTab.registerSettings("Ticks per hour", ticks_per_hour_setting);
settingsManager.registerTab(sky_settingsTab); settingsManager.registerTab(sky_settingsTab);
var hour = initial_hour_setting.value; //function lerpColor(start, end, t) {
// return start.map((s, i) => Math.round(s + (end[i] - s) * t));
function lerpColor(start, end, t) { //}
return start.map((s, i) => Math.round(s + (end[i] - s) * t)); // Destructuring makes it faster
function lerpColor([r1, g1, b1], [r2, g2, b2], t) {
return [r1 + (r2 - r1) * t, g1 + (g2 - g1) * t, b1 + (b2 - b1) * t].map(Math.round);
} }
function getSkyColors(hour) { function getSkyColors(hour) {
@ -45,17 +47,19 @@ function getSkyColors(hour) {
} }
function renderSky(ctx) { function renderSky(ctx) {
// Get sky colors and make gradient
const { skyTop, skyBottom } = getSkyColors(hour); const { skyTop, skyBottom } = getSkyColors(hour);
const gradient = ctx.createLinearGradient(0, 0, 0, height * pixelSize); const gradient = ctx.createLinearGradient(0, 0, 0, height * pixelSize);
gradient.addColorStop(0, skyTop); gradient.addColorStop(0, skyTop);
gradient.addColorStop(1, skyBottom); gradient.addColorStop(1, skyBottom);
ctx.fillStyle = gradient; ctx.fillStyle = gradient;
ctx.fillRect(0, 0, width * pixelSize, height * pixelSize); ctx.fillRect(0, 0, (width + 1) * pixelSize, (height + 1) * pixelSize);
} }
function updateDayTime() { function updateDayTime() {
if (paused) {return;}
if (realtime_setting.value) { if (realtime_setting.value) {
const now = new Date(); const now = new Date();
hour = now.getHours() + now.getMinutes() / 60; hour = now.getHours() + now.getMinutes() / 60;
@ -64,7 +68,7 @@ function updateDayTime() {
} }
} }
// Make sure the sky gets VIP treatment in the render list // Sky should be first layer
function prioritizeRenderSky() { function prioritizeRenderSky() {
const idx = renderPrePixelList.indexOf(renderSky); const idx = renderPrePixelList.indexOf(renderSky);
if (idx !== -1) { if (idx !== -1) {
@ -74,16 +78,14 @@ function prioritizeRenderSky() {
} }
// Resetting canvas also resets time // Resetting canvas also resets time
function initializeCanvas() { function initializeSky() {
const resizeCanvas = autoResizeCanvas;
autoResizeCanvas = (clear) => {
resizeCanvas(clear);
hour = initial_hour_setting.value; hour = initial_hour_setting.value;
};
} }
// Hooks // Hooks
setTimeout(initializeCanvas, 500); runAfterReset(initializeSky);
runAfterLoad(prioritizeRenderSky); runAfterLoad(prioritizeRenderSky);
runEveryTick(updateDayTime); runEveryTick(updateDayTime);
renderPrePixel(renderSky); renderPrePixel(renderSky);
var hour = initial_hour_setting.value;