aboutsummaryrefslogtreecommitdiff
path: root/src/features/soopyGui
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/soopyGui')
-rw-r--r--src/features/soopyGui/GuiPage.js68
-rw-r--r--src/features/soopyGui/categoryManager.js37
-rw-r--r--src/features/soopyGui/index.js215
-rw-r--r--src/features/soopyGui/metadata.json8
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