foreign keyboards

This commit is contained in:
kepler155c@gmail.com
2019-04-21 23:46:04 -04:00
parent 60efe15fd9
commit 320714c2d0
6 changed files with 158 additions and 50 deletions

View File

@@ -5,7 +5,7 @@ LUA MODULE
compress.deflatelua - deflate (and gunzip/zlib) implemented in Lua. compress.deflatelua - deflate (and gunzip/zlib) implemented in Lua.
SYNOPSIS SYNOPSIS
local DEFLATE = require 'compress.deflatelua' local DEFLATE = require 'compress.deflatelua'
-- uncompress gzip file -- uncompress gzip file
local fh = assert(io.open'foo.txt.gz', 'rb') local fh = assert(io.open'foo.txt.gz', 'rb')
@@ -13,12 +13,12 @@ SYNOPSIS
DEFLATE.gunzip {input=fh, output=ofh} DEFLATE.gunzip {input=fh, output=ofh}
fh:close(); ofh:close() fh:close(); ofh:close()
-- can also uncompress from string including zlib and raw DEFLATE formats. -- can also uncompress from string including zlib and raw DEFLATE formats.
DESCRIPTION DESCRIPTION
This is a pure Lua implementation of decompressing the DEFLATE format, This is a pure Lua implementation of decompressing the DEFLATE format,
including the related zlib and gzip formats. including the related zlib and gzip formats.
Note: This library only supports decompression. Note: This library only supports decompression.
Compression is not currently implemented. Compression is not currently implemented.
@@ -34,9 +34,9 @@ API
Decompresses input stream `fh` in the DEFLATE format Decompresses input stream `fh` in the DEFLATE format
while writing to output stream `ofh`. while writing to output stream `ofh`.
DEFLATE is detailed in http://tools.ietf.org/html/rfc1951 . DEFLATE is detailed in http://tools.ietf.org/html/rfc1951 .
DEFLATE.gunzip {input=fh, output=ofh, disable_crc=disable_crc} DEFLATE.gunzip {input=fh, output=ofh, disable_crc=disable_crc}
Decompresses input stream `fh` with the gzip format Decompresses input stream `fh` with the gzip format
while writing to output stream `ofh`. while writing to output stream `ofh`.
`disable_crc` (defaults to `false`) will disable CRC-32 checking `disable_crc` (defaults to `false`) will disable CRC-32 checking
@@ -44,15 +44,15 @@ API
gzip is detailed in http://tools.ietf.org/html/rfc1952 . gzip is detailed in http://tools.ietf.org/html/rfc1952 .
DEFLATE.inflate_zlib {input=fh, output=ofh, disable_crc=disable_crc} DEFLATE.inflate_zlib {input=fh, output=ofh, disable_crc=disable_crc}
Decompresses input stream `fh` with the zlib format Decompresses input stream `fh` with the zlib format
while writing to output stream `ofh`. while writing to output stream `ofh`.
`disable_crc` (defaults to `false`) will disable CRC-32 checking `disable_crc` (defaults to `false`) will disable CRC-32 checking
to increase speed. to increase speed.
zlib is detailed in http://tools.ietf.org/html/rfc1950 . zlib is detailed in http://tools.ietf.org/html/rfc1950 .
DEFLATE.adler32(byte, crc) --> rcrc DEFLATE.adler32(byte, crc) --> rcrc
Returns adler32 checksum of byte `byte` (number 0..255) appended Returns adler32 checksum of byte `byte` (number 0..255) appended
to string with adler32 checksum `crc`. This is internally used by to string with adler32 checksum `crc`. This is internally used by
`inflate_zlib`. `inflate_zlib`.
@@ -63,9 +63,9 @@ COMMAND LINE UTILITY
A `gunziplua` command line utility (in folder `bin`) is also provided. A `gunziplua` command line utility (in folder `bin`) is also provided.
This mimicks the *nix `gunzip` utility but is a pure Lua implementation This mimicks the *nix `gunzip` utility but is a pure Lua implementation
that invokes this library. For help do that invokes this library. For help do
gunziplua -h gunziplua -h
DEPENDENCIES DEPENDENCIES
Requires 'digest.crc32lua' (used for optional CRC-32 checksum checks). Requires 'digest.crc32lua' (used for optional CRC-32 checksum checks).
@@ -75,13 +75,13 @@ DEPENDENCIES
is not that critical for this library but is required by digest.crc32lua. is not that critical for this library but is required by digest.crc32lua.
'pythonic.optparse' is only required by the optional `gunziplua` 'pythonic.optparse' is only required by the optional `gunziplua`
command-line utilty for command line parsing. command-line utilty for command line parsing.
https://github.com/davidm/lua-pythonic-optparse https://github.com/davidm/lua-pythonic-optparse
INSTALLATION INSTALLATION
Copy the `compress` directory into your LUA_PATH. Copy the `compress` directory into your LUA_PATH.
REFERENCES REFERENCES
[1] DEFLATE Compressed Data Format Specification version 1.3 [1] DEFLATE Compressed Data Format Specification version 1.3
@@ -811,7 +811,7 @@ function M.gunzip(t)
if not disable_crc and data_crc32 then if not disable_crc and data_crc32 then
if data_crc32 ~= expected_crc32 then if data_crc32 ~= expected_crc32 then
runtime_error('invalid compressed data--crc error') runtime_error('invalid compressed data--crc error')
end end
end end
if bs:read() then if bs:read() then
warn 'trailing garbage ignored' warn 'trailing garbage ignored'
@@ -833,11 +833,11 @@ function M.inflate_zlib(t)
local outbs = get_obytestream(t.output) local outbs = get_obytestream(t.output)
local disable_crc = t.disable_crc local disable_crc = t.disable_crc
if disable_crc == nil then disable_crc = false end if disable_crc == nil then disable_crc = false end
local window_size_ = parse_zlib_header(bs) local window_size_ = parse_zlib_header(bs)
local data_adler32 = 1 local data_adler32 = 1
inflate{input=bs, output= inflate{input=bs, output=
disable_crc and outbs or disable_crc and outbs or
function(byte) function(byte)
@@ -847,7 +847,7 @@ function M.inflate_zlib(t)
} }
bs:read(bs:nbits_left_in_byte()) bs:read(bs:nbits_left_in_byte())
local b3 = bs:read(8) local b3 = bs:read(8)
local b2 = bs:read(8) local b2 = bs:read(8)
local b1 = bs:read(8) local b1 = bs:read(8)
@@ -859,7 +859,7 @@ function M.inflate_zlib(t)
if not disable_crc then if not disable_crc then
if data_adler32 ~= expected_adler32 then if data_adler32 ~= expected_adler32 then
runtime_error('invalid compressed data--crc error') runtime_error('invalid compressed data--crc error')
end end
end end
if bs:read() then if bs:read() then
warn 'trailing garbage ignored' warn 'trailing garbage ignored'

