use std::sync::Arc;
use super::RenderQuality;
#[derive(Clone, Debug)]
pub struct Evaluation {
time: crate::Time,
quality: RenderQuality,
assets: crate::Assets,
fonts: Option<crate::asset::environment::FontEnvironment>,
diagnostics: crate::RequestDiagnostics,
cache: Option<crate::RenderCache>,
}
impl Default for Evaluation {
fn default() -> Self {
Self {
time: crate::Time::ZERO,
quality: RenderQuality::Final,
assets: crate::Assets::default(),
fonts: None,
diagnostics: crate::RequestDiagnostics::default(),
cache: None,
}
}
}
impl Evaluation {
pub fn new() -> Self {
Self::default()
}
pub fn with_quality(mut self, quality: RenderQuality) -> Self {
self.quality = quality;
self
}
pub fn quality(&self) -> RenderQuality {
self.quality
}
pub fn with_time(mut self, time: crate::Time) -> Self {
self.time = time;
self
}
pub fn time(&self) -> crate::Time {
self.time
}
pub fn with_assets(mut self, assets: &crate::Assets) -> Self {
self.assets = assets.clone().with_diagnostics(self.diagnostics.clone());
if let Some(fonts) = assets.fonts() {
self.fonts = Some(fonts.clone());
}
self
}
pub fn assets(&self) -> &crate::Assets {
&self.assets
}
pub fn with_fonts(
mut self,
fonts: impl Into<crate::asset::environment::FontEnvironment>,
) -> Self {
self.fonts = Some(fonts.into());
self
}
pub fn fonts(&self) -> Option<&crate::asset::environment::FontEnvironment> {
self.fonts.as_ref()
}
pub fn with_diagnostics(mut self, diagnostics: crate::RequestDiagnostics) -> Self {
self.diagnostics = diagnostics;
self.assets = self.assets.with_diagnostics(self.diagnostics.clone());
self
}
pub fn diagnostics(&self) -> &crate::RequestDiagnostics {
&self.diagnostics
}
pub fn with_cache(mut self, cache: crate::RenderCache) -> Self {
self.cache = Some(cache);
self
}
pub fn cache(&self) -> Option<&crate::RenderCache> {
self.cache.as_ref()
}
pub fn shared(self) -> Arc<Self> {
Arc::new(self)
}
}