oxygengine_overworld/systems/
bank.rs1use crate::{
2 components::wallet::*,
3 resources::{bank::*, market::*},
4};
5use oxygengine_core::ecs::{life_cycle::EntityChanges, Comp, Entity, Universe, WorldRef};
6use std::collections::HashMap;
7
8#[derive(Debug, Default)]
9pub struct BankSystemCache {
10 wallets: HashMap<Entity, BankAccountId>,
11}
12
13pub type BankSystemResources<'a, T> = (
14 WorldRef,
15 &'a EntityChanges,
16 &'a mut Bank<T>,
17 &'a mut BankSystemCache,
18 Comp<&'a mut Wallet>,
19);
20
21pub fn bank_system<T>(universe: &mut Universe)
22where
23 T: Currency + std::fmt::Debug + Default + Send + Sync + 'static,
24{
25 let (world, changes, mut bank, mut cache, ..) =
26 universe.query_resources::<BankSystemResources<T>>();
27
28 for entity in changes.despawned() {
29 if let Some(id) = cache.wallets.remove(&entity) {
30 let _ = bank.remove_account(id);
31 }
32 }
33
34 for (entity, wallet) in world.query::<&mut Wallet>().iter() {
35 if wallet.account.is_none() {
36 let id = bank.create_account();
37 wallet.account = Some(id);
38 cache.wallets.insert(entity, id);
39 }
40 }
41}