1
0
mirror of https://git.ngram.ca/OpenJam/rc-servers synced 2026-08-23 23:08:52 +00:00

Make rest of client platform flags configurage; fix speedometer confusing Americans

This commit is contained in:
NG (Graham)
2026-04-14 22:01:05 -04:00
parent e09aeceed3
commit 1d55e534c1
7 changed files with 72 additions and 9 deletions

View File

@@ -13,6 +13,8 @@ pub struct GameplaySettings {
pub cross_promo_image: String, // url pub cross_promo_image: String, // url
pub cross_promo_link: String, // url pub cross_promo_link: String, // url
pub garages_limit: i32, pub garages_limit: i32,
#[serde(default = "default_platform_conf", flatten)]
pub platform: PlatformSettings,
} }
impl std::convert::From<GameplaySettings> for crate::data::client_config::GameplaySettings { impl std::convert::From<GameplaySettings> for crate::data::client_config::GameplaySettings {
@@ -31,3 +33,37 @@ impl std::convert::From<GameplaySettings> for crate::data::client_config::Gamepl
} }
} }
} }
fn default_true() -> bool {
true
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct PlatformSettings {
#[serde(default)]
pub can_buy_premium: bool,
#[serde(default = "default_true")]
pub can_shop: bool,
#[serde(default)]
pub can_pass: bool,
#[serde(default = "default_true")]
pub can_select_language: bool,
#[serde(default)]
pub can_voice: bool,
#[serde(default)]
pub can_analytics: bool,
#[serde(default = "default_true")]
pub can_si: bool,
}
pub(super) fn default_platform_conf() -> PlatformSettings {
PlatformSettings {
can_buy_premium: false,
can_shop: true,
can_pass: false,
can_select_language: true,
can_voice: false,
can_analytics: false,
can_si: true,
}
}

View File

@@ -277,6 +277,19 @@ impl <C: Clone + Send> super::ConfigProvider<C> for CubeConfig {
}) })
} }
fn platform(&self) -> super::PlatformConfig {
super::PlatformConfig {
enable_buy_premium: self.settings.gameplay.platform.can_buy_premium,
enable_shop: self.settings.gameplay.platform.can_shop,
enable_robopass: self.settings.gameplay.platform.can_pass,
enable_select_language: self.settings.gameplay.platform.can_select_language,
enable_voice: self.settings.gameplay.platform.can_voice,
enable_analytics: self.settings.gameplay.platform.can_analytics,
enable_standard_units: self.settings.gameplay.platform.can_si,
}
}
fn login_messages(&self) -> super::DevMessageProvider<C> { fn login_messages(&self) -> super::DevMessageProvider<C> {
super::DevMessageProvider::new(self.settings.banners.iter().map(|msg| (msg.message.clone(), msg.duration as i32)).collect()) super::DevMessageProvider::new(self.settings.banners.iter().map(|msg| (msg.message.clone(), msg.duration as i32)).collect())
} }

View File

@@ -2,7 +2,7 @@ mod cubes_json;
pub use cubes_json::CubeConfig; pub use cubes_json::CubeConfig;
mod traits; mod traits;
pub use traits::{ConfigProvider, DevMessageProvider, ServerConfig, GarageUpgrades, GarageUpgradeIncrement, ChatSystemConfig, GameEventSequence, GameEvents, GameRotationStrategy, GameEvent, GameMap, GameVisibility, GameType, SingleplayerConfig, VehicleInfo, VehicleDescriptor, QueueChangeMode, Point, Sphere, MapConfig, LinksConfig, FakePlayer, ClientEmulator, EnergyConfig, BattleArenaResolver, PitSettings, PitWinCondition, TeamDeathMatchSettings, ShopEntriesResolver, ShopAction, ShopGain, PromoCode, MultiplayerSettings, BattleArenaCrystalParams, VehicleValidators, TeamChoosers, FactoryConfig}; pub use traits::{ConfigProvider, DevMessageProvider, ServerConfig, GarageUpgrades, GarageUpgradeIncrement, ChatSystemConfig, GameEventSequence, GameEvents, GameRotationStrategy, GameEvent, GameMap, GameVisibility, GameType, SingleplayerConfig, VehicleInfo, VehicleDescriptor, QueueChangeMode, Point, Sphere, MapConfig, LinksConfig, FakePlayer, ClientEmulator, EnergyConfig, BattleArenaResolver, PitSettings, PitWinCondition, TeamDeathMatchSettings, ShopEntriesResolver, ShopAction, ShopGain, PromoCode, MultiplayerSettings, BattleArenaCrystalParams, VehicleValidators, TeamChoosers, FactoryConfig, PlatformConfig};
mod validation; mod validation;
pub use validation::{SelfValidator, ValidationInfo, ValidationMessage}; pub use validation::{SelfValidator, ValidationInfo, ValidationMessage};

View File

@@ -16,6 +16,7 @@ pub trait ConfigProvider<C: Clone> {
fn campaign_details(&self) -> super::CompleteCampaignProvider; fn campaign_details(&self) -> super::CompleteCampaignProvider;
fn campaigns(&self) -> super::CampaignResolver; fn campaigns(&self) -> super::CampaignResolver;
fn client_config(&self) -> Typed<C>; fn client_config(&self) -> Typed<C>;
fn platform(&self) -> PlatformConfig;
fn login_messages(&self) -> DevMessageProvider<C>; fn login_messages(&self) -> DevMessageProvider<C>;
fn public_channels(&self) -> Typed<C>; fn public_channels(&self) -> Typed<C>;
fn server_config(&self) -> ServerConfig; fn server_config(&self) -> ServerConfig;
@@ -561,3 +562,13 @@ pub struct TeamChoosers {
pub pit: crate::persist::TeamChooser, pub pit: crate::persist::TeamChooser,
pub team_deathmatch: crate::persist::TeamChooser, pub team_deathmatch: crate::persist::TeamChooser,
} }
pub struct PlatformConfig {
pub enable_buy_premium: bool,
pub enable_shop: bool,
pub enable_robopass: bool,
pub enable_select_language: bool,
pub enable_voice: bool,
pub enable_analytics: bool,
pub enable_standard_units: bool,
}

