mdanceio 0.1.2

MDanceIO is a MMD(MikuMikuDance) compatible implementation targeting at browser through wasm.
Documentation
use nanoem::motion::{MotionBoneKeyframe, MotionMorphKeyframe, MotionAccessoryKeyframe, MotionCameraKeyframe, MotionLightKeyframe, MotionModelKeyframe, MotionSelfShadowKeyframe};

pub trait MotionKeyframeSelectionCommon<T> {
    fn contains(&self, keyframe: &T) -> bool;
    fn get_all(&self) -> (Vec<&T>, u32);
    fn add(&mut self, keyframe: &T);
    fn remove(&mut self, keyframe: &T);
    fn add_keyframes(&mut self, start: u32, end: u32);
}

pub trait MotionKeyframeSelection {
    fn contains_accessory_keyframe(&self, keyframe: &MotionAccessoryKeyframe) -> bool;
    fn get_all_accessory_keyframes(&self) -> (Vec<&MotionAccessoryKeyframe>, u32);
    fn add_accessory_keyframe(&mut self, keyframe: &MotionAccessoryKeyframe);
    fn remove_accessory_keyframe(&mut self, keyframe: &MotionAccessoryKeyframe);
    fn contains_bone_keyframe(&self, keyframe: &MotionBoneKeyframe) -> bool;
    fn get_all_bone_keyframes(&self) -> (Vec<&MotionBoneKeyframe>, u32);
    fn add_bone_keyframe(&mut self, keyframe: &MotionBoneKeyframe);
    fn remove_bone_keyframe(&mut self, keyframe: &MotionBoneKeyframe);
    fn contains_camera_keyframe(&self, keyframe: &MotionCameraKeyframe) -> bool;
    fn get_all_camera_keyframes(&self) -> (Vec<&MotionCameraKeyframe>, u32);
    fn add_camera_keyframe(&mut self, keyframe: &MotionCameraKeyframe);
    fn remove_camera_keyframe(&mut self, keyframe: &MotionCameraKeyframe);
    fn contains_light_keyframe(&self, keyframe: &MotionLightKeyframe) -> bool;
    fn get_all_light_keyframes(&self) -> (Vec<&MotionLightKeyframe>, u32);
    fn add_light_keyframe(&mut self, keyframe: &MotionLightKeyframe);
    fn remove_light_keyframe(&mut self, keyframe: &MotionLightKeyframe);
    fn contains_model_keyframe(&self, keyframe: &MotionModelKeyframe) -> bool;
    fn get_all_model_keyframes(&self) -> (Vec<&MotionModelKeyframe>, u32);
    fn add_model_keyframe(&mut self, keyframe: &MotionModelKeyframe);
    fn remove_model_keyframe(&mut self, keyframe: &MotionModelKeyframe);
    fn contains_morph_keyframe(&self, keyframe: &MotionMorphKeyframe) -> bool;
    fn get_all_morph_keyframes(&self) -> (Vec<&MotionMorphKeyframe>, u32);
    fn add_morph_keyframe(&mut self, keyframe: &MotionMorphKeyframe);
    fn remove_morph_keyframe(&mut self, keyframe: &MotionMorphKeyframe);
    fn contains_self_shadow_keyframe(&self, keyframe: &MotionSelfShadowKeyframe) -> bool;
    fn get_all_self_shadow_keyframes(&self) -> (Vec<&MotionSelfShadowKeyframe>, u32);
    fn add_self_shadow_keyframe(&mut self, keyframe: &MotionSelfShadowKeyframe);
    fn remove_self_shadow_keyframe(&mut self, keyframe: &MotionSelfShadowKeyframe);
    fn add_all_keyframes(&mut self, flags: u32);
    fn has_all_keyframes(&self, flags: u32);
    fn clear_all_keyframes(&mut self, flags: u32);
    fn add_accessory_keyframes(&mut self, start: u32, end: u32);
    fn add_camera_keyframes(&mut self, start: u32, end: u32);
    fn add_light_keyframes(&mut self, start: u32, end: u32);
    fn add_model_keyframes(&mut self, start: u32, end: u32);
    fn add_self_shadow_keyframes(&mut self, start: u32, end: u32);
    fn add_bone_keyframes(&mut self, bone: &MotionBoneKeyframe, start: u32, end: u32);
    fn add_morph_keyframes(&mut self, bone: &MotionMorphKeyframe, start: u32, end: u32);
}