75 lines
1.7 KiB
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,
|
|
}
|