added deque for moves
This commit is contained in:
parent
3f5a258ea9
commit
1f4a5a2c9b
2 changed files with 24 additions and 10 deletions
|
@ -123,7 +123,7 @@ repeat
|
|||
}
|
||||
|
||||
local rsp = http.post(
|
||||
endpoint .. "/turtle/update/" .. id,
|
||||
endpoint .. "/turtle/" .. id .. "/update" ,
|
||||
textutils.serializeJSON(info),
|
||||
{ ["Content-Type"] = "application/json" }
|
||||
)
|
||||
|
|
|
@ -63,7 +63,7 @@ impl Direction {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone)]
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct Turtle {
|
||||
name: Name,
|
||||
fuel: usize,
|
||||
|
@ -72,11 +72,12 @@ struct Turtle {
|
|||
position: Position,
|
||||
goal: Option<Position>,
|
||||
pending_update: bool,
|
||||
moves: VecDeque<TurtleCommand>,
|
||||
}
|
||||
|
||||
impl Turtle {
|
||||
fn new(id: u32, position: Vec3, facing: Direction, fuel: usize) -> Self {
|
||||
Self { name: Name::from_num(id), fuel, queued_movement: Vec3::new(0, 0, 0), position: (position, facing), goal: None, pending_update: true }
|
||||
Self { name: Name::from_num(id), fuel, queued_movement: Vec3::new(0, 0, 0), position: (position, facing), goal: None, pending_update: true, moves: VecDeque::new() }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -109,10 +110,10 @@ async fn main() -> Result<(), Error> {
|
|||
|
||||
let serv = Router::new()
|
||||
.route("/turtle/new", post(create_turtle))
|
||||
.route("/turtle/update/:id", post(command))
|
||||
.route("/turtle/:id/update", post(command))
|
||||
.route("/turtle/client.lua", get(client))
|
||||
.route("/turtle/setGoal/:id", post(set_goal))
|
||||
.route("/turtle/info/:id", get(turtle_info))
|
||||
.route("/turtle/:id/setGoal", post(set_goal))
|
||||
.route("/turtle/:id/info", get(turtle_info))
|
||||
.route("/turtle/updateAll", get(update_turtles))
|
||||
.route("/flush", get(flush))
|
||||
.with_state(state.clone());
|
||||
|
@ -227,8 +228,22 @@ async fn turtle_info(
|
|||
State(state): State<SharedControl>,
|
||||
) -> Json<Turtle> {
|
||||
let state = &mut state.read().await;
|
||||
let turtle = &state.turtles[id as usize];
|
||||
|
||||
Json(state.turtles[id as usize].clone())
|
||||
let mut pseudomoves: VecDeque<TurtleCommand> = VecDeque::new();
|
||||
turtle.moves.front().map(|m| pseudomoves.push_front(m.clone()));
|
||||
|
||||
let cloned = Turtle {
|
||||
name: turtle.name.clone(),
|
||||
fuel: turtle.fuel,
|
||||
queued_movement: turtle.queued_movement.clone(),
|
||||
position: turtle.position.clone(),
|
||||
goal: turtle.goal.clone(),
|
||||
pending_update: turtle.pending_update,
|
||||
moves: pseudomoves,
|
||||
};
|
||||
|
||||
Json(cloned)
|
||||
}
|
||||
|
||||
async fn command(
|
||||
|
@ -266,6 +281,7 @@ fn process_turtle_update(
|
|||
turtle.fuel = update.fuel;
|
||||
|
||||
turtle.position.0 += turtle.queued_movement;
|
||||
turtle.queued_movement = Vec3::zeros();
|
||||
}
|
||||
|
||||
let above = Block {
|
||||
|
@ -289,8 +305,6 @@ fn process_turtle_update(
|
|||
world.remove_at_point(&below.pos.into());
|
||||
world.insert(below);
|
||||
|
||||
turtle.queued_movement = turtle.position.1.clone().unit();
|
||||
|
||||
if turtle.goal.is_some_and(|g| g == turtle.position) {
|
||||
turtle.goal = None;
|
||||
}
|
||||
|
@ -373,7 +387,7 @@ enum TurtleMineMethod {
|
|||
Strip,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[derive(Serialize, Deserialize, Clone)]
|
||||
enum TurtleCommand {
|
||||
Wait,
|
||||
Forward,
|
||||
|
|
Loading…
Reference in a new issue