SHOW:
|
|
- or go back to the newest paste.
| 1 | if peripheral.getType "back" ~= "neuralInterface" then error "for neural interfaces with kinetic augments and stuff, silly potato" end | |
| 2 | ||
| 3 | - | os.loadAPI "metaowner.lua" |
| 3 | + | local user = "gollark" |
| 4 | - | metaowner.upgrade(modules) |
| 4 | + | if settings.get "flight_user" then user = flight_user end |
| 5 | if potatOS and potatOS.registry then | |
| 6 | user = potatOS.registry.get "flight_user" | |
| 7 | - | local meta = modules.getMetaOwner() |
| 7 | + | if not user then error "Please set your username with `est flight_user [username]`" end |
| 8 | - | |
| 8 | + | end |
| 9 | - | while meta.isSneaking or meta.isFlying do |
| 9 | + | |
| 10 | - | meta = modules.getMetaOwner() |
| 10 | + | |
| 11 | - | modules.launch(meta.yaw, meta.pitch, 4) |
| 11 | + | local function length(x, y, z) |
| 12 | - | sleep(0.1) |
| 12 | + | return math.sqrt(x * x + y * y + z * z) |
| 13 | end | |
| 14 | ||
| 15 | - | if meta.motionY < -0.8 then |
| 15 | + | local function round(num, dp) |
| 16 | - | modules.launch(0, 270, 2) |
| 16 | + | local mult = 10^(dp or 0) |
| 17 | return math.floor(num * mult + 0.5) / mult | |
| 18 | end | |
| 19 | - | sleep(0.4) |
| 19 | + | |
| 20 | local canvas = modules.canvas() | |
| 21 | ||
| 22 | -- Backported from Opus Neural ElytraFly since it has a nicer implementation than I do | |
| 23 | local function display(meta) | |
| 24 | if canvas then | |
| 25 | local w, h = canvas.getSize() | |
| 26 | if not canvas.group then | |
| 27 | canvas.group = canvas.addGroup({ w - 80, 15 })
| |
| 28 | canvas.group.addRectangle(0, 0, 60, 30, 0x00000033) | |
| 29 | canvas.pitch = canvas.group.addText({ 4, 5 }, '') -- , 0x202020FF)
| |
| 30 | canvas.pitch.setShadow(true) | |
| 31 | canvas.pitch.setScale(.75) | |
| 32 | canvas.group2 = canvas.addGroup({ w - 10, 15 })
| |
| 33 | canvas.group2.addLines( | |
| 34 | { 0, 0 },
| |
| 35 | { 0, 180 },
| |
| 36 | { 5, 180 },
| |
| 37 | { 5, 0 },
| |
| 38 | 0x202020FF, | |
| 39 | 2) | |
| 40 | canvas.meter = canvas.group2.addRectangle(0, 0, 5, 1) | |
| 41 | end | |
| 42 | local size = math.abs(meta.pitch) -- math.ceil(math.abs(meta.pitch) / 9) | |
| 43 | local y = 0 | |
| 44 | local color = 0x202020FF | |
| 45 | if meta.pitch < 0 then | |
| 46 | y = size | |
| 47 | color = 0x808080FF | |
| 48 | end | |
| 49 | canvas.meter.setPosition(0, 90 - y) | |
| 50 | canvas.meter.setSize(5, size) | |
| 51 | canvas.meter.setColor(color) | |
| 52 | canvas.pitch.setText(string.format('Pitch: %s\nMotion Y: %s\nSpeed: %s',
| |
| 53 | math.floor(-meta.pitch), | |
| 54 | round(meta.motionY, 2), | |
| 55 | round(length(meta.motionX, meta.motionY, meta.motionZ), 2))) | |
| 56 | end | |
| 57 | end | |
| 58 | ||
| 59 | --[[ | |
| 60 | local function pad(s, i) | |
| 61 | return ("%s %s%.1f"):format(s, i >= 0 and "+" or "", i)
| |
| 62 | end | |
| 63 | ||
| 64 | local overlay = {
| |
| 65 | function(meta) return pad("X:", meta.motionX) end,
| |
| 66 | function(meta) return pad("Y:", meta.motionY) end,
| |
| 67 | function(meta) return pad("Z:", meta.motionZ) end,
| |
| 68 | function(meta) return pad(" ", length(meta.motionX, meta.motionY, meta.motionZ)) end,
| |
| 69 | function(meta) return pad("P:", meta.power) end
| |
| 70 | } | |
| 71 | ||
| 72 | local objects | |
| 73 | local function draw_overlay(meta) | |
| 74 | if not objects then | |
| 75 | objects = {}
| |
| 76 | local w, h = canv.getSize() | |
| 77 | for ix in pairs(overlay) do | |
| 78 | objects[ix] = canv.addText({w - 40, ix * 10 + 5}, "")
| |
| 79 | objects[ix].setColor(0xFFFFFFFF) | |
| 80 | end | |
| 81 | end | |
| 82 | for ix, f in pairs(overlay) do | |
| 83 | objects[ix].setText(f(meta)) | |
| 84 | end | |
| 85 | end | |
| 86 | ]] | |
| 87 | ||
| 88 | local function get_power(meta) | |
| 89 | local power = 4 | |
| 90 | if meta.isElytraFlying or meta.isFlying then power = 1 end | |
| 91 | if meta.isSneaking then power = 4 end | |
| 92 | if _G.tps then | |
| 93 | power = power * (20 / _G.tps) | |
| 94 | end | |
| 95 | return math.min(power, 4) | |
| 96 | end | |
| 97 | ||
| 98 | local function get_meta() | |
| 99 | local meta = modules.getMetaByName(user) | |
| 100 | meta.power = get_power(meta) | |
| 101 | display(meta) | |
| 102 | return meta | |
| 103 | end | |
| 104 | ||
| 105 | while true do | |
| 106 | local meta = get_meta() | |
| 107 | ||
| 108 | while (not _G.stop_flight) and (meta.isSneaking or meta.isFlying or meta.isElytraFlying) do | |
| 109 | modules.launch(meta.yaw, meta.pitch, meta.power) | |
| 110 | sleep(0.1) | |
| 111 | meta = get_meta() | |
| 112 | end | |
| 113 | ||
| 114 | if meta.motionY < -0.8 then | |
| 115 | modules.launch(0, 270, meta.power / 2) | |
| 116 | end | |
| 117 | ||
| 118 | sleep(0.4) | |
| 119 | end |