Big update

- Updated ALL models to use the new wait for bgm fadeout
- Finally update raw lua scripts, sorry
This commit is contained in:
Christopher Cookman 2024-08-09 00:21:31 -06:00
parent 4c6c7201bc
commit d0418a3e82
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42
8 changed files with 341 additions and 3 deletions

Binary file not shown.

172
Scripts/AllZones.lua Normal file
View file

@ -0,0 +1,172 @@
local system = script.Parent.Parent.Parent
local zones = {}
local mic = script.Parent.WallMic["Mic Enclosure"].AudioListener
local buttons = {}
local led = script.Parent.LED
local ptt = false
pttButton = script.Parent.WallMic["Mic Enclosure"].CD
local tones = {}
local thisTimeout = nil
local systemReady = true
local systemOverride = script.Parent.override.Value
local TweenService = game:GetService("TweenService")
local waiting = false
function smoothTransition(startValue, endValue, duration, updateFunction)
local finished = false
-- Create a temporary NumberValue to tween
local numberValue = Instance.new("NumberValue")
numberValue.Value = startValue
-- Create TweenInfo
local tweenInfo = TweenInfo.new(
duration, -- Duration of the tween
Enum.EasingStyle.Linear, -- Easing style
Enum.EasingDirection.InOut, -- Easing direction
0, -- Number of times to repeat
false, -- Whether to reverse the tween
0 -- Delay time before starting the tween
)
-- Create tween goal
local tweenGoal = {Value = endValue}
-- Create the tween
local tween = TweenService:Create(numberValue, tweenInfo, tweenGoal)
-- Connect the update function to the Changed event
local connection
connection = numberValue.Changed:Connect(function()
-- Call the update function with the current value
updateFunction(numberValue.Value)
end)
-- Play the tween
tween:Play()
-- Cleanup after tween completes
tween.Completed:Connect(function()
-- Ensure the final value is set to endValue
updateFunction(endValue)
-- Disconnect the event and remove the NumberValue instance
connection:Disconnect()
numberValue:Destroy()
finished = true
end)
repeat wait() until finished
finished = false
end
function checkZones()
while true do
systemReady = true
for i,e in pairs(zones) do
if e.ZoneInput.Wire.Connected then
if not systemOverride then
systemReady = false
end
end
end
if not ptt then
if not systemReady then
led.Material = Enum.Material.Neon
led.Color = Color3.new(1,0,0)
else
led.Material = Enum.Material.SmoothPlastic
led.Color = Color3.new(202/255, 203/255, 209/255)
end
end
wait(0)
end
end
function checkReady()
while true do
ready = true
for i,e in pairs(zones) do
local thisTone = tones[e.PageTone.Value]
if thisTone.TimeLength == 0 then
-- Empty audio, stop playing it
thisTone:Stop()
end
if thisTone.IsPlaying or waiting then
ready = false
end
end
if ready and ptt then
-- set led to green
led.Material = Enum.Material.Neon
led.Color = Color3.new(0,1,0)
elseif ptt then
-- set led to solid yellow
led.Material = Enum.Material.Neon
led.Color = Color3.new(1,1,0)
end
wait()
end
end
function togglePTT()
print(ready)
print("toggling ptt")
if ptt then
ptt = false
print("off")
thisTimeout = nil
for i,e in pairs(zones) do
task.spawn(function()
local thisTone = tones[zones[e.Name].EndTone.Value]
zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play()
wait(thisTone.TimeLength)
zones[e.Name].ZoneInput.Wire.SourceInstance = nil
smoothTransition(zones[e.Name].BGM.Volume,script.Parent.BGMUp.Value, 1, function(value)
zones[e.Name].BGM.Volume = value
end)
end)
end
else
if not systemReady then return end
ptt = true
for i,e in pairs(zones) do
task.spawn(function()
local thisTone = tones[zones[e.Name].PageTone.Value]
waiting = true
smoothTransition(zones[e.Name].BGM.Volume, script.Parent.BGMDown.Value, 1, function(value)
zones[e.Name].BGM.Volume = value
end)
waiting = false
zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play()
wait(thisTone.TimeLength)
if(ptt) then
-- We havent stopped PTT before page tone done, hit it
zones[e.Name].ZoneInput.Wire.SourceInstance = script.Parent.StationOutput
thisTimeout = math.random(1,1000000)
task.spawn(function()
local myTimeout = tonumber(tostring(thisTimeout))
wait(script.Parent.TimeoutSeconds.Value)
if myTimeout == thisTimeout then
togglePTT()
end
end)
end
end)
end
end
end
pttButton.MouseClick:Connect(function()
togglePTT()
end)
for i,e in ipairs(system.Zones:GetChildren()) do
zones[e.Name] = e
end
for i,e in ipairs(system.Tones:GetChildren()) do
tones[e.Name] = e
end
task.spawn(checkZones)
task.spawn(checkReady)

