Divergent/mods/Artifacts Inspection/gamedata/scripts/af_inspect.script

188 lines
4.6 KiB
Plaintext

af_anim_item = nil
active_slot = nil
particle = nil
pos = nil
fov = nil
containers = {
"af_aac",
"af_aam",
"af_iam",
"lead_box"
}
function inspect(itm)
if zzz_ea_addon_backpack then
zzz_ea_addon_backpack.actor_on_item_use(itm)
end
local function contains_container(item_section)
for _, container in ipairs(containers) do
if string.find(item_section, container) then
return true
end
end
return false
end
if contains_container(itm:section()) then
if system_ini():line_exist(itm:section(), "1icon_layer") then
local art = system_ini():r_string_ex(itm:section(), "1icon_layer", "")
af_anim_item = art .. "_hud"
end
else
af_anim_item = itm:section() .. "_hud"
end
-- Patch for FDDA Backpack Animations
if zzz_ea_addon_backpack and zzz_ea_addon_backpack.anim_enabled then
zzz_ea_addon_backpack.det_active = nil
active_slot = zzz_ea_addon_backpack.active_slot
else
active_slot = db.actor:active_slot()
end
----------------------------------------
get_hud():HideActorMenu()
level.disable_input()
fov = get_console():get_float("hud_fov")
particle = particles_object("artefact\\effects\\af_idle_dist")
give_object_to_actor(af_anim_item)
level.add_call( function () return db.actor:object(af_anim_item) end, function ()
db.actor:activate_slot(14)
end)
level.add_call( function () return db.actor:active_slot() == 14 end, function ()
get_console():execute("hud_fov 0.55")
particle:play_at_pos(get_play_pos())
level.enable_input()
local r, g, b = get_light_rgb(af_anim_item)
light_on(r,g,b,1,50,0.2,0.3)
end)
end
function get_light_rgb(af_anim_item)
local not_hud_itm = string.gsub(af_anim_item, "_hud$", "")
if system_ini():line_exist(not_hud_itm, "trail_light_color") then
local rgb = system_ini():r_string_ex(not_hud_itm,"trail_light_color","")
local r, g, b = rgb:match("([^,]+),([^,]+),([^,]+)")
r = tonumber(r)
g = tonumber(g)
b = tonumber(b)
return r, g, b
end
end
function get_play_pos()
pos = db.actor:bone_position("jaw_1"):add(device().cam_dir:mul(0.3))
pos.y = pos.y - 0.1
return pos
end
function release_af()
level.disable_input()
db.actor:activate_slot(active_slot)
level.add_call( function () return db.actor:active_slot() == active_slot end, function ()
alife():release(alife():object(db.actor:object(af_anim_item):id()), true)
af_anim_item = nil
active_slot = nil
particle:stop()
light_off()
get_console():execute("hud_fov".." "..fov)
level.enable_input()
end)
end
function light_on(r,g,b,range,bright,y_pos,dirmult)
light = script_light()
light.type = 1
light.range = range
light_bright = bright
light_range = range
light.lanim = "koster_01_electra"
light.lanim_brightness = 1
light.hud_mode = false
light.shadow = false
light.volumetric = false
light.enabled = true
light.color = fcolor():set(r,g,b,bright)
local dir = device().cam_dir
local pos = device().cam_pos
pos = pos:add(dir:mul(dirmult))
pos.y = pos.y - y_pos
light:set_position(pos)
light:set_direction(dir)
light:update()
CreateTimeEvent("l_move", "l_move", 0, light_move,r,g,b,y_pos,dirmult)
light_flag = true
return true
end
function light_move(r,g,b,y_pos,dirmult)
light_bright = light_bright
light_range = light_range
light.range = light_range
light.color = fcolor():set(r,g,b,light_bright)
local dir = device().cam_dir
local pos = device().cam_pos
pos = pos:add(dir:mul(dirmult))
pos.y = pos.y - y_pos
light:set_position(pos)
light:set_direction(dir)
light:update()
if light_flag then
return false
else
return true
end
end
function light_off()
if not light then return end
light.enabled = false
light:update()
light_flag = false
return true
end
function on_key_press()
if af_anim_item == nil then return end
release_af()
end
function actor_on_update()
if af_anim_item then
particle:move_to(get_play_pos(),device().cam_dir)
end
end
function actor_on_first_update()
local active_item = db.actor:active_item()
if active_item and (string.find(active_item:section(), "af_") or active_item:section() == "monolith_shard_hud") then
alife():release(alife():object(db.actor:object(active_item:section()):id()), true)
end
end
function st_inspect(itm)
local containersSet = {}
for _, itm in ipairs(containers) do
containersSet[itm] = true
end
if containersSet[itm:section()] then
return
end
return game.translate_string("st_inspect")
end
function on_game_start()
RegisterScriptCallback("on_key_press",on_key_press)
RegisterScriptCallback("actor_on_update",actor_on_update)
RegisterScriptCallback("actor_on_first_update",actor_on_first_update)
end