81 lines
2.2 KiB
Rust
81 lines
2.2 KiB
Rust
//! L5 价值层: XIC/XTZH跨文明价值交换
|
|
|
|
use crate::types::{CivilizationId, ValueExchangeMessage};
|
|
use crate::error::Result;
|
|
use tracing::info;
|
|
use std::collections::HashMap;
|
|
|
|
/// 跨文明价值交换器
|
|
pub struct CrossCivilizationValueExchanger {
|
|
/// 汇率表 (from_civ, to_civ) -> rate
|
|
exchange_rates: HashMap<(CivilizationId, CivilizationId), f64>,
|
|
}
|
|
|
|
impl CrossCivilizationValueExchanger {
|
|
pub fn new() -> Self {
|
|
info!("Creating CrossCivilizationValueExchanger");
|
|
Self {
|
|
exchange_rates: HashMap::new(),
|
|
}
|
|
}
|
|
|
|
/// 创建价值交换消息
|
|
pub fn create_exchange(
|
|
&self,
|
|
from: CivilizationId,
|
|
to: CivilizationId,
|
|
value_type: String,
|
|
amount: u128,
|
|
) -> Result<ValueExchangeMessage> {
|
|
let rate = self.get_exchange_rate(&from, &to);
|
|
let converted_amount = (amount as f64 * rate) as u128;
|
|
|
|
Ok(ValueExchangeMessage {
|
|
from_civilization: from,
|
|
to_civilization: to,
|
|
value_type,
|
|
amount,
|
|
converted_amount,
|
|
exchange_rate: rate,
|
|
timestamp: Self::current_timestamp(),
|
|
})
|
|
}
|
|
|
|
/// 获取汇率
|
|
pub fn get_exchange_rate(&self, from: &CivilizationId, to: &CivilizationId) -> f64 {
|
|
self.exchange_rates
|
|
.get(&(from.clone(), to.clone()))
|
|
.copied()
|
|
.unwrap_or(1.0)
|
|
}
|
|
|
|
/// 设置汇率
|
|
pub fn set_exchange_rate(&mut self, from: CivilizationId, to: CivilizationId, rate: f64) {
|
|
self.exchange_rates.insert((from, to), rate);
|
|
}
|
|
|
|
/// 执行价值交换
|
|
pub fn execute_exchange(&self, message: &ValueExchangeMessage) -> Result<bool> {
|
|
info!("Executing value exchange from {:?} to {:?}, amount: {}",
|
|
message.from_civilization, message.to_civilization, message.amount);
|
|
// TODO: 实际的价值转移逻辑
|
|
Ok(true)
|
|
}
|
|
}
|
|
|
|
impl CrossCivilizationValueExchanger {
|
|
fn current_timestamp() -> u64 {
|
|
use std::time::{SystemTime, UNIX_EPOCH};
|
|
SystemTime::now()
|
|
.duration_since(UNIX_EPOCH)
|
|
.unwrap()
|
|
.as_secs()
|
|
}
|
|
}
|
|
|
|
impl Default for CrossCivilizationValueExchanger {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|