use derive_builder::Builder; use crate::tuples::{Color, Tuple}; #[derive(Builder, Clone, Debug, Default, PartialEq)] #[builder(default)] pub struct PointLight { pub position: Tuple, #[builder(setter(into))] pub intensity: Color, } impl PointLight { /// Creates a new `PositionLight` at the given `position` and with the given /// `intensity`. /// /// # Examples /// ``` /// use rtchallenge::{ /// lights::PointLight, /// tuples::{Color, Tuple}, /// WHITE, /// }; /// /// let intensity = WHITE; /// let position = Tuple::point(0., 0., 0.); /// let light = PointLight::new(position, intensity); /// assert_eq!(light.position, position); /// assert_eq!(light.intensity, intensity); /// ``` pub fn new(position: Tuple, intensity: C) -> PointLight where C: Into, { PointLight { position, intensity: intensity.into(), } } }