mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
parallel simulation of economies
This commit is contained in:
parent
96c5d17460
commit
aeac483bac
@ -1,3 +1,4 @@
|
||||
use rayon::prelude::*;
|
||||
use std::{
|
||||
cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd},
|
||||
fmt, hash,
|
||||
@ -85,6 +86,15 @@ impl<T> Store<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Send + Sync> Store<T> {
|
||||
pub fn par_iter_mut(&mut self) -> impl ParallelIterator<Item = (Id<T>, &mut T)> {
|
||||
self.items
|
||||
.par_iter_mut()
|
||||
.enumerate()
|
||||
.map(|(idx, obj)| (Id(idx as u64, PhantomData), obj))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Index<Id<T>> for Store<T> {
|
||||
type Output = T;
|
||||
|
||||
|
@ -9,6 +9,7 @@ use crate::{
|
||||
},
|
||||
Index,
|
||||
};
|
||||
use rayon::prelude::*;
|
||||
use tracing::{debug, info};
|
||||
|
||||
const TICK_PERIOD: f32 = 3.0 * DAYS_PER_MONTH; // 3 months
|
||||
@ -236,19 +237,20 @@ fn check_money(index: &mut Index) {
|
||||
);
|
||||
}
|
||||
|
||||
pub fn tick(index: &mut Index, _world: &mut WorldSim, dt: f32, mut vc: vergleich::Context) {
|
||||
pub fn tick(index: &mut Index, _world: &mut WorldSim, dt: f32, _vc: vergleich::Context) {
|
||||
if INTER_SITE_TRADE {
|
||||
// move deliverables to recipient cities
|
||||
for (id, deliv) in index.trade.deliveries.drain() {
|
||||
index.sites.get_mut(id).economy.deliveries.extend(deliv);
|
||||
}
|
||||
}
|
||||
for (site_id, site) in index.sites.iter_mut() {
|
||||
index.sites.par_iter_mut().for_each(|(site_id, site)| {
|
||||
if site.do_economic_simulation() {
|
||||
site.economy
|
||||
.tick(site_id, dt, vc.context(&site_id.id().to_string()));
|
||||
}
|
||||
site.economy.tick(site_id, dt, vergleich::Context::dummy());
|
||||
// helpful for debugging but not compatible with parallel execution
|
||||
// vc.context(&site_id.id().to_string()));
|
||||
}
|
||||
});
|
||||
if INTER_SITE_TRADE {
|
||||
// distribute orders (travelling merchants)
|
||||
for (_id, site) in index.sites.iter_mut() {
|
||||
|
@ -43,6 +43,8 @@ pub mod vergleich {
|
||||
pub fn context(&mut self, _: &str) -> Context { Context {} }
|
||||
|
||||
pub fn value(&mut self, _: &str, val: f32) -> f32 { val }
|
||||
|
||||
pub fn dummy() -> Self { Context {} }
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user