mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Client-side trade fixes: update recipe cache and always put client on the same side of the screen as their inventory.
This commit is contained in:
parent
a558d42da7
commit
95992ead4d
@ -1629,6 +1629,7 @@ impl Client {
|
|||||||
},
|
},
|
||||||
ServerGeneral::FinishedTrade(result) => {
|
ServerGeneral::FinishedTrade(result) => {
|
||||||
if let Some((_, trade)) = self.pending_trade.take() {
|
if let Some((_, trade)) = self.pending_trade.take() {
|
||||||
|
self.update_available_recipes();
|
||||||
frontend_events.push(Event::TradeComplete { result, trade })
|
frontend_events.push(Event::TradeComplete { result, trade })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -156,21 +156,28 @@ impl<'a> Trade<'a> {
|
|||||||
state: &mut ConrodState<'_, State>,
|
state: &mut ConrodState<'_, State>,
|
||||||
ui: &mut UiCell<'_>,
|
ui: &mut UiCell<'_>,
|
||||||
trade: &'a PendingTrade,
|
trade: &'a PendingTrade,
|
||||||
who: usize,
|
ours: bool,
|
||||||
) -> <Self as Widget>::Event {
|
) -> <Self as Widget>::Event {
|
||||||
let inventories = self.client.inventories();
|
let inventories = self.client.inventories();
|
||||||
|
let check_if_us = |who: usize| -> Option<_> {
|
||||||
let uid = trade.parties[who];
|
let uid = trade.parties[who];
|
||||||
let entity = self.client.state().ecs().entity_from_uid(uid.0)?;
|
let entity = self.client.state().ecs().entity_from_uid(uid.0)?;
|
||||||
let ours = entity == self.client.entity();
|
let is_ours = entity == self.client.entity();
|
||||||
|
Some(((who, uid, entity), is_ours))
|
||||||
|
};
|
||||||
|
let (who, uid, entity) = match check_if_us(0)? {
|
||||||
|
(x, is_ours) if ours == is_ours => x,
|
||||||
|
_ => check_if_us(1)?.0,
|
||||||
|
};
|
||||||
// TODO: update in accordence with https://gitlab.com/veloren/veloren/-/issues/960
|
// TODO: update in accordence with https://gitlab.com/veloren/veloren/-/issues/960
|
||||||
let inventory = inventories.get(entity)?;
|
let inventory = inventories.get(entity)?;
|
||||||
|
|
||||||
// Alignment for Grid
|
// Alignment for Grid
|
||||||
let mut alignment = Rectangle::fill_with([200.0, 340.0], color::TRANSPARENT);
|
let mut alignment = Rectangle::fill_with([200.0, 340.0], color::TRANSPARENT);
|
||||||
if who % 2 == 0 {
|
if !ours {
|
||||||
alignment = alignment.top_left_with_margins_on(state.ids.bg, 180.0, 46.5);
|
alignment = alignment.top_left_with_margins_on(state.ids.bg, 180.0, 46.5);
|
||||||
} else {
|
} else {
|
||||||
alignment = alignment.right_from(state.ids.inv_alignment[0], 0.0);
|
alignment = alignment.right_from(state.ids.inv_alignment[1 - who], 0.0);
|
||||||
}
|
}
|
||||||
alignment
|
alignment
|
||||||
.scroll_kids_vertically()
|
.scroll_kids_vertically()
|
||||||
@ -516,8 +523,8 @@ impl<'a> Widget for Trade<'a> {
|
|||||||
self.title(&mut state, ui);
|
self.title(&mut state, ui);
|
||||||
self.phase_indicator(&mut state, ui, &trade);
|
self.phase_indicator(&mut state, ui, &trade);
|
||||||
|
|
||||||
event = self.item_pane(&mut state, ui, &trade, 0).or(event);
|
event = self.item_pane(&mut state, ui, &trade, false).or(event);
|
||||||
event = self.item_pane(&mut state, ui, &trade, 1).or(event);
|
event = self.item_pane(&mut state, ui, &trade, true).or(event);
|
||||||
event = self
|
event = self
|
||||||
.accept_decline_buttons(&mut state, ui, &trade)
|
.accept_decline_buttons(&mut state, ui, &trade)
|
||||||
.or(event);
|
.or(event);
|
||||||
|
Loading…
Reference in New Issue
Block a user