mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'juliancoffee/forgiving_travellers' into 'master'
AI small fixes See merge request veloren/veloren!2598
This commit is contained in:
commit
f05fc79fe2
@ -12,7 +12,7 @@ use vek::*;
|
||||
|
||||
use super::dialogue::Subject;
|
||||
|
||||
pub const DEFAULT_INTERACTION_TIME: f32 = 3.0;
|
||||
pub const DEFAULT_INTERACTION_TIME: f32 = 1.0;
|
||||
pub const TRADE_INTERACTION_TIME: f32 = 300.0;
|
||||
pub const MAX_LISTEN_DIST: f32 = 100.0;
|
||||
|
||||
@ -305,7 +305,7 @@ pub enum SoundKind {
|
||||
VillagerAlarm,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct Target {
|
||||
pub target: EcsEntity,
|
||||
pub hostile: bool,
|
||||
|
@ -22,6 +22,7 @@ impl Component for RtSimEntity {
|
||||
pub enum RtSimEvent {
|
||||
AddMemory(Memory),
|
||||
SetMood(Memory),
|
||||
ForgetEnemy(String),
|
||||
PrintMemories,
|
||||
}
|
||||
|
||||
|
@ -500,6 +500,14 @@ pub struct Brain {
|
||||
impl Brain {
|
||||
pub fn add_memory(&mut self, memory: Memory) { self.memories.push(memory); }
|
||||
|
||||
pub fn forget_enemy(&mut self, to_forget: &str) {
|
||||
self.memories.retain(|memory| {
|
||||
!matches!(
|
||||
&memory.item,
|
||||
MemoryItem::CharacterFight {name, ..} if name == to_forget)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn remembers_mood(&self) -> bool {
|
||||
self.memories
|
||||
.iter()
|
||||
@ -528,10 +536,18 @@ impl Brain {
|
||||
}
|
||||
|
||||
pub fn remembers_character(&self, name_to_remember: &str) -> bool {
|
||||
self.memories.iter().any(|memory| matches!(&memory.item, MemoryItem::CharacterInteraction { name, .. } if name == name_to_remember))
|
||||
self.memories.iter().any(|memory| {
|
||||
matches!(
|
||||
&memory.item,
|
||||
MemoryItem::CharacterInteraction { name, .. } if name == name_to_remember)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn remembers_fight_with_character(&self, name_to_remember: &str) -> bool {
|
||||
self.memories.iter().any(|memory| matches!(&memory.item, MemoryItem::CharacterFight { name, .. } if name == name_to_remember))
|
||||
self.memories.iter().any(|memory| {
|
||||
matches!(
|
||||
&memory.item,
|
||||
MemoryItem::CharacterFight { name, .. } if name == name_to_remember)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -82,6 +82,12 @@ impl RtSim {
|
||||
.map(|entity| entity.brain.add_memory(memory));
|
||||
}
|
||||
|
||||
pub fn forget_entity_enemy(&mut self, entity: RtSimId, name: &str) {
|
||||
if let Some(entity) = self.entities.get_mut(entity) {
|
||||
entity.brain.forget_enemy(name);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_entity_mood(&mut self, entity: RtSimId, memory: Memory) {
|
||||
self.entities
|
||||
.get_mut(entity)
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user