mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
88 lines
2.6 KiB
Rust
88 lines
2.6 KiB
Rust
|
use crate::{client::Client, Server};
|
||
|
use common_net::msg::{world_msg::EconomyInfo, ServerGeneral};
|
||
|
use specs::{Entity as EcsEntity, WorldExt};
|
||
|
use std::collections::HashMap;
|
||
|
|
||
|
#[cfg(not(feature = "worldgen"))]
|
||
|
pub fn handle_site_info(server: &Server, entity: EcsEntity, id: u64) {
|
||
|
let info = EconomyInfo {
|
||
|
id,
|
||
|
population: 0,
|
||
|
stock: HashMap::new(),
|
||
|
labor_values: HashMap::new(),
|
||
|
values: HashMap::new(),
|
||
|
labors: Vec::new(),
|
||
|
};
|
||
|
let msg = ServerGeneral::SiteEconomy(info);
|
||
|
server
|
||
|
.state
|
||
|
.ecs()
|
||
|
.read_storage::<Client>()
|
||
|
.get(entity)
|
||
|
.map(|c| c.send(msg));
|
||
|
}
|
||
|
|
||
|
#[cfg(feature = "worldgen")]
|
||
|
pub fn handle_site_info(server: &Server, entity: EcsEntity, id: u64) {
|
||
|
let site_id = server.index.sites.recreate_id(id);
|
||
|
let info = if let Some(site_id) = site_id {
|
||
|
let site = server.index.sites.get(site_id);
|
||
|
EconomyInfo {
|
||
|
id,
|
||
|
population: site.economy.pop.floor() as u32,
|
||
|
stock: site.economy.stocks.iter().map(|(g, a)| (g, *a)).collect(),
|
||
|
labor_values: site
|
||
|
.economy
|
||
|
.labor_values
|
||
|
.iter()
|
||
|
.filter(|a| a.1.is_some())
|
||
|
.map(|(g, a)| (g, a.unwrap()))
|
||
|
.collect(),
|
||
|
values: site
|
||
|
.economy
|
||
|
.values
|
||
|
.iter()
|
||
|
.filter(|a| a.1.is_some())
|
||
|
.map(|(g, a)| (g, a.unwrap()))
|
||
|
.collect(),
|
||
|
labors: site.economy.labors.iter().map(|(_, a)| (*a)).collect(),
|
||
|
last_exports: site
|
||
|
.economy
|
||
|
.last_exports
|
||
|
.iter()
|
||
|
.map(|(g, a)| (g, *a))
|
||
|
.collect(),
|
||
|
resources: site
|
||
|
.economy
|
||
|
.natural_resources
|
||
|
.chunks_per_resource
|
||
|
.iter()
|
||
|
.map(|(g, a)| {
|
||
|
(
|
||
|
g,
|
||
|
((*a) as f32) * site.economy.natural_resources.average_yield_per_chunk[g],
|
||
|
)
|
||
|
})
|
||
|
.collect(),
|
||
|
}
|
||
|
} else {
|
||
|
EconomyInfo {
|
||
|
id,
|
||
|
population: 0,
|
||
|
stock: HashMap::new(),
|
||
|
labor_values: HashMap::new(),
|
||
|
values: HashMap::new(),
|
||
|
labors: Vec::new(),
|
||
|
last_exports: HashMap::new(),
|
||
|
resources: HashMap::new(),
|
||
|
}
|
||
|
};
|
||
|
let msg = ServerGeneral::SiteEconomy(info);
|
||
|
server
|
||
|
.state
|
||
|
.ecs()
|
||
|
.read_storage::<Client>()
|
||
|
.get(entity)
|
||
|
.map(|c| c.send(msg));
|
||
|
}
|