Skip to content

Commit 165950a

Browse files
committed
Add ability to edit volume
1 parent 7514ace commit 165950a

File tree

4 files changed

+81
-10
lines changed

4 files changed

+81
-10
lines changed

[gameplay]/internetradio/config/ShRadioConfig.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
-- #######################################
66

77
RADIO_CREATE_SPEAKER_DELAY = 1000
8+
RADIO_VOLUME_DELAY = 200
89
RADIO_TOGGLE_SPEAKER_DELAY = 1500
910
RADIO_DESTROY_SPEAKER_DELAY = 1500
1011
RADIO_ALLOW_CUSTOM_URLS = true

[gameplay]/internetradio/logic/gui/CRadioGUI.lua

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,26 @@ local function initializeRadioGUI()
2020
RADIO_GUI["Radio window"] = guiCreateWindow(radioWindowPosX, radioWindowPosY, radioWindowSizeX, radioWindowSizeY, "SPEAKER MUSIC (RADIO/MP3)", false)
2121
RADIO_GUI["Stream URLs gridlist"] = guiCreateGridList(10, 54, 304, 139, false, RADIO_GUI["Radio window"])
2222
RADIO_GUI["Stream URL edit"] = guiCreateEdit(10, 25, 304, 26, "http://stream.antenne.de:80/80er-kulthits", false, RADIO_GUI["Radio window"])
23-
RADIO_GUI["Create speaker button"] = guiCreateButton(10, 200, 150, 30, "CREATE SPEAKER", false, RADIO_GUI["Radio window"])
24-
RADIO_GUI["Destroy speaker button"] = guiCreateButton(162, 200, 150, 30, "DESTROY SPEAKER", false, RADIO_GUI["Radio window"])
25-
RADIO_GUI["Play/pause button"] = guiCreateButton(10, 235, 150, 30, "Play - Pause", false, RADIO_GUI["Radio window"])
26-
RADIO_GUI["Close button"] = guiCreateButton(162, 235, 150, 30, "Close", false, RADIO_GUI["Radio window"])
23+
RADIO_GUI["Volume"] = guiCreateScrollBar(10, 200, 302, 20, true, false, RADIO_GUI["Radio window"])
24+
RADIO_GUI["Create speaker button"] = guiCreateButton(10, 230, 150, 30, "CREATE SPEAKER", false, RADIO_GUI["Radio window"])
25+
RADIO_GUI["Destroy speaker button"] = guiCreateButton(162, 230, 150, 30, "DESTROY SPEAKER", false, RADIO_GUI["Radio window"])
26+
RADIO_GUI["Play/pause button"] = guiCreateButton(10, 265, 150, 30, "Play - Pause", false, RADIO_GUI["Radio window"])
27+
RADIO_GUI["Close button"] = guiCreateButton(162, 265, 150, 30, "Close", false, RADIO_GUI["Radio window"])
2728

2829
RADIO_GUI["Toggle remote speakers checkbox"] = guiCreateCheckBox(15, 345, 180, 17, "Allow other players speakers", allowRemoteSpeakers, false, RADIO_GUI["Radio window"])
2930
RADIO_GUI["Toggle remote speakers label"] = guiCreateLabel(167, 345, 150, 17, "", false, RADIO_GUI["Radio window"])
3031
RADIO_GUI["Radio station URL column"] = guiGridListAddColumn(RADIO_GUI["Stream URLs gridlist"], "Radio station", 0.8)
31-
32+
3233
guiSetVisible(RADIO_GUI["Radio window"], false)
3334
guiEditSetMaxLength(RADIO_GUI["Stream URL edit"], RADIO_STREAM_URL_MAX_LENGTH)
3435
guiWindowSetSizable(RADIO_GUI["Radio window"], false)
3536
guiGridListSetSortingEnabled(RADIO_GUI["Stream URLs gridlist"], false)
36-
37+
guiScrollBarSetScrollPosition(RADIO_GUI["Volume"], 100)
38+
3739
loadRadioStations()
3840

3941
addEventHandler("onClientGUIClick", RADIO_GUI["Stream URLs gridlist"], onClientGUIClickLoadStationStreamURL, false)
42+
addEventHandler("onClientGUIScroll", RADIO_GUI["Volume"], onClientGUIScrollVolume, false)
4043
addEventHandler("onClientGUIClick", RADIO_GUI["Create speaker button"], onClientGUIClickCreateSpeaker, false)
4144
addEventHandler("onClientGUIClick", RADIO_GUI["Play/pause button"], onClientGUIClickToggleSpeaker, false)
4245
addEventHandler("onClientGUIClick", RADIO_GUI["Destroy speaker button"], onClientGUIClickDestroySpeaker, false)
@@ -77,4 +80,6 @@ function onClientResourceStartRadioGUI()
7780

7881
toggleRadioGUI()
7982
end
80-
addEventHandler("onClientResourceStart", resourceRoot, onClientResourceStartRadioGUI)
83+
addEventHandler("onClientResourceStart", resourceRoot, onClientResourceStartRadioGUI)
84+
85+
setTimer(toggleRadioGUI, 500, 1)

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

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ function toggleSpeakerSounds(playerElement, toggleOn)
9191
local speakerDimension = getElementDimension(speakerBox)
9292
local speakerSoundMaxDistance = speakerData.speakerSoundMaxDistance
9393
local speakerStreamURL = speakerData.speakerStreamURL
94+
local speakerVolume = speakerData.speakerVolume
9495
local speakerNewSound = playSound3D(speakerStreamURL, speakerBoxPosX, speakerBoxPosY, speakerBoxPosZ, true, false)
9596

