diff options
Diffstat (limited to 'src/features/soopyGui')
-rw-r--r-- | src/features/soopyGui/GuiPage.js | 68 | ||||
-rw-r--r-- | src/features/soopyGui/categoryManager.js | 37 | ||||
-rw-r--r-- | src/features/soopyGui/index.js | 215 | ||||
-rw-r--r-- | src/features/soopyGui/metadata.json | 8 |
4 files changed, 328 insertions, 0 deletions
diff --git a/src/features/soopyGui/GuiPage.js b/src/features/soopyGui/GuiPage.js new file mode 100644 index 0000000..7a21d26 --- /dev/null +++ b/src/features/soopyGui/GuiPage.js @@ -0,0 +1,68 @@ +import SoopyGuiElement from '../../../guimanager/GuiElement/SoopyGuiElement.js'; +import categoryManager from './categoryManager.js'; + +class GuiPage { + constructor(priority) { + this.currentPageId = 0; + this.priority = priority + + this.name = "" + + this.pages = {} + + this.showBackButton = true + this.finalisedLoading = false + } + + finaliseLoading() { + categoryManager.addCategory(this); + } + + getSoopyGui() { + if (global.soopyv2featuremanagerthing.features["soopyGui"]) return global.soopyv2featuremanagerthing.features["soopyGui"].class; + } + + isOpen() { + if (!this.getSoopyGui()?.gui?.ctGui?.isOpen()) return false + + return this.getSoopyGui()?.currCategory === this + } + + newPage() { + this.currentPageId++ + let page = new SoopyGuiElement().setLocation(1 * this.currentPageId, 0, 1, 1) + + page._soopyAddonsPageId = this.currentPageId + + this.pages[this.currentPageId] = page + + return page + } + + goToPage(page, anim) { + this.getSoopyGui().goToPageNum(page, anim) + } + + openSidebarPage(child) { + this.getSoopyGui().openSidebarPage(child) + } + closeSidebarPage() { + this.getSoopyGui().closeSidebarPage() + } + + delete() { + categoryManager.deleteCategory(this) + } + + //Override me :D + onOpen() { + + } + + //Override me :D + onOpenPage(page) { + + } +} + +export default GuiPage;
\ No newline at end of file diff --git a/src/features/soopyGui/categoryManager.js b/src/features/soopyGui/categoryManager.js new file mode 100644 index 0000000..6709ff4 --- /dev/null +++ b/src/features/soopyGui/categoryManager.js @@ -0,0 +1,37 @@ +class CategoryManager { + constructor(){ + this.categorys = {} + + this.arr = [] + } + + addCategory(category){ + // this.pages = this.pages.filter(a=>a.name!==category.name) + + this.categorys[category.name] = (category) + this.update() + } + + deleteCategory(category){ + delete this.categorys[category.name] + this.update() + } + + update(){ + + this.arr = Object.values(this.categorys).sort((a, b)=>{ + return b.priority - a.priority + }) + } +} + + +if(!global.soopyv2CategoryManager){ + global.soopyv2CategoryManager = new CategoryManager() + + register("gameUnload", ()=>{ + global.soopyv2CategoryManager = undefined + }) +} + +export default global.soopyv2CategoryManager
\ No newline at end of file diff --git a/src/features/soopyGui/index.js b/src/features/soopyGui/index.js new file mode 100644 index 0000000..b19c159 --- /dev/null +++ b/src/features/soopyGui/index.js @@ -0,0 +1,215 @@ +/// <reference types="../../../../CTAutocomplete" /> +/// <reference lib="es2015" /> +import Feature from "../../featureClass/class"; +import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement"; +import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement"; +import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement"; +import TextWithArrow from "../../../guimanager/GuiElement/TextWithArrow"; +import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow"; +import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent"; +import SoopyOpenGuiEvent from "../../../guimanager/EventListener/SoopyOpenGuiEvent"; +import SoopyGui2 from "../../../guimanager/SoopyGui"; +import categoryManager from "./categoryManager"; +import SoopyImageElement from "../../../guimanager/GuiElement/SoopyImageElement"; + + +class SoopyGui extends Feature { + constructor() { + super() + + this.gui = undefined + + this.currentPage = 0 + this.backButton = undefined + + this.categoryPage = undefined + this.currCategory = undefined + this.activePages = [] + this.lastClickedOpen = undefined + + this.activeCategory = undefined + } + + onEnable() { + this.gui = new SoopyGui2() + + // this.gui.isDebugEnabled = true + + this.registerCommand("soopyv2", this.openCommand) + this.registerCommand("soopy", this.openCommand) + this.registerCommand("snoopyv2", this.openCommand) + this.registerCommand("snoopy", this.openCommand) + + this.mainWindowElement = new SoopyBoxElement().setLocation(0.25, 0.1, 0.5, 0.8) + + this.mainWindowElement.addEvent(new SoopyOpenGuiEvent().setHandler(() => { this.goToPageNum(0, false) })) + + //############################################################################################### + // Category Page + //############################################################################################### + + this.categoryPage = new SoopyGuiElement().setLocation(0, 0, 1, 1) + + let title = new SoopyTextElement().setText("§0SoopyV2!").setMaxTextScale(3).setLocation(0.1, 0.05, 0.5, 0.1) + this.categoryPage.addChild(title) + + let discordButton = new ButtonWithArrow().setText("§0Discord").setLocation(0.7, 0.05 + 0.0125, 0.25, 0.075) + discordButton.addEvent(new SoopyMouseClickEvent().setHandler(() => { + java.awt.Desktop.getDesktop().browse( + new java.net.URI("https://discord.gg/dfSMq96RSN") + ); + })) + this.categoryPage.addChild(discordButton) + + this.buttonListElm = new SoopyGuiElement().setLocation(0.1, 0.2, 0.8, 0.8).setScrollable(true) + this.categoryPage.addChild(this.buttonListElm) + + //############################################################################################### + // Back button for all second pages + //############################################################################################### + + this.backButton = new TextWithArrow().setText("§0Back").setLocation(0.01, -0.2, 0.1, 0.1).setDirectionRight(false) + let backButtonEvent = new SoopyMouseClickEvent().setHandler(() => { this.clickedBackButton() }) + this.backButton.addEvent(backButtonEvent) + + this.mainWindowElement.addChild(this.categoryPage) + + this.sidebarPage = new SoopyBoxElement().setLocation(0.3, 0.1, 0.3, 0.8) + // this.sidebarPage.visable = false + + this.gui.element.addChild(this.sidebarPage) + this.gui.element.addChild(this.mainWindowElement) + + this.mainWindowElement.addChild(this.backButton) + + this.updateButtons() + } + + openCommand(page) { + this.gui.open() + + if (page) { + this.getPages().forEach(p => { + if (p.name.replace(/ /g, "_").toLowerCase() === page.toLowerCase()) { + this.clickedOpen(p, false) + } + }) + } + } + + getPages() { + return categoryManager.arr + } + + updateButtons() { + if (!this.buttonListElm) return; + + this.buttonListElm.children = [] + + if (this.getPages()) this.getPages().forEach((p, i) => { + let settingsButton = new ButtonWithArrow().setText("§0" + p.name).setLocation(0, 0.175 * i, 1, 0.15) + settingsButton.addEvent(new SoopyMouseClickEvent().setHandler(() => { this.clickedOpen(p) })) + this.buttonListElm.addChild(settingsButton) + }) + } + + clickedOpen(category, anim = true) { + if (!this.lastClickedOpen) this.lastClickedOpen = 0 + if (Date.now() - this.lastClickedOpen < 100) return //Stopping infinite loop where button getting reset causes click event to get fired again + this.lastClickedOpen = Date.now() + + let theParent = this.mainWindowElement.innerObjectPaddingThing || this.mainWindowElement + theParent.children = [] + + this.mainWindowElement.addChild(this.categoryPage) + + this.activePages = category.pages + this.currCategory = category + + Object.values(this.activePages).forEach(p => { + this.mainWindowElement.addChild(p) + }) + + this.mainWindowElement.addChild(this.backButton) + + category.onOpen() + + this.goToPageNum(1, anim) + } + + onDisable() { + this.gui.delete() + + this.gui = undefined + + this.currentPage = 0 + this.backButton = undefined + this.activePages = [] + this.currCategory = undefined + this.lastClickedOpen = undefined + } + + clickedBackButton() { + this.goToPageNum(this.currentPage - 1) + } + + goToPage(page, animate = true) { + let pageNum = page._soopyAddonsPageId + + if (pageNum == this.currentPage) { + return + } + + this.currentPage = pageNum + + this.getPages().forEach((p) => { + Object.values(p.pages).forEach((e, i) => { + e.location.location.x.set(i - pageNum + 1, animate ? 500 : 0) + }) + }) + this.categoryPage.location.location.x.set(-pageNum, animate ? 500 : 0) + + this.backButton.location.location.y.set((pageNum === 0 || !this.currCategory.showBackButton) ? -0.2 : 0, animate ? 500 : 0) + } + goToPageNum(pageNum, animate = true) { + if (pageNum < 0) return; + + this.currentPage = pageNum + if (pageNum === 0) { + this.currCategory = undefined + this.closeSidebarPage() + this.updateButtons() + } + + this.getPages().forEach((p) => { + Object.values(p.pages).forEach((e, i) => { + e.location.location.x.set(i - pageNum + 1, animate ? 500 : 0) + }) + }) + this.categoryPage.location.location.x.set(-pageNum, animate ? 500 : 0) + + this.backButton.location.location.y.set((pageNum === 0 || !this.currCategory.showBackButton) ? -0.2 : 0, animate ? 500 : 0) + + if (this.currCategory) this.currCategory.onOpenPage(pageNum) + } + openSidebarPage(child) { + this.sidebarPage.location.location.x.set(0.625, 500) + this.mainWindowElement.location.location.x.set(0.075, 500) + + // this.sidebarPage.visable = true + this.sidebarPage.clearChildren() + this.sidebarPage.addChild(child) + } + + closeSidebarPage() { + this.sidebarPage.location.location.x.set(0.3, 500) + this.mainWindowElement.location.location.x.set(0.25, 500) + + this.sidebarPage.clearChildren() + // this.sidebarPage.visable = false + } +} + +module.exports = { + class: new SoopyGui() +}
\ No newline at end of file diff --git a/src/features/soopyGui/metadata.json b/src/features/soopyGui/metadata.json new file mode 100644 index 0000000..8f2ace4 --- /dev/null +++ b/src/features/soopyGui/metadata.json @@ -0,0 +1,8 @@ +{ + "name": "Settings", + "description": "Adds a settings gui with toggles for all the modules, also renders each individual module's settings", + "isHidden": true, + "isTogglable": false, + "defaultEnabled": true, + "sortA": 0 +}
\ No newline at end of file |