@@ -18,18 +18,51 @@ pub struct TrackballViewport {
18
18
}
19
19
20
20
impl TrackballViewport {
21
- /// Whether the viewport has been stolen.
21
+ /// Condition whether the viewport has been stolen, evaluated by [`IntoSystemConfigs::run_if`] .
22
22
#[ allow( clippy:: needless_pass_by_value) ]
23
23
#[ must_use]
24
24
pub fn stolen ( viewport : Res < Self > ) -> bool {
25
25
viewport. stolen != 0
26
26
}
27
27
/// Steals the viewport or gives it back.
28
+ ///
29
+ /// # Examples
30
+ ///
31
+ /// Steals the viewport for `Some(frames)` and lets it count `frames` down with `None`:
32
+ ///
33
+ /// ```ignore
34
+ /// fn system(/* ... */) {
35
+ /// viewport.set_stolen(just_stolen.then_some(3));
36
+ /// }
37
+ ///
38
+ /// // frame 0: just_stolen = true -> set_stolen(Some(3)) -> frames = 3 -> stolen = true
39
+ /// // frame 1: just_stolen = false -> set_stolen(None) -> frames = 2 -> stolen = true
40
+ /// // frame 2: just_stolen = false -> set_stolen(None) -> frames = 1 -> stolen = true
41
+ /// // frame 3: just_stolen = false -> set_stolen(None) -> frames = 0 -> stolen = false
42
+ /// ```
43
+ ///
44
+ /// Steals the viewport with `Some(1)` and gives it back with `Some(0)`:
45
+ ///
46
+ /// ```ignore
47
+ /// fn system(/* ... */) {
48
+ /// if just_stolen {
49
+ /// viewport.set_stolen(Some(1));
50
+ /// }
51
+ /// if just_give_back {
52
+ /// viewport.set_stolen(Some(0));
53
+ /// }
54
+ /// }
55
+ ///
56
+ /// // frame 0: just_stolen = true -> set_stolen(Some(1)) -> frames = 1 -> stolen = true
57
+ /// // frame 1: just_stolen = false -> -> frames = 1 -> stolen = true
58
+ /// // frame 25: just_stolen = false -> -> frames = 1 -> stolen = true
59
+ /// // frame 50: just_give_back = true -> set_stolen(Some(0)) -> frames = 0 -> stolen = false
60
+ /// ```
28
61
#[ allow( clippy:: needless_pass_by_value) ]
29
- pub fn set_stolen ( & mut self , stolen : bool ) {
30
- if stolen {
62
+ pub fn set_stolen ( & mut self , stolen : Option < usize > ) {
63
+ if let Some ( frames ) = stolen {
31
64
self . entity = None ;
32
- self . stolen = 2 ;
65
+ self . stolen = frames ;
33
66
} else if self . stolen != 0 {
34
67
self . stolen -= 1 ;
35
68
}
0 commit comments