Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions [gameplay]/internetradio/config/ShRadioConfig.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
-- #######################################

RADIO_CREATE_SPEAKER_DELAY = 1000
RADIO_VOLUME_DELAY = 200
RADIO_TOGGLE_SPEAKER_DELAY = 1500
RADIO_DESTROY_SPEAKER_DELAY = 1500
RADIO_ALLOW_CUSTOM_URLS = true
Expand Down
13 changes: 8 additions & 5 deletions [gameplay]/internetradio/logic/gui/CRadioGUI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,26 @@ local function initializeRadioGUI()
RADIO_GUI["Radio window"] = guiCreateWindow(radioWindowPosX, radioWindowPosY, radioWindowSizeX, radioWindowSizeY, "SPEAKER MUSIC (RADIO/MP3)", false)
RADIO_GUI["Stream URLs gridlist"] = guiCreateGridList(10, 54, 304, 139, false, RADIO_GUI["Radio window"])
RADIO_GUI["Stream URL edit"] = guiCreateEdit(10, 25, 304, 26, "http://stream.antenne.de:80/80er-kulthits", false, RADIO_GUI["Radio window"])
RADIO_GUI["Create speaker button"] = guiCreateButton(10, 200, 150, 30, "CREATE SPEAKER", false, RADIO_GUI["Radio window"])
RADIO_GUI["Destroy speaker button"] = guiCreateButton(162, 200, 150, 30, "DESTROY SPEAKER", false, RADIO_GUI["Radio window"])
RADIO_GUI["Play/pause button"] = guiCreateButton(10, 235, 150, 30, "Play - Pause", false, RADIO_GUI["Radio window"])
RADIO_GUI["Close button"] = guiCreateButton(162, 235, 150, 30, "Close", false, RADIO_GUI["Radio window"])
RADIO_GUI["Volume"] = guiCreateScrollBar(10, 200, 302, 20, true, false, RADIO_GUI["Radio window"])
RADIO_GUI["Create speaker button"] = guiCreateButton(10, 230, 150, 30, "CREATE SPEAKER", false, RADIO_GUI["Radio window"])
RADIO_GUI["Destroy speaker button"] = guiCreateButton(162, 230, 150, 30, "DESTROY SPEAKER", false, RADIO_GUI["Radio window"])
RADIO_GUI["Play/pause button"] = guiCreateButton(10, 265, 150, 30, "Play - Pause", false, RADIO_GUI["Radio window"])
RADIO_GUI["Close button"] = guiCreateButton(162, 265, 150, 30, "Close", false, RADIO_GUI["Radio window"])

RADIO_GUI["Toggle remote speakers checkbox"] = guiCreateCheckBox(15, 345, 180, 17, "Allow other players speakers", allowRemoteSpeakers, false, RADIO_GUI["Radio window"])
RADIO_GUI["Toggle remote speakers label"] = guiCreateLabel(167, 345, 150, 17, "", false, RADIO_GUI["Radio window"])
RADIO_GUI["Radio station URL column"] = guiGridListAddColumn(RADIO_GUI["Stream URLs gridlist"], "Radio station", 0.8)

guiSetVisible(RADIO_GUI["Radio window"], false)
guiEditSetMaxLength(RADIO_GUI["Stream URL edit"], RADIO_STREAM_URL_MAX_LENGTH)
guiWindowSetSizable(RADIO_GUI["Radio window"], false)
guiGridListSetSortingEnabled(RADIO_GUI["Stream URLs gridlist"], false)
guiScrollBarSetScrollPosition(RADIO_GUI["Volume"], 100)

loadRadioStations()

addEventHandler("onClientGUIClick", RADIO_GUI["Stream URLs gridlist"], onClientGUIClickLoadStationStreamURL, false)
addEventHandler("onClientGUIScroll", RADIO_GUI["Volume"], onClientGUIScrollVolume, false)
addEventHandler("onClientGUIClick", RADIO_GUI["Create speaker button"], onClientGUIClickCreateSpeaker, false)
addEventHandler("onClientGUIClick", RADIO_GUI["Play/pause button"], onClientGUIClickToggleSpeaker, false)
addEventHandler("onClientGUIClick", RADIO_GUI["Destroy speaker button"], onClientGUIClickDestroySpeaker, false)
Expand Down
36 changes: 34 additions & 2 deletions [gameplay]/internetradio/logic/handle_radio/CHandleRadio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ function toggleSpeakerSounds(playerElement, toggleOn)
local speakerDimension = getElementDimension(speakerBox)
local speakerSoundMaxDistance = speakerData.speakerSoundMaxDistance
local speakerStreamURL = speakerData.speakerStreamURL
local speakerVolume = speakerData.speakerVolume
local speakerNewSound = playSound3D(speakerStreamURL, speakerBoxPosX, speakerBoxPosY, speakerBoxPosZ, true, false)

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

setSoundPaused(speakerNewSound, speakerPaused)
setSoundMaxDistance(speakerNewSound, speakerSoundMaxDistance)
setSoundVolume(speakerNewSound, 1)
setSoundVolume(speakerNewSound, speakerVolume)
attachElements(speakerNewSound, speakerBox)
end

