mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
146
gamemodes/darkrp/plugins/ln_songplayer/cl_plugin.lua
Normal file
146
gamemodes/darkrp/plugins/ln_songplayer/cl_plugin.lua
Normal file
@@ -0,0 +1,146 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
local medialib = include("libs/cl_medialib.lua")
|
||||
|
||||
local volConVarName = "ix_lnsongplayer_volume"
|
||||
PLUGIN.songVolume = CreateClientConVar(volConVarName, "50", true)
|
||||
|
||||
cvars.AddChangeCallback(volConVarName, function(cvarName, oldVal, newVal)
|
||||
if (IsValid(PLUGIN.mediaclip)) then
|
||||
PLUGIN.mediaclip:setVolume(newVal / 100)
|
||||
end
|
||||
end)
|
||||
|
||||
function PLUGIN:FetchVideoInfo(id, callback)
|
||||
if (IsValid(medialib)) then
|
||||
medialib:stop()
|
||||
end
|
||||
|
||||
if (IsValid(self.mediaclip)) then
|
||||
self.mediaclip:stop()
|
||||
end
|
||||
|
||||
local service = medialib.load("media").guessService(id)
|
||||
|
||||
if (service) then
|
||||
self.mediaclip = service:load(id)
|
||||
|
||||
service:query(id, function(err, data)
|
||||
if (err) then
|
||||
return
|
||||
end
|
||||
|
||||
callback(data, self.mediaclip)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:Play(id, offset)
|
||||
offset = offset or 0
|
||||
|
||||
if (IsValid(self.ui.panel)) then
|
||||
self.ui.panel:Remove()
|
||||
end
|
||||
|
||||
self.ui.panel = vgui.Create("ixSongPlayer")
|
||||
|
||||
self.startTime = 0
|
||||
self.currentSongDuration = 0
|
||||
|
||||
self.ui.panel:SetLoading(true)
|
||||
self.ui.panel:SetTitle("Loading song...")
|
||||
|
||||
if (!self.ui.panel:IsVisible()) then
|
||||
self.ui.panel:FadeIn()
|
||||
end
|
||||
|
||||
self:FetchVideoInfo(id, function(data, mediaclip)
|
||||
if (data) then
|
||||
self.currentTitle = data.title
|
||||
self.offsetTime = offset
|
||||
|
||||
if (IsValid(self.ui.panel)) then
|
||||
local time = string.FormattedTime(data.duration)
|
||||
local title = string.format("%s [%s]", data.title or "unknown", string.format("%i:%i", time.m, time.s))
|
||||
|
||||
self.ui.panel:SetTitle(title)
|
||||
self.ui.panel:SetLoading(false)
|
||||
end
|
||||
|
||||
timer.Simple(data.duration, function()
|
||||
if (!IsValid(self.ui.panel)) then
|
||||
return
|
||||
end
|
||||
|
||||
self.ui.panel:FadeOut()
|
||||
end)
|
||||
|
||||
self.startTime = CurTime() - self.offsetTime
|
||||
self.currentSongDuration = data.duration
|
||||
|
||||
mediaclip:play()
|
||||
mediaclip:seek(offset or 0)
|
||||
mediaclip:setVolume(self.songVolume:GetInt() / 100)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
net.Receive("lnSongPlayerPlay", function()
|
||||
local url = net.ReadString()
|
||||
local time = net.ReadFloat()
|
||||
|
||||
PLUGIN:Play(url, time)
|
||||
end)
|
||||
|
||||
net.Receive("lnSongPlayerStop", function()
|
||||
if (IsValid(PLUGIN.ui.panel)) then
|
||||
PLUGIN.ui.panel:FadeOut()
|
||||
end
|
||||
|
||||
if (IsValid(PLUGIN.mediaclip)) then
|
||||
PLUGIN.mediaclip:stop()
|
||||
end
|
||||
end)
|
||||
|
||||
function draw.Circle(x, y, radius, segments)
|
||||
local p = {}
|
||||
|
||||
table.insert(p, {
|
||||
x = x,
|
||||
y = y,
|
||||
u = 0.5,
|
||||
v = 0.5
|
||||
})
|
||||
|
||||
for i = 0, segments do
|
||||
local ang = math.rad((i/segments) * -360)
|
||||
table.insert(p, {
|
||||
x = x + math.sin(ang) * radius,
|
||||
y = y + math.cos(ang) * radius,
|
||||
u = math.sin(ang) / 2 + 0.5,
|
||||
v = math.cos(ang) / 2 + 0.5
|
||||
})
|
||||
end
|
||||
|
||||
local ang = math.rad(0)
|
||||
|
||||
table.insert(p, {
|
||||
x = x + math.sin(ang) * radius,
|
||||
y = y + math.cos(ang) * radius,
|
||||
u = math.sin(ang) / 2 + 0.5,
|
||||
v = math.cos(ang) / 2 + 0.5
|
||||
})
|
||||
|
||||
surface.DrawPoly(p)
|
||||
end
|
||||
Reference in New Issue
Block a user