///
///
import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
import Feature from "../../featureClass/class";
import GuiPage from "../soopyGui/GuiPage";
import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement";
import SoopyMarkdownElement from "../../../guimanager/GuiElement/SoopyMarkdownElement";
import SoopyImageElement from "../../../guimanager/GuiElement/SoopyImageElement";
import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
class StreamsGui extends Feature {
constructor() {
super()
}
onEnable(){
this.initVariables()
this.GuiPage = new StreamPage()
}
initVariables(){
this.GuiPage = undefined
}
onDisable(){
this.initVariables()
}
}
class StreamPage extends GuiPage {
constructor(){
super(7)
this.name = "Skyblock Streams"
this.pages = [this.newPage()]
this.pages[0].addChild(new SoopyTextElement().setText("§0Skyblock Streams").setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1))
this.streamsBox = new SoopyGuiElement().setLocation(0.1, 0.15, 0.8, 0.85)
this.streamsBox.setScrollable(true)
this.pages[0].addChild(this.streamsBox)
this.finaliseLoading()
}
updateStreams(){
let streams = JSON.parse(FileLib.getUrlContent("http://soopymc.my.to/api/skyblockstreams"))
this.streamsBox.clearChildren()
let y = 0
Object.keys(streams.twitch).forEach((channel, i)=>{
let stream = streams.twitch[channel]
if(i%2===0){
this.streamsBox.addChild(new StreamElement().setStream(stream, true).setLocation(0, y, 0.45, 0.55).setStreamPage(this))
}
if(i%2===1){
this.streamsBox.addChild(new StreamElement().setStream(stream, true).setLocation(0.55, y, 0.45, 0.55).setStreamPage(this))
y+= 0.6
}
})
}
openStreamSidebar(data){
let sidebar = new SoopyGuiElement().setLocation(0,0,1,1)
this.openSidebarPage(sidebar)
}
onOpen(){
new Thread(()=>{
this.updateStreams()
}).start()
}
}
class StreamElement extends SoopyBoxElement {
constructor(){
super()
this.streamData = undefined
this.channelElement = new SoopyTextElement().setLocation(0.1,0.025,0.8,0.1).setMaxTextScale(10)
this.channelImg = new SoopyImageElement().setLocation(0.1,0.125,0.8,0.2).loadHeightFromImage()
this.titleElement = new SoopyMarkdownElement().setLocation(0.1,0.45,0.8,0.1)
this.channelImg.onImageHeightChange(()=>{
this.titleElement.location.location.y.set(0.15+this.channelImg.location.size.y.get())
},this)
this.streamPage = undefined
this.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
this.streamPage.openStreamSidebar(this.streamData)
}))
this.addChild(this.channelElement)
this.addChild(this.titleElement)
this.addChild(this.channelImg)
}
setStream(stream, twitch){
this.streamData = stream
this.titleElement.setText(stream.title)
this.channelElement.setText((twitch ? "§0"+stream.user_name : "§0"+stream.channelTitle) + (twitch?"&7 - " + stream.viewer_count + " viewers":""))
this.channelImg.setImage(twitch ? `https://static-cdn.jtvnw.net/previews-ttv/live_user_${stream.user_login}-640x360.jpg` : stream.thumbnails.high.url)
return this
}
setStreamPage(page){
this.streamPage = page
return this
}
}
module.exports = {
class: new StreamsGui()
}