mod base;
mod dialogue;
mod emotional;
mod greeting;
mod pathfinding;
mod strategy;
pub mod factory;
pub use base::{Behavior, BehaviorResult, BaseBehavior, EmotionInfluence, EmotionTrigger};
pub use dialogue::DialogueBehavior;
pub use emotional::{
AggressiveBehavior, CautiousBehavior, FleeBehavior, FriendlyBehavior, JoyfulBehavior,
NeutralGreetingBehavior, ConfusedBehavior, PoliteDeclineBehavior,
ThoughtfulPauseBehavior, DefaultAcknowledgeBehavior,
};
pub use greeting::GreetingBehavior;
pub use pathfinding::PathfindingBehavior;
pub use strategy::{SelectionStrategy, EmotionModulatedStrategy, FixedPriorityStrategy};
#[cfg(test)]
mod tests {
use super::*;
use std::collections::HashMap;
#[tokio::test]
async fn test_greeting_behavior() {
use crate::oxyde_game::intent::{Intent, IntentType};
let intent = Intent {
intent_type: IntentType::Proximity,
confidence: 1.0,
raw_input: "".to_string(),
keywords: vec![],
};
let mut context = HashMap::new();
context.insert("player_distance".to_string(), serde_json::json!(2.0));
let behavior = GreetingBehavior::new_default();
assert!(behavior.matches_intent(&intent).await);
let result = behavior.execute(&intent, &context).await.unwrap();
match result {
BehaviorResult::Response(text) => {
assert!(!text.is_empty());
},
_ => panic!("Expected Response result"),
}
}
}