mirror of
https://github.com/horizon-rust/horizon.git
synced 2026-11-07 11:06:11 -10:00
Merge pull request #10098 from MSedgeMC/fix/f1-tab-list
F1 takes the player list away
This commit is contained in:
3 files changed
+30
-12
No files matched your search
@@ -124,10 +124,18 @@ pub fn face(
|
||||
}
|
||||
}
|
||||
|
||||
/// `Hud.extractTabList`: whether the list shows. A single-player world
|
||||
/// shows it only with another listed player or a `list` objective.
|
||||
pub fn visible(key_down: bool, local_server: bool, listed: usize, objective: bool) -> bool {
|
||||
key_down && !(local_server && listed <= 1 && !objective)
|
||||
/// `Hud.extractTabList`: whether the list shows. `Hud.extractRenderState`
|
||||
/// only calls it inside `if (!isHidden)`, so F1 takes the list away whatever
|
||||
/// else holds it up. A single-player world shows it only with another listed
|
||||
/// player or a `list` objective.
|
||||
pub fn visible(
|
||||
hud_shown: bool,
|
||||
key_down: bool,
|
||||
local_server: bool,
|
||||
listed: usize,
|
||||
objective: bool,
|
||||
) -> bool {
|
||||
hud_shown && key_down && !(local_server && listed <= 1 && !objective)
|
||||
}
|
||||
|
||||
/// `Options.getBackgroundColor(553648127)`: the row background.
|
||||
@@ -702,8 +710,11 @@ mod tests {
|
||||
assert_eq!(ping_sprite(1000), "icon/ping_1");
|
||||
// UUID.hashCode of 0 is 0: the first default skin.
|
||||
assert_eq!(default_skin(0), "entity/player/slim/alex");
|
||||
assert!(!visible(true, true, 1, false));
|
||||
assert!(visible(true, true, 1, true));
|
||||
assert!(visible(true, false, 1, false));
|
||||
assert!(!visible(true, true, true, 1, false));
|
||||
assert!(visible(true, true, true, 1, true));
|
||||
assert!(visible(true, true, false, 1, false));
|
||||
// F1 (`Hud.isHidden`) takes the list away however it was held up.
|
||||
assert!(!visible(false, true, false, 2, false));
|
||||
assert!(!visible(false, true, true, 1, true));
|
||||
}
|
||||
}
|
||||
@@ -835,6 +835,8 @@ impl Game<'_> {
|
||||
};
|
||||
let has_objective = self.score.board.display_objective(sb::SLOT_LIST).is_some();
|
||||
let shown = tab_list::visible(
|
||||
// `Hud.extractRenderState` draws the list inside `if (!isHidden)`.
|
||||
!self.ui.hide_gui,
|
||||
key,
|
||||
self.has_singleplayer_server(),
|
||||
players.len(),
|
||||
@@ -993,7 +995,7 @@ mod tab_list_tests {
|
||||
let mut guests = vec![guest(2, "Alex")];
|
||||
let players = local_tab_players(me.clone(), &guests);
|
||||
assert_eq!(players.as_slice(), std::slice::from_ref(&me));
|
||||
assert!(!tab_list::visible(true, true, players.len(), false));
|
||||
assert!(!tab_list::visible(true, true, true, players.len(), false));
|
||||
|
||||
guests[0].placed = true;
|
||||
let players = local_tab_players(me.clone(), &guests);
|
||||
@@ -1001,14 +1003,18 @@ mod tab_list_tests {
|
||||
assert_eq!(players[0], me);
|
||||
assert_eq!(players[1].uuid, 2);
|
||||
assert_eq!(players[1].name, "Alex");
|
||||
assert!(tab_list::visible(true, true, players.len(), false));
|
||||
assert!(!tab_list::visible(false, true, players.len(), false));
|
||||
assert!(tab_list::visible(true, true, true, players.len(), false));
|
||||
assert!(!tab_list::visible(true, false, true, players.len(), false));
|
||||
|
||||
guests.clear();
|
||||
let players = local_tab_players(me, &guests);
|
||||
assert_eq!(players.len(), 1);
|
||||
assert!(!tab_list::visible(true, true, players.len(), false));
|
||||
assert!(tab_list::visible(true, true, players.len(), true));
|
||||
assert!(!tab_list::visible(true, true, true, players.len(), false));
|
||||
assert!(tab_list::visible(true, true, true, players.len(), true));
|
||||
// F1 (`Hud.isHidden`) takes the list away: `extractRenderState` draws
|
||||
// it inside `if (!isHidden)`, the key and the objective aside.
|
||||
assert!(!tab_list::visible(false, true, true, players.len(), true));
|
||||
assert!(!tab_list::visible(false, true, false, 2, false));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -70,6 +70,7 @@ Hud.extractHotbarAndDecorations port crates/horizon-client-render/src/hud_layout
|
||||
Hud.<init> skip:java constructor state setup
|
||||
Hud.extractSubtitleOverlay port crates/horizon-client-render/src/hud_overlays.rs::SubtitleOverlay::extract
|
||||
Hud.extractChat port crates/horizon-client-render/src/chat.rs::Chat::layout
|
||||
Hud.extractTabList port crates/horizon-client-render/src/tab_list.rs::visible only inside `if (!isHidden)`, so F1 takes the list away; the list key, the local server and a `list` objective decide the rest
|
||||
Hud.getMobEffectSprite port crates/horizon-client/src/game/potions.rs::Game::draw_effect_icons sprite lookup is inside the effect icon draw
|
||||
Hud.extractDemoOverlay skip:other Horizon has no demo mode, so there is no demo timer overlay
|
||||
Hud.getCameraPlayer missing minor: unsure: no camera-entity lookup found; the HUD always uses the local player
|
||||
|
||||
|
Reference in new issue
Block a user