azalea::nearest_entity

Struct EntityFinder

Source
pub struct EntityFinder<'w, 's, F = ()>
where F: QueryFilter + 'static,
{ /* private fields */ }
Expand description

This system parameter can be used as a shorthand for quickly finding an entity, (or several) close to a given position.

This system parameter allows for additional filtering of entities based off of ECS marker components, such as With<>, Without<>, or Added<>, etc. All functions used by this system parameter instance will respect the applied filter.

use azalea::chat::SendChatEvent;
use azalea::nearest_entity::EntityFinder;
use azalea_entity::metadata::{Player, AbstractMonster};
use azalea_entity::LocalEntity;
use bevy_ecs::system::Query;
use bevy_ecs::prelude::{Entity, EventWriter};
use bevy_ecs::query::With;

/// All bots near aggressive mobs will scream in chat.
pub fn bots_near_aggressive_mobs(
    bots: Query<Entity, (With<LocalEntity>, With<Player>)>,
    entity_finder: EntityFinder<With<AbstractMonster>>,
    mut chat_events: EventWriter<SendChatEvent>,
) {
    for bot_id in bots.iter() {
        let Some(nearest) = entity_finder.nearest_to_entity(bot_id, 16.0) else {
            continue;
        };

        chat_events.send(SendChatEvent {
            entity: bot_id,
            content: String::from("Ahhh!"),
        });
    }
}

Implementations§

Source§

impl<'w, 's, 'a, F> EntityFinder<'w, 's, F>
where F: QueryFilter + 'static,

Source

pub fn nearest_to_position( &'a self, position: &Position, instance_name: &InstanceName, max_distance: f64, ) -> Option<Entity>

Gets the nearest entity to the given position and world instance name. This method will return None if there are no entities within range. If multiple entities are within range, only the closest one is returned.

Source

pub fn nearest_to_entity( &'a self, entity: Entity, max_distance: f64, ) -> Option<Entity>

Gets the nearest entity to the given entity. This method will return None if there are no entities within range. If multiple entities are within range, only the closest one is returned.

Source

pub fn nearby_entities_to_position( &'a self, position: &'a Position, instance_name: &'a InstanceName, max_distance: f64, ) -> impl Iterator<Item = (Entity, f64)> + 'a

This function get an iterator over all nearby entities to the given position within the given maximum distance. The entities in this iterator are not returned in any specific order.

This function returns the Entity ID of nearby entities and their distance away.

Source

pub fn nearby_entities_to_entity( &'a self, entity: Entity, max_distance: f64, ) -> impl Iterator<Item = (Entity, f64)> + 'a

This function get an iterator over all nearby entities to the given entity within the given maximum distance. The entities in this iterator are not returned in any specific order.

This function returns the Entity ID of nearby entities and their distance away.

Trait Implementations§

Source§

impl<F> SystemParam for EntityFinder<'_, '_, F>
where F: QueryFilter + 'static,

Source§

type State = FetchState<F>

Used to store data which persists across invocations of a system.
Source§

type Item<'w, 's> = EntityFinder<'w, 's, F>

The item type returned when constructing this system param. The value of this associated type should be Self, instantiated with new lifetimes. Read more
Source§

fn init_state(world: &mut World, system_meta: &mut SystemMeta) -> Self::State

Registers any [World] access used by this [SystemParam] and creates a new instance of this param’s State.
Source§

fn new_archetype( state: &mut Self::State, archetype: &Archetype, system_meta: &mut SystemMeta, )

For the specified [Archetype], registers the components accessed by this [SystemParam] (if applicable).
Source§

fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)

Applies any deferred mutations stored in this [SystemParam]’s state. This is used to apply Commands during apply_deferred.
Source§

unsafe fn get_param<'w, 's>( state: &'s mut Self::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, change_tick: Tick, ) -> Self::Item<'w, 's>

Creates a parameter to be passed into a SystemParamFunction. Read more
Source§

impl<'w, 's, F> ReadOnlySystemParam for EntityFinder<'w, 's, F>
where F: QueryFilter + 'static, Query<'w, 's, (&'static Position, &'static InstanceName), With<MinecraftEntityId>>: ReadOnlySystemParam, Query<'w, 's, (Entity, &'static InstanceName, &'static Position), (With<MinecraftEntityId>, F)>: ReadOnlySystemParam,

Auto Trait Implementations§

§

impl<'w, 's, F> Freeze for EntityFinder<'w, 's, F>

§

impl<'w, 's, F = ()> !RefUnwindSafe for EntityFinder<'w, 's, F>

§

impl<'w, 's, F> Send for EntityFinder<'w, 's, F>

§

impl<'w, 's, F> Sync for EntityFinder<'w, 's, F>

§

impl<'w, 's, F> Unpin for EntityFinder<'w, 's, F>

§

impl<'w, 's, F = ()> !UnwindSafe for EntityFinder<'w, 's, F>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsAny for T
where T: Any,

§

fn as_any(&self) -> &(dyn Any + 'static)

§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

§

fn type_name(&self) -> &'static str

Gets the type name of self
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> Downcast for T
where T: AsAny + ?Sized,

§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more