9697
if (not speakerNewSound) then
@@ -106,7 +107,7 @@ function toggleSpeakerSounds(playerElement, toggleOn)
106107

107108
setSoundPaused(speakerNewSound, speakerPaused)
108109
setSoundMaxDistance(speakerNewSound, speakerSoundMaxDistance)
109-
setSoundVolume(speakerNewSound, 1)
110+
setSoundVolume(speakerNewSound, speakerVolume)
110111
attachElements(speakerNewSound, speakerBox)
111112
end
112113

@@ -130,6 +131,7 @@ end
130131

131132
function onClientGUIClickCreateSpeaker()
132133
local streamURL, errorCode = getStreamURLFromEdit()
134+
local volume = guiScrollBarGetScrollPosition(RADIO_GUI["Volume"]) / 100
133135

134136
if (not streamURL) then
135137
local textToDisplay = errorCode or "SPEAKER: Invalid URL, please check your input!"
@@ -145,7 +147,18 @@ function onClientGUIClickCreateSpeaker()
145147
return false
146148
end
147149

148-
triggerServerEvent("onServerCreateSpeaker", localPlayer, streamURL)
150+
triggerServerEvent("onServerCreateSpeaker", localPlayer, streamURL, volume)
151+
end
152+
153+
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)
149162
end
150163

151164
function onClientGUIClickToggleSpeaker()
@@ -208,6 +221,18 @@ function setPlayerSpeakerData(playerElement, speakerData)
208221
return true
209222
end
210223

224+
function setPlayerSpeakerVolume(playerElement, volume)
225+
local validElement = isElement(playerElement)
226+
local speakerSound = speakerSounds[playerElement]
227+
228+
if (not validElement or not speakerSound) then
229+
return false
230+
end
231+
232+
setSoundVolume(speakerSound, volume)
233+
return true
234+
end
235+
211236
function setPlayerSpeakerPaused(playerElement, pauseState)
212237
local playerSpeakerData = getPlayerSpeakerData(playerElement)
213238

@@ -319,6 +344,12 @@ end
319344
addEvent("onClientCreateSpeaker", true)
320345
addEventHandler("onClientCreateSpeaker", root, onClientCreateSpeaker)
321346

347+
function onClientUpdateVolume(volume)
348+
setPlayerSpeakerVolume(source, volume)
349+
end
350+
addEvent("onClientUpdateVolume", true)
351+
addEventHandler("onClientUpdateVolume", root, onClientUpdateVolume)
352+
322353
function onClientToggleSpeaker(pauseState)
323354
setPlayerSpeakerPaused(source, pauseState)
324355
end

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

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@ function setPlayerSpeakerData(playerElement, speakerData)
1919
return true
2020
end
2121

22+
function updateSpeakerVolume(playerElement, volume)
23+
local playerSpeakerData = getPlayerSpeakerData(playerElement)
24+
25+
if (not playerSpeakerData) then
26+
return false
27+
end
28+
29+
playerSpeakerData.speakerVolume = volume
30+
triggerClientEvent(root, "onClientUpdateVolume", playerElement, volume)
31+
end
32+
2233
function getPlayerSpeakerData(playerElement)
2334
local validElement = isElement(playerElement)
2435

@@ -74,7 +85,7 @@ function isObjectSpeaker(objectElement)
7485
return false
7586
end
7687

77-
function onServerCreateSpeaker(streamURL)
88+
function onServerCreateSpeaker(streamURL, volume)
7889
if (not client) then
7990
return false
8091
end
@@ -117,13 +128,36 @@ function onServerCreateSpeaker(streamURL)
117128
speakerStreamURL = streamURL,
118129
speakerSoundMaxDistance = RADIO_MAX_SOUND_DISTANCE,
119130
speakerPaused = false,
131+
speakerVolume = volume
120132
}
121133

122134
setPlayerSpeakerData(client, speakerData)
123135
end
124136
addEvent("onServerCreateSpeaker", true)
125137
addEventHandler("onServerCreateSpeaker", root, onServerCreateSpeaker)
126138

139+
function onServerEditVolume(volume)
140+
if (not client or client ~= source) then
141+
return false
142+
end
143+
144+
local createDelayPassed = getOrSetPlayerDelay(client, "volume", RADIO_VOLUME_DELAY)
145+
146+
if (not createDelayPassed) then
147+
return false
148+
end
149+
150+
local speakerData = playerSpeakers[client]
151+
152+
if (not speakerData or not speakerData.speakerBox) then
153+
return false
154+
end
155+
156+
updateSpeakerVolume(client, volume)
157+
end
158+
addEvent("onServerEditVolume", true)
159+
addEventHandler("onServerEditVolume", root, onServerEditVolume)
160+
127161
function onServerToggleSpeaker()
128162
if (not client) then
129163
return false

0 commit comments

Comments
 (0)