Behavior tree minus interacting

This commit is contained in:
James Melkonian
2021-02-10 12:57:47 -08:00
parent 8bdadc47b5
commit 045ec011c9

View File

@ -177,12 +177,19 @@ pub enum AgentEvent {
// Add others here // Add others here
} }
#[derive(Clone, Debug)]
pub struct Target {
pub target: EcsEntity,
pub hostile: bool,
pub been_close: bool,
}
#[derive(Clone, Debug, Default)] #[derive(Clone, Debug, Default)]
pub struct Agent { pub struct Agent {
pub rtsim_controller: RtSimController, pub rtsim_controller: RtSimController,
pub patrol_origin: Option<Vec3<f32>>, pub patrol_origin: Option<Vec3<f32>>,
pub activity: Activity, pub activity: Activity,
pub target: Option<(EcsEntity, bool)>, pub target: Option<Target>,
/// Does the agent talk when e.g. hit by the player /// Does the agent talk when e.g. hit by the player
// TODO move speech patterns into a Behavior component // TODO move speech patterns into a Behavior component
pub can_speak: bool, pub can_speak: bool,
@ -190,6 +197,7 @@ pub struct Agent {
pub inbox: VecDeque<AgentEvent>, pub inbox: VecDeque<AgentEvent>,
pub interaction_timer: f32, pub interaction_timer: f32,
pub action_timer: f32, pub action_timer: f32,
pub bearing: Vec2<f32>,
} }
impl Agent { impl Agent {
@ -224,9 +232,11 @@ impl Component for Agent {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Activity { pub struct Activity {
pub idle: bool, pub idle: bool,
pub idle_tree: bool,
pub interact: bool, pub interact: bool,
pub flee: bool, pub flee: bool,
pub follow: bool, pub follow: bool,
pub hostile_tree: bool,
pub attack: bool, pub attack: bool,
pub choose_target: bool, pub choose_target: bool,
} }
@ -234,10 +244,12 @@ pub struct Activity {
impl Default for Activity { impl Default for Activity {
fn default() -> Self { fn default() -> Self {
Self { Self {
idle: true, idle: false,
idle_tree: true,
interact: false, interact: false,
flee: false, flee: false,
follow: false, follow: false,
hostile_tree: false,
attack: false, attack: false,
choose_target: false, choose_target: false,
} }
@ -247,63 +259,99 @@ impl Default for Activity {
impl Activity { impl Activity {
pub fn reset(&mut self) { pub fn reset(&mut self) {
self.idle = false; self.idle = false;
self.idle_tree = false;
self.interact = false; self.interact = false;
self.flee = false; self.flee = false;
self.follow = false; self.follow = false;
self.hostile_tree = false;
self.attack = false; self.attack = false;
self.choose_target = false; self.choose_target = false;
} }
pub fn idle(&mut self) { pub fn idle(&mut self) {
self.idle = true; self.idle = true;
self.idle_tree = false;
self.interact = false; self.interact = false;
self.flee = false; self.flee = false;
self.follow = false; self.follow = false;
self.hostile_tree = false;
self.attack = false;
self.choose_target = false;
}
pub fn idle_tree(&mut self) {
self.idle = false;
self.idle_tree = true;
self.interact = false;
self.flee = false;
self.follow = false;
self.hostile_tree = false;
self.attack = false; self.attack = false;
self.choose_target = false; self.choose_target = false;
} }
pub fn interact(&mut self) { pub fn interact(&mut self) {
self.idle = false; self.idle = false;
self.idle_tree = false;
self.interact = true; self.interact = true;
self.flee = false; self.flee = false;
self.follow = false; self.follow = false;
self.hostile_tree = false;
self.attack = false; self.attack = false;
self.choose_target = false; self.choose_target = false;
} }
pub fn flee(&mut self) { pub fn flee(&mut self) {
self.idle = false; self.idle = false;
self.idle_tree = false;
self.interact = false; self.interact = false;
self.flee = true; self.flee = true;
self.follow = false; self.follow = false;
self.hostile_tree = false;
self.attack = false; self.attack = false;
self.choose_target = false; self.choose_target = false;
} }
pub fn follow(&mut self) { pub fn follow(&mut self) {
self.idle = false; self.idle = false;
self.idle_tree = false;
self.interact = false; self.interact = false;
self.flee = false; self.flee = false;
self.follow = true; self.follow = true;
self.hostile_tree = false;
self.attack = false;
self.choose_target = false;
}
pub fn hostile_tree(&mut self) {
self.idle = false;
self.idle_tree = false;
self.interact = false;
self.flee = false;
self.follow = false;
self.hostile_tree = true;
self.attack = false; self.attack = false;
self.choose_target = false; self.choose_target = false;
} }
pub fn attack(&mut self) { pub fn attack(&mut self) {
self.idle = false; self.idle = false;
self.idle_tree = false;
self.interact = false; self.interact = false;
self.flee = false; self.flee = false;
self.follow = false; self.follow = false;
self.hostile_tree = false;
self.attack = true; self.attack = true;
self.choose_target = false; self.choose_target = false;
} }
pub fn choose_target(&mut self) { pub fn choose_target(&mut self) {
self.idle = false; self.idle = false;
self.idle_tree = false;
self.interact = false; self.interact = false;
self.flee = false; self.flee = false;
self.follow = false; self.follow = false;
self.hostile_tree = false;
self.attack = false; self.attack = false;
self.choose_target = true; self.choose_target = true;
} }