Skip to content

Commit 254700c

Browse files
committed
internetradio: add buffer to volume slider
in order to prevent visual "desync" on scrollbar
1 parent 73ecb61 commit 254700c

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

[gameplay]/internetradio/logic/handle_radio/CHandleRadio.lua

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
local speakerSounds = {}
88
local playerSpeakers = {}
9+
local speakerVolumeSyncTimer = false
910

1011
local function getStreamURLFromEdit()
1112
local streamURL = guiGetText(RADIO_GUI["Stream URL edit"])
@@ -46,6 +47,34 @@ local function handleSpeakerOnStreamInOut(speakerElement, toggleOn)
4647
return false
4748
end
4849

50+
local function getLocalSpeakerVolume()
51+
local speakerVolume = guiScrollBarGetScrollPosition(RADIO_GUI["Volume"])
52+
local speakerVolumeValue = (speakerVolume/100)
53+
54+
return speakerVolumeValue
55+
end
56+
57+
local function syncSpeakerVolume()
58+
local speakerVolume = getLocalSpeakerVolume()
59+
60+
triggerServerEvent("onServerEditVolume", localPlayer, speakerVolume)
61+
speakerVolumeSyncTimer = false
62+
63+
return true
64+
end
65+
66+
local function requestSpeakerVolumeSync()
67+
if (speakerVolumeSyncTimer) then
68+
resetTimer(speakerVolumeSyncTimer)
69+
else
70+
local speakerTimerInterval = (RADIO_VOLUME_DELAY + 50) -- extra time to let server catch up
71+
72+
speakerVolumeSyncTimer = setTimer(syncSpeakerVolume, speakerTimerInterval, 1)
73+
end
74+
75+
return true
76+
end
77+
4978
function loadRadioStations()
5079
for stationID = 1, #RADIO_STATIONS do
5180
local radioStationData = RADIO_STATIONS[stationID]
@@ -151,14 +180,7 @@ function onClientGUIClickCreateSpeaker()
151180
end
152181

153182
function onClientGUIScrollVolume()
154-
local volume = guiScrollBarGetScrollPosition(RADIO_GUI["Volume"]) / 100
155-
local createDelayPassed = getOrSetPlayerDelay(localPlayer, "volume", RADIO_VOLUME_DELAY)
156-
157-
if (not createDelayPassed) then
158-
return false
159-
end
160-
161-
triggerServerEvent("onServerEditVolume", localPlayer, volume)
183+
requestSpeakerVolumeSync()
162184
end
163185

164186
function onClientGUIClickToggleSpeaker()
@@ -207,7 +229,7 @@ function setPlayerSpeakerData(playerElement, speakerData)
207229
local speakerBox = speakerData.speakerBox
208230
local speakerDummy = createObject(1337, 0, 0, 3)
209231
local speakerBoxDimension = getElementDimension(speakerBox)
210-
setElementDimension(speakerDummy, speakerBoxDimension)
232+
211233

212234
speakerData.speakerDummy = speakerDummy
213235
playerSpeakers[playerElement] = speakerData
@@ -216,6 +238,7 @@ function setPlayerSpeakerData(playerElement, speakerData)
216238

217239
setElementAlpha(speakerDummy, 0)
218240
setElementCollisionsEnabled(speakerDummy, false)
241+
setElementDimension(speakerDummy, speakerBoxDimension)
219242
attachElements(speakerDummy, speakerBox, -0.32, -0.22, 0.8)
220243

221244
return true
@@ -371,4 +394,4 @@ function clearSpeakersOnDestroyQuit()
371394
clearPlayerSpeaker(source)
372395
end
373396
addEventHandler("onClientPlayerQuit", root, clearSpeakersOnDestroyQuit)
374-
addEventHandler("onClientElementDestroy", resourceRoot, clearSpeakersOnDestroyQuit)
397+
addEventHandler("onClientElementDestroy", resourceRoot, clearSpeakersOnDestroyQuit)

0 commit comments

Comments
 (0)