4个版本 (2个破坏性更新)

0.3.0 2023年1月17日
0.2.1 2023年1月16日
0.2.0 2023年1月16日
0.1.0 2023年1月14日

#1819 in 游戏开发

MIT/Apache

34KB
289

rsanim

管理精灵动画的基本状态机。

示例用法

use rsanim::*;
use std::collections::HashMap;

#[derive(Clone, Eq, PartialEq, Hash, Debug)]
enum Animation {
    Idle,
    Run,
}

#[derive(Clone, Debug, PartialEq)]
struct Params {
    pub speed: f32,
}

let mut state_machine = StateMachine::new(
    Animation::Idle,
    HashMap::from([
        (
            Animation::Idle,
            State {
                duration: 0.5,
                repeat: true,
            },
        ),
        (
            Animation::Run,
            State {
                duration: 1.0,
                repeat: true,
            },
        ),
    ]),
    vec![
        Transition {
            start_state: TransitionStartState::Node(Animation::Idle),
            end_state: TransitionEndState::Node(Animation::Run),
            trigger: TransitionTrigger::Condition(Box::new(|x: &Params| x.speed > 0.0)),
        },
        Transition {
            start_state: TransitionStartState::Node(Animation::Run),
            end_state: TransitionEndState::Node(Animation::Idle),
            trigger: TransitionTrigger::Condition(Box::new(|x: &Params| x.speed <= 0.0)),
        },
    ],
    Params { speed: 0.0 },
)
.unwrap();

let animator = Animator::new(
    state_machine,
    HashMap::from([
        (
            Animation::Idle,
            vec![
                Frame {
                    value: 0,
                    progress: 0.00,
                },
                Frame {
                    value: 1,
                    progress: 0.33,
                },
                Frame {
                    value: 2,
                    progress: 0.67,
                },
            ],
        ),
        (
            Animation::Run,
            vec![
                Frame {
                    value: 0,
                    progress: 0.00,
                },
                Frame {
                    value: 1,
                    progress: 0.33,
                },
                Frame {
                    value: 2,
                    progress: 0.67,
                },
            ],
        ),
    ]),
)
.unwrap();

更新状态机的已过时间

let delta_time = 0.1;
animator.update(delta_time);

更新状态机的参数,这些参数用于确定条件转换

animator.update_parameters(&|x| {
    x.speed = 1.0;
});

Bevy

examples/bevy.rs

无运行时依赖