///
///
import { SoopyRenderEvent } from "../../../guimanager";
import ButtonWithArrowAndDescription from "../../../guimanager/GuiElement/ButtonWithArrowAndDescription";
import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
import BoxWithLoading from "../../../guimanager/GuiElement/BoxWithLoading";
import Feature from "../../featureClass/class";
import GuiPage from "../soopyGui/GuiPage";
class FriendsGui extends Feature {
constructor() {
super()
}
onEnable(){
this.initVariables()
this.GuiPage = new SettingPage()
this.registerChat("&9-----------------------------------------------------&r&9${*}&r&9 ${*} &6Friends (Page ${pagenum} of ${maxpages})${friendslist}&r&9-----------------------------------------------------&r", (...args)=>{this.GuiPage.friendListMessageEvent.call(this.GuiPage, ...args)})
this.registerStep(true, 5, ()=>{this.GuiPage.regenGuiElements.call(this.GuiPage)})
}
initVariables(){
this.GuiPage = undefined
}
onDisable(){
this.initVariables()
}
}
class SettingPage extends GuiPage {
constructor(){
super(7)
this.name = "Friends"
this.pages = [this.newPage()]
this.lastRender = 0
this.pages[0].addEvent(new SoopyRenderEvent().setHandler(()=>{this.lastRender = Date.now()}))
let friendsTitle = new SoopyTextElement().setText("ยง0Friends").setMaxTextScale(3).setLocation(0.1, 0.05, 0.8, 0.1)
this.pages[0].addChild(friendsTitle)
this.friendsArea = new SoopyGuiElement().setLocation(0.1, 0.2, 0.8, 0.8).setScrollable(true)
this.pages[0].addChild(this.friendsArea)
this.loadedFriends = {}
this.pageCount = undefined
this.heightPerFriend = 0.2
this.loadingElement = new BoxWithLoading().setLocation(0,0, 1, 0.175)
this.lastLoadedPage = 0
this.maxLoadedPage = 0
this.loadingElement.addEvent(new SoopyRenderEvent().setHandler(()=>{
if(Date.now()-this.lastLoadedPage > 1000){
this.loadFriendPage(this.maxLoadedPage+1)
}
}))
this.finaliseLoading()
}
friendListMessageEvent(pagenum, maxpages, friendslist, event){
if(Date.now()-this.lastRender < 1000){
cancel(event)
// console.log("Canceling")
}else{
return
}
this.maxLoadedPage = parseInt(pagenum)
this.pageCount = parseInt(maxpages)
friendslist = friendslist.replace(/\-\>newLine\<\-/g,"\n").split("\n")
friendslist.shift()
friendslist.pop()
friendslist.forEach((line, i) => {
let [name, location] = line.split(" is ")
if(location){
if(this.loadedFriends[ChatLib.removeFormatting(name)]){
this.loadedFriends[ChatLib.removeFormatting(name)].nameWithFormatting = name
this.loadedFriends[ChatLib.removeFormatting(name)].currentGame = location.replace("in ", "").replace("currently offline", "&cCurrently offline")
this.loadedFriends[ChatLib.removeFormatting(name)].element.setText(name).setDesc("&7"+location.replace("in ", "").replace("currently offline", "&cCurrently offline"))
}else{
this.loadedFriends[ChatLib.removeFormatting(name)] = {
nameWithFormatting: name,
currentGame: location.replace("in ", "").replace("currently offline", "&cCurrently offline"),
element: new ButtonWithArrowAndDescription().setLocation(0, this.heightPerFriend*Object.keys(this.loadedFriends).length+1, 1, this.heightPerFriend*0.875).setText(name).setDesc("&7"+location.replace("in ", "").replace("currently offline", "&cCurrently offline"))
}
this.loadedFriends[ChatLib.removeFormatting(name)].element.location.location.y.set(this.heightPerFriend*Object.keys(this.loadedFriends).length-this.heightPerFriend, 500+100*i)
}
}
});
this.regenGuiElements()
}
regenGuiElements(){
if(Date.now()-this.lastRender < 1000){
this.friendsArea.children = []
let scroll = this.friendsArea.location.scroll.y.get()/this.friendsArea.location.getHeightExact()
let minY = -scroll-this.heightPerFriend*0.875-0.5
let maxY = -scroll+1.5
Object.keys(this.loadedFriends).forEach((ign, i)=>{
if(this.loadedFriends[ign].element.location.location.y.get() > minY && this.loadedFriends[ign].element.location.location.y.get() < maxY){
this.friendsArea.addChild(this.loadedFriends[ign].element)
}
})
if(this.maxLoadedPage !== this.pageCount){
this.loadingElement.location.location.y.set(this.heightPerFriend*Object.keys(this.loadedFriends).length, 500)
this.friendsArea.addChild(this.loadingElement)
}
}
}
loadFriendPage(page){
ChatLib.command("friends list " + page)
this.lastLoadedPage = Date.now()
}
onOpen(){
this.loadedFriends = {}
this.pageCount = undefined
this.lastLoadedPage = 0
this.maxLoadedPage = 0
this.regenGuiElements()
this.loadFriendPage(1)
}
}
module.exports = {
class: new FriendsGui()
}