View File

@@ -1172,9 +1172,8 @@ function input:translate(event, code, p1, p2)
end end
elseif event == 'char' then elseif event == 'char' then
if not self.pressed[keys.leftAlt] and if not self.fired then
not self.pressed[keys.rightAlt] then self.fired = true
self.fired = true
return code -- input:toCode(code) return code -- input:toCode(code)
end end

View File

@@ -3,6 +3,7 @@ local GPS = require('gps')
local itemDB = require('core.itemDB') local itemDB = require('core.itemDB')
local Point = require('point') local Point = require('point')
local Socket = require('socket') local Socket = require('socket')
local Sound = require('sound')
local Util = require('util') local Util = require('util')
local UI = require('ui') local UI = require('ui')
@@ -21,11 +22,37 @@ local scanner = device['plethora:scanner'] or
-- hud -- hud
local canvas = glasses and glasses.canvas() local canvas = glasses and glasses.canvas()
if canvas then if canvas then
local lh
local function addText(x, y, text, color)
local th = canvas.group.addText({ x, y }, text, color or 0xa0a0a0FF)
lh = lh or th.getLineHeight()
th.setShadow(true)
th.setScale(.75)
return th
end
canvas.group = canvas.addGroup({ 4, 90 }) canvas.group = canvas.addGroup({ 4, 90 })
canvas.bg = canvas.group.addRectangle(0, 0, 60, 24, 0x00000033) canvas.group.bg = canvas.group.addRectangle(0, 0, 80, 10, 0x40404080)
canvas.text = canvas.group.addText({ 4, 5 }, '') -- , 0x202020FF) canvas.group.addLines(
canvas.text.setShadow(true) { 0, 0 },
canvas.text.setScale(.75) { 80, 0 },
{ 80, 10 },
{ 0, 10 },
{ 0, 0 },
0x202020FF,
2)
addText(20, 2, 'Swarm Miner', 0xc0c0c0FF)
local y = 15
addText(3, y, 'Turtles')
canvas.turtles = addText(60, y, '')
canvas.group.addLine({ 0, y + lh - 2 }, { 80, y + lh - 2 }, 0x404040FF, 4)
y = y + lh + 5
addText(3, y, 'Queue')
canvas.queue = addText(60, y, '')
canvas.group.addLine({ 0, y + lh - 2 }, { 80, y + lh - 2 }, 0x404040FF, 4)
end end
-- container -- container
@@ -512,9 +539,14 @@ function page:eventHandler(event)
UI.Page.eventHandler(self, event) UI.Page.eventHandler(self, event)
end end
Event.onInterval(3, function() Event.onInterval(1, function()
if not abort and not paused then if not abort and not paused then
page:scan()
local meta = scanner.getMetaOwner()
if meta.isSneaking then
page:scan()
Sound.play('entity.bobber.throw', .6)
end
end end
end) end)
@@ -541,9 +573,8 @@ Event.onInterval(1, function()
page.info:sync() page.info:sync()
if canvas then if canvas then
local text = string.format('Turtles: %s\nQueue: %s', canvas.turtles.setText(tostring(Util.size(turtles)))
Util.size(turtles), Util.size(queue)) canvas.queue.setText(tostring(Util.size(queue)))
canvas.text.setText(text)
end end
end) end)

