feat: add confirmation by the user + persist started state

This commit is contained in:
Guillaume ARM 2024-05-11 15:31:51 +02:00
parent bedd5adbcb
commit 9e3a356eca

View File

@ -18,6 +18,7 @@ local MIN_PERCENTAGE_NEEDED = 10
local miner = { local miner = {
robot = robotApi.create(), robot = robotApi.create(),
mission = 'unload', -- "unload" | "refuel" | "mine" | "return-home" | "return-mine" | nil mission = 'unload', -- "unload" | "refuel" | "mine" | "return-home" | "return-mine" | nil
started = false,
finished = false, finished = false,
lastPositionState = nil, -- { x, y, z, dir } lastPositionState = nil, -- { x, y, z, dir }
targetY = INITIAL_TARGET_Y targetY = INITIAL_TARGET_Y
@ -27,6 +28,7 @@ local function saveMinerState()
local minerState = { local minerState = {
robotState = miner.robot.getState(), robotState = miner.robot.getState(),
mission = miner.mission, mission = miner.mission,
started = miner.started,
finished = miner.finished, finished = miner.finished,
lastPositionState = miner.lastPositionState, lastPositionState = miner.lastPositionState,
targetY = miner.targetY targetY = miner.targetY
@ -57,6 +59,7 @@ local function loadMinerState()
miner = { miner = {
robot = robotApi.create(minerState.robotState), robot = robotApi.create(minerState.robotState),
mission = minerState.mission, mission = minerState.mission,
started = minerState.started,
finished = minerState.finished, finished = minerState.finished,
lastPositionState = minerState.lastPositionState, lastPositionState = minerState.lastPositionState,
targetY = minerState.targetY targetY = minerState.targetY
@ -130,9 +133,8 @@ local function checkConfig()
end end
local function minerStarted() local function minerStarted()
checkConfig()
turtle.select(1) turtle.select(1)
loadMinerState() miner.started = true
print("> Miner program started, minimum percentgae fuel needed: " .. MIN_PERCENTAGE_NEEDED) print("> Miner program started, minimum percentgae fuel needed: " .. MIN_PERCENTAGE_NEEDED)
end end
@ -218,8 +220,6 @@ local function returnMineProcedure()
miner.mission = 'mine' miner.mission = 'mine'
print('> Starting mining procedure...') print('> Starting mining procedure...')
end end
saveMinerState()
end end
local function mineProcedure() local function mineProcedure()
@ -279,8 +279,6 @@ local function mineProcedure()
miner.mission = 'return-home' miner.mission = 'return-home'
miner.lastPositionState = miner.robot.getState() miner.lastPositionState = miner.robot.getState()
end end
saveMinerState()
end end
local function returnHomeProcedure() local function returnHomeProcedure()
@ -315,11 +313,33 @@ local function returnHomeProcedure()
miner.robot.turnLeft() miner.robot.turnLeft()
miner.robot.turnLeft() miner.robot.turnLeft()
end end
end
saveMinerState() local function waitForUserConfirmation()
print('> startY: ' .. config.startY)
print('> targetY: ' .. config.targetY)
print('> height: ' .. config.height)
print('> size: ' .. config.size)
print('> type "MINE" to start the mining process.')
local val = read()
if val == 'MINE' then
return true
end
return false
end
checkConfig()
loadMinerState()
if not miner.started then
while not waitForUserConfirmation() do end
end end
minerStarted() minerStarted()
saveMinerState()
while not isProgramFinished() do while not isProgramFinished() do
if miner.mission == 'unload' then if miner.mission == 'unload' then
@ -328,10 +348,13 @@ while not isProgramFinished() do
refuelProcedure() refuelProcedure()
elseif miner.mission == 'mine' then elseif miner.mission == 'mine' then
mineProcedure() mineProcedure()
saveMinerState()
elseif miner.mission == 'return-home' then elseif miner.mission == 'return-home' then
returnHomeProcedure() returnHomeProcedure()
saveMinerState()
elseif miner.mission == 'return-mine' then elseif miner.mission == 'return-mine' then
returnMineProcedure() returnMineProcedure()
saveMinerState()
end end
end end