#![allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum EnvelopeDisplayMode {
Wireframe,
Solid,
SolidWithEdges,
}
#[derive(Debug, Clone)]
pub struct BoneEnvelopeDebugView {
pub display_mode: EnvelopeDisplayMode,
pub color: [f32; 4],
pub opacity: f32,
pub show_head_tail: bool,
pub enabled: bool,
}
impl BoneEnvelopeDebugView {
pub fn new() -> Self {
BoneEnvelopeDebugView {
display_mode: EnvelopeDisplayMode::Wireframe,
color: [0.0, 0.8, 0.2, 1.0],
opacity: 0.5,
show_head_tail: true,
enabled: true,
}
}
}
impl Default for BoneEnvelopeDebugView {
fn default() -> Self {
Self::new()
}
}
pub fn new_bone_envelope_debug_view() -> BoneEnvelopeDebugView {
BoneEnvelopeDebugView::new()
}
pub fn bedv_set_display_mode(view: &mut BoneEnvelopeDebugView, mode: EnvelopeDisplayMode) {
view.display_mode = mode;
}
pub fn bedv_set_color(view: &mut BoneEnvelopeDebugView, color: [f32; 4]) {
view.color = color;
}
pub fn bedv_set_opacity(view: &mut BoneEnvelopeDebugView, opacity: f32) {
view.opacity = opacity.clamp(0.0, 1.0);
}
pub fn bedv_show_head_tail(view: &mut BoneEnvelopeDebugView, show: bool) {
view.show_head_tail = show;
}
pub fn bedv_set_enabled(view: &mut BoneEnvelopeDebugView, enabled: bool) {
view.enabled = enabled;
}
pub fn bedv_to_json(view: &BoneEnvelopeDebugView) -> String {
let mode = match view.display_mode {
EnvelopeDisplayMode::Wireframe => "wireframe",
EnvelopeDisplayMode::Solid => "solid",
EnvelopeDisplayMode::SolidWithEdges => "solid_with_edges",
};
format!(
r#"{{"display_mode":"{}","opacity":{},"show_head_tail":{},"enabled":{}}}"#,
mode, view.opacity, view.show_head_tail, view.enabled
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_display_mode() {
let v = new_bone_envelope_debug_view();
assert_eq!(
v.display_mode,
EnvelopeDisplayMode::Wireframe
);
}
#[test]
fn test_set_display_mode() {
let mut v = new_bone_envelope_debug_view();
bedv_set_display_mode(&mut v, EnvelopeDisplayMode::Solid);
assert_eq!(
v.display_mode,
EnvelopeDisplayMode::Solid
);
}
#[test]
fn test_opacity_clamp() {
let mut v = new_bone_envelope_debug_view();
bedv_set_opacity(&mut v, 2.0);
assert!((v.opacity - 1.0).abs() < 1e-6 );
}
#[test]
fn test_show_head_tail() {
let mut v = new_bone_envelope_debug_view();
bedv_show_head_tail(&mut v, false);
assert!(!v.show_head_tail );
}
#[test]
fn test_set_color() {
let mut v = new_bone_envelope_debug_view();
bedv_set_color(&mut v, [1.0, 0.0, 0.0, 1.0]);
assert!((v.color[0] - 1.0).abs() < 1e-6 );
}
#[test]
fn test_set_enabled() {
let mut v = new_bone_envelope_debug_view();
bedv_set_enabled(&mut v, false);
assert!(!v.enabled );
}
#[test]
fn test_to_json_has_display_mode() {
let v = new_bone_envelope_debug_view();
let j = bedv_to_json(&v);
assert!(j.contains("\"display_mode\"") );
}
#[test]
fn test_enabled_default() {
let v = new_bone_envelope_debug_view();
assert!(v.enabled );
}
#[test]
fn test_default_opacity() {
let v = new_bone_envelope_debug_view();
assert!((v.opacity - 0.5).abs() < 1e-6 );
}
}