Expand All @@ -130,6 +131,7 @@ end

function onClientGUIClickCreateSpeaker()
local streamURL, errorCode = getStreamURLFromEdit()
local volume = guiScrollBarGetScrollPosition(RADIO_GUI["Volume"]) / 100

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

triggerServerEvent("onServerCreateSpeaker", localPlayer, streamURL)
triggerServerEvent("onServerCreateSpeaker", localPlayer, streamURL, volume)
end

function onClientGUIScrollVolume()
local volume = guiScrollBarGetScrollPosition(RADIO_GUI["Volume"]) / 100
local createDelayPassed = getOrSetPlayerDelay(localPlayer, "volume", RADIO_VOLUME_DELAY)

if (not createDelayPassed) then
return false
end

triggerServerEvent("onServerEditVolume", localPlayer, volume)
end

function onClientGUIClickToggleSpeaker()
Expand Down Expand Up @@ -208,6 +221,19 @@ function setPlayerSpeakerData(playerElement, speakerData)
return true
end

function setPlayerSpeakerVolume(playerElement, volume)
local validElement = isElement(playerElement)
local speakerSound = speakerSounds[playerElement]

if (not validElement or not speakerSound) then
return false
end

setSoundVolume(speakerSound, volume)

return true
end

function setPlayerSpeakerPaused(playerElement, pauseState)
local playerSpeakerData = getPlayerSpeakerData(playerElement)

Expand Down Expand Up @@ -319,6 +345,12 @@ end
addEvent("onClientCreateSpeaker", true)
addEventHandler("onClientCreateSpeaker", root, onClientCreateSpeaker)

function onClientUpdateVolume(volume)
setPlayerSpeakerVolume(source, volume)
end
addEvent("onClientUpdateVolume", true)
addEventHandler("onClientUpdateVolume", root, onClientUpdateVolume)

function onClientToggleSpeaker(pauseState)
setPlayerSpeakerPaused(source, pauseState)
end
Expand Down
48 changes: 47 additions & 1 deletion [gameplay]/internetradio/logic/handle_radio/SHandleRadio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,17 @@ function setPlayerSpeakerData(playerElement, speakerData)
return true
end

function updateSpeakerVolume(playerElement, volume)
local playerSpeakerData = getPlayerSpeakerData(playerElement)

if (not playerSpeakerData) then
return false
end

playerSpeakerData.speakerVolume = volume
triggerClientEvent(root, "onClientUpdateVolume", playerElement, volume)
end

function getPlayerSpeakerData(playerElement)
local validElement = isElement(playerElement)

Expand Down Expand Up @@ -74,7 +85,7 @@ function isObjectSpeaker(objectElement)
return false
end

function onServerCreateSpeaker(streamURL)
function onServerCreateSpeaker(streamURL, volume)
if (not client) then
return false
end
Expand All @@ -91,6 +102,12 @@ function onServerCreateSpeaker(streamURL)
return false
end

local validVolume = verifyRadioVolume(volume)

if (not validVolume) then
return false
end

clearPlayerSpeaker(client, true)

local playerPosX, playerPosY, playerPosZ = getElementPosition(client)
Expand All @@ -117,13 +134,42 @@ function onServerCreateSpeaker(streamURL)
speakerStreamURL = streamURL,
speakerSoundMaxDistance = RADIO_MAX_SOUND_DISTANCE,
speakerPaused = false,
speakerVolume = volume
}

setPlayerSpeakerData(client, speakerData)
end
addEvent("onServerCreateSpeaker", true)
addEventHandler("onServerCreateSpeaker", root, onServerCreateSpeaker)

function onServerEditVolume(volume)
if (not client or client ~= source) then
return false
end

local createDelayPassed = getOrSetPlayerDelay(client, "volume", RADIO_VOLUME_DELAY)

if (not createDelayPassed) then
return false
end

local validVolume = verifyRadioVolume(volume)

if (not validVolume) then
return false
end

local speakerData = playerSpeakers[client]

if (not speakerData) then
return false
end

updateSpeakerVolume(client, volume)
end
addEvent("onServerEditVolume", true)
addEventHandler("onServerEditVolume", root, onServerEditVolume)

function onServerToggleSpeaker()
if (not client) then
return false
Expand Down
17 changes: 16 additions & 1 deletion [gameplay]/internetradio/logic/handle_radio/ShHandleRadio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -127,4 +127,19 @@ end
function clearPlayersDelay()
playerDelays[source] = nil
end
addEventHandler(isServer and "onPlayerQuit" or "onClientPlayerQuit", root, clearPlayersDelay)
addEventHandler(isServer and "onPlayerQuit" or "onClientPlayerQuit", root, clearPlayersDelay)

function verifyRadioVolume(radioVolume)
local radioVolumeType = type(radioVolume)
local radioVolumeNumber = (radioVolumeType == "number")

if (not radioVolumeNumber) then
return false
end

local radioVolumeMin = 0
local radioVolumeMax = 1
local radioVolumeInRange = (radioVolume >= radioVolumeMin) and (radioVolume <= radioVolumeMax)

return radioVolumeInRange
end