Files
barotrauma-localmods/CykaQuick/Lua/Cyka/sonarpinger.lua

75 lines
1.7 KiB
Lua

-- luacheck: globals Character MyModGlobal LuaUserData Descriptors Timer CLIENT
if not CLIENT then return end
local dump = require("Cyka.dump")
-- LuaUserData.MakeMethodAccessible(Descriptors["Barotrauma.Sonar"], "UpdateGUIElements")
-- Make sure we have access to the Sonar enum types
-- LuaUserData.RegisterType(Descriptors["Barotrauma.Items.Components.Sonar+Mode"])
local function getSonarObjectInFocus()
local character = Character.Controlled
if not character then
MyModGlobal.debugPrint("No controlled character")
return nil, nil
end
local selectedItem = character.SelectedItem
if not selectedItem then
MyModGlobal.debugPrint("No selected item")
return nil, nil
end
-- Check if the selected item is in fact the repairable object itself
for _, component in pairs(selectedItem.Components) do
if component.name == "Sonar" then
return selectedItem, component
end
end
return nil, nil
end
local function tryPing()
local character = Character.Controlled
if not character then
MyModGlobal.debugPrint("No controlled character")
return
end
local submarine = character.Submarine
if not submarine then
MyModGlobal.debugPrint("No submarine")
return
end
local sonar, sonarComponent = getSonarObjectInFocus()
if not sonar or not sonarComponent then
MyModGlobal.debugPrint("No sonar or sonar component")
return
end
local sonarButton = sonarComponent.SonarModeSwitch
if not sonarButton then
MyModGlobal.debugPrint("No sonar button")
return
end
sonarButton.Selected = not sonarButton.Selected
if sonarButton.Selected then
-- Active
sonarComponent.CurrentMode = 0
Timer.Wait(function()
sonarComponent.CurrentMode = 1
end, 100)
else
-- Passive
sonarComponent.CurrentMode = 1
end
end
return {
tryPing = tryPing,
}