pub(crate) mod expressions;
pub(crate) mod gltf;
pub(crate) mod humanoid_bone;
mod loader;
mod look_at;
mod mtoon;
mod spawn;
mod spring_bone;
use crate::new_type;
use crate::vrm::humanoid_bone::VrmHumanoidBonePlugin;
use crate::vrm::loader::{VrmAsset, VrmLoaderPlugin};
use crate::vrm::look_at::LookAtPlugin;
use crate::vrm::spawn::VrmSpawnPlugin;
use crate::vrm::spring_bone::VrmSpringBonePlugin;
use bevy::app::{App, Plugin};
use bevy::asset::AssetApp;
use bevy::prelude::*;
use expressions::VrmExpressionPlugin;
use mtoon::MtoonMaterialPlugin;
use std::path::PathBuf;
pub mod prelude {
pub use crate::vrm::{
gltf::prelude::*,
humanoid_bone::prelude::*,
loader::{VrmAsset, VrmHandle},
look_at::LookAt,
mtoon::prelude::*,
BoneRestGlobalTransform, BoneRestTransform, Vrm, VrmPath, VrmPlugin,
};
}
new_type!(
name: VrmBone,
ty: String,
);
new_type!(
name: VrmExpression,
ty: String,
);
#[derive(Debug, Component, Reflect, Copy, Clone)]
#[reflect(Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", reflect(Serialize, Deserialize))]
pub struct Vrm;
#[derive(Debug, Reflect, Clone, Component)]
#[reflect(Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", reflect(Serialize, Deserialize))]
pub struct VrmPath(pub PathBuf);
impl VrmPath {
pub fn new(path: impl Into<PathBuf>) -> Self {
Self(path.into())
}
}
#[derive(Debug, Copy, Clone, Component, Deref, Reflect)]
#[reflect(Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", reflect(Serialize, Deserialize))]
pub struct BoneRestTransform(pub Transform);
#[derive(Debug, Copy, Clone, Component, Deref, Reflect)]
#[reflect(Component)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", reflect(Serialize, Deserialize))]
pub struct BoneRestGlobalTransform(pub GlobalTransform);
pub struct VrmPlugin;
impl Plugin for VrmPlugin {
fn build(
&self,
app: &mut App,
) {
app.init_asset::<VrmAsset>().add_plugins((
VrmLoaderPlugin,
VrmSpawnPlugin,
VrmSpringBonePlugin,
VrmHumanoidBonePlugin,
VrmExpressionPlugin,
MtoonMaterialPlugin,
LookAtPlugin,
));
app.register_type::<Vrm>()
.register_type::<VrmPath>()
.register_type::<BoneRestTransform>()
.register_type::<BoneRestGlobalTransform>()
.register_type::<VrmBone>();
}
}