Skip to content
Snippets Groups Projects
Verified Commit f2b9c64e authored by Louis's avatar Louis :fire:
Browse files

Update resources, fix menu overlap issues in town

parent 067acbba
No related branches found
No related tags found
No related merge requests found
No preview for this file type
......@@ -121,9 +121,9 @@ macro_rules! register_widget_with_many_resources {
$ctx.add_widget_system(
::kayak_ui::prelude::Widget::get_name(&$props::default()),
|
In((widget_context, entity, previous_entity)): In<(KayakWidgetContext, Entity, Entity)>,
$( $name: bevy::prelude::Res<$resource> ),+,
widget_param: WidgetParam<$props, $state>,
::bevy::prelude::In((widget_context, entity, previous_entity)): ::bevy::prelude::In<(::kayak_ui::prelude::KayakWidgetContext, ::bevy::prelude::Entity, ::bevy::prelude::Entity)>,
$( $name: ::bevy::prelude::Res<$resource> ),+,
widget_param: ::kayak_ui::prelude::WidgetParam<$props, $state>,
| {
widget_param.has_changed(&widget_context, entity, previous_entity)
$( || $name.is_changed() )+
......@@ -227,12 +227,13 @@ pub mod context {
EmptyState,
render_panel_stat_widget
);
register_widget_with_resource!(
register_widget_with_many_resources!(
widget_context,
TownMenuPanelProps,
TownMenuPanelState,
UITravelInfo,
render_town_menu_panel
render_town_menu_panel,
travelinfo: UITravelInfo,
statsinfo: UIStatsData
);
register_widget_with_resource!(
widget_context,
......
......@@ -8,6 +8,7 @@ use kayak_ui::widgets::{
use crate::states::Player;
use crate::ui::components::*;
use crate::ui::prelude::*;
use crate::ui::sync::UIStatsData;
use crate::ui::widgets::*;
use crate::world::{CurrentResidence, MapQuery, TownPaths};
use crate::{basic_widget, empty_props, on_button_click};
......@@ -57,6 +58,7 @@ pub fn render_shop_panel(
In((widget_context, entity)): In<(KayakWidgetContext, Entity)>,
mut commands: Commands,
query: Query<&ShopPanelProps>,
ui_data: Res<UIStatsData>,
) -> bool {
let parent_id = Some(entity);
......@@ -67,18 +69,13 @@ pub fn render_shop_panel(
("Ale", 11, 6, 14, 2),
("Milk", 2, 5, 14, 2),
("Cheese", 3, 6, 14, 2),
("Armour", 12usize, 12, 14, 2),
("Weapons", 1, 13, 14, 2),
("Luxury Goods", 13, 27, 14, 2),
("Ale", 11, 6, 14, 2),
("Milk", 2, 5, 14, 2),
("Cheese", 3, 6, 14, 2),
("Armour", 12usize, 12, 14, 2),
("Weapons", 1, 13, 14, 2),
("Luxury Goods", 13, 27, 14, 2),
("Ale", 11, 6, 14, 2),
("Milk", 2, 5, 14, 2),
("Cheese", 3, 6, 14, 2),
("Spare Wheel", 28, 125, 14, 2),
("Berries", 27, 4, 14, 2),
("Corn", 26, 5, 14, 2),
("Tomato", 25, 6, 14, 2),
("Chili", 24, 8, 14, 2),
("Grapes", 23, 9, 14, 2),
("Wheat", 22, 3, 14, 2),
];
log::info!("{:?}", items);
......@@ -107,27 +104,30 @@ pub fn render_shop_panel(
track_color: Some(Color::rgb(0.827, 0.482, 0.353)),
thumb_color: Some(Color::rgb(0.451, 0.224, 0.063)),
..Default::default()
} } styles={KStyle { padding: edge_px(5.0), ..Default::default() }}>
} } styles={KStyle { pointer_events: value(PointerEvents::None), padding: edge_px(5.0), ..Default::default() }}>
{
for (name, idx, cost, shop_amount, player_amount) in items.iter() {
constructor! {
<BackgroundBundle
styles={KStyle {
pointer_events: value(PointerEvents::ChildrenOnly),
layout_type: value(LayoutType::Row),
col_between: stretch(0.5),
height: px(40.0),
bottom: px(5.0),
padding_top: px(4.0),
padding_bottom: px(4.0),
bottom: px(15.0),
padding_top: px(4.0),
padding_bottom: px(4.0),
color: value(Color::BLACK),
..Default::default()
}}
>
<InsetIconWidget props={InsetIconProps { image: IconContent::Atlas(String::from("icons"), *idx), size: 32.0}} />
<TextWidgetBundle styles={KStyle { width: stretch(1.0), ..Default::default() }} text={TextProps { content: String::from(*name), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<TextWidgetBundle styles={KStyle { width: stretch(1.5), ..Default::default() }} text={TextProps { content: String::from(*name), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<TextWidgetBundle styles={KStyle { width: stretch(1.0), ..Default::default() }} text={TextProps { content: format!("{}g", cost), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<TextWidgetBundle styles={KStyle { width: stretch(1.0), ..Default::default() }} text={TextProps { content: format!("{}", shop_amount), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<TextWidgetBundle styles={KStyle { width: stretch(1.0), ..Default::default() }} text={TextProps { content: format!("{}", player_amount), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<TextWidgetBundle styles={KStyle { width: stretch(0.5), ..Default::default() }} text={TextProps { content: format!("{}", shop_amount), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<TextWidgetBundle styles={KStyle { width: stretch(0.5), ..Default::default() }} text={TextProps { content: format!("{}", player_amount), size: 30.0, line_height: Some(32.0), ..Default::default() } }/>
<ButtonWidget props={ButtonWidgetProps { font_size: 20.0, text: String::from("Buy"), ..Default::default() }} />
<ButtonWidget props={ButtonWidgetProps { font_size: 20.0, text: String::from("Sell"), ..Default::default() }} />
</BackgroundBundle>
};
}
......
......@@ -9,7 +9,7 @@ use crate::assets::AssetHandles;
use crate::states::Player;
use crate::ui::components::*;
use crate::ui::prelude::*;
use crate::ui::sync::UITravelInfo;
use crate::ui::sync::{UIStatsData, UITravelInfo};
use crate::ui::widgets::*;
use crate::world::{CurrentResidence, MapQuery, TownPaths};
use crate::{basic_widget, empty_props, on_button_click};
......@@ -37,6 +37,7 @@ pub fn render_town_menu_panel(
mut commands: Commands,
mut state_query: Query<&mut TownMenuPanelState>,
ui_data: Res<UITravelInfo>,
stats_data: Res<UIStatsData>,
places: Res<TownPaths>,
mut next_state: Local<TownMenuTab>,
) -> bool {
......@@ -100,81 +101,118 @@ pub fn render_town_menu_panel(
state_query.get_mut(state_entity).ok(),
) {
rsx! {
<PanelWidget
styles={panel_style}
>
<TextWidgetBundle
text={TextProps {
font: Some(String::from("header")),
content: format!("Hark! You enter {}", &place),
size: 48.0,
..Default::default()
}}
styles={KStyle {
color: value(Color::BLACK),
padding: edge_px(20.0),
left: stretch(1.0),
right: stretch(1.0),
..Default::default()
}}
/>
<VDividerWidget props={VDividerWidgetProps { height: 4.0, padding: 5.0, color: Color::rgb(0.52, 0.369, 0.18)}} />
<ElementBundle styles={KStyle {
layout_type: value(LayoutType::Row),
padding_top: stretch(1.0),
padding_bottom: stretch(1.0),
padding_left: stretch(1.0),
padding_right: stretch(1.0),
height: px(60.0),
col_between: px(15.0),
..Default::default()
}}>
<ButtonWidget
props={ButtonWidgetProps {
left_icon: IconContent::Atlas(String::from("icons"), 4),
..ButtonWidgetProps::text("Travel", 28.0)
<ElementBundle styles={panel_style}>
<PanelWidget>
<TextWidgetBundle
text={TextProps {
font: Some(String::from("header")),
content: format!("Hark! You enter {}", &place),
size: 48.0,
..Default::default()
}}
on_event={click_tab_travel}
/>
<ButtonWidget
props={ButtonWidgetProps {
left_icon: IconContent::Atlas(String::from("icons"), 9),
..ButtonWidgetProps::text("Merchant", 28.0)
styles={KStyle {
color: value(Color::BLACK),
padding: edge_px(20.0),
left: stretch(1.0),
right: stretch(1.0),
..Default::default()
}}
on_event={click_tab_merchant}
/>
<ButtonWidget
props={ButtonWidgetProps {
left_icon: IconContent::Atlas(String::from("icons"), 11),
..ButtonWidgetProps::text("Tavern", 28.0)
}}
on_event={click_tab_tavern}
/>
</ElementBundle>
<VDividerWidget props={VDividerWidgetProps { height: 4.0, padding: 5.0, color: Color::rgb(0.52, 0.369, 0.18)}} />
{
log::info!("Town menu is showing: {:?}", &state.tab);
match state.tab {
TownMenuTab::Travel => {
constructor! {
<TransitPanel />
};
},
TownMenuTab::Merchant => {
constructor! {
<ShopPanel />
<VDividerWidget props={VDividerWidgetProps { height: 4.0, padding: 5.0, color: Color::rgb(0.52, 0.369, 0.18)}} />
<ElementBundle styles={KStyle {
layout_type: value(LayoutType::Row),
padding_top: stretch(1.0),
padding_bottom: stretch(1.0),
padding_left: stretch(1.0),
padding_right: stretch(1.0),
height: px(60.0),
col_between: px(15.0),
..Default::default()
}}>
<ButtonWidget
props={ButtonWidgetProps {
left_icon: IconContent::Atlas(String::from("icons"), 4),
..ButtonWidgetProps::text("Travel", 28.0)
}}
on_event={click_tab_travel}
/>
<ButtonWidget
props={ButtonWidgetProps {
left_icon: IconContent::Atlas(String::from("icons"), 9),
..ButtonWidgetProps::text("Merchant", 28.0)
}}
on_event={click_tab_merchant}
/>
<ButtonWidget
props={ButtonWidgetProps {
left_icon: IconContent::Atlas(String::from("icons"), 11),
..ButtonWidgetProps::text("Tavern", 28.0)
}}
on_event={click_tab_tavern}
/>
</ElementBundle>
<VDividerWidget props={VDividerWidgetProps { height: 4.0, padding: 5.0, color: Color::rgb(0.52, 0.369, 0.18)}} />
{
log::info!("Town menu is showing: {:?}", &state.tab);
match state.tab {
TownMenuTab::Travel => {
constructor! {
<TransitPanel />
};
},
TownMenuTab::Merchant => {
constructor! {
<ShopPanel />
}
}
TownMenuTab::Tavern => {
constructor! {
<TextWidgetBundle
styles={KStyle {
left: stretch(1.0),
right: stretch(1.0),
color: value(Color::BLACK),
..Default::default()
}}
text={TextProps {
size: 32.0,
content: String::from("A strange bartender eyes you suspiciously"),
..Default::default()
}}
/>
}
}
TownMenuTab::None => {}
}
TownMenuTab::Tavern => {}
TownMenuTab::None => {}
}
}
</PanelWidget>
</PanelWidget>
<PanelWidget styles={KStyle { layout_type: value(LayoutType::Row), height: px(45.0), ..Default::default() }}>
<PanelStatWidget
styles={KStyle {
position_type: value(KPositionType::SelfDirected),
left: stretch(1.0),
top: stretch(0.8),
bottom: stretch(1.0),
right: px(40.0),
..Default::default()
}}
props={PanelStatProps {
fill: false,
text: format!("{}g", stats_data.money),
font_size: 24.0,
icon: IconContent::Atlas(String::from("icons"), 8),
color: Color::BLACK
}}
/>
</PanelWidget>
</ElementBundle>
};
if let Some(next) = state.next_tab {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment