Skip to content

Commit aa73fb1

Browse files
committed
initial support for DCS 2.7 clouds
1 parent 6911248 commit aa73fb1

File tree

14 files changed

+640
-316
lines changed

14 files changed

+640
-316
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
66

77
## [Unreleased]
88

9+
## [3.0.0-beta.1] - 2021-04-20
10+
11+
BREAKING: Requires DCS 2.7 from now on.
12+
13+
### Added
14+
15+
- Added support for DCS 2.7 cloud presets.
16+
917
## [2.2.2] - 2021-04-11
1018

1119
### Changed

crates/datis-cmd/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "datis-cmd"
3-
version = "2.2.2"
3+
version = "3.0.0-beta.1"
44
authors = ["Markus Ast <m@rkusa.st>"]
55
edition = "2018"
66

crates/datis-core/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "datis-core"
3-
version = "2.2.2"
3+
version = "3.0.0-beta.1"
44
authors = ["Markus Ast <m@rkusa.st>"]
55
edition = "2018"
66

crates/datis-core/src/ipc.rs

+25-17
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,21 @@ use crate::weather::{Clouds, WeatherInfo};
66
use dcs_module_ipc::Error;
77
use serde::Deserialize;
88
use serde_json::json;
9+
use tokio::sync::Mutex;
910

1011
pub struct MissionRpcInner {
1112
ipc: dcs_module_ipc::IPC<()>,
12-
clouds: Option<Clouds>,
13-
fog_thickness: u32, // in m
14-
fog_visibility: u32, // in m
13+
clouds: Mutex<Option<Clouds>>,
1514
}
1615

1716
#[derive(Clone)]
1817
pub struct MissionRpc(Arc<MissionRpcInner>);
1918

2019
impl MissionRpc {
21-
pub fn new(clouds: Option<Clouds>, fog_thickness: u32, fog_visibility: u32) -> Self {
20+
pub fn new() -> Self {
2221
MissionRpc(Arc::new(MissionRpcInner {
2322
ipc: dcs_module_ipc::IPC::new(),
24-
clouds,
25-
fog_thickness,
26-
fog_visibility,
23+
clouds: Mutex::new(None),
2724
}))
2825
}
2926

@@ -35,16 +32,11 @@ impl MissionRpc {
3532
wind_dir: f64,
3633
temp: f64,
3734
pressure: f64,
35+
fog_thickness: f64, // in m
36+
fog_visibility: f64, // in m
37+
dust_density: u32,
3838
}
3939

40-
let clouds = self.0.clouds.clone();
41-
42-
let visibility = if self.0.fog_thickness > 200 {
43-
Some(self.0.fog_visibility)
44-
} else {
45-
None
46-
};
47-
4840
let data: Data = self
4941
.0
5042
.ipc
@@ -72,18 +64,34 @@ impl MissionRpc {
7264
wind_dir += 360.0;
7365
}
7466

67+
let clouds = {
68+
let mut clouds = self.0.clouds.lock().await;
69+
if clouds.is_none() {
70+
*clouds = Some(self.get_clouds().await?);
71+
}
72+
clouds.clone().unwrap()
73+
};
74+
7575
Ok(WeatherInfo {
76-
clouds,
77-
visibility,
76+
clouds: Some(clouds),
7877
wind_speed: data.wind_speed,
7978
wind_dir,
8079
temperature: data.temp,
8180
pressure_qnh,
8281
pressure_qfe: data.pressure,
82+
fog_thickness: data.fog_thickness,
83+
fog_visibility: data.fog_visibility,
84+
dust_density: data.dust_density,
8385
position: pos.clone(),
8486
})
8587
}
8688

89+
pub async fn get_clouds(&self) -> Result<Clouds, Error> {
90+
let clouds: Clouds = self.0.ipc.request("get_clouds", None::<()>).await?;
91+
92+
Ok(clouds)
93+
}
94+
8795
pub async fn get_unit_position(&self, name: &str) -> Result<Position, Error> {
8896
self.0
8997
.ipc

0 commit comments

Comments
 (0)