aboutsummaryrefslogtreecommitdiff
path: root/features/friendsGUI
diff options
context:
space:
mode:
authorSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2021-10-31 09:49:42 +0800
committerSoopyboo32 <49228220+Soopyboo32@users.noreply.github.com>2021-10-31 09:49:42 +0800
commit48653ec89538f1650106a5e77463412cad4684c2 (patch)
tree09687cd579462e04d539fd4615369fa6dae13902 /features/friendsGUI
downloadSoopyV2-48653ec89538f1650106a5e77463412cad4684c2.tar.gz
SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.tar.bz2
SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.zip
first commit
Diffstat (limited to 'features/friendsGUI')
-rw-r--r--features/friendsGUI/index.js154
-rw-r--r--features/friendsGUI/metadata.json8
2 files changed, 162 insertions, 0 deletions
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 @@
+/// <reference types="../../../CTAutocomplete" />
+/// <reference lib="es2015" />
+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