diff options
author | Soopyboo32 <49228220+Soopyboo32@users.noreply.github.com> | 2021-10-31 09:49:42 +0800 |
---|---|---|
committer | Soopyboo32 <49228220+Soopyboo32@users.noreply.github.com> | 2021-10-31 09:49:42 +0800 |
commit | 48653ec89538f1650106a5e77463412cad4684c2 (patch) | |
tree | 09687cd579462e04d539fd4615369fa6dae13902 /features/agentlaiThings/index.js | |
download | SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.tar.gz SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.tar.bz2 SoopyV2-48653ec89538f1650106a5e77463412cad4684c2.zip |
first commit
Diffstat (limited to 'features/agentlaiThings/index.js')
-rw-r--r-- | features/agentlaiThings/index.js | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/features/agentlaiThings/index.js b/features/agentlaiThings/index.js new file mode 100644 index 0000000..aa3fdc3 --- /dev/null +++ b/features/agentlaiThings/index.js @@ -0,0 +1,194 @@ +/// <reference types="../../../CTAutocomplete" /> +/// <reference lib="es2015" /> +import { SoopyGui, SoopyRenderEvent } from "../../../guimanager"; +import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement"; +import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement"; +import renderLibs from "../../../guimanager/renderLibs"; +import Feature from "../../featureClass/class"; +import ToggleSetting from "../settings/settingThings/toggle"; + +class AgentThings extends Feature { + constructor() { + super() + } + + onEnable(){ + this.initVariables() + + this.nearPlayerData = [] + while(this.nearPlayerData.length < 100){this.nearPlayerData.push({})} + + this.recordNearestPlayers = new ToggleSetting("Record nearby players", "You can then view this data with /nearplayers", true, "record_near_players", this) + + this.registerStep(false, 1, this.step) + + this.nearPlayersGui = new SoopyGui().setOpenCommand("nearplayers") + + this.nearPlayersGuiBox = new SoopyBoxElement().setLocation(0.25, 0.25, 0.5, 0.5) + this.nearPlayersGui.element.addChild(this.nearPlayersGuiBox) + + this.nearPlayersRenderElement = new SoopyGuiElement() + this.nearPlayersGuiBox.addChild(this.nearPlayersRenderElement) + + + let selected = undefined + let selectedDist = undefined + let lastXY = 0 + this.nearPlayersRenderElement.addEvent(new SoopyRenderEvent().setHandler((mouseX, mouseY)=>{ + let moved = lastXY !== mouseX+mouseY + lastXY = mouseX+mouseY + + let x = this.nearPlayersRenderElement.location.getXExact() + let y = this.nearPlayersRenderElement.location.getYExact() + let width = this.nearPlayersRenderElement.location.getWidthExact() + let height = this.nearPlayersRenderElement.location.getHeightExact() + + x+=width*0.125 + y+=height*0.125 + width*=0.75 + height*=0.75 + + Renderer.drawLine(Renderer.color(0, 0, 0), x, y+height, x+width, y+height, 2)//bottom axis line + Renderer.drawLine(Renderer.color(0, 0, 0), x, y, x, y+height, 2)//left axis line + + renderLibs.drawStringCentered("&0100s ago", x, y+height+6, Renderer.screen.getWidth()/1000) + renderLibs.drawStringCentered("&050s ago", x+width/2, y+height+6, Renderer.screen.getWidth()/1000) + renderLibs.drawStringCentered("&0Now", x+width, y+height+6, Renderer.screen.getWidth()/1000) //bottom axis markers + + + renderLibs.drawStringCenteredVertically("&025m away", x+3-Renderer.getStringWidth("&025m away")*Renderer.screen.getWidth()/1000, y, Renderer.screen.getWidth()/1000) + renderLibs.drawStringCenteredVertically("&020m away", x+3-Renderer.getStringWidth("&020m away")*Renderer.screen.getWidth()/1000, y+height/5*1, Renderer.screen.getWidth()/1000) + renderLibs.drawStringCenteredVertically("&010m away", x+3-Renderer.getStringWidth("&010m away")*Renderer.screen.getWidth()/1000, y+height/5*3, Renderer.screen.getWidth()/1000) + renderLibs.drawStringCenteredVertically("&00m away", x+3-Renderer.getStringWidth("&00m away")*Renderer.screen.getWidth()/1000, y+height-6, Renderer.screen.getWidth()/1000) + + if(moved){ + selected = undefined + selectedDist = undefined + } + let lastUuids = [] + this.nearPlayerData.forEach((data, i)=>{ + let newLastUuids = [] + Object.keys(data).forEach(uuid=>{ + newLastUuids.push(uuid) + lastUuids = lastUuids.filter(a=>a!==uuid) + + let dist = data[uuid].distance + let oldDist = this.nearPlayerData[i-1]?.[uuid]?.distance || 25 + + let thisX = x+(i)/100*width + let thisY = y+height-(dist/25)*height + + if(moved && (thisX-mouseX)**2 + (thisY-mouseY)**2 < 3){ + selected = uuid + selectedDist = dist + } + + if(i !== 0){ + Renderer.drawLine(Renderer.color(0, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 1) + } + + Renderer.drawRect(Renderer.color(0, 0, 0), thisX-1, thisY-1, 3, 3) + }) + + lastUuids.forEach(uuid=>{ + let dist = 25 + let oldDist = this.nearPlayerData[i-1]?.[uuid]?.distance || 25 + + let thisX = x+(i)/100*width + let thisY = y+height-(dist/25)*height + + if(i !== 0){ + Renderer.drawLine(Renderer.color(0, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 1) + } + }) + + lastUuids = newLastUuids + }) + + if(selected){ + width = this.nearPlayersRenderElement.location.getWidthExact() + height = this.nearPlayersRenderElement.location.getHeightExact() + + width*=0.75 + height*=0.75 + + renderLibs.scizzorFast(0,0,Renderer.screen.getWidth(), Renderer.screen.getHeight()) + let selectedIgn = undefined + let lastRenderedSelected = false + this.nearPlayerData.forEach((data, i)=>{ + if(data[selected]){ + lastRenderedSelected = true + + selectedIgn = data[selected].name + + let dist = data[selected].distance + let oldDist = this.nearPlayerData[i-1]?.[selected]?.distance || 25 + + let thisX = x+(i)/100*width + let thisY = y+height-(dist/25)*height + + if(i !== 0){ + Renderer.drawLine(Renderer.color(255, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 3) + } + }else{ + if(lastRenderedSelected){ + lastRenderedSelected = false + + let dist = 25 + let oldDist = this.nearPlayerData[i-1]?.[selected]?.distance || 25 + + let thisX = x+(i)/100*width + let thisY = y+height-(dist/25)*height + + if(i !== 0){ + Renderer.drawLine(Renderer.color(255, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 3) + } + } + } + }) + + let width = Math.max(Renderer.getStringWidth(selectedIgn)*2, Renderer.getStringWidth("Distance: " + selectedDist.toFixed(1)))+8 + let height = 32 + renderLibs.drawBox([255, 255, 255], mouseX+10, mouseY-height/2, width,height, 3) + renderLibs.drawString("&0" + selectedIgn, mouseX+14, mouseY-height/2+3, 2) + renderLibs.drawString("&0Distance: &7" + selectedDist.toFixed(1) , mouseX+14, mouseY-height/2+21, 1) + } + + })) + } + + step(){ + if(!this.recordNearestPlayers.getValue()) return + + let thisSecondPlayerData = {} + World.getAllPlayers().forEach(p=>{ + let distSq = (p.getX()-Player.getX())**2+(p.getY()-Player.getY())**2+(p.getZ()-Player.getZ())**2 + + if(distSq < 25*25 && distSq !== 0){ + thisSecondPlayerData[p.getUUID().toString()] = {name: p.getName(), distance: Math.sqrt(distSq)} + } + }) + + this.nearPlayerData.push(thisSecondPlayerData) + + if(this.nearPlayerData.length > 100) this.nearPlayerData.shift() + } + + initVariables(){ + this.recordNearestPlayers = undefined + this.nearPlayerData = undefined + this.nearPlayersGui = undefined + this.nearPlayersGuiBox = undefined + this.nearPlayersRenderElement = undefined + } + + onDisable(){ + this.nearPlayersGui.delete() + + this.initVariables() + } +} + +module.exports = { + class: new AgentThings() +}
\ No newline at end of file |