use crate::Vec3;
use crate::Etype;
#[derive(Clone, Debug)]
pub struct Point {
pub position: Vec3,
pub direction: Vec3,
pub area: f32,
pub gravity: f32,
pub eclipse: Etype,
pub flux: f32,
}
impl Point {
pub fn new(position: Vec3, direction: Vec3, area: f64, gravity: f64, eclipse: Etype) -> Self {
Self {
position,
direction,
area: area as f32,
gravity: gravity as f32,
eclipse,
flux: 0.0,
}
}
pub fn set_flux(&mut self, flux: f32) -> () {
self.flux = flux;
}
pub fn is_visible(&self, phase: f64) -> bool {
let phi: f64 = phase - phase.floor();
for &(p1, p2) in &self.eclipse {
if (phi >= p1 && phi <= p2) || phi <= p2 - 1.0 {
return false
}
}
true
}
}
impl Default for Point {
fn default() -> Self {
Self::new(
Vec3::new(0.0, 0.0, 0.0),
Vec3::new(0.0, 0.0, 0.0),
0.0,
0.0,
vec![(0.0, 0.0)],
)
}
}