the auction house opens, the Honor tab lands, and a day of fixes
- the auction house end to end: right-clicking an auctioneer opens Browse/Bids/Auctions on the server's reply — search, the category tree from your own DBCs, the reference's 50-a-page pager, multi-key sorting (directions corrected at the bytes), bid/buyout, the sell slot with deposit and duration, cancel with its fee popup; prices sit on the reference's own money-frame kit in lined-up columns, the twenty auction messages split refusals-red / outcomes-to-chat, and a won or sold auction reads as a proper mail receipt — the window's Lua re-worded in our own terms after the overlap ratchet caught the first cut leaning on the reference's text - the PvP honor system whole: the Honor tab and the inspect page over a real wire model, with current rank and highest-ever rank correctly two different fields - a day of reported fixes: WASD survives a /logout re-entry, addon settings save on a window close and Cmd+Q (exactly once — a mac close could fire the tail twice), clams open again, random-enchant items name themselves on every surface, the loot window's rows hold their seats with legible counts, idle players stop sinking through building floors, the shooter re-pulls between Auto Shots, portraits loosen ~19% to the client's own aspect-1.0 matrix, and big creatures thump the camera off the CameraShakes table - character select clicks like 1.12 — captions whiten on hover, buttons fire on release, Humans face straight ahead off the stage bone's real yaw, the facing is per-character, and hunter/warlock pets stand beside you at their family-ramp size with their own emitters (the imp's flames), the Voidwalker's sequence-hidden shackles culled - the smaller player-facing set: nameplate on/off rows in Options with the CanAttack category gate (emissaries stop plating), the bonus bar slides up with igBonusBarOpen, the camera's framing height glides on a shapeshift, the open letter evicts the centre seat, the far-band fog hull stops printing a pale horizon stripe at low view distance, the guide arrow is gold with per-source rim art, error text fades through its shadow too, and /convertraid converts the party - README: the auction house and PvP honor move out of "not built yet" Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -53,8 +53,6 @@ pub(crate) const ALLIANCE: [u8; 4] = [1, 3, 4, 7]; // Human, Dwarf, Night Elf, G
|
||||
const HORDE: [u8; 4] = [2, 5, 6, 8]; // Orc, Scourge, Tauren, Troll
|
||||
/// The ref's initial model facing (`SetCharacterCreateFacing(-15)`), reset on every race switch.
|
||||
const INITIAL_FACING: f32 = -15.0 * std::f32::consts::PI / 180.0;
|
||||
/// The rotate buttons' hold rate — the ref's 2°-per-frame `CHARACTER_FACING_INCREMENT`, per-second.
|
||||
const ROTATE_RATE: f32 = 120.0 * std::f32::consts::PI / 180.0;
|
||||
|
||||
/// The character-creation subsystem (decision 0423): the screen + its selection state.
|
||||
pub(crate) struct CharCreatePlugin;
|
||||
@@ -384,7 +382,8 @@ fn class_file(class: u8) -> &'static str {
|
||||
/// re-running the whole dial/panel/icon refresh 60× a second.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn create_input(
|
||||
presses: Query<(&CreateAction, &Interaction), Changed<Interaction>>,
|
||||
buttons: Query<(Entity, &CreateAction)>,
|
||||
clicks: Res<crate::glue::GlueClicks>,
|
||||
mut keyboard: MessageReader<KeyboardInput>,
|
||||
keys: Res<ButtonInput<KeyCode>>,
|
||||
catalog: Option<Res<CharCreate>>,
|
||||
@@ -407,8 +406,11 @@ fn create_input(
|
||||
let mut changed_look = false;
|
||||
let mut do_create = false;
|
||||
|
||||
for (action, interaction) in &presses {
|
||||
if *interaction != Interaction::Pressed {
|
||||
// Every control on this screen is a Button, and a Button fires on the RELEASE, over the
|
||||
// button that took the press (1533, `crate::glue::glue_clicks`). The name box needs no
|
||||
// press-to-focus: the screen has one field and it is always focused while up.
|
||||
for (entity, action) in &buttons {
|
||||
if !clicks.hit(entity) {
|
||||
continue;
|
||||
}
|
||||
match *action {
|
||||
@@ -537,24 +539,33 @@ fn refresh_name_box(
|
||||
|
||||
/// Rotate the preview: drag on the model pane (the ref's full-frame mouse rotation: `facing +=
|
||||
/// Δcursor·CHARACTER_ROTATION_CONSTANT` — dragging right *increases* the facing, same sign as the
|
||||
/// right rotate button; the engine constant's magnitude is unverified, ours ≈0.6°/px), or hold a
|
||||
/// rotate button (the ref's ±2°-per-frame `RotateLeft/Right_OnUpdate`; left decrements the facing).
|
||||
/// right rotate button), or hold a rotate button (the ref's ±2°-per-frame
|
||||
/// `RotateLeft/Right_OnUpdate`; left decrements the facing).
|
||||
///
|
||||
/// The drag constant is the select screen's, because in the reference it is literally the same
|
||||
/// number: `CHARACTER_ROTATION_CONSTANT = 0.6` is declared once in `CharacterSelect.lua` and read
|
||||
/// by both screens' `OnUpdate`. This screen carried a bare `0.01` rad/px (0.573°/px) instead — a
|
||||
/// 4.5 % drift from the screen next door, against a comment that already claimed 0.6 (1533).
|
||||
fn rotate_model(
|
||||
panes: Query<(&Interaction, &CreateAction)>,
|
||||
motion: Res<AccumulatedMouseMotion>,
|
||||
time: Res<Time>,
|
||||
window: Query<&Window, With<bevy::window::PrimaryWindow>>,
|
||||
mut preview: ResMut<GluePreview>,
|
||||
) {
|
||||
let window = window.single().ok();
|
||||
for (interaction, action) in &panes {
|
||||
if *interaction != Interaction::Pressed {
|
||||
continue;
|
||||
}
|
||||
match action {
|
||||
CreateAction::Model if motion.delta.x != 0.0 => {
|
||||
preview.yaw += motion.delta.x * 0.01;
|
||||
preview.yaw += crate::glue::drag_yaw(motion.delta.x, window);
|
||||
}
|
||||
CreateAction::RotateLeft => preview.yaw -= crate::glue::ROTATE_RATE * time.delta_secs(),
|
||||
CreateAction::RotateRight => {
|
||||
preview.yaw += crate::glue::ROTATE_RATE * time.delta_secs()
|
||||
}
|
||||
CreateAction::RotateLeft => preview.yaw -= ROTATE_RATE * time.delta_secs(),
|
||||
CreateAction::RotateRight => preview.yaw += ROTATE_RATE * time.delta_secs(),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,12 +321,15 @@ fn max_scroll(node: &ComputedNode) -> f32 {
|
||||
/// `SetValue(GetValue() ± GetHeight()/2)`), the knob drags.
|
||||
pub(super) fn scroll_drive(
|
||||
motion: Res<AccumulatedMouseMotion>,
|
||||
arrows: Query<(&ScrollArrow, &Interaction), Changed<Interaction>>,
|
||||
arrows: Query<(Entity, &ScrollArrow)>,
|
||||
clicks: Res<crate::glue::GlueClicks>,
|
||||
thumbs: Query<(&ScrollThumb, &Interaction)>,
|
||||
mut scrolls: Query<(&ComputedNode, &mut ScrollPosition), With<InfoScroll>>,
|
||||
) {
|
||||
for (arrow, interaction) in &arrows {
|
||||
if *interaction != Interaction::Pressed {
|
||||
// The arrow steps on the RELEASE — it is a `<Button>` with an `<OnClick>`, not a slider (1533).
|
||||
// The knob below is the slider half, and a drag is a held press by definition.
|
||||
for (entity, arrow) in &arrows {
|
||||
if !clicks.hit(entity) {
|
||||
continue;
|
||||
}
|
||||
let Ok((node, mut pos)) = scrolls.get_mut(arrow.scroll) else {
|
||||
|
||||
Reference in New Issue
Block a user