mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Fix interaction and clean up, broken fleeing
This commit is contained in:
@ -1,6 +1,5 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
comp::{humanoid, quadruped_low, quadruped_medium, quadruped_small, Body},
|
comp::{humanoid, quadruped_low, quadruped_medium, quadruped_small, Body},
|
||||||
path::Chaser,
|
|
||||||
rtsim::RtSimController,
|
rtsim::RtSimController,
|
||||||
uid::Uid,
|
uid::Uid,
|
||||||
};
|
};
|
||||||
@ -195,7 +194,6 @@ pub struct Agent {
|
|||||||
pub can_speak: bool,
|
pub can_speak: bool,
|
||||||
pub psyche: Psyche,
|
pub psyche: Psyche,
|
||||||
pub inbox: VecDeque<AgentEvent>,
|
pub inbox: VecDeque<AgentEvent>,
|
||||||
pub interaction_timer: f32,
|
|
||||||
pub action_timer: f32,
|
pub action_timer: f32,
|
||||||
pub bearing: Vec2<f32>,
|
pub bearing: Vec2<f32>,
|
||||||
}
|
}
|
||||||
@ -230,175 +228,17 @@ impl Component for Agent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Activity {
|
pub enum Activity {
|
||||||
pub idle: bool,
|
Idle,
|
||||||
pub idle_tree: bool,
|
IdleTree,
|
||||||
pub interact: bool,
|
Interact,
|
||||||
pub flee: bool,
|
Flee,
|
||||||
pub follow: bool,
|
Follow,
|
||||||
pub hostile_tree: bool,
|
HostileTree,
|
||||||
pub attack: bool,
|
Attack,
|
||||||
pub choose_target: bool,
|
ChooseTarget,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Activity {
|
impl Default for Activity {
|
||||||
fn default() -> Self {
|
fn default() -> Self { Self::IdleTree }
|
||||||
Self {
|
|
||||||
idle: false,
|
|
||||||
idle_tree: true,
|
|
||||||
interact: false,
|
|
||||||
flee: false,
|
|
||||||
follow: false,
|
|
||||||
hostile_tree: false,
|
|
||||||
attack: false,
|
|
||||||
choose_target: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Activity {
|
|
||||||
pub fn reset(&mut self) {
|
|
||||||
self.idle = false;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = false;
|
|
||||||
self.flee = false;
|
|
||||||
self.follow = false;
|
|
||||||
self.hostile_tree = false;
|
|
||||||
self.attack = false;
|
|
||||||
self.choose_target = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn idle(&mut self) {
|
|
||||||
self.idle = true;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = false;
|
|
||||||
self.flee = 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.choose_target = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn interact(&mut self) {
|
|
||||||
self.idle = false;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = true;
|
|
||||||
self.flee = false;
|
|
||||||
self.follow = false;
|
|
||||||
self.hostile_tree = false;
|
|
||||||
self.attack = false;
|
|
||||||
self.choose_target = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn flee(&mut self) {
|
|
||||||
self.idle = false;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = false;
|
|
||||||
self.flee = true;
|
|
||||||
self.follow = false;
|
|
||||||
self.hostile_tree = false;
|
|
||||||
self.attack = false;
|
|
||||||
self.choose_target = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn follow(&mut self) {
|
|
||||||
self.idle = false;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = false;
|
|
||||||
self.flee = false;
|
|
||||||
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.choose_target = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn attack(&mut self) {
|
|
||||||
self.idle = false;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = false;
|
|
||||||
self.flee = false;
|
|
||||||
self.follow = false;
|
|
||||||
self.hostile_tree = false;
|
|
||||||
self.attack = true;
|
|
||||||
self.choose_target = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn choose_target(&mut self) {
|
|
||||||
self.idle = false;
|
|
||||||
self.idle_tree = false;
|
|
||||||
self.interact = false;
|
|
||||||
self.flee = false;
|
|
||||||
self.follow = false;
|
|
||||||
self.hostile_tree = false;
|
|
||||||
self.attack = false;
|
|
||||||
self.choose_target = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//pub enum Activity {
|
|
||||||
// Interact {
|
|
||||||
// timer: f32,
|
|
||||||
// interaction: AgentEvent,
|
|
||||||
// },
|
|
||||||
// Idle {
|
|
||||||
// bearing: Vec2<f32>,
|
|
||||||
// chaser: Chaser,
|
|
||||||
// },
|
|
||||||
// Follow {
|
|
||||||
// target: EcsEntity,
|
|
||||||
// chaser: Chaser,
|
|
||||||
// },
|
|
||||||
// Attack {
|
|
||||||
// target: EcsEntity,
|
|
||||||
// chaser: Chaser,
|
|
||||||
// time: f64,
|
|
||||||
// been_close: bool,
|
|
||||||
// powerup: f32,
|
|
||||||
// },
|
|
||||||
// Flee {
|
|
||||||
// target: EcsEntity,
|
|
||||||
// chaser: Chaser,
|
|
||||||
// timer: f32,
|
|
||||||
// },
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//impl Activity {
|
|
||||||
// pub fn is_follow(&self) -> bool { matches!(self, Activity::Follow { .. })
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pub fn is_attack(&self) -> bool { matches!(self, Activity::Attack { .. })
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pub fn is_flee(&self) -> bool { matches!(self, Activity::Flee { .. }) }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//impl Default for Activity {
|
|
||||||
// fn default() -> Self {
|
|
||||||
// Activity::Idle {
|
|
||||||
// bearing: Vec2::zero(),
|
|
||||||
// chaser: Chaser::default(),
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
Reference in New Issue
Block a user