feat(wuwa): initial multi-edition support
This commit is contained in:
parent
4c622d4ad2
commit
0ec47d39ac
6 changed files with 22 additions and 17 deletions
|
@ -9,7 +9,7 @@ edition = "2021"
|
|||
|
||||
[dependencies.anime-game-core]
|
||||
git = "https://github.com/an-anime-team/anime-game-core"
|
||||
tag = "1.18.0"
|
||||
tag = "1.18.1"
|
||||
features = ["all"]
|
||||
|
||||
# path = "../anime-game-core" # ! for dev purposes only
|
||||
|
@ -66,4 +66,4 @@ all = [
|
|||
"fps-unlocker"
|
||||
]
|
||||
|
||||
default = ["all"]
|
||||
default = ["all", "wuwa"]
|
||||
|
|
|
@ -10,8 +10,6 @@ use crate::honkai::config::Config;
|
|||
pub enum LauncherState {
|
||||
Launch,
|
||||
|
||||
MfplatPatchAvailable,
|
||||
|
||||
PatchNotVerified,
|
||||
PatchBroken,
|
||||
PatchUnsafe,
|
||||
|
@ -48,7 +46,6 @@ pub struct LauncherStateParams<F: Fn(StateUpdating)> {
|
|||
pub game_edition: GameEdition,
|
||||
|
||||
pub patch_folder: PathBuf,
|
||||
pub apply_mfplat: bool,
|
||||
|
||||
pub status_updater: F
|
||||
}
|
||||
|
@ -74,11 +71,6 @@ impl LauncherState {
|
|||
// Check game patch status
|
||||
(params.status_updater)(StateUpdating::Patch);
|
||||
|
||||
// Check if mfplat patch is needed
|
||||
if params.apply_mfplat && !mfplat::is_applied(¶ms.wine_prefix)? {
|
||||
return Ok(Self::MfplatPatchAvailable);
|
||||
}
|
||||
|
||||
// Check jadeite patch status
|
||||
if !jadeite::is_installed(¶ms.patch_folder) {
|
||||
return Ok(Self::PatchNotInstalled);
|
||||
|
@ -146,7 +138,6 @@ impl LauncherState {
|
|||
game_edition: config.launcher.edition,
|
||||
|
||||
patch_folder: config.patch.path,
|
||||
apply_mfplat: config.patch.apply_mfplat,
|
||||
|
||||
status_updater
|
||||
})
|
||||
|
|
|
@ -36,7 +36,7 @@ impl Default for Game {
|
|||
let launcher_dir = launcher_dir().expect("Failed to get launcher dir");
|
||||
|
||||
Self {
|
||||
path: launcher_dir.join("PGR"),
|
||||
path: launcher_dir.join("Wuthering Waves"),
|
||||
wine: Wine::default(),
|
||||
dxvk: Dxvk::default(),
|
||||
enhancements: Enhancements::default(),
|
||||
|
|
|
@ -5,6 +5,8 @@ use serde_json::Value as JsonValue;
|
|||
|
||||
use enum_ordinalize::Ordinalize;
|
||||
|
||||
use anime_game_core::wuwa::consts::GameEdition;
|
||||
|
||||
#[cfg(feature = "discord-rpc")]
|
||||
pub mod discord_rpc;
|
||||
|
||||
|
@ -54,6 +56,7 @@ impl Default for LauncherBehavior {
|
|||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct Launcher {
|
||||
pub language: String,
|
||||
pub edition: GameEdition,
|
||||
pub style: LauncherStyle,
|
||||
pub temp: Option<PathBuf>,
|
||||
pub repairer: Repairer,
|
||||
|
@ -69,6 +72,7 @@ impl Default for Launcher {
|
|||
fn default() -> Self {
|
||||
Self {
|
||||
language: String::from("en-us"),
|
||||
edition: GameEdition::from_system_lang(),
|
||||
style: LauncherStyle::default(),
|
||||
temp: launcher_dir().ok(),
|
||||
repairer: Repairer::default(),
|
||||
|
@ -91,6 +95,11 @@ impl From<&JsonValue> for Launcher {
|
|||
None => default.language
|
||||
},
|
||||
|
||||
edition: match value.get("edition") {
|
||||
Some(value) => serde_json::from_value(value.clone()).unwrap_or(default.edition),
|
||||
None => default.edition
|
||||
},
|
||||
|
||||
style: match value.get("style") {
|
||||
Some(value) => serde_json::from_value(value.to_owned()).unwrap_or_default(),
|
||||
None => default.style
|
||||
|
|
|
@ -71,7 +71,7 @@ pub fn run() -> anyhow::Result<()> {
|
|||
|
||||
tracing::info!("Checking telemetry");
|
||||
|
||||
if let Ok(Some(server)) = telemetry::is_disabled() {
|
||||
if let Ok(Some(server)) = telemetry::is_disabled(config.launcher.edition) {
|
||||
return Err(anyhow::anyhow!("Telemetry server is not disabled: {server}"));
|
||||
}
|
||||
|
||||
|
|
|
@ -35,8 +35,11 @@ pub enum StateUpdating {
|
|||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct LauncherStateParams<F: Fn(StateUpdating)> {
|
||||
pub wine_prefix: PathBuf,
|
||||
pub game_path: PathBuf,
|
||||
pub game_edition: GameEdition,
|
||||
|
||||
pub wine_prefix: PathBuf,
|
||||
|
||||
pub fast_verify: bool,
|
||||
pub status_updater: F
|
||||
}
|
||||
|
@ -83,7 +86,7 @@ impl LauncherState {
|
|||
}
|
||||
|
||||
// Check telemetry servers
|
||||
let disabled = telemetry::is_disabled()
|
||||
let disabled = telemetry::is_disabled(params.game_edition)
|
||||
|
||||
// Return true if there's no domain name resolved, or false otherwise
|
||||
.map(|result| result.is_none())
|
||||
|
@ -103,7 +106,7 @@ impl LauncherState {
|
|||
// Check game installation status
|
||||
(params.status_updater)(StateUpdating::Game);
|
||||
|
||||
let game = Game::new(¶ms.game_path, ())
|
||||
let game = Game::new(¶ms.game_path, params.game_edition)
|
||||
.with_fast_verify(params.fast_verify);
|
||||
|
||||
let diff = game.try_get_diff()?;
|
||||
|
@ -131,8 +134,10 @@ impl LauncherState {
|
|||
}
|
||||
|
||||
Self::get(LauncherStateParams {
|
||||
game_path: config.game.path.clone(),
|
||||
game_edition: config.launcher.edition,
|
||||
|
||||
wine_prefix: config.get_wine_prefix_path(),
|
||||
game_path: config.game.path,
|
||||
fast_verify: config.launcher.repairer.fast,
|
||||
|
||||
status_updater
|
||||
|
|
Loading…
Reference in a new issue