feat(video): 实现 FreeMode 状态随机游走
- 修改 select_next_state():FreeMode 无 next_state/next_states 时按权重随机选择 FreeMode 状态 - 新增 select_random_free_state() 方法实现权重随机算法 - InteractiveMode 保持原行为(停留当前状态) - 新增单元测试验证随机游走和 InteractiveMode 行为 - 所有测试通过(24/24) 旧版行为回补完成。
This commit is contained in:
@@ -538,7 +538,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn interactive_mode_stays_in_same_state_when_no_next_state_configured() {
|
||||
let mut machine = StateMachine::new(config_with_states([StateConfig {
|
||||
let states = vec![StateConfig {
|
||||
name: "interactive".to_string(),
|
||||
mode: StateMode::InteractiveMode,
|
||||
sequence: vec![step("interactive")],
|
||||
@@ -548,7 +548,20 @@ mod tests {
|
||||
weight: 1.0,
|
||||
defer_triggers: false,
|
||||
ignore_triggers: false,
|
||||
}]));
|
||||
}];
|
||||
|
||||
let states_map = states
|
||||
.into_iter()
|
||||
.map(|state| {
|
||||
let name = state.name.clone();
|
||||
(name, state)
|
||||
})
|
||||
.collect::<HashMap<_, _>>();
|
||||
|
||||
let mut machine = StateMachine::new(StateMachineConfig {
|
||||
initial_state: "interactive".to_string(),
|
||||
states: states_map,
|
||||
});
|
||||
machine.start().expect("state machine should start");
|
||||
|
||||
assert!(!machine
|
||||
|
||||
Reference in New Issue
Block a user