From b5503ef707a2a2aa079c9d73c873dbc96a634cf2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9tro?= <yann.roberge@polymtl.ca>
Date: Tue, 20 Oct 2020 21:20:11 -0400
Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20fonctions=20de=20d?=
 =?UTF-8?q?=C3=A9placement=20de=20base?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 rsiTurtle.lua | 118 ++++++++++++++++++++++++++++++++++++++++++++++----
 test.lua      |   8 ++++
 2 files changed, 117 insertions(+), 9 deletions(-)

diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index 166a867..d8e4f85 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -35,7 +35,7 @@ function RSI_Turtle:init()
     
     ---
     -- \brief Orientation de la tortue en cadrant horloge:
-    --          0: Avant
+    --          0:  Avant
     --          3:  Droite
     --          6:  Arrière
     --          9:  Gauche
@@ -66,25 +66,76 @@ function RSI_Turtle:print()
     end
 end
 
+
+---
+-- \brief Déplacement parallèle au sol
+function RSI_Turtle:moveTo(x, y)
+    --TODO: Implementer
+end
+
+
+---
+-- \brief Déplacement dans les trois dimensions
+function RSI_Turtle:moveTo(x, y, z)
+    --TODO: Implementer
+end
+
+
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
-function RSI_Turtle:moveGround(dx, dy)
+function RSI_Turtle:moveToGrounded(x, y)
     --TODO: Implementer
 end
 
+
 ---
 -- \brief Déplacement parallèle au sol
+-- \return bool Succès
 function RSI_Turtle:move(dx, dy)
-    --TODO: Implementer
+    if dx >= 0
+    then
+        self:face_(12)
+    else
+        self:face_(6)
+    end
+    for i=1,dx,1
+    do
+        self:forward()
+    end
+    
+    if (dx <= 0 and dy >= 0) or (dx >= 0 and dy <= 0)
+    then
+        self:turnLeft()
+    else
+        self:turnRight()
+    end
+    
+    for i=1,dy,1
+    do
+        self:forward()
+    end
+    
 end
 
+
 ---
 -- \brief Déplacement dans les trois dimensions
+-- \return bool Succès
 function RSI_Turtle:move(dx, dy, dz)
     --TODO: Implementer
 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:moveGrounded(dx, dy)
+    --TODO: Implementer
+end
+
+
 ---
 -- \brief Tourne la tortue face à la direction voulue.
 -- \param Orientation en heures (3, 6, 9, 12)
@@ -112,30 +163,66 @@ end
 -- \brief Déplacement avant
 -- \return bool Succès
 function RSI_Turtle:forward()
-    --TODO: Implementer
+    turtle.forward()
+    
+    if self.facing_ == 0 then
+        self.pos_["x"] = self.pos_["x"] + 1
+    elseif self.facing_ == 3 then
+        self.pos_["y"] = self.pos_["y"] + 1
+    elseif self.facing_ == 6 then
+        self.pos_["x"] = self.pos_["x"] - 1
+    elseif self.facing_ == 9 then
+        self.pos_["y"] = self.pos_["y"] - 1
+    end
+    
 end
 
 ---
 -- \brief Déplacement arrière
 -- \return bool Succès
 function RSI_Turtle:backward()
-    --TODO: Implementer
+    result = turtle.backward()
+    
+    if result then
+        if self.facing_ == 0 then
+            self.pos_["x"] = self.pos_["x"] - 1
+        elseif self.facing_ == 3 then
+            self.pos_["y"] = self.pos_["y"] - 1
+        elseif self.facing_ == 6 then
+            self.pos_["x"] = self.pos_["x"] + 1
+        elseif self.facing_ == 9 then
+            self.pos_["y"] = self.pos_["y"] + 1
+        end
+    end
+    return result
 end
 
 ---
 -- \brief Déplacement haut
 -- \return bool Succès
 function RSI_Turtle:up()
-    --TODO: Implementer
+    result = turtle.up()
+    
+    if result then
+        self.pos_["z"] = self.pos_["z"] + 1
+    end
+    return result
 end
 
+
 ---
 -- \brief Déplacement bas
 -- \return bool Succès
 function RSI_Turtle:down()
-    --TODO: Implementer
+    result = turtle.down()
+    
+    if result then
+        self.pos_["z"] = self.pos_["z"] - 1
+    end
+    return result
 end
 
+
 ---
 -- \brief Tourne 90 degrés dans le sens contraire des aiguilles d'une montre
 function RSI_Turtle:turnLeft()
@@ -143,6 +230,7 @@ function RSI_Turtle:turnLeft()
     self.facing_ = (self.facing_ - 3) % 12
 end
 
+
 ---
 -- \brief Tourne 90 degrés dans le sens des aiguilles d'une montre
 function RSI_Turtle:turnRight()
@@ -150,20 +238,29 @@ function RSI_Turtle:turnRight()
     self.facing_ = (self.facing_ + 3) % 12
 end
 
+
 ---
 -- \brief Déplacement à gauche
 -- \return bool Succès
 function RSI_Turtle:left()
-    --TODO: Implementer
+    self:turnLeft()
+    result = self:forward()
+    self:turnRight()
+    return result
 end
 
+
 ---
 -- \brief Déplacement à droite
 -- \return bool Succès
 function RSI_Turtle:right()
-    --TODO: Implementer
+    self:turnRight()
+    result = self:forward()
+    self:turnLeft()
+    return result
 end
 
+
 ---
 -- \brief Descendre jusqu'à rencontrer le sol
 -- \return bool Succès
@@ -171,6 +268,7 @@ function RSI_Turtle:ground()
     --TODO: Implementer
 end
 
+
 ---
 -- \brief Quadriller une zone carrée. La tortue traverse chaque case, ligne par 
 --          ligne. N'affecte pas l'altitude.
@@ -181,6 +279,7 @@ function RSI_Turtle:goThroughArea(action)
     --TODO: Implementer
 end
 
+
 ---
 -- \brief Quadriller une zone carrée. La tortue traverse chaque case, ligne par 
 --          ligne. Reste au niveau du sol.
@@ -191,6 +290,7 @@ function RSI_Turtle:goThroughAreaGround(action)
     --TODO: Implementer
 end
 
+
 ---
 -- \brief Vérifier l'ID du bloc en face
 -- \param Nom du bloc à vérifier
diff --git a/test.lua b/test.lua
index 70909a0..2362f53 100644
--- a/test.lua
+++ b/test.lua
@@ -47,3 +47,11 @@ t:print()
 t:face(9)
 t:print()
 
+print("Test mouvements;")
+t:face(6)
+t:forward()
+t:up()
+t:print()
+t:backward()
+t:down()
+t:print()
\ No newline at end of file
-- 
GitLab