diff --git a/rsiTurtle.lua b/rsiTurtle.lua index 1ffa9330f986ed5edcf7ed7e3654a9b158d72754..800d603f7bc70a0c7b980768529b728d8a5dca89 100644 --- a/rsiTurtle.lua +++ b/rsiTurtle.lua @@ -26,7 +26,11 @@ function RSI_Turtle:init() setmetatable(turtle,RSI_Turtle) --- - -- \brief Dictionnaire pour la position (x,y,z) + -- \brief Dictionnaire pour la position (x,y,z). + -- Le système de coordonnées est celui de minecraft: + -- x: Avant + -- y: Altitude + -- z: Droite turtle.pos_ = {} turtle.pos_["x"] = 0 turtle.pos_["y"] = 0 @@ -68,7 +72,7 @@ end --- -- \brief Déplacement parallèle au sol -function RSI_Turtle:moveTo(x, y) +function RSI_Turtle:moveTo2D(x, z) --TODO: Implementer end @@ -83,46 +87,81 @@ end --- -- \brief Déplacement s'assurant de rester au niveau du sol -- escalade et descend automatiquement les pentes -function RSI_Turtle:moveToGrounded(x, y) +function RSI_Turtle:moveToGrounded(x, z) --TODO: Implementer end --- -- \brief Déplacement parallèle au sol +-- Ordre de déplacement: X, Z -- \return bool Succès -function RSI_Turtle:move(dx, dy) +function RSI_Turtle:move2D(dx, dz) + local success + if dx >= 0 then - self:face_(12) + self:face(12) else - self:face_(6) + self:face(6) end for i=1,dx,1 do - self:forward() + success = self:forward() + end + + if not success + then + return false end - if (dx <= 0 and dy >= 0) or (dx >= 0 and dy <= 0) + if (dx <= 0 and dz >= 0) or (dx >= 0 and dz <= 0) then self:turnLeft() else self:turnRight() end - for i=1,dy,1 - do - self:forward() + if not success + then + return false end + for i=1,dz,1 + do + success = self:forward() + end + + return success end --- -- \brief Déplacement dans les trois dimensions +-- Ordre de déplacement: X, Z, Y -- \return bool Succès function RSI_Turtle:move(dx, dy, dz) - --TODO: Implementer + local success + + if (dy > 0) + then + for i=1,dy,1 + do + success = self:up() + end + elseif dy < 0 + then + for i=-1,dy,-1 + do + success = self:down() + end + end + + if (success) then + return self:move2D(dx, dz) + else + return false + end end @@ -130,7 +169,7 @@ 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) +function RSI_Turtle:moveGrounded(dx, dz) --TODO: Implementer end @@ -167,15 +206,40 @@ function RSI_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 + self.pos_["z"] = self.pos_["z"] + 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 + self.pos_["z"] = self.pos_["z"] - 1 + end +end + +--- +-- \brief Déplacement avant multiple +-- \param distance Distance à parcourir +-- \return bool Succès +function RSI_Turtle:moveForward(distance) + local traveled = 0 + + while (traveled < distance) and turtle.forward() + do + 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 arrière -- \return bool Succès @@ -186,16 +250,45 @@ function RSI_Turtle:backward() if self.facing_ == 0 then self.pos_["x"] = self.pos_["x"] - 1 elseif self.facing_ == 3 then - self.pos_["y"] = self.pos_["y"] - 1 + self.pos_["z"] = self.pos_["z"] - 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 + self.pos_["z"] = self.pos_["z"] + 1 end end return result end + +--- +-- \brief Déplacement arrière +-- \param distance Distance à parcourir +-- \return bool Succès +function RSI_Turtle:moveBackward(distance) + local traveled = 0 + + while (traveled < distance) and turtle.back() + do + traveled = traveled + 1 + end + + if result then + 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 + end + + return (traveled == distance) +end + + --- -- \brief Déplacement haut -- \return bool Succès @@ -203,7 +296,7 @@ function RSI_Turtle:up() result = turtle.up() if result then - self.pos_["z"] = self.pos_["z"] + 1 + self.pos_["y"] = self.pos_["y"] + 1 end return result end @@ -216,7 +309,7 @@ function RSI_Turtle:down() result = turtle.down() if result then - self.pos_["z"] = self.pos_["z"] - 1 + self.pos_["y"] = self.pos_["y"] - 1 end return result end @@ -264,9 +357,9 @@ end -- \brief Descendre jusqu'à rencontrer le sol -- \return bool Succès si a descendu d'au moins un bloc function RSI_Turtle:ground() - succes = self:down() + success = self:down() while self:down() do end - return succes + return success end diff --git a/test.lua b/test.lua index 566f6064a60f60dae365ba2cfd5a2728fd4fea7c..dbb62d7f65c253685c69e9fc78573cde963d1868 100644 --- a/test.lua +++ b/test.lua @@ -22,39 +22,56 @@ print("Test de RSI_Excavatrice") e = rsiE:init() e:print() -print("Test de l'API turtle") -print(turtle.inspect()) -print(turtle.up()) +-- print("Test de l'API turtle") +-- print(turtle.inspect()) +-- print(turtle.up()) +-- +-- print("Test RSI_Turtle:facing(3)") +-- print(t:face(3)) +-- t:print() +-- print("Test RSI_Turtle:facing(6)") +-- print(t:face(6)) +-- t:print() +-- print("Test RSI_Turtle:facing(9)") +-- print(t:face(9)) +-- t:print() +-- print("Test RSI_Turtle:facing(12)") +-- print(t:face(12)) +-- t:print() +-- +-- t:face(6) +-- t:print() +-- t:face(12) +-- 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() +-- +-- print("Test ground();") +-- t:ground() -print("Test RSI_Turtle:facing(3)") -print(t:face(3)) -t:print() -print("Test RSI_Turtle:facing(6)") -print(t:face(6)) -t:print() -print("Test RSI_Turtle:facing(9)") -print(t:face(9)) -t:print() -print("Test RSI_Turtle:facing(12)") -print(t:face(12)) -t:print() +print("Test move;") +print("1;") +t:move(0,0,5) +print("2;") +t:move(-3,-2,5) +print("3;") +t:move(2,2) +t:ground() -t:face(6) -t:print() -t:face(12) -t:print() -t:face(9) -t:print() +print("Test moveForward;") +t:moveForward(5) -print("Test mouvements;") -t:face(6) -t:forward() -t:up() -t:print() -t:backward() -t:down() -t:print() +print("Test move;") +t:moveBackward(5) -print("Test ground();") -t:ground() +print("Fin des tests")