1
Fork 0

more conserverative fuel dispatch

This commit is contained in:
Andy Killorin 2023-12-22 09:02:22 -06:00
parent 2e4e805ed4
commit f7c5e3fdf5
Signed by: ank
GPG key ID: B6241CA3B552BCA4
4 changed files with 13 additions and 5 deletions

View file

@ -38,3 +38,4 @@ tower-layer = "0.3.2"
tracing = "0.1" tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] } tracing-subscriber = { version = "0.3", features = ["env-filter"] }
typetag = "0.2.14" typetag = "0.2.14"
ucnlnav = { git = "https://github.com/ucnl/UCNLNav.git", version = "0.1.0" }

View file

@ -31,6 +31,7 @@ use crate::{blocks::Block, paths::route};
mod blocks; mod blocks;
mod names; mod names;
mod mine; mod mine;
mod fell;
mod paths; mod paths;
mod safe_kill; mod safe_kill;
mod turtle; mod turtle;
@ -233,7 +234,7 @@ async fn set_goal(
Json(req): Json<Position>, Json(req): Json<Position>,
) -> &'static str { ) -> &'static str {
let turtle = state.read().await.get_turtle(id).await.unwrap(); let turtle = state.read().await.get_turtle(id).await.unwrap();
tokio::spawn(async move {turtle.goto(req).await}); tokio::spawn(async move {turtle.goto(req).await.expect("route failed")});
"ACK" "ACK"
} }
@ -265,7 +266,8 @@ async fn turtle_info(
let cloned = Turtle::new( let cloned = Turtle::new(
turtle.name.to_num(), turtle.name.to_num(),
turtle.position, turtle.position,
turtle.fuel turtle.fuel,
turtle.fuel_limit,
); );
Json(cloned) Json(cloned)

View file

@ -136,6 +136,7 @@ const USELESS: [&str; 5] = [
"minecraft:cobblestone", "minecraft:cobblestone",
"minecraft:cobbled_deepslate", "minecraft:cobbled_deepslate",
"minecraft:rhyolite", "minecraft:rhyolite",
//"minecraft:andesite", // TODO: Reach 2k
]; ];
/// Things that are desirable /// Things that are desirable
@ -150,7 +151,7 @@ pub async fn mine(turtle: TurtleCommander, pos: Vec3, fuel: Position, storage: P
let mut valuables = Vec::new(); let mut valuables = Vec::new();
async fn refuel_needed(turtle: &TurtleCommander, volume: i32, fuel: Position) -> Option<()> { async fn refuel_needed(turtle: &TurtleCommander, volume: i32, fuel: Position) -> Option<()> {
Some(if (turtle.fuel().await as f64) < (volume + (fuel.pos-turtle.pos().await.pos).abs().sum()) as f64 * 1.1 { Some(if (turtle.fuel().await as f64) < (2 * volume + (fuel.pos-turtle.pos().await.pos).abs().sum()) as f64 * 1.8 {
println!("refueling"); println!("refueling");
turtle.goto(fuel).await?; turtle.goto(fuel).await?;
println!("docked"); println!("docked");
@ -181,6 +182,9 @@ pub async fn mine(turtle: TurtleCommander, pos: Vec3, fuel: Position, storage: P
println!("storage rtb"); println!("storage rtb");
turtle.goto(storage).await?; turtle.goto(storage).await?;
dump(turtle.clone()).await; dump(turtle.clone()).await;
// while we're here
turtle.goto(fuel).await?;
refuel(turtle.clone()).await;
} }
pos += Vec3::z() * chunk.z; pos += Vec3::z() * chunk.z;
@ -222,7 +226,7 @@ async fn refuel(turtle: TurtleCommander) {
if let TurtleCommandResponse::Failure = re.ret { if let TurtleCommandResponse::Failure = re.ret {
// partial refuel, good enough // partial refuel, good enough
println!("only received {} fuel", turtle.fuel().await); println!("only received {} fuel", turtle.fuel().await);
if turtle.fuel().await > 1000 { if turtle.fuel().await > 5000 {
break; break;
} else { } else {
turtle.execute(Wait(15)).await; turtle.execute(Wait(15)).await;

View file

@ -100,10 +100,11 @@ impl Default for Turtle {
} }
impl Turtle { impl Turtle {
pub(crate) fn new(id: u32, position: Position, fuel: usize) -> Self { pub(crate) fn new(id: u32, position: Position, fuel: usize, fuel_limit: usize) -> Self {
Self { Self {
name: Name::from_num(id), name: Name::from_num(id),
fuel, fuel,
fuel_limit,
queued_movement: Vec3::new(0, 0, 0), queued_movement: Vec3::new(0, 0, 0),
position, position,
pending_update: true, pending_update: true,