77
ignore/mobPickup.lua Normal file
View File

@@ -0,0 +1,77 @@
local Point = require('point')
local Util = require('util')
local device = _G.device
local os = _G.os
local scanner = device['plethora:scanner']
local sensor = device['plethora:sensor']
local id = sensor.getID()
local function dropOff()
local blocks = scanner.scan()
local b = Util.find(blocks, 'name', 'minecraft:hopper')
print(not not b)
if b then
print('walking ', b.x, b.y + 1, b.z)
os.sleep(1)
sensor.walk(b.x, b.y + 1, b.z)
os.sleep(2)
repeat until not sensor.isWalking()
print('done walking')
blocks = scanner.scan()
b = Util.find(blocks, 'name', 'minecraft:hopper')
if b then
print(b.x, b.z)
end
if b and math.abs(b.x) < 1 and math.abs(b.z) < 1 then
print('dropped')
sensor.getEquipment().drop(1)
os.sleep(1)
end
end
end
while true do
local sensed = Util.reduce(sensor.sense(), function(acc, s)
s.y = Util.round(s.y)
if s.y == 0 and s.id ~= id then
--s.x = Util.round(s.x)
--s.z = Util.round(s.z)
acc[s.id] = s
end
return acc
end, { })
local pt = { x = 0, y = 0, z = 0 }
while true do
local b = Point.closest(pt, sensed)
if not b then
break
end
sensed[b.id] = nil
b = sensor.getMetaByID(b.id)
if b then
print('picking up ', b.x, b.y, b.z)
sensor.walk(b.x, b.y, b.z)
os.sleep(2)
repeat until not sensor.isWalking()
print('done goto')
os.sleep(.5)
pt = b
local amount = sensor.getEquipment().suck(1)
print('sucked: ' .. amount)
if amount == 0 then
print('dropping')
dropOff()
break
end
end
end
os.sleep(5)
end

View File

