From 3f45c76783729564e4b212fe8e0eb062492433af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9tro?= <yann.roberge@polymtl.ca>
Date: Sun, 1 Nov 2020 15:40:50 -0500
Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20refuelUntil.=20Le=20?=
 =?UTF-8?q?fichier=20bloc=5Fids.lua=20devient=20plus=20g=C3=A9n=C3=A9ral,?=
 =?UTF-8?q?=20macros.lua?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 bloc_ids.lua  | 12 ------------
 bucher.lua    |  2 +-
 macros.lua    | 25 +++++++++++++++++++++++++
 rsiTurtle.lua | 42 +++++++++++++++++++++++++++++++++++++++++-
 test.lua      | 27 ++++++++++++++++++---------
 5 files changed, 85 insertions(+), 23 deletions(-)
 delete mode 100644 bloc_ids.lua
 create mode 100644 macros.lua

diff --git a/bloc_ids.lua b/bloc_ids.lua
deleted file mode 100644
index ee0ee78..0000000
--- a/bloc_ids.lua
+++ /dev/null
@@ -1,12 +0,0 @@
--- bloc_ids.lua
--- Created on:  2020-10-16
--- Author:      Rétro
--- 
--- Fichier de macros pour les ID des blocs
---
--- Utilisation: __include 'bloc_ids'
---
-
-ID_LOG      = "log"
-ID_STONE    = "stone"
-ID_COBBLE   = "cobblestone"
diff --git a/bucher.lua b/bucher.lua
index 10a57ad..2329717 100644
--- a/bucher.lua
+++ b/bucher.lua
@@ -10,7 +10,7 @@ local RSI_Bucheron = {}
 RSI_Bucheron.__index = RSI_Bucheron
 
 rsiT = require("rsiTurtle")
-require("bloc_ids")
+require("macros")
 
 ---
 -- \brief Constructeur de RSI_Bucheron
diff --git a/macros.lua b/macros.lua
new file mode 100644
index 0000000..f251bda
--- /dev/null
+++ b/macros.lua
@@ -0,0 +1,25 @@
+-- bloc_ids.lua
+-- Created on:  2020-10-16
+-- Author:      Rétro
+-- 
+-- Fichier de macros pour les ID des blocs
+--
+-- Utilisation: __include 'bloc_ids'
+--
+
+-- Macros générales
+FUEL_LOW    = 100
+FUEL_FULL   = 400
+
+-- Cases de l'inventaire dédiées
+SLOT_ENDERCHEST_FUEL = 1
+SLOT_ENDERCHEST_DUMP = 2
+
+-- ID Blocs
+ID_LOG          = "log"
+ID_STONE        = "stone"
+ID_COBBLE       = "cobblestone"
+
+-- WARNING: Les ender chest et les ender tanks ont des "blocs names"
+--          indentiques. Il est donc impossible de les différencier.
+ID_ENDERCHEST   = "ender_storage"
diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index ba8617d..30c5dff 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -12,7 +12,7 @@ local RSI_Turtle = {}
 RSI_Turtle.__index = RSI_Turtle
 
 require("printf")
-require("bloc_ids")
+require("macros")
 
 ---
 -- \brief Affiche un hello world
@@ -682,4 +682,44 @@ function RSI_Turtle:goThroughVolume(lines, cols, depth, action)
 end
 
 
+---
+-- \brief Vérifier si l'ID du bloc en face contient la regex
+-- \param int   fuelLevel       Brûler du carburant jusqu'à ce que le tortue
+--                              atteigne le niveau spécifié
+-- \param int   fuelChestSlot   Case de l'inventaire contenant un ender chest
+--                              contenant du carburant
+-- \return bool Succès
+function RSI_Turtle:refuelUntil(fuelLevel, fuelChestSlot)
+    local success
+    local itemInFuelSlot
+
+    self:dig() -- Faire de la place pour le coffre
+    turtle.select(fuelChestSlot)
+    success = turtle.place()
+    if (not success) then return false end
+
+    while (turtle.getFuelLevel() < fuelLevel)
+    do
+        -- Prendre un object dans le coffre
+        success = turtle.suck(1)
+        if (not success) then return false end
+
+        -- Le brûler
+        success = turtle.refuel(1)
+        if (not success) then return false end
+    end
+
+    -- Ramasser le coffre
+    success = self:dig()
+    if (not success) then return false end
+
+    -- Vérifier qu'on a bien ramassé le coffre au bon emplacement de l'inventaire
+    itemInFuelSlot = turtle.getItemDetail(fuelChestSlot)
+    if (itemInFuelSlot ~= nil)
+    then
+        return string.match(itemInFuelSlot.name, ID_ENDERCHEST)
+    end
+    return false
+end
+
 return RSI_Turtle
diff --git a/test.lua b/test.lua
index 4211df3..6daecf9 100644
--- a/test.lua
+++ b/test.lua
@@ -8,7 +8,7 @@ rsiT = require("rsiTurtle")
 rsiB = require("bucher")
 rsiE = require("excaver")
 
-require("bloc_ids")
+require("macros")
 
 -- rsiT.helloWorld()
 
@@ -20,9 +20,9 @@ print("Test de RSI_Bucheron")
 b = rsiB:init()
 b:print()
 
--- print("Test de RSI_Excavatrice")
--- e = rsiE:init()
--- e:print()
+print("Test de RSI_Excavatrice")
+e = rsiE:init()
+e:print()
 
 -- print("Test de l'API turtle")
 -- print(turtle.inspect())
@@ -183,12 +183,21 @@ end
 --b.base_:moveTo(5,5,5)
 --assert(b.base_:moveToOriginGrounded())
 
-print("Test goThroughVolume")
-assert(t:goThroughVolume(4,3,3, turtle.digDown))
+--print("Test goThroughVolume")
+--assert(t:goThroughVolume(4,3,3, turtle.digDown))
 
-assert(t:moveToOrigin())
-print(t:getPos())
-assert(checkPos(0,0,0))
+--print("Test excavateVolumeDown")
+--assert(e:excavateVolumeDown(2,2,3))
+--assert(e:excavateVolumeDown(10,10,68)) Attention: prend des heures
+
+print("Test refuelUntil")
+assert(e.base_:refuelUntil(FUEL_FULL, SLOT_ENDERCHEST_FUEL))
+print("Fuel level after refueling:")
+print(turtle.getFuelLevel())
+assert(turtle.getFuelLevel() >= FUEL_FULL)
+
+assert(e.base_:moveToOrigin())
+print(e.base_:getPos())
 
 print("Fin des tests")
 
-- 
GitLab