Skip to content

Commit 73ecb61

Browse files
omar-o22sacr1ficez
andauthored
internetradio: Add ability to edit volume (#691)
* Add ability to edit volume * Removes useless codes I added toggleRadioGUI for testing and forget to remove it before push * Add ability to edit volume * Removes useless codes I added toggleRadioGUI for testing and forget to remove it before push * fixes * fixes Idk what happend maybe when i did pull * Update [gameplay]/internetradio/logic/handle_radio/CHandleRadio.lua Co-authored-by: sacr1ficez <[email protected]> --------- Co-authored-by: sacr1ficez <[email protected]>
1 parent 715ee57 commit 73ecb61

File tree

5 files changed

+106
-9
lines changed

5 files changed

+106
-9
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: 8 additions & 5 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)
37+
guiScrollBarSetScrollPosition(RADIO_GUI["Volume"], 100)
3638

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)

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

Lines changed: 34 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,19 @@ 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+
234+
return true
235+
end
236+
211237
function setPlayerSpeakerPaused(playerElement, pauseState)
212238
local playerSpeakerData = getPlayerSpeakerData(playerElement)
213239

@@ -319,6 +345,12 @@ end
319345
addEvent("onClientCreateSpeaker", true)
320346
addEventHandler("onClientCreateSpeaker", root, onClientCreateSpeaker)
321347

348+
function onClientUpdateVolume(volume)
349+
setPlayerSpeakerVolume(source, volume)
350+
end
351+
addEvent("onClientUpdateVolume", true)
352+
addEventHandler("onClientUpdateVolume", root, onClientUpdateVolume)
353+
322354
function onClientToggleSpeaker(pauseState)
323355
setPlayerSpeakerPaused(source, pauseState)
324356
end

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

Lines changed: 47 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
@@ -91,6 +102,12 @@ function onServerCreateSpeaker(streamURL)
91102
return false
92103
end
93104

105+
local validVolume = verifyRadioVolume(volume)
106+
107+
if (not validVolume) then
108+
return false
109+
end
110+
94111
clearPlayerSpeaker(client, true)
95112

96113
local playerPosX, playerPosY, playerPosZ = getElementPosition(client)
@@ -117,13 +134,42 @@ function onServerCreateSpeaker(streamURL)
117134
speakerStreamURL = streamURL,
118135
speakerSoundMaxDistance = RADIO_MAX_SOUND_DISTANCE,
119136
speakerPaused = false,
137+
speakerVolume = volume
120138
}
121139

122140
setPlayerSpeakerData(client, speakerData)
123141
end
124142
addEvent("onServerCreateSpeaker", true)
125143
addEventHandler("onServerCreateSpeaker", root, onServerCreateSpeaker)
126144

145+
function onServerEditVolume(volume)
146+
if (not client or client ~= source) then
147+
return false
148+
end
149+
150+
local createDelayPassed = getOrSetPlayerDelay(client, "volume", RADIO_VOLUME_DELAY)
151+
152+
if (not createDelayPassed) then
153+
return false
154+
end
155+
156+
local validVolume = verifyRadioVolume(volume)
157+
158+
if (not validVolume) then
159+
return false
160+
end
161+
162+
local speakerData = playerSpeakers[client]
163+
164+
if (not speakerData) then
165+
return false
166+
end
167+
168+
updateSpeakerVolume(client, volume)
169+
end
170+
addEvent("onServerEditVolume", true)
171+
addEventHandler("onServerEditVolume", root, onServerEditVolume)
172+
127173
function onServerToggleSpeaker()
128174
if (not client) then
129175
return false

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,19 @@ end
127127
function clearPlayersDelay()
128128
playerDelays[source] = nil
129129
end
130-
addEventHandler(isServer and "onPlayerQuit" or "onClientPlayerQuit", root, clearPlayersDelay)
130+
addEventHandler(isServer and "onPlayerQuit" or "onClientPlayerQuit", root, clearPlayersDelay)
131+
132+
function verifyRadioVolume(radioVolume)
133+
local radioVolumeType = type(radioVolume)
134+
local radioVolumeNumber = (radioVolumeType == "number")
135+
136+
if (not radioVolumeNumber) then
137+
return false
138+
end
139+
140+
local radioVolumeMin = 0
141+
local radioVolumeMax = 1
142+
local radioVolumeInRange = (radioVolume >= radioVolumeMin) and (radioVolume <= radioVolumeMax)
143+
144+
return radioVolumeInRange
145+
end

0 commit comments

Comments
 (0)