188 lines
4.6 KiB
Plaintext
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 |