From 799fd4cb6a3f237698311bebe3228ec46d032cb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9tro?= <yann.roberge@polymtl.ca>
Date: Fri, 23 Oct 2020 20:30:06 -0400
Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20des=20fonctions=20move=20?=
 =?UTF-8?q?au=20niveau=20du=20sol=20('Grounded')?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 rsiTurtle.lua | 80 +++++++++++++++++++++++++++++++++++++++++++++++++--
 test.lua      | 13 +++++++--
 2 files changed, 88 insertions(+), 5 deletions(-)

diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index c3d647e..cda1523 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -149,7 +149,7 @@ function RSI_Turtle:move2D(dx, dz)
     then
         return false
     end
-    succes = self:moveForward(math.abs(dz))
+    success = self:moveForward(math.abs(dz))
 
 
     return success
@@ -185,11 +185,41 @@ function RSI_Turtle:move(dx, dy, dz)
 end
 
 
+---
+-- \brief Déplacement avant multiple
+-- \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)
+end
+
+
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
+-- \return bool Succès
 function RSI_Turtle:moveToGrounded(x, z)
-    --TODO: Implementer
+    return self:moveGrounded(x - self.pos_["x"], z - self.pos_["z"])
 end
 
 
@@ -198,7 +228,51 @@ end
 -- escalade et descend automatiquement les pentes
 -- \return bool Succès
 function RSI_Turtle:moveGrounded(dx, dz)
-    --TODO: Implementer
+    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
 end
 
 
diff --git a/test.lua b/test.lua
index 64e0d20..7b30f5e 100644
--- a/test.lua
+++ b/test.lua
@@ -127,8 +127,17 @@ print(t:getPos())
 assert(checkPos(0,0,0))
 t:face(12)
 
-print("Tests climb")
-assert(t:climb())
+-- print("Tests climb")
+-- assert(t:climb())
+
+print("Tests moveForwardGrounded")
+assert(t:moveTo(0,5,0))
+assert(t:moveForwardGrounded(15))
+assert(checkPos(15,0,0))
+
+print("Tests moveGrounded")
+assert(t:moveToGrounded(-5,5))
+assert(checkPos(-5,0,5))
 
 print("Fin des tests")
 
-- 
GitLab