mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
61 lines
No EOL
2.3 KiB
Lua
Executable file
61 lines
No EOL
2.3 KiB
Lua
Executable file
-- localize functions to improve performance
|
|
local set_override_far,obj_mark_for_deletion,vec3f_to_object_pos,get_skybox = set_override_far,obj_mark_for_deletion,vec3f_to_object_pos,get_skybox
|
|
|
|
--- @param o Object
|
|
function bhv_dnc_skybox_init(o)
|
|
o.header.gfx.skipInViewCheck = true
|
|
set_override_far(200000)
|
|
end
|
|
|
|
--- @param o Object
|
|
function bhv_dnc_skybox_loop(o)
|
|
if not is_dnc_enabled() then
|
|
obj_mark_for_deletion(o)
|
|
return
|
|
end
|
|
|
|
vec3f_to_object_pos(o, gLakituState.pos)
|
|
|
|
local skybox = get_skybox()
|
|
|
|
-- do not rotate BITDW skybox
|
|
if skybox == BACKGROUND_GREEN_SKY then return end
|
|
|
|
local minutes = get_time_minutes()
|
|
|
|
o.oFaceAngleYaw = (minutes / 24) * 0x10000
|
|
|
|
if o.oBehParams2ndByte == SKYBOX_DAY then
|
|
o.oOpacity = 255
|
|
elseif o.oBehParams2ndByte == SKYBOX_SUNSET then
|
|
if minutes >= HOUR_SUNRISE_START and minutes <= HOUR_SUNRISE_END then
|
|
o.oOpacity = ((minutes - HOUR_SUNRISE_START) / HOUR_SUNRISE_DURATION) * 255
|
|
elseif minutes > HOUR_SUNRISE_END and minutes <= HOUR_DAY_START then
|
|
o.oOpacity = 255 - ((minutes - HOUR_SUNRISE_END) / HOUR_SUNRISE_DURATION) * 255
|
|
elseif minutes >= HOUR_SUNSET_START and minutes <= HOUR_SUNSET_END then
|
|
o.oOpacity = ((minutes - HOUR_SUNSET_START) / HOUR_SUNSET_DURATION) * 255
|
|
elseif minutes > HOUR_SUNSET_END and minutes <= HOUR_NIGHT_START then
|
|
o.oOpacity = 255
|
|
else
|
|
o.oOpacity = 0
|
|
end
|
|
|
|
if minutes < 12 then
|
|
o.oAnimState = gSunriseSkyboxes[skybox] or BACKGROUND_OCEAN_SKY_SUNRISE
|
|
else
|
|
o.oAnimState = gSunsetSkyboxes[skybox] or BACKGROUND_OCEAN_SKY_SUNSET
|
|
end
|
|
|
|
o.oFaceAngleYaw = o.oFaceAngleYaw - if_then_else(minutes < 12, 0x3000, 0x6000)
|
|
elseif o.oBehParams2ndByte == SKYBOX_NIGHT then
|
|
if minutes >= HOUR_SUNRISE_START and minutes <= HOUR_SUNRISE_END then
|
|
o.oOpacity = 255 - ((minutes - HOUR_SUNRISE_START) / HOUR_SUNRISE_DURATION) * 255
|
|
elseif minutes >= HOUR_SUNSET_END and minutes <= HOUR_NIGHT_START then
|
|
o.oOpacity = ((minutes - HOUR_SUNSET_END) / HOUR_SUNSET_DURATION) * 255
|
|
elseif minutes > HOUR_NIGHT_START or minutes < HOUR_SUNRISE_START then
|
|
o.oOpacity = 255
|
|
else
|
|
o.oOpacity = 0
|
|
end
|
|
end
|
|
end |