Remove TRADE capability, use trade_site attribute instead

This commit is contained in:
Vincent Foulon 2021-04-08 19:06:57 +02:00
parent bc1797a240
commit d80db38bc9
2 changed files with 8 additions and 13 deletions

View File

@ -102,7 +102,6 @@ bitflags::bitflags! {
#[derive(Default)]
pub struct BehaviorCapability: u8 {
const SPEAK = 0b00000001;
const TRADE = 0b00000010;
}
}
bitflags::bitflags! {
@ -149,14 +148,9 @@ impl Behavior {
}
/// Builder function
/// Set trade_site and TRADE capability if Option is Some
/// Set trade_site if Option is Some
pub fn with_trade_site(mut self, trade_site: Option<SiteId>) -> Self {
self.trade_site = trade_site;
if trade_site.is_some() {
self.allow(BehaviorCapability::TRADE);
} else {
self.deny(BehaviorCapability::TRADE);
}
self
}
@ -175,6 +169,9 @@ impl Behavior {
self.capabilities.contains(capabilities)
}
/// Check if the Behavior is able to trade
pub fn can_trade(&self) -> bool { self.trade_site.is_some() }
/// Set a state to the Behavior
pub fn set(&mut self, state: BehaviorState) { self.state.set(state, true) }
@ -362,9 +359,7 @@ mod tests {
b.unset(BehaviorState::TRADING);
assert!(!b.is(BehaviorState::TRADING));
// test `from`
let b = Behavior::from(BehaviorCapability::SPEAK | BehaviorCapability::TRADE);
let b = Behavior::from(BehaviorCapability::SPEAK);
assert!(b.can(BehaviorCapability::SPEAK));
assert!(b.can(BehaviorCapability::TRADE));
assert!(b.can(BehaviorCapability::SPEAK | BehaviorCapability::TRADE));
}
}

View File

@ -930,7 +930,7 @@ impl<'a> AgentData<'a> {
event_emitter.emit(ServerEvent::Chat(
UnresolvedChatMsg::npc(*self.uid, msg),
));
} else if agent.behavior.can(BehaviorCapability::TRADE) {
} else if agent.behavior.can_trade() {
let msg = "npc.speech.merchant_advertisement".to_string();
event_emitter.emit(ServerEvent::Chat(
UnresolvedChatMsg::npc(*self.uid, msg),
@ -943,7 +943,7 @@ impl<'a> AgentData<'a> {
}
},
Subject::Trade => {
if agent.behavior.can(BehaviorCapability::TRADE) {
if agent.behavior.can_trade() {
if !agent.behavior.is(BehaviorState::TRADING) {
controller.events.push(ControlEvent::InitiateInvite(
by,
@ -1092,7 +1092,7 @@ impl<'a> AgentData<'a> {
}
},
Some(AgentEvent::TradeInvite(with)) => {
if agent.behavior.can(BehaviorCapability::TRADE) {
if agent.behavior.can_trade() {
if !agent.behavior.is(BehaviorState::TRADING) {
// stand still and looking towards the trading player
controller.actions.push(ControlAction::Stand);