- # Designed by
- # _____ _
- # | __ | |
- # | | | | __ _ _ __ | | __ _ _
- # | | | | / _` || '__|| |/ /| | | |
- # | |__| || (_| || | | < | |_| |
- # |_____/ __,_||_| |_|_ __, |
- # __/ |
- # |___/
- #
- # https://steamcommunity.com/id/dark80dark/
- # Code - Asummonster
- @name Midi MusicBox
- @inputs [A B C D E F G H EGP ProgressBar DHDD]:wirelink Reset [EGPEntity Ent ToWorld]:entity DHDD_Data:array
- @outputs Play Sheets2Play:array Buffer:table Speed_Multiply SongsCount Duration Page Buttons:table Privacy PageTotal Spinning:angle Spin LastTiming Shuffle Repeat DHDD_toWrite:array DHDD_AllowWrite FileList:table DHDD_Dump:array Owners:table
- @persist LoadingComplete NotifyPipeline:table DSGroup:string Radio_Enabled Scroll_StopOn Speed_Multiply SongsCount OwnersCount OwnerInfo:string OnPageNames:table Duration Page PageTotal LastSelected_Page DHDD_Cache:array First FLASHMODE MOD_MENU FLASHMODEFIRST FileListTemp:array Shuffle DHDD_Data:array Repeat LastSelected:string LastSelectedPos:vector2 Notes:table Path:string Sheets:string LastTiming Instruments:array CurrInstr Privacy Buffer:table Tempo FileList:table Buttons:table ButtonsSongs:table Volume PlayStat DHDD_Dump:array Owners:table
- if (first() | dupefinished()) {
- Scroll_StopOn = 30
- EGP:egpClear()
- EGP:egpBox(1, vec2(256), vec2(512))
- EGP:egpColor(1, vec(40))
- EGP:egpText(2, "Loading...", vec2(256))
- EGP:egpAlign(2, 1, 1)
- EGP:egpSize(2, 65)
- EGP:egpText(3, "Please wait", vec2(256, 296))
- EGP:egpAlign(3, 1, 1)
- EGP:egpSize(3, 30)
- EGP:egpText(4, "The more songs the longer loading", vec2(256, 326))
- EGP:egpAlign(4, 1, 1)
- EGP:egpSize(4, 30)
- EGP:egpBox(6, vec2(256, 370), vec2(404, 39))
- EGP:egpColor(6, vec())
- FileList = table()
- First = 0
- DHDD_Cache = DHDD_Data
- Speed_Multiply = DHDD_Data[1488, string]:toNumber()
- SongsCount = DHDD_Data[1489, string]:toNumber()
- OwnersCount = DHDD_Data[1600, string]:toNumber()
- OwnerInfo = DHDD_Data[1600+OwnersCount, string]
- DHDD_toWrite = DHDD_Data
- timer("loadlist", 10)
- runOnFile(1)
- runOnList(1)
- runOnChat(1)
- }
- if (clkName()=="loadlist") {
- if (EGP:egpPos(255)!=vec2(-1)) {reset()}
- EGP:egpBox(5, vec2(56+((FileList:count()/2)*(400/SongsCount)), 370), vec2(FileList:count()*(400/SongsCount), 35))
- EGP:egpColor(5, vec(120))
- EGP:egpText(7, FileList:count()+"/"+SongsCount, vec2(256, 370))
- EGP:egpAlign(7, 1, 1)
- EGP:egpSize(7, 25)
- EGP:egpColor(7, vec(250,128,0))
- foreach (DHDD_Cell_Address, DHDD_Cell:string = DHDD_Cache) {
- if (DHDD_Cell_Address>SongsCount) {break}
- DHDD_DC = jsonDecode(DHDD_Cell)
- FileName = DHDD_DC["name", string]
- FileName = FileName:replace("_", " ")
- FileName = FileName:replace(".mid", "")
- FileName = FileName:replace(".midi", "")
- FileName = FileName:sub(0, FileName:length()-4)
- FileDuration = DHDD_DC["duration", number]
- DC_Sheets = DHDD_DC["music", string]
- FileList[FileName, table] = table(
- "duration" = FileDuration,
- "music" = DC_Sheets
- )
- Iteration = 1
- DHDD_Cache:remove(DHDD_Cell_Address)
- break
- }
- if (!Iteration) {
- LoadingComplete = 1
- }else {
- timer("loadlist", 0.01*ops())
- }
- }
- if (LoadingComplete & !First){
- Volume = DHDD_Data[1490, string]:toNumber()
- Privacy = DHDD_Data[1491, string]:toNumber()
- DSGroup = DHDD_Data[1500, string]
- First = 1
- Page = 1
- PageTotal = ceil(FileList:count()/6)
- ProgressBar:egpClear()
- ProgressBar:egpDrawTopLeft(1)
- ProgressBar:egpBox(1, vec2(), vec2(512))
- ProgressBar:egpColor(1, vec(100))
- function array encodeString(Str:string)
- {
- local Arr = array()
- for (N = 1, Str:length())
- {
- Arr:insertNumber(Arr:count()+1, toByte(Str, N))
- }
- return Arr
- }
- function string decodeString(Arr:array)
- {
- local Str = ""
- for (N = 1, Arr:count())
- {
- Str+=toChar(Arr:number(N))
- }
- return Str
- }
- function string safeStringEncode(Str:string)
- {
- return vonEncode(encodeString(Str))
- }
- function string safeStringDecode(Str:string)
- {
- return decodeString(vonDecode(Str))
- }
- function addToDHDD(Str:string) {
- DHDD_Dump = DHDD_Data
- DHDD_Dump:insertString(DHDD_Dump:count()+1, Str)
- DHDD_AllowWrite=1
- timer("completewriteoperation", 100)
- }
- function writeToAddress(Address, Data:string) {
- DHDD_Dump = DHDD_Data
- DHDD_Dump[Address, string] = Data
- DHDD_AllowWrite=1
- timer("completewriteoperation", 100)
- }
- if (OwnersCount==0) {
- OwnersCount++
- OwnerInfo=safeStringEncode(owner():steamID()+" ; "+owner():name())
- writeToAddress(1600, OwnersCount:toString())
- writeToAddress(1600+OwnersCount, OwnerInfo)
- }
- local OWInfoArr = safeStringDecode(OwnerInfo):explode(" ; ")
- local SID = OWInfoArr:string(1)
- if (SID!=owner():steamID()) {
- OwnersCount++
- OwnerInfo=safeStringEncode(owner():steamID()+" ; "+owner():name())
- writeToAddress(1600, OwnersCount:toString())
- writeToAddress(1600+OwnersCount, OwnerInfo)
- }
- function number getDuration(Str:string) {
- ExplodeResult = Str:explode("n")
- LastLine = ExplodeResult[ExplodeResult:count()-1, string]
- return LastLine:matchFirst("%d*.%d*"):toNumber()
- }
- function clearButtonsByType(Target:string) {
- ButtonsSongs:clear()
- }
- function printOwners() {
- local Buff = ""
- for (Pointer = 1601, 1600+OwnersCount) {
- Buff+=safeStringDecode(DHDD_Data:string(Pointer))+" -> "
- }
- print(Buff)
- }
- function redrawSoundBar() {
- EGP:egpBox(255, vec2(256, 447), vec2(410, 30))
- EGP:egpColor(255, vec(100))
- EGP:egpBox(256, vec2(56+Volume*404/200, 447), vec2(404/100*Volume, 24))
- EGP:egpColor(256, vec(220, 220, 220))
- if(Volume==0){
- EGP:egpText(298,"Muted",vec2(256,445))
- EGP:egpSize(298,25)
- EGP:egpAlign(298,1,1)
- }else{
- EGP:egpRemove(298)
- }
- }
- function redrawProgressBar() {
- ProgressBar:egpBox(2, vec2(4), vec2(504 / Duration * LastTiming, 504))
- ProgressBar:egpColor(2, vec(220))
- }
- function visPrivacyStatus() {
- if (Privacy==1) {
- EGP:egpSetText(229, "Privacy Mode")
- }
- else {
- EGP:egpSetText(229,"Public Mode")
- }
- }
- function processNamesScrolling() {
- if (FLASHMODE) {return}
- foreach (ID, Obj:table = OnPageNames) {
- ObjID = ID:toNumber()
- if (Obj["NeedScroll", number]) {
- if (Obj["CurChar", number]<Obj["StopOn", number]) {
- Obj["CurChar", number] = Obj["CurChar", number] + 1
- }else {
- Obj["CurChar", number] = 0
- }
- EGP:egpText(ObjID, Obj["Text", string]:sub(Obj["CurChar", number], Obj["CurChar", number]+Scroll_StopOn), Obj["Pos", vector2])
- EGP:egpAlign(ObjID, 1, 1)
- EGP:egpColor(ObjID, vec(255))
- EGP:egpSize(ObjID, 30)
- }
- }
- timer("processscrolling", 350)
- }
- function string string:readLineR() {
- NL = This:find("n")
- Str = This:sub(1, NL)
- Sheets = This:sub(NL+1, This:length())
- return Str
- }
- function string string:readLine() {
- NL = This:find("n")
- Str = This:sub(1, NL)
- return Str
- }
- function setPlayingNow(Center:vector2) {
- EGP:egpPos(228, Center)
- }
- function createButton(LeftTopPos:vector2, RightBottomPos:vector2, Center:vector2, Callback:string, Type:string) {
- if (Type=="song") {
- ButtonsSongs[ButtonsSongs:count()+1, table] = table(
- "LT" = LeftTopPos,
- "RB" = RightBottomPos,
- "CB" = Callback,
- "Center" = Center,
- "Type" = Type
- )
- }else {
- Buttons[Buttons:count()+1, table] = table(
- "LT" = LeftTopPos,
- "RB" = RightBottomPos,
- "CB" = Callback,
- "Center" = Center,
- "Type" = Type
- )
- }
- }
- function radioSend(Event:string, Data:number) {
- dsSend(Event, DSGroup, 2, Data)
- }
- function radioSend(Event:string, Data:table) {
- dsSend(Event, DSGroup, 2, Data)
- }
- function radioSend(Event:string, Data:string) {
- dsSend(Event, DSGroup, 2, Data)
- }
- function wirelink:drawSelector() {
- StartFrom = Page*6-5
- IterationCounter = 0
- ObjID=2
- YStart=50
- clearButtonsByType("song")
- OnPageNames:clear()
- stoptimer("processscrolling")
- for (TempID=2, 20) {
- EGP:egpPos(TempID, vec2(1000))
- }
- foreach(Name, Data:table = FileList) {
- IterationCounter++
- if (IterationCounter<StartFrom) {continue}
- if (IterationCounter>StartFrom+5) {
- break
- }
- ObjID++
- This:egpBox(ObjID, vec2(256, YStart), vec2(444, 44))
- This:egpColor(ObjID, vec(250,128,0))
- ObjID++
- This:egpBox(ObjID, vec2(256, YStart), vec2(440, 40))
- This:egpColor(ObjID, vec(80))
- ObjID++
- This:egpText(ObjID, Name, vec2(256, YStart))
- This:egpAlign(ObjID, 1, 1)
- This:egpColor(ObjID, vec(255))
- This:egpSize(ObjID, 30)
- OnPageNames[ObjID:toString(), table] = table(
- "NeedScroll" = (Name:length()/Scroll_StopOn+2>1),
- "CurChar" = 0,
- "StopOn" = Name:length()-Scroll_StopOn+3,
- "Text" = Name,
- "Pos" = vec2(256, YStart)
- )
- createButton(vec2(256-(444/2), YStart-(44/2)), vec2(256+(444/2), YStart+(44/2)), vec2(256, YStart), "play||"+Name, "song")
- YStart+=50
- }
- processNamesScrolling()
- }
- function wirelink:egpInitSelector() {
- This:egpClear()
- This:egpBox(1, vec2(256), vec2(512))
- This:egpColor(1, vec(40))
- This:egpRoundedBox(228, vec2(1024), vec2(488, 36))
- This:egpColor(228, vec(200,98,0))
- #privacy
- This:egpText(229,"", vec2(256, 490))
- This:egpAlign(229,1,1)
- This:egpSize(229,30)
- createButton(vec2(256-90, 480-35), vec2(256+90, 480+35), vec2(256, 480), "privacy||changeprivacy", "controls")
- #soundControls
- EGP:egpText(120,httpUrlDecode(""),vec2(256,355))
- EGP:egpAlign(120, 1, 1)
- EGP:egpSize(120,150)
- createButton(vec2(256-35, 380-35), vec2(256+35, 380+35), vec2(256, 380), "playpause||changeplay", "controls")
- EGP:egpText(121, httpUrlDecode("%E2%86%BB"), vec2(256-75,385))
- EGP:egpAlign(121, 1, 1)
- EGP:egpSize(121, 75)
- createButton(vec2(256-75,385)+vec2(-35), vec2(256-75,385)+vec2(35), vec2(256-75,385), "repeat||", "controls")
- EGP:egpBox(156, vec2(256-130,385), vec2(50))
- EGP:egpMaterial(156, "nxrp/icons8_64t/icons8-radio-tower-64.png")
- createButton(vec2(256-130,385)+vec2(-25), vec2(256-130,385)+vec2(25), vec2(256-130,385), "radio||", "controls")
- EGP:egpText(125, httpUrlDecode("%E2%86%98"), vec2(256+75,385))
- EGP:egpAlign(125, 1, 1)
- EGP:egpSize(125, 75)
- EGP:egpAngle(125,7)
- EGP:egpText(122, httpUrlDecode("%E2%86%97"), vec2(256+75,385))
- EGP:egpAlign(122, 1, 1)
- EGP:egpSize(122, 75)
- createButton(vec2(256+75,385)+vec2(-35), vec2(256+75,385)+vec2(35), vec2(256+75,385), "shuffle||", "controls")
- EGP:egpAngle(122,-7)
- ##Pages
- EGP:egpText(123, httpUrlDecode("%E2%87%A6"), vec2(256-195,365))
- EGP:egpAlign(123, 1, 1)
- EGP:egpSize(123, 75)
- createButton(vec2(256-195,365)+vec2(-35), vec2(256-195,365)+vec2(35), vec2(256-195,365), "page||prev", "controls")
- EGP:egpText(124, httpUrlDecode("%E2%87%A8"), vec2(256+195,365))
- EGP:egpAlign(124, 1, 1)
- EGP:egpSize(124, 75)
- createButton(vec2(256+195,365)+vec2(-35), vec2(256+195,365)+vec2(35), vec2(256+195,365), "page||next", "controls")
- This:egpText(257, "-",vec2(25, 447))
- This:egpAlign(257,1,1)
- This:egpSize(257,30)
- createButton(vec2(25-13, 447-13), vec2(25+13, 447+13), vec2(45, 457), "volumechange||hush", "controls")
- This:egpText(258, "+",vec2(487, 447))
- This:egpAlign(258,1,1)
- This:egpSize(258,30)
- createButton(vec2(487-13, 447-13), vec2(487+13, 447+13), vec2(487, 447), "volumechange||louder", "controls")
- This:egpBox(135, vec2(8, 504), vec2(16))
- This:egpMaterial(135, "icon16/cd_burn.png")
- createButton(vec2(8-8, 504-8), vec2(8+8, 504+8), vec2(8, 504), "flashmode||enable", "controls")
- ButtonsBackup = Buttons
- This:drawSelector()
- #Cursor
- This:egpCircle(295, vec2(), vec2(7))
- This:egpColor(295, vec(200,98,0))
- This:egpCircle(297, vec2(), vec2(4))
- This:egpColor(297, vec(0, 98, 200))
- This:egpParent(297, 295)
- This:egpParentToCursor(295)
- This:egpCircle(296, vec2(), vec2(8))
- This:egpColor(296, vec(40))
- }
- Path = "gmodtower/lobby/instruments/piano/"
- Instruments = array(A, B, C, D, E, F, G, H)
- Notes = table(
- "1" = "a1","2" = "a2","3" = "a3","4" = "a4","5" = "a5","6" = "a6","7" = "a7","8" = "a8","9" = "a9","0" = "a10","q" = "a11","w" = "a12","e" = "a13","r" = "a14","t" = "a15","y" = "a16","u" = "a17","i" = "a18","o" = "a19","p" = "a20","a" = "a21","s" = "a22","d" = "a23","f" = "a24","g" = "a25","h" = "a26","j" = "a27","k" = "a28","l" = "a29","z" = "a30","x" = "a31","c" = "a32","v" = "a33","b" = "a34","n" = "a35","m" = "a36",
- "!" = "b1","@" = "b2","$" = "b3","%" = "b4","^" = "b5","*" = "b6","(" = "b7","Q" = "b8","W" = "b9","E" = "b10","T" = "b11","Y" = "b12","I" = "b13","O" = "b14","P" = "b15","S" = "b16","D" = "b17","G" = "b18","H" = "b19","J" = "b20","L" = "b21","Z" = "b22","C" = "b23","V" = "b24","B" = "b25"
- )
- function setAccord(Accord:string) {
- for (I=1, Accord:length()) {
- CurrInstr++
- if (CurrInstr==Instruments:count()+1) {CurrInstr=1}
- for (A=1, 8) {
- NT = Accord:sub(I, I)
- if (Buffer[CurrInstr, string] == NT) {
- CurrInstr++
- if (CurrInstr==Instruments:count()+1) {CurrInstr=1}
- }
- else {break}
- }
- if (Notes[Accord:sub(I, I), string] != "") {
- Instruments[CurrInstr, wirelink]["SampleName", string] = Path + Notes[Accord:sub(I, I), string] + ".wav"
- Buffer[CurrInstr, string] = Accord:sub(I, I)
- }
- }
- }
- function setVolume(Num) {
- foreach (K, Wire:wirelink = Instruments) {
- Wire["Volume", number] = Num
- }
- }
- function files(Num:number){
- fileLoad("e2synth/"+FileListTemp[Num, string])
- }
- foreach (K, Wire:wirelink = Instruments) {
- Wire["A", number] = 1
- }
- function processPlay() {
- local Pl = Sheets:readLineR()
- local PlNext = Sheets:readLine()
- Gey = Pl:explode(" ")
- Gey2 = PlNext:explode(" ")
- Timing = Gey2[1, string]:toNumber()
- TimingPl = (Timing - LastTiming) * Tempo
- LastTiming = Timing
- Sheet = Gey[2, string]
- setAccord(Sheet)
- timer("2play", TimingPl)
- Play = 1
- }
- function beginPlay(Sheets:string) {
- Tempo = Sheets:readLineR():explode("|TEMPO|")[1, string]:toNumber() / Speed_Multiply * 3.5
- if (!Tempo) {Tempo=1000/Speed_Multiply}
- processPlay()
- }
- function processCallbacks(Callback:string, ButtonPos:vector2) {
- #print(Callback)
- CMDS = Callback:explode("||")
- Cmd = CMDS:string(1)
- Args = CMDS:string(2)
- if (FLASHMODE) {
- if (EGPEntity!=owner()) {return}
- switch (Cmd) {
- case "reboot_normal",
- reset()
- break
- case "boost",
- if (Args=="plus") {
- Speed_Multiply+=0.05
- }elseif (Args=="minus") {
- Speed_Multiply-=0.05
- }
- EGP:egpText(11, "Boost "+Speed_Multiply, vec2(256, 370))
- writeToAddress(1488, Speed_Multiply:toString())
- break
- }
- }else {
- switch (Cmd) {
- case "play",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- setPlayingNow(ButtonPos)
- PlayStat = 1
- EGP:egpText(120,httpUrlDecode("%E2%8F%B8"),vec2(256,355))
- Music = FileList[Args, table]["music", string]
- Duration = FileList[Args, table]["duration", number]
- LastSelected = Music
- LastSelectedPos = ButtonPos
- LastSelected_Page = Page
- EGP:egpColor(123, vec(255))
- EGP:egpColor(124, vec(255))
- radioSend("play", table(
- "music" = Music,
- "duration" = Duration,
- "volume" = Volume,
- "speed" = Speed_Multiply
- ))
- beginPlay(Music)
- break
- case "volumechange",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- if (Args=="louder") {
- if (Volume<100) {
- Volume+=10
- }
- }elseif (Args=="hush") {
- if (Volume>0) {
- Volume-=10
- }
- }
- writeToAddress(1490, Volume:toString())
- setVolume(Volume/100)
- redrawSoundBar()
- radioSend("volume", Volume)
- break
- case "privacy",
- if (EGPEntity==owner()) {
- Privacy = !Privacy
- writeToAddress(1491, Privacy:toString())
- visPrivacyStatus()
- }
- break
- case "playpause",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- PlayStat = !PlayStat
- if (!PlayStat) {
- EGP:egpText(120,httpUrlDecode("%E2%96%B6"),vec2(260,370))
- stoptimer("2play")
- }else {
- EGP:egpText(120,httpUrlDecode("%E2%8F%B8"),vec2(256,355))
- timer("2play", TimingPl)
- }
- radioSend("pause", PlayStat)
- break
- case "shuffle",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- Shuffle = !Shuffle
- if (Shuffle) {
- EGP:egpColor(122, vec(200,98,0))
- EGP:egpColor(125, vec(150,58,0))
- if (Repeat) {
- Repeat = !Repeat
- EGP:egpColor(121, vec(255))
- }
- }else {
- EGP:egpColor(122, vec(255))
- EGP:egpColor(125, vec(125))
- }
- break
- case "repeat",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- Repeat = !Repeat
- if (Repeat) {
- EGP:egpColor(121, vec(200,98,0))
- if (Shuffle) {
- Shuffle = !Shuffle
- EGP:egpColor(122, vec(255))
- EGP:egpColor(125, vec(125))
- }
- }else {
- EGP:egpColor(121, vec(255))
- }
- break
- case "page",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- if (Args=="prev" & Page>1) {
- Page-=1
- }elseif (Args=="next" & (Page+1<=PageTotal)) {
- Page+=1
- }
- if (!LastSelected | LastTiming==0) {
- LastSelectedPos = vec2(1024)
- LastSelected_Page = Page
- }
- if (Page==LastSelected_Page) {
- setPlayingNow(LastSelectedPos)
- EGP:egpColor(123, vec(255))
- EGP:egpColor(124, vec(255))
- }elseif (Page>LastSelected_Page) {
- EGP:egpColor(123, vec(200,98,0))
- EGP:egpColor(124, vec(255))
- setPlayingNow(vec2(1024))
- }elseif (Page<LastSelected_Page) {
- EGP:egpColor(124, vec(200,98,0))
- EGP:egpColor(123, vec(255))
- setPlayingNow(vec2(1024))
- }
- EGP:drawSelector()
- break
- case "flashmode",
- if (EGPEntity!=owner()) {return}
- FLASHMODE = 1
- break
- case "radio",
- if (Privacy==1 & EGPEntity!=owner()) {return}
- Radio_Enabled=!Radio_Enabled
- if (Radio_Enabled) {
- dsJoinGroup(DSGroup)
- dsSetScope(2)
- runOnSignal("play", 2, 1)
- runOnSignal("volume", 2, 1)
- runOnSignal("pause", 2, 1)
- EGP:egpColor(156, vec(200,98,0))
- }else {
- dsLeaveGroup(DSGroup)
- dsSetScope(0)
- runOnSignal("play", 2, 0)
- runOnSignal("volume", 2, 0)
- runOnSignal("pause", 2, 0)
- EGP:egpColor(156, vec(255))
- }
- break
- }
- }
- }
- function processTouch(Cursor:vector2) {
- for (I = 1, Buttons:count()) {
- ButtonObj=Buttons[I, table]
- if (inrange(Cursor, ButtonObj["LT", vector2], ButtonObj["RB", vector2])) {
- processCallbacks(ButtonObj["CB", string], ButtonObj["Center", vector2])
- break
- return
- }
- }
- for (I = 1, ButtonsSongs:count()) {
- ButtonObj=ButtonsSongs[I, table]
- if (inrange(Cursor, ButtonObj["LT", vector2], ButtonObj["RB", vector2])) {
- processCallbacks(ButtonObj["CB", string], ButtonObj["Center", vector2])
- break
- }
- }
- }
- if (!FLASHMODE) {
- EGP:egpInitSelector()
- redrawSoundBar()
- visPrivacyStatus()
- }
- }
- if (FLASHMODE & !FLASHMODEFIRST) {
- stoptimer("processscrolling")
- Buttons:clear()
- ButtonsSongs:clear()
- FLASHMODEFIRST = 1
- print("FLASHMODE ENABLED")
- EGP:egpClear()
- EGP:egpBox(1, vec2(256), vec2(512))
- EGP:egpColor(1, vec(0, 91, 124))
- EGP:egpText(2, "FLASH MODE", vec2(256, 170))
- EGP:egpSize(2, 50)
- EGP:egpAlign(2, 1, 1)
- EGP:egpText(3, "Press the button below for load in normal mode", vec2(256, 210))
- EGP:egpAlign(3, 1, 1)
- EGP:egpSize(3, 25)
- EGP:egpBox(4, vec2(256), vec2(140, 55))
- EGP:egpColor(4, vec(213, 209, 202))
- EGP:egpText(5, "Reload", vec2(256))
- EGP:egpAlign(5, 1, 1)
- EGP:egpColor(5, vec(1, 188, 198))
- EGP:egpSize(5, 40)
- createButton(vec2(256)-vec2(70, 26), vec2(256)+vec2(70, 26), vec2(256), "reboot_normal", "controls")
- EGP:egpBox(10, vec2(256, 355), vec2(274, 89))
- EGP:egpBox(9, vec2(256, 355), vec2(270, 85))
- EGP:egpColor(9, vec(0, 91, 124))
- EGP:egpText(6, "Overclocking", vec2(256, 330))
- EGP:egpAlign(6, 1, 1)
- EGP:egpColor(6, vec(1, 188, 198))
- EGP:egpSize(6, 30)
- EGP:egpText(11, "Boost "+Speed_Multiply, vec2(256, 370))
- EGP:egpAlign(11, 1, 1)
- EGP:egpColor(11, vec(188, 1, 198))
- EGP:egpSize(11, 30)
- EGP:egpBox(7, vec2(140, 330), vec2(40))
- EGP:egpMaterial(7, "icon16/cancel.png")
- createButton(vec2(140, 330)-vec2(20), vec2(140, 330)+vec2(20), vec2(140, 330), "boost||minus", "controls")
- EGP:egpBox(8, vec2(372, 330), vec2(40))
- EGP:egpMaterial(8, "icon16/add.png")
- createButton(vec2(372, 330)-vec2(20), vec2(372, 330)+vec2(20), vec2(372, 330), "boost||plus", "controls")
- ProgressBar:egpClear()
- ProgressBar:egpBox(1, vec2(), vec2(512))
- ProgressBar:egpMaterial(1, "phoenix_storms/stripes_dimage.png")
- stoptimer("2play")
- fileList("e2synth/")
- }
- switch (clkName()) {
- case "2play",
- if (!FLASHMODE) {
- processPlay()
- }
- break
- case "completewriteoperation",
- DHDD_toWrite = DHDD_Dump
- timer("closestream", 100)
- break
- case "showchat",
- hideChat(0)
- break
- case "closestream",
- DHDD_AllowWrite = 0
- break
- case "processscrolling",
- processNamesScrolling()
- break
- }
- if (fileListClk()) {
- FileListTemp = fileReadList()
- print(_HUD_PRINTCONSOLE, "|| Type !flash <index> for flash additional midi to DHDD")
- for (ID=1, FileListTemp:count()) {
- FileName = FileListTemp:string(ID)
- print(_HUD_PRINTCONSOLE, "|| ["+ID+"] :: "+FileName)
- #print(FileName, ID)
- }
- }
- if (chatClk() & FLASHMODE) {
- CMD = lastSaid():explode(" ")
- switch (CMD:string(1)) {
- case "!flash",
- hideChat(1)
- print(lastSaid())
- timer("showchat", 100)
- files(CMD[2, string]:toNumber())
- break
- case "clear",
- AllowWrite = 1
- Clear = 1
- break
- }
- }
- if (fileClk()) {
- File=fileRead()
- print(fileName(), getDuration(File))
- print("Files count ", SongsCount, SongsCount+1)
- writeToAddress(1489, (SongsCount+1):toString())
- addToDHDD(jsonEncode(table(
- "name" = fileName():sub(9),
- "duration" = getDuration(File),
- "music" = File
- )))
- }
- if (Reset && Ent==owner()) {reset()}
- if (changed(EGPEntity) & EGPEntity & First) {
- CursorPos = EGP:egpCursor(EGPEntity)
- #print(CursorPos)
- processTouch(CursorPos)
- }
- if (dsClk()) {
- switch (dsClkName()) {
- case "play",
- DSData = dsGetTable()
- Music = DSData["music", string]
- Duration = DSData["duration", number]
- Volume = DSData["volume", number]
- Speed_Multiply = DSData["speed", number]
- LastSelected = Music
- PlayStat=1
- EGP:egpText(120,httpUrlDecode("%E2%8F%B8"),vec2(256,355))
- beginPlay(Music)
- setVolume(Volume)
- redrawSoundBar()
- break
- case "volume",
- Volume = dsGetNumber()
- setVolume(Volume)
- redrawSoundBar()
- break
- case "pause",
- PlayStat = dsGetNumber()
- if (!PlayStat) {
- EGP:egpText(120,httpUrlDecode("%E2%96%B6"),vec2(260,370))
- stoptimer("2play")
- }else {
- EGP:egpText(120,httpUrlDecode("%E2%8F%B8"),vec2(256,355))
- timer("2play", TimingPl)
- }
- break
- }
- }
- if(PlayStat & !FLASHMODE){
- ProgressBar:egpBox(2, vec2(4), vec2(504 / Duration * LastTiming, 504))
- ProgressBar:egpColor(2, vec(220))
- Spin+=10
- Spinning=ToWorld:toWorld(ang(0,-90,Spin))
- }
- if (FLASHMODE) {
- timer("gimbal", 10)
- Play = 1
- Spin-=10
- Spinning=ToWorld:toWorld(ang(Spin,Spin,Spin))
- }
- if (LastTiming==0 & !FLASHMODE) {
- if (Repeat) {
- PlayStat = 1
- radioSend("play", table(
- "music" = Music,
- "duration" = Duration,
- "volume" = Volume,
- "speed" = Speed_Multiply
- ))
- beginPlay(LastSelected)
- }
- elseif (Shuffle) {
- RandInt = randint(FileList:count())
- IterationPointer = 0
- foreach (Name, File:table = FileList) {
- IterationPointer++
- if (IterationPointer==RandInt) {
- PlayStat = 1
- EGP:egpText(120,httpUrlDecode("%E2%8F%B8"),vec2(256,355))
- Music = File["music", string]
- Duration = File["duration", number]
- LastSelected = Music
- beginPlay(Music)
- }
- }
- }else {
- EGP:egpPos(228, vec2(10000))
- PlayStat = 0
- EGP:egpText(120,httpUrlDecode("%E2%96%B6"),vec2(260,370))
- }
- }
- if (chatClk() & lastSaid()=="!secstats") {printOwners()}
Parsed in 0.043 seconds