From bc9144bcd68999fed29840a57c60c63b79ffc531 Mon Sep 17 00:00:00 2001 From: bird Date: Thu, 25 May 2023 12:40:43 +0200 Subject: [PATCH] implement `Deref` for `State` (#8668) # Objective - Allow for directly call methods on states without first calling `state.get().my_method()` ## Solution - Implement `Deref` for `State` with `Target = S` --- *I did not implement `DerefMut` because states hold no data and should only be changed via `NextState::set()`* --- crates/bevy_ecs/src/schedule/state.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/bevy_ecs/src/schedule/state.rs b/crates/bevy_ecs/src/schedule/state.rs index 763198aa0f..27141d05fc 100644 --- a/crates/bevy_ecs/src/schedule/state.rs +++ b/crates/bevy_ecs/src/schedule/state.rs @@ -1,6 +1,7 @@ use std::fmt::Debug; use std::hash::Hash; use std::mem; +use std::ops::Deref; use crate as bevy_ecs; use crate::change_detection::DetectChangesMut; @@ -95,6 +96,14 @@ impl PartialEq for State { } } +impl Deref for State { + type Target = S; + + fn deref(&self) -> &Self::Target { + self.get() + } +} + /// The next state of [`State`]. /// /// To queue a transition, just set the contained value to `Some(next_state)`.