View file

@ -8,9 +8,11 @@ pttButton = script.Parent["Panel Mic"].mic.CD
local selectedZones = {} local selectedZones = {}
local tones = {} local tones = {}
local thisTimeout = nil local thisTimeout = nil
local waiting = false
local TweenService = game:GetService("TweenService") local TweenService = game:GetService("TweenService")
function smoothTransition(startValue, endValue, duration, updateFunction) function smoothTransition(startValue, endValue, duration, updateFunction)
local finished = false
-- Create a temporary NumberValue to tween -- Create a temporary NumberValue to tween
local numberValue = Instance.new("NumberValue") local numberValue = Instance.new("NumberValue")
numberValue.Value = startValue numberValue.Value = startValue
@ -48,7 +50,10 @@ function smoothTransition(startValue, endValue, duration, updateFunction)
-- Disconnect the event and remove the NumberValue instance -- Disconnect the event and remove the NumberValue instance
connection:Disconnect() connection:Disconnect()
numberValue:Destroy() numberValue:Destroy()
finished = true
end) end)
repeat wait() until finished
finished = false
end end
function toggleZone(zoneNumber) function toggleZone(zoneNumber)
@ -118,7 +123,7 @@ function checkReady()
-- Empty audio, stop playing it -- Empty audio, stop playing it
thisTone:Stop() thisTone:Stop()
end end
if thisTone.IsPlaying then if waiting or thisTone.IsPlaying then
leds[e.Name].Color = Color3.new(1,1,0) leds[e.Name].Color = Color3.new(1,1,0)
ready = false ready = false
else else
@ -139,6 +144,7 @@ function togglePTT()
thisTimeout = nil thisTimeout = nil
for i,e in pairs(selectedZones) do for i,e in pairs(selectedZones) do
task.spawn(function() task.spawn(function()
toggleZone(e.Name)
local thisTone = tones[zones[e.Name].EndTone.Value] local thisTone = tones[zones[e.Name].EndTone.Value]
zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play() thisTone:Play()
@ -160,9 +166,11 @@ function togglePTT()
for i,e in pairs(selectedZones) do for i,e in pairs(selectedZones) do
task.spawn(function() task.spawn(function()
local thisTone = tones[zones[e.Name].PageTone.Value] local thisTone = tones[zones[e.Name].PageTone.Value]
waiting = true
smoothTransition(zones[e.Name].BGM.Volume, script.Parent.BGMDown.Value, 1, function(value) smoothTransition(zones[e.Name].BGM.Volume, script.Parent.BGMDown.Value, 1, function(value)
zones[e.Name].BGM.Volume = value zones[e.Name].BGM.Volume = value
end) end)
waiting = false
zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play() thisTone:Play()
wait(thisTone.TimeLength) wait(thisTone.TimeLength)

View file

@ -9,8 +9,9 @@ local selectedZones = {}
local tones = {} local tones = {}
local thisTimeout = nil local thisTimeout = nil
local TweenService = game:GetService("TweenService") local TweenService = game:GetService("TweenService")
local waiting = false
function smoothTransition(startValue, endValue, duration, updateFunction) function smoothTransition(startValue, endValue, duration, updateFunction)
local finished = false
-- Create a temporary NumberValue to tween -- Create a temporary NumberValue to tween
local numberValue = Instance.new("NumberValue") local numberValue = Instance.new("NumberValue")
numberValue.Value = startValue numberValue.Value = startValue
@ -48,7 +49,10 @@ function smoothTransition(startValue, endValue, duration, updateFunction)
-- Disconnect the event and remove the NumberValue instance -- Disconnect the event and remove the NumberValue instance
connection:Disconnect() connection:Disconnect()
numberValue:Destroy() numberValue:Destroy()
finished = true
end) end)
repeat wait() until finished
finished = false
end end
function toggleZone(zoneNumber) function toggleZone(zoneNumber)
@ -118,7 +122,7 @@ function checkReady()
-- Empty audio, stop playing it -- Empty audio, stop playing it
thisTone:Stop() thisTone:Stop()
end end
if thisTone.IsPlaying then if waiting or thisTone.IsPlaying then
leds[e.Name].Color = Color3.new(1,1,0) leds[e.Name].Color = Color3.new(1,1,0)
ready = false ready = false
else else
@ -160,9 +164,11 @@ function togglePTT()
for i,e in pairs(selectedZones) do for i,e in pairs(selectedZones) do
task.spawn(function() task.spawn(function()
local thisTone = tones[zones[e.Name].PageTone.Value] local thisTone = tones[zones[e.Name].PageTone.Value]
waiting = true
smoothTransition(zones[e.Name].BGM.Volume, script.Parent.BGMDown.Value, 1, function(value) smoothTransition(zones[e.Name].BGM.Volume, script.Parent.BGMDown.Value, 1, function(value)
zones[e.Name].BGM.Volume = value zones[e.Name].BGM.Volume = value
end) end)
waiting = false
zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone zones[e.Name].ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play() thisTone:Play()
wait(thisTone.TimeLength) wait(thisTone.TimeLength)

152
Scripts/SingleStation.lua Normal file
View file

@ -0,0 +1,152 @@
local system = script.Parent.Parent.Parent
local mic = script.Parent.WallMic["Mic Enclosure"].AudioListener
local buttons = {}
local led = script.Parent.LED
local ptt = false
pttButton = script.Parent.WallMic["Mic Enclosure"].CD
local zones = {}
local tones = {}
local thisTimeout = nil
local TweenService = game:GetService("TweenService")
local waiting = false
function smoothTransition(startValue, endValue, duration, updateFunction)
local finished = false
-- Create a temporary NumberValue to tween
local numberValue = Instance.new("NumberValue")
numberValue.Value = startValue
-- Create TweenInfo
local tweenInfo = TweenInfo.new(
duration, -- Duration of the tween
Enum.EasingStyle.Linear, -- Easing style
Enum.EasingDirection.InOut, -- Easing direction
0, -- Number of times to repeat
false, -- Whether to reverse the tween
0 -- Delay time before starting the tween
)
-- Create tween goal
local tweenGoal = {Value = endValue}
-- Create the tween
local tween = TweenService:Create(numberValue, tweenInfo, tweenGoal)
-- Connect the update function to the Changed event
local connection
connection = numberValue.Changed:Connect(function()
-- Call the update function with the current value
updateFunction(numberValue.Value)
end)
-- Play the tween
tween:Play()
-- Cleanup after tween completes
tween.Completed:Connect(function()
-- Ensure the final value is set to endValue
updateFunction(endValue)
-- Disconnect the event and remove the NumberValue instance
connection:Disconnect()
numberValue:Destroy()
finished = true
end)
repeat wait() until finished
finished = false
end
for i, e in ipairs(system.Tones:GetChildren()) do tones[e.Name] = e end
for i, e in ipairs(system.Zones:GetChildren()) do zones[e.Name] = e end
local zone = zones[script.Parent.Zone.Value]
function checkZones()
while true do
if zone.ZoneInput.Wire.Connected and not ptt then
led.Material = Enum.Material.Neon
led.Color = Color3.new(1, 0, 0)
elseif not ptt then
led.Material = Enum.Material.SmoothPlastic
led.Color = Color3.new(163/255, 162/255, 165/255)
end
wait(0)
end
end
function checkReady()
local ready = true
while true do
if ptt then
ready = true
-- print("checking " .. zone)
led.Material = Enum.Material.Neon
local thisTone = tones[zone.PageTone.Value]
if thisTone.TimeLength == 0 then
-- Empty audio, stop playing it
thisTone:Stop()
end
if waiting or thisTone.IsPlaying then
led.Color = Color3.new(1, 1, 0)
ready = false
else
led.Color = Color3.new(0, 1, 0)
end
else
ready = false
end
wait()
end
end
function togglePTT()
-- print("toggling ptt")
if ptt then
ptt = false
thisTimeout = nil
-- print("off")
task.spawn(function()
local thisTone = tones[zone.EndTone.Value]
zone.ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play()
wait(thisTone.TimeLength)
zone.ZoneInput.Wire.SourceInstance = nil
smoothTransition(zone.BGM.Volume, script.Parent.BGMUp.Value, 1, function(value)
zone.BGM.Volume = value
end)
end)
else
if zone.ZoneInput.Wire.Connected then return end
ptt = true
task.spawn(function()
local thisTone = tones[zone.PageTone.Value]
waiting = true
smoothTransition(zone.BGM.Volume, script.Parent.BGMDown.Value, 1, function(value)
zone.BGM.Volume = value
end)
waiting = false
zone.ZoneInput.Wire.SourceInstance = thisTone
thisTone:Play()
wait(thisTone.TimeLength)
if (ptt) then
-- We havent stopped PTT before page tone done, hit it
zone.ZoneInput.Wire.SourceInstance = script.Parent.StationOutput
thisTimeout = math.random(1, 1000000)
task.spawn(function()
local myTimeout = tonumber(tostring(thisTimeout))
wait(script.Parent.TimeoutSeconds.Value)
if myTimeout == thisTimeout then
togglePTT()
end
end)
end
end)
end
end
pttButton.MouseClick:Connect(function() togglePTT() end)
task.spawn(checkReady)
task.spawn(checkZones)