1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//! PhotometricPlugin for Bevy.
//!
//! This plugin provides minimal photometric lighting support without
//! any scene geometry, camera, or controls.
use PhotometricPluginState;
use ;
use PhotometricData;
use *;
use PhantomData;
/// Minimal plugin for photometric lighting.
///
/// This plugin handles:
/// - Spawning Bevy lights from `PhotometricLight` components
/// - Updating lights when components change
/// - Managing photometric solid and luminaire model entities
///
/// It does NOT provide:
/// - Scene geometry (bring your own scene)
/// - Camera (bring your own camera)
/// - Keyboard controls (implement your own if needed)
///
/// # Type Parameters
/// * `T` - The photometric data type (must implement [`PhotometricData`])
///
/// # Example
/// ```ignore
/// use bevy::prelude::*;
/// use eulumdat_bevy::photometric::*;
///
/// fn main() {
/// App::new()
/// .add_plugins(DefaultPlugins)
/// .add_plugins(PhotometricPlugin::<MyLightData>::default())
/// .add_systems(Startup, setup)
/// .run();
/// }
///
/// fn setup(mut commands: Commands) {
/// // Spawn a camera
/// commands.spawn(Camera3dBundle {
/// transform: Transform::from_xyz(0.0, 5.0, 10.0).looking_at(Vec3::ZERO, Vec3::Y),
/// ..default()
/// });
///
/// // Spawn your scene geometry
/// commands.spawn(PbrBundle {
/// mesh: meshes.add(Plane3d::default().mesh().size(10.0, 10.0)),
/// material: materials.add(Color::WHITE),
/// ..default()
/// });
///
/// // Spawn a photometric light
/// let light_data = MyLightData::load("light.ldt");
/// commands.spawn(PhotometricLightBundle::new(light_data)
/// .with_transform(Transform::from_xyz(0.0, 3.0, 0.0)));
/// }
/// ```