diff --git a/rsiTurtle.lua b/rsiTurtle.lua index cda152317dca582fc98c8fd28fab9d2856c70452..581f9bcdeb2e40e01d7dc9a9dbc65bf839d12e7e 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 7b30f5e7bea52cfb7e9c8c576f5747c5386577d3..4ee13d54c5aa921a899d1226419d715040f4abaa 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")