@@ -11,10 +11,11 @@ local parallel = _G.parallel
local STARTUP_FILE = 'usr/autorun/fly.lua' local STARTUP_FILE = 'usr/autorun/fly.lua'
if not modules.launch or not modules.getMetaOwner then if not modules.launch or not modules.getMetaOwner then
error([[Required: print([[Required:
* Kinetic augment * Kinetic augment
* Entity sensor * Entity sensor
* Introspection module]]) * Introspection module]])
error('missing required item')
end end
if not fs.exists(STARTUP_FILE) then if not fs.exists(STARTUP_FILE) then

View File

@@ -41,17 +41,17 @@ local function getPoint()
end end
local targets = { local targets = {
["minecraft:emerald_ore"] = 0x46FF26AA, ["minecraft:emerald_ore"] = { "minecraft:emerald", 0 },
["minecraft:diamond_ore"] = 0x50F8FFAA, ["minecraft:diamond_ore"] = { "minecraft:diamond", 0 },
["minecraft:gold_ore"] = 0xFFDF50AA, ["minecraft:gold_ore"] = { "minecraft:gold_ingot", 0 },
["minecraft:redstone_ore"] = 0xCC121566, ["minecraft:redstone_ore"] = { "minecraft:redstone", 0 },
["minecraft:lit_redstone_ore"] = 0xCC121566, ["minecraft:lit_redstone_ore"] = { "minecraft:redstone", 0 },
["minecraft:iron_ore"] = 0xFFAC8766, ["minecraft:iron_ore"] = { "minecraft:iron_ingot", 0 },
["minecraft:lapis_ore"] = 0x0A107F66, ["minecraft:lapis_ore"] = { "minecraft:dye", 4 },
["minecraft:coal_ore"] = 0x20202066, ["minecraft:coal_ore"] = { "minecraft:coal", 0 },
["quark:biotite_ore"] = 0x02051C66, --["quark:biotite_ore"] = 0x02051C66,
["minecraft:quartz_ore"] = 0xCCCCCC66, ["minecraft:quartz_ore"] = { "minecraft:quartz", 0 },
["minecraft:glowstone"] = 0xFFDFA166 ["minecraft:glowstone"] = { "minecraft:glowstone_dust", 0 },
} }
local projecting = { } local projecting = { }
local offset = getPoint() or showRequirements('GPS') local offset = getPoint() or showRequirements('GPS')
@@ -90,21 +90,21 @@ local function update()
for _, b in pairs(blocks) do for _, b in pairs(blocks) do
if not projecting[b.id] then if not projecting[b.id] then
projecting[b.id] = b projecting[b.id] = b
--[[
b.box = canvas.addFrame({ b.box = canvas.addFrame({
pos.x - offset.x + b.x + -(pos.x % 1) + .5, pos.x - offset.x + b.x + -(pos.x % 1),
pos.y - offset.y + b.y + -(pos.y % 1) + .5, pos.y - offset.y + b.y + -(pos.y % 1),
pos.z - offset.z + b.z + -(pos.z % 1) + .5, pos.z - offset.z + b.z + -(pos.z % 1),
}) })
b.box.setDepthTested(false) b.box.setDepthTested(false)
b.box.addItem({ 0, 0 }, b.name, b.damage, 2) local target = targets[b.name]
--]] b.box.addItem({ .25, .25 }, target[1], target[2], 2)
--[[
b.box = canvas.addItem({ b.box = canvas.addItem({
pos.x - offset.x + b.x + -(pos.x % 1) + .5, pos.x - offset.x + b.x + -(pos.x % 1) + .5,
pos.y - offset.y + b.y + -(pos.y % 1) + .5, pos.y - offset.y + b.y + -(pos.y % 1) + .5,
pos.z - offset.z + b.z + -(pos.z % 1) + .5, pos.z - offset.z + b.z + -(pos.z % 1) + .5,
}, b.name, b.damage, .5) }, b.name, b.damage, .5)
--]]
b.box.setDepthTested(false) b.box.setDepthTested(false)
end end
end end