Ui enhancements 2.0 (#29)

* canvas overhaul

* editor 2.0

* more tweaks

* more editor work

* completions + refactor

* cleanup + editor additions

* cleanup + undo overhaul

* editor recent/peripherals/redo + cleanup

* editor path issues

* cleanup

* changes for deprecated ui methods - recolor milo - make turtle scripts run again - mob rancher improvements

* can now use named colors
This commit was merged in pull request #29.
This commit is contained in:
kepler155c
2020-04-21 22:40:47 -06:00
committed by GitHub
parent 47e0a90116
commit 4576969739
65 changed files with 1842 additions and 1310 deletions

View File

@@ -1,6 +1,15 @@
--[[
Breed either cows or sheep.
Must be run on a mob with the same height.
Changed to use a 2-high mob (smaller mobs may work ?)
Updated due to entity.look working correctly now.
The mob looks head-on to the lever. Make sure the
lever is accessible by the mob.
Laser is now optional - if no laser, the mobs will be
punched (or provide a stick). Best mob may be a
skeleton (unlimited ammo).
Feeding hand has been changed to off-hand.
]]
local Array = require('opus.array')
@@ -21,80 +30,100 @@ local WALK_SPEED = 1.5
neural.assertModules({
'plethora:sensor',
'plethora:scanner',
'plethora:laser',
--'plethora:laser',
'plethora:kinetic',
'plethora:introspection',
})
local caninimals = config.animals or { [ config.animal ] = true }
local animals = { }
for k in pairs(caninimals) do
animals[k] = { }
end
local fed = { }
local function resupply()
local slot = neural.getEquipment().list()[1]
local slot = neural.getEquipment().list()[2]
if slot and slot.count > 32 then
return
end
print('resupplying')
for _ = 1, 2 do
local dispenser = Map.find(neural.scan(), 'name', 'minecraft:dispenser')
local dispenser = Map.find(neural.scan(), 'name', 'minecraft:lever')
if not dispenser then
print('dispenser not found')
break
end
if math.abs(dispenser.x) <= 1 and math.abs(dispenser.z) <= 1 then
neural.lookAt(dispenser)
if math.abs(dispenser.x) <= 1.2 and math.abs(dispenser.z) <= 1.2 then
neural.lookAt({ x = dispenser.x, y = dispenser.y, z = dispenser.z })
for _ = 1, 8 do
neural.use(0, 'off')
if not neural.use(0, 'off') then
break
end
os.sleep(.2)
neural.getEquipment().suck(1, 64)
neural.getEquipment().suck(2, 64)
end
break
else
neural.walkTo({ x = dispenser.x, y = 0, z = dispenser.z }, WALK_SPEED)
neural.walkTo({ x = dispenser.x, y = 0, z = dispenser.z }, WALK_SPEED, .5)
end
end
end
local function breed(entity)
print('breeding')
entity.lastFed = os.clock()
fed[entity.id] = entity
print('breeding ' .. entity.name)
neural.walkTo(entity, WALK_SPEED, 1)
entity = neural.getMetaByID(entity.id)
if entity then
neural.lookAt(entity)
neural.use(1)
if neural.use(1, 'off') then
entity.lastFed = os.clock()
fed[entity.id] = entity
end
os.sleep(.1)
end
end
local function kill(entity)
print('killing')
neural.walkTo(entity, WALK_SPEED, 2.5)
print('killing ' .. entity.name)
neural.walkTo(entity, WALK_SPEED, (neural.fire or neural.shoot) and 2.5 or .5)
entity = neural.getMetaByID(entity.id)
if entity then
neural.lookAt(entity)
neural.fireAt({ x = entity.x, y = 0, z = entity.z })
if neural.fire or neural.shoot then
neural.shootAt(entity)
else
neural.swing()
end
Sound.play('entity.firework.launch')
os.sleep(.2)
end
end
local function getEntities()
local sheep = Array.filter(neural.sense(), function(entity)
if entity.name == 'Sheep' and entity.y > -.5 then
return true
end
end)
if #sheep > config.maxAdults then
return sheep
local function shuffle(tbl)
for i = #tbl, 2, -1 do
local j = math.random(i)
tbl[i], tbl[j] = tbl[j], tbl[i]
end
return tbl
end
return Map.filter(neural.sense(), function(entity)
if entity.name == config.animal and entity.y > -.5 then
return true
local function getEntities()
return shuffle(Array.filter(neural.sense(), function(entity)
if animals[entity.name] then
if not animals[entity.name].height then
entity = neural.getMetaByID(entity.id)
if entity and not entity.isChild and entity.motionX == 0 and entity.motionZ == 0 then
animals[entity.name].height = entity.y
return true
end
elseif entity.y == animals[entity.name].height then
return true
end
end
end)
end))
end
local function getHungry(entities)
@@ -105,13 +134,25 @@ local function getHungry(entities)
end
end
local function randomEntity(entities)
local r = math.random(1, Map.size(entities))
local i = 1
local function getCount(entities, name)
local c = 0
for _, v in pairs(entities) do
i = i + 1
if i > r then
return v
if v.name == name then
c = c + 1
end
end
print(name .. ' ' .. c)
return c
end
local function getKillable(entities)
print('map: ' .. Map.size(fed))
if Map.size(fed) > 1000 then
fed = { }
end
for name in pairs(animals) do
if getCount(entities, name) > config.maxAdults then
return Array.find(entities, 'name', name)
end
end
end
@@ -120,9 +161,10 @@ while true do
resupply()
local entities = getEntities()
local killable = getKillable(entities)
if Map.size(entities) > config.maxAdults then
kill(randomEntity(entities))
if killable then
kill(killable)
else
local entity = getHungry(entities)
if entity then