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.
- checksums.yaml +7 -0
- data/Cargo.lock +4279 -0
- data/Cargo.toml +36 -0
- data/README.md +226 -0
- data/crates/bevy/Cargo.toml +52 -0
- data/crates/bevy/src/app.rs +43 -0
- data/crates/bevy/src/component.rs +111 -0
- data/crates/bevy/src/entity.rs +30 -0
- data/crates/bevy/src/error.rs +32 -0
- data/crates/bevy/src/event.rs +190 -0
- data/crates/bevy/src/input_bridge.rs +300 -0
- data/crates/bevy/src/lib.rs +42 -0
- data/crates/bevy/src/mesh_renderer.rs +328 -0
- data/crates/bevy/src/query.rs +53 -0
- data/crates/bevy/src/render_app.rs +689 -0
- data/crates/bevy/src/resource.rs +28 -0
- data/crates/bevy/src/schedule.rs +186 -0
- data/crates/bevy/src/sprite_renderer.rs +355 -0
- data/crates/bevy/src/system.rs +44 -0
- data/crates/bevy/src/text_renderer.rs +258 -0
- data/crates/bevy/src/types/color.rs +114 -0
- data/crates/bevy/src/types/dynamic.rs +131 -0
- data/crates/bevy/src/types/math.rs +260 -0
- data/crates/bevy/src/types/mod.rs +9 -0
- data/crates/bevy/src/types/transform.rs +166 -0
- data/crates/bevy/src/world.rs +163 -0
- data/crates/bevy_ruby_render/Cargo.toml +22 -0
- data/crates/bevy_ruby_render/src/asset.rs +360 -0
- data/crates/bevy_ruby_render/src/audio.rs +511 -0
- data/crates/bevy_ruby_render/src/camera.rs +365 -0
- data/crates/bevy_ruby_render/src/gamepad.rs +398 -0
- data/crates/bevy_ruby_render/src/lib.rs +26 -0
- data/crates/bevy_ruby_render/src/material.rs +310 -0
- data/crates/bevy_ruby_render/src/mesh.rs +491 -0
- data/crates/bevy_ruby_render/src/sprite.rs +289 -0
- data/ext/bevy/Cargo.toml +20 -0
- data/ext/bevy/extconf.rb +6 -0
- data/ext/bevy/src/conversions.rs +137 -0
- data/ext/bevy/src/lib.rs +29 -0
- data/ext/bevy/src/ruby_app.rs +65 -0
- data/ext/bevy/src/ruby_color.rs +149 -0
- data/ext/bevy/src/ruby_component.rs +189 -0
- data/ext/bevy/src/ruby_entity.rs +33 -0
- data/ext/bevy/src/ruby_math.rs +384 -0
- data/ext/bevy/src/ruby_query.rs +64 -0
- data/ext/bevy/src/ruby_render_app.rs +779 -0
- data/ext/bevy/src/ruby_system.rs +122 -0
- data/ext/bevy/src/ruby_world.rs +107 -0
- data/lib/bevy/animation.rb +597 -0
- data/lib/bevy/app.rb +675 -0
- data/lib/bevy/asset.rb +613 -0
- data/lib/bevy/audio.rb +545 -0
- data/lib/bevy/audio_effects.rb +224 -0
- data/lib/bevy/camera.rb +412 -0
- data/lib/bevy/component.rb +91 -0
- data/lib/bevy/diagnostics.rb +227 -0
- data/lib/bevy/ecs_advanced.rb +296 -0
- data/lib/bevy/event.rb +199 -0
- data/lib/bevy/gizmos.rb +158 -0
- data/lib/bevy/gltf.rb +227 -0
- data/lib/bevy/hierarchy.rb +444 -0
- data/lib/bevy/input.rb +514 -0
- data/lib/bevy/lighting.rb +369 -0
- data/lib/bevy/material.rb +248 -0
- data/lib/bevy/mesh.rb +257 -0
- data/lib/bevy/navigation.rb +344 -0
- data/lib/bevy/networking.rb +335 -0
- data/lib/bevy/particle.rb +337 -0
- data/lib/bevy/physics.rb +396 -0
- data/lib/bevy/plugins/default_plugins.rb +34 -0
- data/lib/bevy/plugins/input_plugin.rb +49 -0
- data/lib/bevy/reflect.rb +361 -0
- data/lib/bevy/render_graph.rb +210 -0
- data/lib/bevy/resource.rb +185 -0
- data/lib/bevy/scene.rb +254 -0
- data/lib/bevy/shader.rb +319 -0
- data/lib/bevy/shape.rb +195 -0
- data/lib/bevy/skeletal.rb +248 -0
- data/lib/bevy/sprite.rb +152 -0
- data/lib/bevy/sprite_sheet.rb +444 -0
- data/lib/bevy/state.rb +277 -0
- data/lib/bevy/system.rb +206 -0
- data/lib/bevy/text.rb +99 -0
- data/lib/bevy/text_advanced.rb +455 -0
- data/lib/bevy/timer.rb +147 -0
- data/lib/bevy/transform.rb +158 -0
- data/lib/bevy/ui.rb +454 -0
- data/lib/bevy/ui_advanced.rb +568 -0
- data/lib/bevy/version.rb +5 -0
- data/lib/bevy/visibility.rb +250 -0
- data/lib/bevy/window.rb +302 -0
- data/lib/bevy.rb +390 -0
- 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
|
+
}
|