diff --git a/rsiTurtle.lua b/rsiTurtle.lua index c3d647e555d3ff57d1a3e5aba37b6ea49ce6f542..cda152317dca582fc98c8fd28fab9d2856c70452 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 64e0d2020cfd41b57ab0eb27728ba59e08b75d4a..7b30f5e7bea52cfb7e9c8c576f5747c5386577d3 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")