Enum widgetry::mapspace::world::WorldOutcome
source · pub enum WorldOutcome<ID: ObjectID> {
ClickedFreeSpace(Pt2D),
Dragging {
obj: ID,
dx: f64,
dy: f64,
cursor: Pt2D,
},
Keypress(&'static str, ID),
ClickedObject(ID),
HoverChanged(Option<ID>, Option<ID>),
Nothing,
}
Expand description
The result of a World
handling an event
Variants§
ClickedFreeSpace(Pt2D)
A left click occurred while not hovering on any object
Dragging
An object is being dragged. The given offsets are relative to the previous dragging event. The current position of the cursor is included. If you’re dragging a large object, applying the offset will likely feel more natural than centering on the cursor.
Keypress(&'static str, ID)
While hovering on an object with a defined hotkey, that key was pressed.
ClickedObject(ID)
A hoverable object was clicked
HoverChanged(Option<ID>, Option<ID>)
The object being hovered on changed from (something before, to something after). Note this
transition may also occur outside of event
– such as during delete
or initialize_hover
.
TODO Bug in the map_editor: If you delete one object, then the caller does initialize_hover and we immediately wind up on another road beneath, we don’t detect this and start showing road points.
Nothing
Nothing interesting happened
Implementations§
source§impl<I: ObjectID> WorldOutcome<I>
impl<I: ObjectID> WorldOutcome<I>
sourcepub fn maybe_map_id<O: ObjectID, F: Fn(I) -> Option<O>>(
self,
f: F
) -> Option<WorldOutcome<O>>
pub fn maybe_map_id<O: ObjectID, F: Fn(I) -> Option<O>>( self, f: F ) -> Option<WorldOutcome<O>>
If the outcome references some ID, transform it to another type. This is useful when some component owns a World that contains a few different types of objects, some of which are managed by another component that only cares about its IDs.
Trait Implementations§
Auto Trait Implementations§
impl<ID> Freeze for WorldOutcome<ID>where
ID: Freeze,
impl<ID> RefUnwindSafe for WorldOutcome<ID>where
ID: RefUnwindSafe,
impl<ID> Send for WorldOutcome<ID>where
ID: Send,
impl<ID> Sync for WorldOutcome<ID>where
ID: Sync,
impl<ID> Unpin for WorldOutcome<ID>where
ID: Unpin,
impl<ID> UnwindSafe for WorldOutcome<ID>where
ID: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.