#![allow(dead_code)]
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct ProxyExportConfig {
pub lod_levels: usize,
pub name: String,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct ProxyLevel {
pub level: usize,
pub vertex_count: usize,
pub face_count: usize,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct ProxyExport {
pub config: ProxyExportConfig,
pub levels: Vec<ProxyLevel>,
}
#[allow(dead_code)]
pub fn default_proxy_export_config() -> ProxyExportConfig {
ProxyExportConfig {
lod_levels: 4,
name: "Proxy".to_string(),
}
}
#[allow(dead_code)]
pub fn new_proxy_export(config: ProxyExportConfig) -> ProxyExport {
ProxyExport { config, levels: Vec::new() }
}
#[allow(dead_code)]
pub fn proxy_add_level(export: &mut ProxyExport, level: ProxyLevel) {
export.levels.push(level);
}
#[allow(dead_code)]
pub fn proxy_level_count(export: &ProxyExport) -> usize {
export.levels.len()
}
#[allow(dead_code)]
pub fn proxy_get_level(export: &ProxyExport, index: usize) -> Option<&ProxyLevel> {
export.levels.get(index)
}
#[allow(dead_code)]
pub fn proxy_to_json(export: &ProxyExport) -> String {
format!(
"{{\"name\":\"{}\",\"lod_count\":{}}}",
export.config.name,
export.levels.len()
)
}
#[allow(dead_code)]
pub fn proxy_validate(export: &ProxyExport) -> bool {
export.levels.iter().all(|l| l.vertex_count > 0 && l.face_count > 0)
}
#[allow(dead_code)]
pub fn proxy_total_vertices(export: &ProxyExport) -> usize {
export.levels.iter().map(|l| l.vertex_count).sum()
}
#[cfg(test)]
mod tests {
use super::*;
fn make_level(level: usize) -> ProxyLevel {
ProxyLevel { level, vertex_count: 100 >> level, face_count: 50 >> level }
}
#[test]
fn test_default_config() {
let cfg = default_proxy_export_config();
assert_eq!(cfg.lod_levels, 4);
}
#[test]
fn test_new_export_empty() {
let export = new_proxy_export(default_proxy_export_config());
assert_eq!(proxy_level_count(&export), 0);
}
#[test]
fn test_add_level() {
let mut export = new_proxy_export(default_proxy_export_config());
proxy_add_level(&mut export, make_level(0));
assert_eq!(proxy_level_count(&export), 1);
}
#[test]
fn test_get_level() {
let mut export = new_proxy_export(default_proxy_export_config());
proxy_add_level(&mut export, make_level(0));
assert!(proxy_get_level(&export, 0).is_some());
assert!(proxy_get_level(&export, 99).is_none());
}
#[test]
fn test_total_vertices() {
let mut export = new_proxy_export(default_proxy_export_config());
proxy_add_level(&mut export, make_level(0));
proxy_add_level(&mut export, make_level(1));
assert_eq!(proxy_total_vertices(&export), 150);
}
#[test]
fn test_to_json() {
let export = new_proxy_export(default_proxy_export_config());
let json = proxy_to_json(&export);
assert!(json.contains("lod_count"));
}
#[test]
fn test_validate_valid() {
let mut export = new_proxy_export(default_proxy_export_config());
proxy_add_level(&mut export, make_level(0));
assert!(proxy_validate(&export));
}
#[test]
fn test_validate_zero_faces() {
let mut export = new_proxy_export(default_proxy_export_config());
proxy_add_level(&mut export, ProxyLevel { level: 3, vertex_count: 1, face_count: 0 });
assert!(!proxy_validate(&export));
}
#[test]
fn test_empty_validate() {
let export = new_proxy_export(default_proxy_export_config());
assert!(proxy_validate(&export));
}
}