bevy 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/Cargo.lock +4279 -0
  3. data/Cargo.toml +36 -0
  4. data/README.md +226 -0
  5. data/crates/bevy/Cargo.toml +52 -0
  6. data/crates/bevy/src/app.rs +43 -0
  7. data/crates/bevy/src/component.rs +111 -0
  8. data/crates/bevy/src/entity.rs +30 -0
  9. data/crates/bevy/src/error.rs +32 -0
  10. data/crates/bevy/src/event.rs +190 -0
  11. data/crates/bevy/src/input_bridge.rs +300 -0
  12. data/crates/bevy/src/lib.rs +42 -0
  13. data/crates/bevy/src/mesh_renderer.rs +328 -0
  14. data/crates/bevy/src/query.rs +53 -0
  15. data/crates/bevy/src/render_app.rs +689 -0
  16. data/crates/bevy/src/resource.rs +28 -0
  17. data/crates/bevy/src/schedule.rs +186 -0
  18. data/crates/bevy/src/sprite_renderer.rs +355 -0
  19. data/crates/bevy/src/system.rs +44 -0
  20. data/crates/bevy/src/text_renderer.rs +258 -0
  21. data/crates/bevy/src/types/color.rs +114 -0
  22. data/crates/bevy/src/types/dynamic.rs +131 -0
  23. data/crates/bevy/src/types/math.rs +260 -0
  24. data/crates/bevy/src/types/mod.rs +9 -0
  25. data/crates/bevy/src/types/transform.rs +166 -0
  26. data/crates/bevy/src/world.rs +163 -0
  27. data/crates/bevy_ruby_render/Cargo.toml +22 -0
  28. data/crates/bevy_ruby_render/src/asset.rs +360 -0
  29. data/crates/bevy_ruby_render/src/audio.rs +511 -0
  30. data/crates/bevy_ruby_render/src/camera.rs +365 -0
  31. data/crates/bevy_ruby_render/src/gamepad.rs +398 -0
  32. data/crates/bevy_ruby_render/src/lib.rs +26 -0
  33. data/crates/bevy_ruby_render/src/material.rs +310 -0
  34. data/crates/bevy_ruby_render/src/mesh.rs +491 -0
  35. data/crates/bevy_ruby_render/src/sprite.rs +289 -0
  36. data/ext/bevy/Cargo.toml +20 -0
  37. data/ext/bevy/extconf.rb +6 -0
  38. data/ext/bevy/src/conversions.rs +137 -0
  39. data/ext/bevy/src/lib.rs +29 -0
  40. data/ext/bevy/src/ruby_app.rs +65 -0
  41. data/ext/bevy/src/ruby_color.rs +149 -0
  42. data/ext/bevy/src/ruby_component.rs +189 -0
  43. data/ext/bevy/src/ruby_entity.rs +33 -0
  44. data/ext/bevy/src/ruby_math.rs +384 -0
  45. data/ext/bevy/src/ruby_query.rs +64 -0
  46. data/ext/bevy/src/ruby_render_app.rs +779 -0
  47. data/ext/bevy/src/ruby_system.rs +122 -0
  48. data/ext/bevy/src/ruby_world.rs +107 -0
  49. data/lib/bevy/animation.rb +597 -0
  50. data/lib/bevy/app.rb +675 -0
  51. data/lib/bevy/asset.rb +613 -0
  52. data/lib/bevy/audio.rb +545 -0
  53. data/lib/bevy/audio_effects.rb +224 -0
  54. data/lib/bevy/camera.rb +412 -0
  55. data/lib/bevy/component.rb +91 -0
  56. data/lib/bevy/diagnostics.rb +227 -0
  57. data/lib/bevy/ecs_advanced.rb +296 -0
  58. data/lib/bevy/event.rb +199 -0
  59. data/lib/bevy/gizmos.rb +158 -0
  60. data/lib/bevy/gltf.rb +227 -0
  61. data/lib/bevy/hierarchy.rb +444 -0
  62. data/lib/bevy/input.rb +514 -0
  63. data/lib/bevy/lighting.rb +369 -0
  64. data/lib/bevy/material.rb +248 -0
  65. data/lib/bevy/mesh.rb +257 -0
  66. data/lib/bevy/navigation.rb +344 -0
  67. data/lib/bevy/networking.rb +335 -0
  68. data/lib/bevy/particle.rb +337 -0
  69. data/lib/bevy/physics.rb +396 -0
  70. data/lib/bevy/plugins/default_plugins.rb +34 -0
  71. data/lib/bevy/plugins/input_plugin.rb +49 -0
  72. data/lib/bevy/reflect.rb +361 -0
  73. data/lib/bevy/render_graph.rb +210 -0
  74. data/lib/bevy/resource.rb +185 -0
  75. data/lib/bevy/scene.rb +254 -0
  76. data/lib/bevy/shader.rb +319 -0
  77. data/lib/bevy/shape.rb +195 -0
  78. data/lib/bevy/skeletal.rb +248 -0
  79. data/lib/bevy/sprite.rb +152 -0
  80. data/lib/bevy/sprite_sheet.rb +444 -0
  81. data/lib/bevy/state.rb +277 -0
  82. data/lib/bevy/system.rb +206 -0
  83. data/lib/bevy/text.rb +99 -0
  84. data/lib/bevy/text_advanced.rb +455 -0
  85. data/lib/bevy/timer.rb +147 -0
  86. data/lib/bevy/transform.rb +158 -0
  87. data/lib/bevy/ui.rb +454 -0
  88. data/lib/bevy/ui_advanced.rb +568 -0
  89. data/lib/bevy/version.rb +5 -0
  90. data/lib/bevy/visibility.rb +250 -0
  91. data/lib/bevy/window.rb +302 -0
  92. data/lib/bevy.rb +390 -0
  93. metadata +150 -0
