Made merchants work in new sites

This commit is contained in:
Joshua Barretto 2021-10-17 13:28:09 +01:00
parent 4b8bf94320
commit 0cb88139c9
4 changed files with 29 additions and 14 deletions

View File

@ -104,8 +104,6 @@ impl Entity {
// is not used for RtSim as of now. // is not used for RtSim as of now.
pub fn get_adhoc_loadout( pub fn get_adhoc_loadout(
&self, &self,
world: &World,
index: &world::IndexOwned,
) -> fn(LoadoutBuilder, Option<&trade::SiteInformation>) -> LoadoutBuilder { ) -> fn(LoadoutBuilder, Option<&trade::SiteInformation>) -> LoadoutBuilder {
let body = self.get_body(); let body = self.get_body();
let kind = self.kind; let kind = self.kind;

View File

@ -129,16 +129,31 @@ impl<'a> System<'a> for Sys {
} else { } else {
let entity_config_path = entity.get_entity_config(); let entity_config_path = entity.get_entity_config();
let mut loadout_rng = entity.loadout_rng(); let mut loadout_rng = entity.loadout_rng();
let ad_hoc_loadout = entity.get_adhoc_loadout(&world, &index); let ad_hoc_loadout = entity.get_adhoc_loadout();
// Body is rewritten so that body parameters // Body is rewritten so that body parameters
// are consistent between reifications // are consistent between reifications
let entity_config = EntityConfig::from_asset_expect(entity_config_path) let entity_config = EntityConfig::from_asset_expect(entity_config_path)
.with_body(BodyBuilder::Exact(body)); .with_body(BodyBuilder::Exact(body));
let entity_info = EntityInfo::at(pos.0) let mut entity_info = EntityInfo::at(pos.0)
.with_entity_config(entity_config, Some(entity_config_path)) .with_entity_config(entity_config, Some(entity_config_path))
.with_lazy_loadout(ad_hoc_loadout) .with_lazy_loadout(ad_hoc_loadout)
.with_health_scaling(10); .with_health_scaling(10);
// Merchants can be traded with
if let Some(economy) = matches!(entity.kind, RtSimEntityKind::Merchant)
.then(|| {
entity
.brain
.begin_site()
.and_then(|home| world.civs().sites[home].site_tmp)
.and_then(|site| index.sites[site].trade_information(site.id()))
})
.flatten()
{
entity_info = entity_info
.with_agent_mark(comp::agent::Mark::Merchant)
.with_economy(&economy);
}
match NpcData::from_entity_info(entity_info, &mut loadout_rng) { match NpcData::from_entity_info(entity_info, &mut loadout_rng) {
NpcData::Data { NpcData::Data {
pos, pos,

View File

@ -131,15 +131,17 @@ impl Site {
site_id: common::trade::SiteId, site_id: common::trade::SiteId,
) -> Option<common::trade::SiteInformation> { ) -> Option<common::trade::SiteInformation> {
match &self.kind { match &self.kind {
SiteKind::Settlement(s) => Some(common::trade::SiteInformation { SiteKind::Settlement(_) | SiteKind::Refactor(_) => {
id: site_id, Some(common::trade::SiteInformation {
unconsumed_stock: self id: site_id,
.economy unconsumed_stock: self
.unconsumed_stock .economy
.iter() .unconsumed_stock
.map(|(g, a)| (g.into(), *a)) .iter()
.collect(), .map(|(g, a)| (g.into(), *a))
}), .collect(),
})
},
_ => None, _ => None,
} }
} }

View File

@ -1125,7 +1125,7 @@ fn ingredient_backpack(economy: Option<&trade::SiteInformation>, rng: &mut impl
// `to_skip` is ideologicaly boolean flag either to start from 0-th or 1-th slot // `to_skip` is ideologicaly boolean flag either to start from 0-th or 1-th slot
let mut to_skip = 0; let mut to_skip = 0;
if let Some(coins) = coins { if let Some(coins) = coins.filter(|c| *c > 0) {
let mut coin_item = Item::new_from_asset_expect("common.items.utility.coins"); let mut coin_item = Item::new_from_asset_expect("common.items.utility.coins");
coin_item coin_item
.set_amount(coins) .set_amount(coins)