spinal 0.0.1

A 2D animation engine for Spine.
Documentation
use crate::json::Lookup;
use crate::skeleton::Ik;
use crate::SpinalError;
use serde::Deserialize;
use strum::FromRepr;

#[derive(Debug, Deserialize)]
pub struct JsonIk {
    pub name: String,
    pub order: u32,
    #[serde(default)]
    pub skin: bool,
    pub bones: Vec<String>,
    pub target: String,
    #[serde(default = "super::f32_one")]
    pub mix: f32,
    #[serde(default)]
    pub softness: f32,
    #[serde(default)]
    pub bend_positive: bool,
    #[serde(default)]
    pub compress: bool,
    #[serde(default)]
    pub stretch: bool,
    #[serde(default)]
    pub uniform: bool,
}

impl JsonIk {
    pub fn into_ik(self, lookup: &Lookup) -> Result<Ik, SpinalError> {
        Ok(Ik {
            name: self.name,
            order: self.order,
            skin: self.skin,
            bones: self
                .bones
                .iter()
                .map(|name| lookup.bone_name_to_id(name.as_str()))
                .collect::<Result<Vec<_>, _>>()?,
            target: lookup.bone_name_to_id(self.target.as_str())?,
            mix: self.mix,
            softness: self.softness,
            bend_positive: self.bend_positive,
            compress: self.compress,
            stretch: self.stretch,
            uniform: self.uniform,
        })
    }
}