@@ -0,0 +1,310 @@
1
+ use bevy_color::{Alpha, Color};
2
+ use bevy_ecs::component::Component;
3
+
4
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5
+ pub enum BlendMode {
6
+ Opaque,
7
+ Blend,
8
+ AlphaBlend,
9
+ Premultiplied,
10
+ Add,
11
+ Multiply,
12
+ }
13
+
14
+ impl Default for BlendMode {
15
+ fn default() -> Self {
16
+ Self::Blend
17
+ }
18
+ }
19
+
20
+ #[derive(Debug, Clone)]
21
+ pub struct MaterialProperties {
22
+ pub base_color: Color,
23
+ pub emissive: Color,
24
+ pub metallic: f32,
25
+ pub roughness: f32,
26
+ pub reflectance: f32,
27
+ pub alpha_mode: BlendMode,
28
+ pub unlit: bool,
29
+ pub double_sided: bool,
30
+ }
31
+
32
+ impl Default for MaterialProperties {
33
+ fn default() -> Self {
34
+ Self {
35
+ base_color: Color::WHITE,
36
+ emissive: Color::BLACK,
37
+ metallic: 0.0,
38
+ roughness: 0.5,
39
+ reflectance: 0.5,
40
+ alpha_mode: BlendMode::Opaque,
41
+ unlit: false,
42
+ double_sided: false,
43
+ }
44
+ }
45
+ }
46
+
47
+ impl MaterialProperties {
48
+ pub fn new() -> Self {
49
+ Self::default()
50
+ }
51
+
52
+ pub fn with_color(mut self, r: f32, g: f32, b: f32, a: f32) -> Self {
53
+ self.base_color = Color::srgba(r, g, b, a);
54
+ if a < 1.0 {
55
+ self.alpha_mode = BlendMode::Blend;
56
+ }
57
+ self
58
+ }
59
+
60
+ pub fn with_emissive(mut self, r: f32, g: f32, b: f32) -> Self {
61
+ self.emissive = Color::srgb(r, g, b);
62
+ self
63
+ }
64
+
65
+ pub fn with_metallic(mut self, metallic: f32) -> Self {
66
+ self.metallic = metallic.clamp(0.0, 1.0);
67
+ self
68
+ }
69
+
70
+ pub fn with_roughness(mut self, roughness: f32) -> Self {
71
+ self.roughness = roughness.clamp(0.0, 1.0);
72
+ self
73
+ }
74
+
75
+ pub fn with_reflectance(mut self, reflectance: f32) -> Self {
76
+ self.reflectance = reflectance.clamp(0.0, 1.0);
77
+ self
78
+ }
79
+
80
+ pub fn with_alpha_mode(mut self, mode: BlendMode) -> Self {
81
+ self.alpha_mode = mode;
82
+ self
83
+ }
84
+
85
+ pub fn unlit(mut self) -> Self {
86
+ self.unlit = true;
87
+ self
88
+ }
89
+
90
+ pub fn double_sided(mut self) -> Self {
91
+ self.double_sided = true;
92
+ self
93
+ }
94
+ }
95
+
96
+ #[derive(Component, Debug, Clone)]
97
+ pub struct ColorMaterial {
98
+ pub color: Color,
99
+ pub alpha_mode: BlendMode,
100
+ }
101
+
102
+ impl Default for ColorMaterial {
103
+ fn default() -> Self {
104
+ Self {
105
+ color: Color::WHITE,
106
+ alpha_mode: BlendMode::Blend,
107
+ }
108
+ }
109
+ }
110
+
111
+ impl ColorMaterial {
112
+ pub fn new(r: f32, g: f32, b: f32, a: f32) -> Self {
113
+ let color = Color::srgba(r, g, b, a);
114
+ let alpha_mode = if a < 1.0 {
115
+ BlendMode::Blend
116
+ } else {
117
+ BlendMode::Opaque
118
+ };
119
+ Self { color, alpha_mode }
120
+ }
121
+
122
+ pub fn from_color(color: Color) -> Self {
123
+ let alpha_mode = if color.alpha() < 1.0 {
124
+ BlendMode::Blend
125
+ } else {
126
+ BlendMode::Opaque
127
+ };
128
+ Self { color, alpha_mode }
129
+ }
130
+
131
+ pub fn with_alpha_mode(mut self, mode: BlendMode) -> Self {
132
+ self.alpha_mode = mode;
133
+ self
134
+ }
135
+ }
136
+
137
+ #[derive(Component, Debug, Clone)]
138
+ pub struct StandardMaterial {
139
+ pub base_color: Color,
140
+ pub emissive: Color,
141
+ pub metallic: f32,
142
+ pub roughness: f32,
143
+ pub reflectance: f32,
144
+ pub alpha_mode: BlendMode,
145
+ pub unlit: bool,
146
+ pub double_sided: bool,
147
+ pub texture_path: Option<String>,
148
+ pub normal_map_path: Option<String>,
149
+ }
150
+
151
+ impl Default for StandardMaterial {
152
+ fn default() -> Self {
153
+ Self {
154
+ base_color: Color::WHITE,
155
+ emissive: Color::BLACK,
156
+ metallic: 0.0,
157
+ roughness: 0.5,
158
+ reflectance: 0.5,
159
+ alpha_mode: BlendMode::Opaque,
160
+ unlit: false,
161
+ double_sided: false,
162
+ texture_path: None,
163
+ normal_map_path: None,
164
+ }
165
+ }
166
+ }
167
+
168
+ impl StandardMaterial {
169
+ pub fn new() -> Self {
170
+ Self::default()
171
+ }
172
+
173
+ pub fn from_color(r: f32, g: f32, b: f32, a: f32) -> Self {
174
+ let alpha_mode = if a < 1.0 {
175
+ BlendMode::Blend
176
+ } else {
177
+ BlendMode::Opaque
178
+ };
179
+ Self {
180
+ base_color: Color::srgba(r, g, b, a),
181
+ alpha_mode,
182
+ ..Default::default()
183
+ }
184
+ }
185
+
186
+ pub fn with_base_color(mut self, r: f32, g: f32, b: f32, a: f32) -> Self {
187
+ self.base_color = Color::srgba(r, g, b, a);
188
+ if a < 1.0 && self.alpha_mode == BlendMode::Opaque {
189
+ self.alpha_mode = BlendMode::Blend;
190
+ }
191
+ self
192
+ }
193
+
194
+ pub fn with_emissive(mut self, r: f32, g: f32, b: f32) -> Self {
195
+ self.emissive = Color::srgb(r, g, b);
196
+ self
197
+ }
198
+
199
+ pub fn with_metallic(mut self, metallic: f32) -> Self {
200
+ self.metallic = metallic.clamp(0.0, 1.0);
201
+ self
202
+ }
203
+
204
+ pub fn with_roughness(mut self, roughness: f32) -> Self {
205
+ self.roughness = roughness.clamp(0.0, 1.0);
206
+ self
207
+ }
208
+
209
+ pub fn with_reflectance(mut self, reflectance: f32) -> Self {
210
+ self.reflectance = reflectance.clamp(0.0, 1.0);
211
+ self
212
+ }
213
+
214
+ pub fn with_alpha_mode(mut self, mode: BlendMode) -> Self {
215
+ self.alpha_mode = mode;
216
+ self
217
+ }
218
+
219
+ pub fn unlit(mut self) -> Self {
220
+ self.unlit = true;
221
+ self
222
+ }
223
+
224
+ pub fn double_sided(mut self) -> Self {
225
+ self.double_sided = true;
226
+ self
227
+ }
228
+
229
+ pub fn with_texture(mut self, path: String) -> Self {
230
+ self.texture_path = Some(path);
231
+ self
232
+ }
233
+
234
+ pub fn with_normal_map(mut self, path: String) -> Self {
235
+ self.normal_map_path = Some(path);
236
+ self
237
+ }
238
+ }
239
+
240
+ pub struct MaterialBuilder {
241
+ material: StandardMaterial,
242
+ }
243
+
244
+ impl MaterialBuilder {
245
+ pub fn new() -> Self {
246
+ Self {
247
+ material: StandardMaterial::default(),
248
+ }
249
+ }
250
+
251
+ pub fn color(mut self, r: f32, g: f32, b: f32, a: f32) -> Self {
252
+ self.material = self.material.with_base_color(r, g, b, a);
253
+ self
254
+ }
255
+
256
+ pub fn emissive(mut self, r: f32, g: f32, b: f32) -> Self {
257
+ self.material = self.material.with_emissive(r, g, b);
258
+ self
259
+ }
260
+
261
+ pub fn metallic(mut self, value: f32) -> Self {
262
+ self.material = self.material.with_metallic(value);
263
+ self
264
+ }
265
+
266
+ pub fn roughness(mut self, value: f32) -> Self {
267
+ self.material = self.material.with_roughness(value);
268
+ self
269
+ }
270
+
271
+ pub fn reflectance(mut self, value: f32) -> Self {
272
+ self.material = self.material.with_reflectance(value);
273
+ self
274
+ }
275
+
276
+ pub fn unlit(mut self) -> Self {
277
+ self.material = self.material.unlit();
278
+ self
279
+ }
280
+
281
+ pub fn double_sided(mut self) -> Self {
282
+ self.material = self.material.double_sided();
283
+ self
284
+ }
285
+
286
+ pub fn texture(mut self, path: String) -> Self {
287
+ self.material = self.material.with_texture(path);
288
+ self
289
+ }
290
+
291
+ pub fn normal_map(mut self, path: String) -> Self {
292
+ self.material = self.material.with_normal_map(path);
293
+ self
294
+ }
295
+
296
+ pub fn blend_mode(mut self, mode: BlendMode) -> Self {
297
+ self.material = self.material.with_alpha_mode(mode);
298
+ self
299
+ }
300
+
301
+ pub fn build(self) -> StandardMaterial {
302
+ self.material
303
+ }
304
+ }
305
+
306
+ impl Default for MaterialBuilder {
307
+ fn default() -> Self {
308
+ Self::new()
309
+ }
310
+ }