add difficulty icons to discord rich presence

This commit is contained in:
József Sallai 2023-02-18 22:13:14 +02:00
parent e77241cd56
commit b22ca8b35e
2 changed files with 36 additions and 2 deletions

View File

@ -4,7 +4,7 @@ use discord_rich_presence::{
};
use crate::framework::error::{GameError, GameResult};
use crate::game::{player::Player, stage::StageData};
use crate::game::{player::Player, shared_game_state::GameDifficulty, stage::StageData};
pub enum DiscordRPCState {
Initializing,
@ -22,6 +22,7 @@ pub struct DiscordRPC {
life: u16,
max_life: u16,
stage_name: String,
difficulty: Option<GameDifficulty>,
}
impl DiscordRPC {
@ -35,6 +36,7 @@ impl DiscordRPC {
life: 0,
max_life: 0,
stage_name: String::new(),
difficulty: None,
}
}
@ -66,10 +68,30 @@ impl DiscordRPC {
log::debug!("Updating Discord RPC state: {} - {}", state, details);
let mut activity_assets = Assets::new().large_image("drs");
if self.difficulty.is_some() {
let difficulty = self.difficulty.unwrap();
let asset_name = match difficulty {
GameDifficulty::Easy => "deasy",
GameDifficulty::Normal => "dnormal",
GameDifficulty::Hard => "dhard",
};
let asset_label = match difficulty {
GameDifficulty::Easy => "Easy",
GameDifficulty::Normal => "Normal",
GameDifficulty::Hard => "Hard",
};
activity_assets = activity_assets.small_image(asset_name).small_text(asset_label);
}
let activity = Activity::new()
.state(state.as_str())
.details(details.as_str())
.assets(Assets::new().large_image("drs"))
.assets(activity_assets)
.buttons(vec![Button::new("doukutsu-rs on GitHub", "https://github.com/doukutsu-rs/doukutsu-rs")]);
match self.client.set_activity(activity) {
@ -89,11 +111,17 @@ impl DiscordRPC {
self.update()
}
pub fn update_difficulty(&mut self, difficulty: GameDifficulty) -> GameResult {
self.difficulty = Some(difficulty);
self.update()
}
pub fn set_initializing(&mut self) -> GameResult {
self.set_state(DiscordRPCState::Initializing)
}
pub fn set_idling(&mut self) -> GameResult {
self.difficulty = None;
self.set_state(DiscordRPCState::Idling)
}

View File

@ -577,6 +577,9 @@ impl SharedGameState {
#[cfg(feature = "scripting-lua")]
self.lua.reload_scripts(ctx)?;
#[cfg(feature = "discord-rpc")]
self.discord_rpc.update_difficulty(self.difficulty)?;
let mut next_scene = GameScene::new(self, ctx, self.constants.game.new_game_stage as usize)?;
next_scene.player1.cond.set_alive(true);
let (pos_x, pos_y) = self.constants.game.new_game_player_pos;
@ -651,6 +654,9 @@ impl SharedGameState {
#[cfg(feature = "scripting-lua")]
self.lua.reload_scripts(ctx)?;
#[cfg(feature = "discord-rpc")]
self.discord_rpc.update_difficulty(self.difficulty)?;
self.next_scene = Some(Box::new(next_scene));
return Ok(());
}