View File

@@ -24,7 +24,7 @@ mod singleplayer;
pub use singleplayer::{SingleplayerConfig, Campaign, CampaignDifficulty, CampaignCompletion, CampaignType, Wave, WaveRobot}; pub use singleplayer::{SingleplayerConfig, Campaign, CampaignDifficulty, CampaignCompletion, CampaignType, Wave, WaveRobot};
mod client_config; mod client_config;
pub use client_config::GameplaySettings; pub use client_config::{GameplaySettings, PlatformSettings};
mod settings; mod settings;
pub use settings::{Settings, QueueMode}; pub use settings::{Settings, QueueMode};

View File

@@ -33,6 +33,7 @@ fn default_gameplay_settings() -> super::GameplaySettings {
cross_promo_image: "https://git.ngram.ca/OpenJam/rc-servers/raw/branch/main/assets/robocraft/default.png".to_owned(), cross_promo_image: "https://git.ngram.ca/OpenJam/rc-servers/raw/branch/main/assets/robocraft/default.png".to_owned(),
cross_promo_link: "https://git.ngram.ca/OpenJam/rc-servers".to_owned(), cross_promo_link: "https://git.ngram.ca/OpenJam/rc-servers".to_owned(),
garages_limit: 100, garages_limit: 100,
platform: super::client_config::default_platform_conf(),
} }
} }

View File

@@ -9,12 +9,14 @@ pub(super) fn platform_config_provider<C: Send + 'static>(conf: &oj_rc_core::Con
SimpleOpImpl::new(PlatformConfigProvider { SimpleOpImpl::new(PlatformConfigProvider {
chat_config: <oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::chat_system_config(conf), chat_config: <oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::chat_system_config(conf),
links: <oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::url_links(conf), links: <oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::url_links(conf),
platform_config: <oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::platform(conf),
}) })
} }
pub(super) struct PlatformConfigProvider { pub(super) struct PlatformConfigProvider {
chat_config: oj_rc_core::persist::config::ChatSystemConfig, chat_config: oj_rc_core::persist::config::ChatSystemConfig,
links: oj_rc_core::persist::config::LinksConfig, links: oj_rc_core::persist::config::LinksConfig,
platform_config: oj_rc_core::persist::config::PlatformConfig,
} }
#[async_trait::async_trait] #[async_trait::async_trait]
@@ -35,15 +37,15 @@ impl <C: Send + 'static> SimpleOperation<C> for PlatformConfigProvider {
key_ty: TypePrefix::Any, // obj key_ty: TypePrefix::Any, // obj
val_ty: TypePrefix::Any, // obj val_ty: TypePrefix::Any, // obj
items: vec![ items: vec![
(Typed::Str("BuyPremiumAvailable".into()), Typed::Bool(false)), (Typed::Str("BuyPremiumAvailable".into()), Typed::Bool(self.platform_config.enable_buy_premium)),
(Typed::Str("MainShopButtonAvailable".into()), Typed::Bool(true)), (Typed::Str("MainShopButtonAvailable".into()), Typed::Bool(self.platform_config.enable_shop)),
(Typed::Str("RoboPassButtonAvailable".into()), Typed::Bool(false)), (Typed::Str("RoboPassButtonAvailable".into()), Typed::Bool(self.platform_config.enable_robopass)),
(Typed::Str("LanguageSelectionAvailable".into()), Typed::Bool(true)), (Typed::Str("LanguageSelectionAvailable".into()), Typed::Bool(self.platform_config.enable_select_language)),
(Typed::Str("AutoJoinPublicChatRoom".into()), Typed::Str(client_selected_channel.into())), (Typed::Str("AutoJoinPublicChatRoom".into()), Typed::Str(client_selected_channel.into())),
(Typed::Str("CanCreateChatRooms".into()), Typed::Bool(self.chat_config.can_create_channels)), (Typed::Str("CanCreateChatRooms".into()), Typed::Bool(self.chat_config.can_create_channels)),
(Typed::Str("CurseVoiceEnabled".into()), Typed::Bool(false)), (Typed::Str("CurseVoiceEnabled".into()), Typed::Bool(self.platform_config.enable_voice)),
(Typed::Str("DeltaDNAEnabled".into()), Typed::Bool(false)), (Typed::Str("DeltaDNAEnabled".into()), Typed::Bool(self.platform_config.enable_analytics)),
(Typed::Str("UseDecimalSystem".into()), Typed::Bool(true)), (Typed::Str("UseDecimalSystem".into()), Typed::Bool(self.platform_config.enable_standard_units)),
(Typed::Str("FeedbackURL".into()), Typed::Str(self.links.feedback_url.clone().into())), (Typed::Str("FeedbackURL".into()), Typed::Str(self.links.feedback_url.clone().into())),
(Typed::Str("SupportURL".into()), Typed::Str(self.links.support_url.clone().into())), (Typed::Str("SupportURL".into()), Typed::Str(self.links.support_url.clone().into())),
(Typed::Str("WikiURL".into()), Typed::Str(self.links.wiki_url.clone().into())), (Typed::Str("WikiURL".into()), Typed::Str(self.links.wiki_url.clone().into())),