Skip to content

Commit 3f81fd7

Browse files
committed
feat: add relative_ratios option to conmparison commands
1 parent 60afe33 commit 3f81fd7

File tree

17 files changed

+425
-45
lines changed

17 files changed

+425
-45
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/api/src/canvas/prelude.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,37 @@ use uuid::Uuid;
88

99
use crate::player::{self, data, status};
1010

11+
#[derive(Clone, Copy)]
12+
pub struct Div(pub f64, pub f64);
13+
14+
impl From<Div> for f64 {
15+
fn from(div: Div) -> Self {
16+
div.0 / div.1
17+
}
18+
}
19+
20+
impl From<Div> for u32 {
21+
fn from(div: Div) -> Self {
22+
(f64::from(div) * 100.).round() as u32
23+
}
24+
}
25+
26+
#[cfg(feature = "redis")]
27+
impl redis::ToRedisArgs for Div {
28+
fn write_redis_args<W>(&self, out: &mut W)
29+
where
30+
W: ?Sized + redis::RedisWrite,
31+
{
32+
f64::from(*self).write_redis_args(out)
33+
}
34+
}
35+
36+
impl label::ToFormatted for Div {
37+
fn to_formatted<'t, 'c: 't>(&'t self, ctx: &'c context::Context<'c>) -> Cow<'t, str> {
38+
f64::from(*self).to_formatted(ctx).into_owned().into()
39+
}
40+
}
41+
1142
#[allow(clippy::too_many_arguments)]
1243
pub trait Game {
1344
const HAS_COMPACT: bool;
@@ -23,6 +54,7 @@ pub trait Game {
2354
mode: Option<Self::Mode>,
2455
suffix: Option<&str>,
2556
background: Option<skia_safe::Color>,
57+
relative_ratios: bool,
2658
) -> (skia_safe::Surface, Self::Mode);
2759

2860
fn canvas(
@@ -43,6 +75,7 @@ pub trait Game {
4375
data_rhs: &data::Data,
4476
suffix: Option<&str>,
4577
background: Option<skia_safe::Color>,
78+
relative_ratios: bool,
4679
) -> Vec<skia_safe::Surface>;
4780

4881
fn condensed(
@@ -90,6 +123,7 @@ pub trait Game {
90123
player: &player::Player,
91124
data_lhs: &data::Data,
92125
data_rhs: &data::Data,
126+
relative_ratios: bool,
93127
) -> serenity::CreateEmbed<'c>;
94128
}
95129

crates/derive/src/game/impls/mode.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@ pub(crate) fn impl_mode(
709709
embed: #poise::serenity_prelude::CreateEmbed<'e>,
710710
data_lhs: &#api::player::data::Data,
711711
data_rhs: &#api::player::data::Data,
712+
relative_ratios: bool,
712713
) -> #poise::serenity_prelude::CreateEmbed<'e> {
713714
let mut field = String::new();
714715
let game_lhs = &data_lhs.stats.#path_to_game;
@@ -849,6 +850,7 @@ pub(crate) fn impl_mode(
849850
session: &'c #hypixel::player::status::Session,
850851
status: &'c #api::canvas::shape::Status,
851852
progress: &'c #api::canvas::shape::WideBubbleProgress,
853+
relative_ratios: bool,
852854
) -> #api::canvas::Canvas<'c> {
853855
let stats_lhs = &data_lhs.stats.#path_to_game.#id;
854856
let stats_rhs = &data_rhs.stats.#path_to_game.#id;
@@ -935,6 +937,7 @@ pub(crate) fn impl_mode(
935937
mut canvas: #api::canvas::Canvas<'c>,
936938
data_lhs: &'c #api::player::data::Data,
937939
data_rhs: &'c #api::player::data::Data,
940+
relative_ratios: bool,
938941
) -> #api::canvas::Canvas<'c> {
939942
use #api::canvas::label::ToFormatted;
940943

crates/derive/src/game/mod.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,6 +1384,7 @@ impl ToTokens for GameInputReceiver {
13841384
embed: #poise::serenity_prelude::CreateEmbed<'e>,
13851385
data_lhs: &#api::player::data::Data,
13861386
data_rhs: &#api::player::data::Data,
1387+
relative_ratios: bool,
13871388
) -> #poise::serenity_prelude::CreateEmbed<'e> {
13881389
let mut field = String::new();
13891390
let game_lhs = &data_lhs.stats.#path_to_game;
@@ -1562,6 +1563,7 @@ impl ToTokens for GameInputReceiver {
15621563
mut canvas: #api::canvas::Canvas<'c>,
15631564
data_lhs: &'c #api::player::data::Data,
15641565
data_rhs: &'c #api::player::data::Data,
1566+
relative_ratios: bool,
15651567
) -> #api::canvas::Canvas<'c> {
15661568
use #api::canvas::label::ToFormatted;
15671569

@@ -1601,6 +1603,7 @@ impl ToTokens for GameInputReceiver {
16011603
session: &'c #api::player::status::Session,
16021604
status: &'c #api::canvas::shape::Status,
16031605
progress: &'c #api::canvas::shape::WideBubbleProgress,
1606+
relative_ratios: bool,
16041607
) -> #api::canvas::Canvas<'c> {
16051608
let game_lhs = &data_lhs.stats.#path_to_game;
16061609
let game_rhs = &data_rhs.stats.#path_to_game;
@@ -1733,6 +1736,7 @@ impl ToTokens for GameInputReceiver {
17331736
#canvas,
17341737
data_lhs,
17351738
data_rhs,
1739+
relative_ratios,
17361740
);
17371741
}
17381742
});
@@ -1750,6 +1754,7 @@ impl ToTokens for GameInputReceiver {
17501754
session,
17511755
&status,
17521756
&progress,
1757+
relative_ratios,
17531758
),
17541759
}
17551760
});
@@ -1841,7 +1846,7 @@ impl ToTokens for GameInputReceiver {
18411846
let embed_diff_game = overall_modes.iter().map(|mode| {
18421847
let ty = mode.ty();
18431848

1844-
quote!(embed = #ty::embed_diff(ctx, embed, data_lhs, data_rhs);)
1849+
quote!(embed = #ty::embed_diff(ctx, embed, data_lhs, data_rhs, relative_ratios);)
18451850
});
18461851

18471852
let buffer_fields = match overall_modes.len() % 3 {
@@ -1926,6 +1931,7 @@ impl ToTokens for GameInputReceiver {
19261931
kind: &#kind_enum
19271932
) -> Result<::std::borrow::Cow<'static, str>, #translate::Error> {
19281933
let game = &data.stats.#path_to_game;
1934+
let relative_ratios = true;
19291935

19301936
let value: String = match kind {
19311937
#(#from_kind_match,)*
@@ -1943,6 +1949,7 @@ impl ToTokens for GameInputReceiver {
19431949
) -> Result<String, #translate::Error> {
19441950
let game_lhs = &data_lhs.stats.#path_to_game;
19451951
let game_rhs = &data_rhs.stats.#path_to_game;
1952+
let relative_ratios = true;
19461953

19471954
Ok(match kind {
19481955
#(#from_kind_diff_match,)*
@@ -2030,6 +2037,7 @@ impl ToTokens for GameInputReceiver {
20302037
data_rhs: &#api::player::data::Data,
20312038
suffix: Option<&str>,
20322039
background: Option<#skia::Color>,
2040+
relative_ratios: bool,
20332041
) -> Vec<#skia::Surface> {
20342042
let game_lhs = &data_lhs.stats.#path_to_game;
20352043
let game_rhs = &data_rhs.stats.#path_to_game;
@@ -2105,6 +2113,7 @@ impl ToTokens for GameInputReceiver {
21052113
canvas_0,
21062114
data_lhs,
21072115
data_rhs,
2116+
relative_ratios,
21082117
);
21092118

21102119
#(#condensed_mode_diff)*
@@ -2172,6 +2181,7 @@ impl ToTokens for GameInputReceiver {
21722181
mode: Option<Self::Mode>,
21732182
suffix: Option<&str>,
21742183
background: Option<#skia::Color>,
2184+
relative_ratios: bool,
21752185
) -> (#skia::Surface, Self::Mode) {
21762186
let game_lhs = &data_lhs.stats.#path_to_game;
21772187
let game_rhs = &data_rhs.stats.#path_to_game;
@@ -2224,6 +2234,7 @@ impl ToTokens for GameInputReceiver {
22242234
session,
22252235
&status,
22262236
&progress,
2237+
relative_ratios,
22272238
)
22282239
}
22292240
#(#canvas_diff_mode)*
@@ -2380,6 +2391,7 @@ impl ToTokens for GameInputReceiver {
23802391
player: &#api::player::Player,
23812392
data_lhs: &#api::player::data::Data,
23822393
data_rhs: &#api::player::data::Data,
2394+
relative_ratios: bool,
23832395
) -> #poise::serenity_prelude::CreateEmbed<'e> {
23842396
let mut embed = #poise::serenity_prelude::CreateEmbed::default()
23852397
.thumbnail(player.get_body_url());
@@ -2405,6 +2417,7 @@ impl ToTokens for GameInputReceiver {
24052417
embed,
24062418
data_lhs,
24072419
data_rhs,
2420+
relative_ratios,
24082421
);
24092422

24102423
#(#embed_diff_game)*

0 commit comments

Comments
 (0)