300 lines
17 KiB
Lua
300 lines
17 KiB
Lua
local easySettings = dofile(RealSonar.Path .. "/Lua/easysettings.lua")
|
|
local MultiLineTextBox = dofile(RealSonar.Path .. "/Lua/multilinetextbox.lua")
|
|
local configPath = RealSonar.Path .. "/config.json"
|
|
local defaultConfig = dofile(RealSonar.Path .. "/Lua/defaultconfig.lua")
|
|
|
|
local function CommaStringToTable(str)
|
|
local tbl = {}
|
|
|
|
for word in string.gmatch(str, '([^,]+)') do
|
|
table.insert(tbl, word:match("^%s*(.-)%s*$")) -- Trim leading and trailing whitespace
|
|
end
|
|
|
|
return tbl
|
|
end
|
|
|
|
local function formatJsonTextBlock(str)
|
|
local pattern = "},\""
|
|
local replacement = "},\n\""
|
|
|
|
-- Add newline after first character and before last character
|
|
if #str > 1 then
|
|
str = str:sub(1, 1) .. "\n" .. str:sub(2, -2) .. "\n" .. str:sub(-1)
|
|
end
|
|
|
|
return string.gsub(str, pattern, replacement)
|
|
end
|
|
|
|
|
|
easySettings.AddMenu(TextManager.Get("realsonarsettings").Value, function (parent)
|
|
local list = easySettings.BasicList(parent)
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.1), list.Content.RectTransform), TextManager.Get("volumesettings").Value, nil, nil, GUI.Alignment.Center)
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.AirPingVolume = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("airpingvolume").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.AirPingVolume)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("airpingvolume").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.WaterPingVolume = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("waterpingvolume").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.WaterPingVolume)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("waterpingvolume").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.SuitPingVolume = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("suitpingvolume").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.SuitPingVolume)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("suitpingvolume").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
if RealSonar.LITE == false then
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.TinnitusVolume = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("tinnitusvolume").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.TinnitusVolume)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("tinnitusvolume").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.DistortionVolume = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("distortionvolume").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.DistortionVolume)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("distortionvolume").Value, math.floor(slider.BarScrollValue * 100))
|
|
end
|
|
|
|
if Game.IsMultiplayer then
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.1), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.1), list.Content.RectTransform), TextManager.Get("networksettings").Value, nil, nil, GUI.Alignment.Center)
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("lowlatencymode"), function (state)
|
|
RealSonar.Config.LowLatencyMode = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.LowLatencyMode)
|
|
tick.ToolTip = TextManager.Get("lowlatencymodetooltip")
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.1), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.1), list.Content.RectTransform), TextManager.Get("gameplaysettingsserver").Value, nil, nil, GUI.Alignment.Center)
|
|
else
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.1), list.Content.RectTransform), TextManager.Get("gameplaysettingsclient").Value, nil, nil, GUI.Alignment.Center)
|
|
end
|
|
|
|
if RealSonar.LITE == false then
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("submarinesonar"), function (state)
|
|
RealSonar.Config.SubmarineSonar = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.SubmarineSonar)
|
|
tick.ToolTip = TextManager.Get("submarinesonartooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("beaconsonar"), function (state)
|
|
RealSonar.Config.BeaconSonar = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.BeaconSonar)
|
|
tick.ToolTip = TextManager.Get("beaconsonartooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("shuttlesonar"), function (state)
|
|
RealSonar.Config.ShuttleSonar = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.ShuttleSonar)
|
|
tick.ToolTip = TextManager.Get("shuttlesonartooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("enemysonar"), function (state)
|
|
RealSonar.Config.EnemySonar = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.EnemySonar)
|
|
tick.ToolTip = TextManager.Get("enemysonartooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("customsonar"), function (state)
|
|
RealSonar.Config.CustomSonar = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.CustomSonar)
|
|
tick.ToolTip = TextManager.Get("customsonartooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("targetcreatures"), function (state)
|
|
RealSonar.Config.CreatureDamage = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.CreatureDamage)
|
|
tick.ToolTip = TextManager.Get("targetcreaturestooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("targetbots"), function (state)
|
|
RealSonar.Config.BotDamage = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.BotDamage)
|
|
tick.ToolTip = TextManager.Get("targetbotstooltip")
|
|
end
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("targetplayers"), function (state)
|
|
RealSonar.Config.PlayerDamage = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.PlayerDamage)
|
|
tick.ToolTip = TextManager.Get("targetplayerstooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("humanhulldetection"), function (state)
|
|
RealSonar.Config.HumanHullDetection = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.HumanHullDetection)
|
|
tick.ToolTip = TextManager.Get("humanhulldetectiontooltip")
|
|
|
|
local tick = easySettings.TickBox(list.Content, TextManager.Get("creaturehulldetection"), function (state)
|
|
RealSonar.Config.CreatureHullDetection = state
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.CreatureHullDetection)
|
|
tick.ToolTip = TextManager.Get("creaturehulldetectiontooltip")
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local rangeStartingValue = RealSonar.Config.SonarRange
|
|
local slider = easySettings.Slider(list.Content, 0.1, 1.91, function (value)
|
|
RealSonar.Config.SonarRange = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("sonarrange").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
if RealSonar.Config.SonarRange ~= rangeStartingValue then
|
|
easySettings.needRangeUpdate = true
|
|
else
|
|
easySettings.needRangeUpdate = false
|
|
end
|
|
|
|
end, RealSonar.Config.SonarRange)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("sonarrange").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
if RealSonar.LITE == false then
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.SonarDamage = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("sonardamage").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.SonarDamage)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("sonardamage").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0.5, 1.5, function (value)
|
|
RealSonar.Config.SonarSlow = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("sonarslow").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.SonarSlow)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("sonarslow").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.ImpactVisuals = math.floor(value * 100)/100
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("impactvisuals").Value, math.floor(value * 100))
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.ImpactVisuals)
|
|
textBlock.Text = string.format("%s %s%%", TextManager.Get("impactvisuals").Value, math.floor(slider.BarScrollValue * 100))
|
|
|
|
local title
|
|
if RealSonar.Config.VFXPreset == 2 then
|
|
title = "defaultfx"
|
|
elseif RealSonar.Config.VFXPreset == 1 then
|
|
title = "lowfx"
|
|
elseif RealSonar.Config.VFXPreset >= 0 then
|
|
title = "nofx"
|
|
end
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center)
|
|
local slider = easySettings.Slider(list.Content, 0, 2, function (value)
|
|
RealSonar.Config.VFXPreset = math.floor(value + 0.5)
|
|
if RealSonar.Config.VFXPreset == 2 then
|
|
title = "defaultfx"
|
|
elseif RealSonar.Config.VFXPreset == 1 then
|
|
title = "lowfx"
|
|
elseif RealSonar.Config.VFXPreset >= 0 then
|
|
title = "nofx"
|
|
end
|
|
textBlock.Text = string.format("%s", TextManager.Get(title).Value)
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end, RealSonar.Config.VFXPreset)
|
|
textBlock.Text = string.format("%s", TextManager.Get(title).Value)
|
|
end
|
|
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), TextManager.Get("ignoredplayers").Value, nil, nil, GUI.Alignment.Center, true)
|
|
local ignoredPlayers = MultiLineTextBox(list.Content.RectTransform, "", 0.1)
|
|
ignoredPlayers.Text = table.concat(RealSonar.Config.IgnoredPlayers, ", ")
|
|
ignoredPlayers.OnTextChangedDelegate = function (textBox)
|
|
RealSonar.Config.IgnoredPlayers = CommaStringToTable(textBox.Text)
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end
|
|
|
|
GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), TextManager.Get("ignoredcharacters").Value, nil, nil, GUI.Alignment.Center, true)
|
|
local ignoredCharacters = MultiLineTextBox(list.Content.RectTransform, "", 0.1)
|
|
ignoredCharacters.Text = table.concat(RealSonar.Config.IgnoredCharacters, ", ")
|
|
ignoredCharacters.OnTextChangedDelegate = function (textBox)
|
|
RealSonar.Config.IgnoredCharacters = CommaStringToTable(textBox.Text)
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
end
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), TextManager.Get("wearableprotections").Value, nil, nil, GUI.Alignment.Center, true)
|
|
local wearableProtections = MultiLineTextBox(list.Content.RectTransform, "", 0.2)
|
|
local startingWearables = 0
|
|
local newWearables = 0
|
|
for _ in RealSonar.Config.WearableProtections do
|
|
startingWearables = startingWearables + 1
|
|
end
|
|
wearableProtections.Text = formatJsonTextBlock(json.serialize(RealSonar.Config.WearableProtections))
|
|
wearableProtections.OnTextChangedDelegate = function (textBox)
|
|
if pcall(json.parse, textBox.Text) then
|
|
RealSonar.Config.WearableProtections = json.parse(textBox.Text)
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
textBlock.Text = TextManager.Get("wearableprotections").Value
|
|
for _ in RealSonar.Config.SonarTerminals do
|
|
newWearables = newWearables + 1
|
|
end
|
|
if newWearables > startingWearables then
|
|
easySettings.needWearableProtectionsUpdate = true
|
|
end
|
|
else
|
|
textBlock.Text = string.format("%s (%s)", TextManager.Get("wearableprotections").Value, TextManager.Get("invalidinput").Value)
|
|
end
|
|
end
|
|
local btn = GUI.Button(GUI.RectTransform(Vector2(1, 0.2), list.Content.RectTransform), TextManager.Get("resetdefault").Value, GUI.Alignment.Center, "GUIButtonSmall")
|
|
btn.OnClicked = function ()
|
|
RealSonar.Config.WearableProtections = defaultConfig.WearableProtections
|
|
File.Write(configPath, json.serialize(RealSonar.Config))
|
|
wearableProtections.Text = formatJsonTextBlock(json.serialize(RealSonar.Config.WearableProtections))
|
|
end
|
|
|
|
local textBlock = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), list.Content.RectTransform), "", nil, nil, GUI.Alignment.Center, true)
|
|
local sonarTerminals = MultiLineTextBox(list.Content.RectTransform, "", 0.2)
|
|
local warningText = ""
|
|
local startingTerminals = 0
|
|
local newTerminals = 0
|
|
for _ in RealSonar.Config.SonarTerminals do
|
|
startingTerminals = startingTerminals + 1
|
|
end
|
|
|
|
if not RealSonar.Config.CustomSonar then
|
|
warningText = TextManager.Get("requirescustomsonar").Value
|
|
end
|
|
textBlock.Text = string.format("%s %s", TextManager.Get("sonarterminals").Value, warningText)
|
|
sonarTerminals.Text = formatJsonTextBlock(json.serialize(RealSonar.Config.SonarTerminals))
|
|
sonarTerminals.OnTextChangedDelegate = function (textBox)
|
|
if pcall(json.parse, textBox.Text) then
|
|
RealSonar.Config.SonarTerminals = json.parse(textBox.Text)
|
|
easySettings.SaveTable(configPath, RealSonar.Config)
|
|
textBlock.Text = string.format("%s %s",TextManager.Get("sonarterminals").Value, warningText)
|
|
easySettings.needRangeUpdate = true
|
|
for _ in RealSonar.Config.SonarTerminals do
|
|
newTerminals = newTerminals + 1
|
|
end
|
|
if newTerminals > startingTerminals then
|
|
easySettings.needSonarItemsUpdate = true
|
|
end
|
|
else
|
|
textBlock.Text = string.format("%s %s (%s)", TextManager.Get("sonarterminals").Value, warningText, TextManager.Get("invalidinput").Value)
|
|
end
|
|
end
|
|
|
|
local btn = GUI.Button(GUI.RectTransform(Vector2(1, 0.2), list.Content.RectTransform), TextManager.Get("resetdefault").Value, GUI.Alignment.Center, "GUIButtonSmall")
|
|
btn.OnClicked = function ()
|
|
RealSonar.Config.SonarTerminals = defaultConfig.SonarTerminals
|
|
File.Write(configPath, json.serialize(RealSonar.Config))
|
|
sonarTerminals.Text = formatJsonTextBlock(json.serialize(RealSonar.Config.SonarTerminals))
|
|
easySettings.needRangeUpdate = true
|
|
end
|
|
|
|
end) |