From 48653ec89538f1650106a5e77463412cad4684c2 Mon Sep 17 00:00:00 2001 From: Soopyboo32 <49228220+Soopyboo32@users.noreply.github.com> Date: Sun, 31 Oct 2021 09:49:42 +0800 Subject: first commit --- features/friendsGUI/index.js | 154 ++++++++++++++++++++++++++++++++++++++ features/friendsGUI/metadata.json | 8 ++ 2 files changed, 162 insertions(+) create mode 100644 features/friendsGUI/index.js create mode 100644 features/friendsGUI/metadata.json (limited to 'features/friendsGUI') diff --git a/features/friendsGUI/index.js b/features/friendsGUI/index.js new file mode 100644 index 0000000..c7a370e --- /dev/null +++ b/features/friendsGUI/index.js @@ -0,0 +1,154 @@ +/// +/// +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() +} \ No newline at end of file diff --git a/features/friendsGUI/metadata.json b/features/friendsGUI/metadata.json new file mode 100644 index 0000000..b7b1f6f --- /dev/null +++ b/features/friendsGUI/metadata.json @@ -0,0 +1,8 @@ +{ + "name": "Friends gui", + "description": "Gui for friends", + "isHidden": true, + "isTogglable": false, + "defaultEnabled": true, + "sortA": 0 +} \ No newline at end of file -- cgit