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