From 5232f109e5ec409015fe7d2adc1b712876a50928 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9tro?= <yann.roberge@polymtl.ca>
Date: Fri, 23 Oct 2020 20:59:37 -0400
Subject: [PATCH] =?UTF-8?q?Fusion=20des=20fonctions=20move=20'grounded'=20?=
 =?UTF-8?q?avec=20les=20fonctions=20move=20r=C3=A9guli=C3=A8res?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 rsiTurtle.lua | 114 ++++++++++++++++++--------------------------------
 test.lua      |   8 ++++
 2 files changed, 49 insertions(+), 73 deletions(-)

diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index cda1523..581f9bc 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -106,18 +106,36 @@ end
 ---
 -- \brief Déplacement parallèle au sol
 --        Ordre de déplacement: X, Z
+-- \param int       dx          Déplacement vers l'avant (+) ou l'arrière (-)
+-- \param int       dz          Déplacement vers la gauche (-) ou la droite (+)
+-- \param bool      grounded    Se déplacer en restant toujours au niveau du sol
 -- \return bool Succès
-function RSI_Turtle:move2D(dx, dz)
+function RSI_Turtle:move2D(dx, dz, grounded)
     local success = true
 
+    if(grounded)
+    then
+        self:ground()
+    end
+
     if dx >= 0
     then
         self:face(12)
-        success = self:moveForward(dx)
+        if(grounded)
+        then
+            success = self:moveForwardGrounded(dx)
+        else
+            success = self:moveForward(dx)
+        end
     elseif dx < 0
     then
         self:face(6)
-        success = self:moveForward(-1*dx)
+        if(grounded)
+        then
+            success = self:moveForwardGrounded(-1*dx)
+        else
+            success = self:moveForward(-1*dx)
+        end
     end
 
     if not success
@@ -190,33 +208,15 @@ end
 -- \param distance Distance à parcourir
 -- \return bool Succès
 function RSI_Turtle:moveForwardGrounded(distance)
-    local traveled = 0
-
-    self:ground()
-    while (traveled < distance) and turtle.forward()
-    do
-        self:ground()
-        self:climb()
-        traveled = traveled + 1
-    end
-
-    if self.facing_ == 0 then
-        self.pos_["x"] = self.pos_["x"] + traveled
-    elseif self.facing_ == 3 then
-        self.pos_["z"] = self.pos_["z"] + traveled
-    elseif self.facing_ == 6 then
-        self.pos_["x"] = self.pos_["x"] - traveled
-    elseif self.facing_ == 9 then
-        self.pos_["z"] = self.pos_["z"] - traveled
-    end
-
-    return (traveled == distance)
+    return self:moveForward(distance, true)
 end
 
 
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
+-- \param int       dx          Déplacement vers l'avant (+) ou l'arrière (-)
+-- \param int       dz          Déplacement vers la gauche (-) ou la droite (+)
 -- \return bool Succès
 function RSI_Turtle:moveToGrounded(x, z)
     return self:moveGrounded(x - self.pos_["x"], z - self.pos_["z"])
@@ -226,53 +226,11 @@ end
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
+-- \param int       dx          Déplacement vers l'avant (+) ou l'arrière (-)
+-- \param int       dz          Déplacement vers la gauche (-) ou la droite (+)
 -- \return bool Succès
 function RSI_Turtle:moveGrounded(dx, dz)
-    local success = true
-
-    if dx >= 0
-    then
-        self:face(12)
-        success = self:moveForwardGrounded(dx)
-    elseif dx < 0
-    then
-        self:face(6)
-        success = self:moveForwardGrounded(-1*dx)
-    end
-
-    if not success
-    then
-        return false
-    end
-
-    if (self.facing_ == 0)
-    then
-        if dz < 0
-        then
-            self:turnLeft()
-        elseif dz > 0
-        then
-            self:turnRight()
-        end
-    elseif (self.facing_ == 6)
-    then
-        if dz > 0
-        then
-            self:turnLeft()
-        elseif dz < 0
-        then
-            self:turnRight()
-        end
-    end
-
-    if not success
-    then
-        return false
-    end
-
-    success = self:moveForwardGrounded(math.abs(dz))
-
-    return success
+    return self:move2D(dx, dz, true)
 end
 
 
@@ -317,13 +275,25 @@ end
 
 ---
 -- \brief Déplacement avant multiple
--- \param distance Distance à parcourir
+-- \param distance  Distance à parcourir
+-- \param bool      grounded    Se déplacer en restant toujours au niveau du sol
 -- \return bool Succès
-function RSI_Turtle:moveForward(distance)
+function RSI_Turtle:moveForward(distance, grounded)
     local traveled = 0
 
+    if (grounded)
+    then
+        self:ground()
+    end
+
     while (traveled < distance) and turtle.forward()
     do
+        if (grounded)
+        then
+            self:ground()
+            self:climb()
+        end
+
         traveled = traveled + 1
     end
 
@@ -444,7 +414,6 @@ end
 -- \brief Augmenter en altitude jusqu'à ce que le bloc en face soit de l'air
 -- \return bool Succès
 function RSI_Turtle:climb()
-    --TODO: Implémenter
     local success = true
 
     while (not self:isAir("front") and success)
@@ -492,7 +461,6 @@ end
 -- \param Côté: "top", "bottom", "left", "right", "front", "back"
 -- \return bool Bloc en face identique à l'argument
 function RSI_Turtle:isAir(side)
-    --TODO: Implementer
     if side == "top"
     then
         return (not turtle.inspectUp())
diff --git a/test.lua b/test.lua
index 7b30f5e..4ee13d5 100644
--- a/test.lua
+++ b/test.lua
@@ -139,5 +139,13 @@ print("Tests moveGrounded")
 assert(t:moveToGrounded(-5,5))
 assert(checkPos(-5,0,5))
 
+assert(t:moveTo(-5,2,-1))
+print(t:getPos())
+assert(checkPos(-5,2,-1))
+
+assert(t:moveToOrigin())
+print(t:getPos())
+assert(checkPos(0,0,0))
+
 print("Fin des tests")
 
-- 
GitLab