mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-06-13 11:23:01 +00:00
59 lines
No EOL
1.8 KiB
Lua
59 lines
No EOL
1.8 KiB
Lua
--- @param o Object
|
|
local function bhv_spawn_point_light(o)
|
|
local light = spawn_non_sync_object(
|
|
id_bhvPointLight,
|
|
E_MODEL_NONE,
|
|
o.oPosX, o.oPosY, o.oPosZ,
|
|
nil
|
|
)
|
|
if get_id_from_behavior(o.behavior) == id_bhvKoopaShell then
|
|
light.oBehParams = 0x00FF0064
|
|
else
|
|
light.oBehParams = 0xFFFFFF32
|
|
end
|
|
light.parentObj = o
|
|
end
|
|
|
|
--- @param o Object
|
|
function bhv_flashlight_loop(o)
|
|
local fp = get_first_person_enabled()
|
|
local pos = gMarioStates[0].pos
|
|
local yaw = if_then_else(fp, gFirstPersonCamera.yaw + 0x8000, gMarioStates[0].faceAngle.y)
|
|
|
|
local dirX = sins(yaw) * 300
|
|
local dirY = if_then_else(fp, -gFirstPersonCamera.pitch * 0.06, 120)
|
|
local dirZ = coss(yaw) * 300
|
|
|
|
local raycast = collision_find_surface_on_ray(pos.x, pos.y, pos.z, dirX, dirY, dirZ)
|
|
if raycast.surface == nil then
|
|
o.oPosX = pos.x + dirX
|
|
o.oPosY = pos.y + dirY
|
|
o.oPosZ = pos.z + dirZ
|
|
else
|
|
vec3f_to_object_pos(o, raycast.hitPos)
|
|
end
|
|
|
|
le_set_light_pos(o.oLightID, o.oPosX, o.oPosY, o.oPosZ)
|
|
le_set_light_color(o.oLightID, flashlightColor[1], flashlightColor[2], flashlightColor[3])
|
|
end
|
|
|
|
function spawn_flashlight()
|
|
local flashlight = spawn_non_sync_object(
|
|
bhvFlashlight,
|
|
E_MODEL_NONE,
|
|
0, 0, 0,
|
|
nil
|
|
)
|
|
flashlight.oBehParams = (flashlightColor[1] << 24) | (flashlightColor[2] << 16) | (flashlightColor[3] << 8) | (90)
|
|
return flashlight
|
|
end
|
|
|
|
--- @param flashlight Object
|
|
function delete_flashlight(flashlight)
|
|
le_remove_light(flashlight.oLightID)
|
|
flashlight.oLightID = -1
|
|
obj_mark_for_deletion(flashlight)
|
|
return nil
|
|
end
|
|
|
|
id_bhvKoopaShell = hook_behavior(id_bhvKoopaShell, OBJ_LIST_LEVEL, false, bhv_spawn_point_light, nil, "bhvKoopaShell") |