1pub struct BlockBehavior {
2 pub friction: f32,
3 pub jump_factor: f32,
4 pub destroy_time: f32,
5 pub explosion_resistance: f32,
6 pub requires_correct_tool_for_drops: bool,
7
8 pub force_solid: Option<bool>,
9}
10
11impl Default for BlockBehavior {
12 fn default() -> Self {
13 Self {
14 friction: 0.6,
15 jump_factor: 1.0,
16 destroy_time: 0.,
17 explosion_resistance: 0.,
18 requires_correct_tool_for_drops: false,
19 force_solid: None,
20 }
21 }
22}
23
24impl BlockBehavior {
25 pub fn new() -> Self {
26 Self::default()
27 }
28
29 pub fn friction(mut self, friction: f32) -> Self {
30 self.friction = friction;
31 self
32 }
33
34 pub fn jump_factor(mut self, jump_factor: f32) -> Self {
35 self.jump_factor = jump_factor;
36 self
37 }
38
39 pub fn destroy_time(mut self, destroy_time: f32) -> Self {
40 self.destroy_time = destroy_time;
41 self
42 }
43
44 pub fn explosion_resistance(mut self, explosion_resistance: f32) -> Self {
45 self.explosion_resistance = f32::max(0., explosion_resistance);
46 self
47 }
48
49 pub fn strength(self, destroy_time: f32, explosion_resistance: f32) -> Self {
50 self.destroy_time(destroy_time)
51 .explosion_resistance(explosion_resistance)
52 }
53
54 pub fn requires_correct_tool_for_drops(mut self) -> Self {
55 self.requires_correct_tool_for_drops = true;
56 self
57 }
58
59 pub fn force_solid(mut self, force_solid: bool) -> Self {
61 self.force_solid = Some(force_solid);
62 self
63 }
64}