valence_entity/
flags.rs
1use super::*;
2
3macro_rules! flags {
5 (
6 $(
7 $component:path {
8 $($flag:ident: $offset:literal),* $(,)?
9 }
10 )*
11
12 ) => {
13 $(
14 impl $component {
15 $(
16 #[doc = "Gets the bit at offset "]
17 #[doc = stringify!($offset)]
18 #[doc = "."]
19 #[inline]
20 pub const fn $flag(&self) -> bool {
21 (self.0 >> $offset) & 1 == 1
22 }
23
24 paste! {
25 #[doc = "Sets the bit at offset "]
26 #[doc = stringify!($offset)]
27 #[doc = "."]
28 #[inline]
29 pub fn [< set_$flag >] (&mut self, $flag: bool) {
30 self.0 = (self.0 & !(1 << $offset)) | ((i8::from($flag)) << $offset);
31 }
32 }
33 )*
34 }
35 )*
36 }
37}
38
39flags! {
40 entity::Flags {
41 on_fire: 0,
42 sneaking: 1,
43 sprinting: 3,
44 swimming: 4,
45 invisible: 5,
46 glowing: 6,
47 fall_flying: 7,
48 }
49 persistent_projectile::ProjectileFlags {
50 critical: 0,
51 no_clip: 1,
52 }
53 living::LivingFlags {
54 using_item: 0,
55 off_hand_active: 1,
56 using_riptide: 2,
57 }
58 player::PlayerModelParts {
59 cape: 0,
60 jacket: 1,
61 left_sleeve: 2,
62 right_sleeve: 3,
63 left_pants_leg: 4,
64 right_pants_leg: 5,
65 hat: 6,
66 }
67 player::MainArm {
68 right: 0,
69 }
70 armor_stand::ArmorStandFlags {
71 small: 0,
72 show_arms: 1,
73 hide_base_plate: 2,
74 marker: 3,
75 }
76 mob::MobFlags {
77 ai_disabled: 0,
78 left_handed: 1,
79 attacking: 2,
80 }
81 bat::BatFlags {
82 hanging: 0,
83 }
84 abstract_horse::HorseFlags {
85 tamed: 1,
86 saddled: 2,
87 bred: 3,
88 eating_grass: 4,
89 angry: 5,
90 eating: 6,
91 }
92 fox::FoxFlags {
93 sitting: 0,
94 crouching: 2,
95 rolling_head: 3,
96 chasing: 4,
97 sleeping: 5,
98 walking: 6,
99 aggressive: 7,
100 }
101 panda::PandaFlags {
102 sneezing: 1,
103 playing: 2,
104 sitting: 3,
105 lying_on_back: 4,
106 }
107 tameable::TameableFlags {
108 sitting_pose: 0,
109 tamed: 2,
110 }
111 iron_golem::IronGolemFlags {
112 player_created: 0,
113 }
114 snow_golem::SnowGolemFlags {
115 has_pumpkin: 4,
116 }
117 blaze::BlazeFlags {
118 fire_active: 0,
119 }
120 vex::VexFlags {
121 charging: 0,
122 }
123 spider::SpiderFlags {
124 climbing_wall: 0,
125 }
126}
127
128#[cfg(test)]
129mod tests {
130 use super::*;
131
132 #[test]
133 fn get_set_flags() {
134 let mut flags = entity::Flags(0);
135
136 flags.set_on_fire(true);
137 let before = flags.clone();
138 assert_ne!(flags.0, 0);
139 flags.set_on_fire(true);
140 assert_eq!(before, flags);
141 flags.set_on_fire(false);
142 assert_eq!(flags.0, 0);
143 }
144}