mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 23:44:38 +00:00
jump if in water while executing pathfinder path
This commit is contained in:
parent
086f979a28
commit
e4ead93f19
4 changed files with 27 additions and 6 deletions
|
@ -313,7 +313,7 @@ fn handle_mining_queued(
|
||||||
physics,
|
physics,
|
||||||
) >= 1.
|
) >= 1.
|
||||||
{
|
{
|
||||||
// block was broken instantly
|
// block was broken instantly (instamined)
|
||||||
commands.trigger_targets(
|
commands.trigger_targets(
|
||||||
FinishMiningBlockEvent {
|
FinishMiningBlockEvent {
|
||||||
position: mining_queued.position,
|
position: mining_queued.position,
|
||||||
|
@ -497,10 +497,10 @@ pub fn handle_stop_mining_block_event(
|
||||||
mut events: EventReader<StopMiningBlockEvent>,
|
mut events: EventReader<StopMiningBlockEvent>,
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
mut mine_block_progress_events: EventWriter<MineBlockProgressEvent>,
|
mut mine_block_progress_events: EventWriter<MineBlockProgressEvent>,
|
||||||
mut query: Query<(&mut Mining, &MineBlockPos, &mut MineProgress)>,
|
mut query: Query<(&MineBlockPos, &mut MineProgress)>,
|
||||||
) {
|
) {
|
||||||
for event in events.read() {
|
for event in events.read() {
|
||||||
let (mut _mining, mine_block_pos, mut mine_progress) = query.get_mut(event.entity).unwrap();
|
let (mine_block_pos, mut mine_progress) = query.get_mut(event.entity).unwrap();
|
||||||
|
|
||||||
let mine_block_pos =
|
let mine_block_pos =
|
||||||
mine_block_pos.expect("IsMining is true so MineBlockPos must be present");
|
mine_block_pos.expect("IsMining is true so MineBlockPos must be present");
|
||||||
|
@ -639,7 +639,7 @@ pub fn continue_mining_block(
|
||||||
));
|
));
|
||||||
**mine_progress = 0.;
|
**mine_progress = 0.;
|
||||||
**mine_ticks = 0.;
|
**mine_ticks = 0.;
|
||||||
**mine_delay = 0;
|
**mine_delay = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
mine_block_progress_events.write(MineBlockProgressEvent {
|
mine_block_progress_events.write(MineBlockProgressEvent {
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
//! The goals that a pathfinder can try to reach.
|
//! The goals that a pathfinder can try to reach.
|
||||||
|
|
||||||
use std::{f32::consts::SQRT_2, fmt::Debug};
|
use std::{
|
||||||
|
f32::consts::SQRT_2,
|
||||||
|
fmt::{self, Debug},
|
||||||
|
};
|
||||||
|
|
||||||
use azalea_core::position::{BlockPos, Vec3};
|
use azalea_core::position::{BlockPos, Vec3};
|
||||||
use azalea_world::ChunkStorage;
|
use azalea_world::ChunkStorage;
|
||||||
|
@ -193,7 +196,7 @@ impl<T: Goal> Goal for AndGoals<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Move to a position where we can reach the given block.
|
/// Move to a position where we can reach the given block.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone)]
|
||||||
pub struct ReachBlockPosGoal {
|
pub struct ReachBlockPosGoal {
|
||||||
pub pos: BlockPos,
|
pub pos: BlockPos,
|
||||||
pub distance: f64,
|
pub distance: f64,
|
||||||
|
@ -244,3 +247,12 @@ impl Goal for ReachBlockPosGoal {
|
||||||
block_hit_result.block_pos == self.pos
|
block_hit_result.block_pos == self.pos
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl Debug for ReachBlockPosGoal {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
f.debug_struct("ReachBlockPosGoal")
|
||||||
|
.field("pos", &self.pos)
|
||||||
|
.field("distance", &self.distance)
|
||||||
|
.field("max_check_distance", &self.max_check_distance)
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ fn execute_forward_move(mut ctx: ExecuteCtx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.look_at(center);
|
ctx.look_at(center);
|
||||||
|
ctx.jump_if_in_water();
|
||||||
ctx.sprint(SprintDirection::Forward);
|
ctx.sprint(SprintDirection::Forward);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +142,7 @@ fn execute_ascend_move(mut ctx: ExecuteCtx) {
|
||||||
|
|
||||||
ctx.look_at(target_center);
|
ctx.look_at(target_center);
|
||||||
ctx.walk(WalkDirection::Forward);
|
ctx.walk(WalkDirection::Forward);
|
||||||
|
ctx.jump_if_in_water();
|
||||||
|
|
||||||
// these checks are to make sure we don't fall if our velocity is too high in
|
// these checks are to make sure we don't fall if our velocity is too high in
|
||||||
// the wrong direction
|
// the wrong direction
|
||||||
|
@ -439,6 +441,7 @@ fn execute_diagonal_move(mut ctx: ExecuteCtx) {
|
||||||
|
|
||||||
ctx.look_at(target_center);
|
ctx.look_at(target_center);
|
||||||
ctx.sprint(SprintDirection::Forward);
|
ctx.sprint(SprintDirection::Forward);
|
||||||
|
ctx.jump_if_in_water();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Go directly down, usually by mining.
|
/// Go directly down, usually by mining.
|
||||||
|
|
|
@ -111,6 +111,12 @@ impl ExecuteCtx<'_, '_, '_, '_, '_, '_, '_> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn jump_if_in_water(&mut self) {
|
||||||
|
if self.physics.is_in_water() {
|
||||||
|
self.jump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns whether this block could be mined.
|
/// Returns whether this block could be mined.
|
||||||
pub fn should_mine(&mut self, block: BlockPos) -> bool {
|
pub fn should_mine(&mut self, block: BlockPos) -> bool {
|
||||||
let block_state = self
|
let block_state = self
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue