Button added

Former-commit-id: d8e88da53c3f8daa3216a7d0657f0934ec1a051f
This commit is contained in:
Monty Marz 2019-06-02 02:17:36 +00:00 committed by Forest Anderson
parent 1ccaf9a7bd
commit 112f0515bd
8 changed files with 129 additions and 83 deletions

BIN
assets/voxygen/element/frames/esc menu.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/element/frames/esc_menu.vox (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -104,6 +104,20 @@ impl Client {
self.client_state = ClientState::Pending; self.client_state = ClientState::Pending;
} }
/// Request a state transition to `ClientState::Character`.
pub fn request_logout(&mut self) {
self.postbox
.send_message(ClientMsg::RequestState(ClientState::Connected));
self.client_state = ClientState::Pending;
}
/// Request a state transition to `ClientState::Character`.
pub fn request_remove_character(&mut self) {
self.postbox
.send_message(ClientMsg::RequestState(ClientState::Registered));
self.client_state = ClientState::Pending;
}
pub fn set_view_distance(&mut self, view_distance: u32) { pub fn set_view_distance(&mut self, view_distance: u32) {
self.view_distance = Some(view_distance.max(1).min(25)); self.view_distance = Some(view_distance.max(1).min(25));
self.postbox self.postbox

View File

@ -3,7 +3,7 @@ use conrod_core::{
widget_ids, Labelable, Positionable, Sizeable, Widget, WidgetCommon, widget_ids, Labelable, Positionable, Sizeable, Widget, WidgetCommon,
}; };
use super::{img_ids::Imgs, Fonts, TEXT_COLOR}; use super::{img_ids::Imgs, settings_window::SettingsTab, Fonts, TEXT_COLOR};
widget_ids! { widget_ids! {
struct Ids { struct Ids {
@ -14,6 +14,7 @@ widget_ids! {
menu_button_3, menu_button_3,
menu_button_4, menu_button_4,
menu_button_5, menu_button_5,
menu_button_6,
} }
} }
@ -41,7 +42,8 @@ pub struct State {
} }
pub enum Event { pub enum Event {
OpenSettings, OpenSettings(SettingsTab),
CharacterSelection,
Logout, Logout,
Quit, Quit,
Close, Close,
@ -65,92 +67,107 @@ impl<'a> Widget for EscMenu<'a> {
fn update(self, args: widget::UpdateArgs<Self>) -> Self::Event { fn update(self, args: widget::UpdateArgs<Self>) -> Self::Event {
let widget::UpdateArgs { state, ui, .. } = args; let widget::UpdateArgs { state, ui, .. } = args;
Image::new(self.imgs.esc_bg) Image::new(self.imgs.esc_frame)
.w_h(228.0, 450.0) .w_h(240.0, 440.0)
.middle_of(ui.window) .middle_of(ui.window)
.set(state.ids.esc_bg, ui); .set(state.ids.esc_bg, ui);
Image::new(self.imgs.fireplace) Image::new(self.imgs.fireplace)
.w_h(180.0, 60.0) .w_h(210.0, 60.0)
.mid_top_with_margin_on(state.ids.esc_bg, 50.0) .mid_top_with_margin_on(state.ids.esc_bg, 15.0)
.set(state.ids.fireplace, ui); .set(state.ids.fireplace, ui);
// Settings // Resume
if Button::image(self.imgs.button) if Button::image(self.imgs.button)
.mid_top_with_margin_on(state.ids.esc_bg, 115.0) .mid_bottom_with_margin_on(state.ids.fireplace, -55.0)
.w_h(170.0, 50.0) .w_h(210.0, 50.0)
.hover_image(self.imgs.button_hover) .hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press) .press_image(self.imgs.button_press)
.label("Settings") .label("Resume")
.label_y(conrod_core::position::Relative::Scalar(2.0)) .label_y(conrod_core::position::Relative::Scalar(3.0))
.label_color(TEXT_COLOR) .label_color(TEXT_COLOR)
.label_font_size(17) .label_font_size(20)
.set(state.ids.menu_button_1, ui) .set(state.ids.menu_button_1, ui)
.was_clicked() .was_clicked()
{ {
return Some(Event::OpenSettings); return Some(Event::Close);
}; };
// Controls
// Settings
if Button::image(self.imgs.button) if Button::image(self.imgs.button)
.mid_top_with_margin_on(state.ids.esc_bg, 175.0) .mid_bottom_with_margin_on(state.ids.menu_button_1, -65.0)
.w_h(170.0, 50.0) .w_h(210.0, 50.0)
.hover_image(self.imgs.button_hover) .hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press) .press_image(self.imgs.button_press)
.label("Controls") .label("Settings")
.label_y(conrod_core::position::Relative::Scalar(2.0)) .label_y(conrod_core::position::Relative::Scalar(3.0))
.label_color(TEXT_COLOR) .label_color(TEXT_COLOR)
.label_font_size(17) .label_font_size(20)
.set(state.ids.menu_button_2, ui) .set(state.ids.menu_button_2, ui)
.was_clicked() .was_clicked()
{ {
// TODO: Show controls window. return Some(Event::OpenSettings(SettingsTab::Interface));
}; };
// Servers // Controls
if Button::image(self.imgs.button) if Button::image(self.imgs.button)
.mid_top_with_margin_on(state.ids.esc_bg, 235.0) .mid_bottom_with_margin_on(state.ids.menu_button_2, -55.0)
.w_h(170.0, 50.0) .w_h(210.0, 50.0)
.hover_image(self.imgs.button_hover) .hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press) .press_image(self.imgs.button_press)
.label("Characters") .label("Controls")
.label_y(conrod_core::position::Relative::Scalar(2.0)) .label_y(conrod_core::position::Relative::Scalar(3.0))
.label_color(TEXT_COLOR) .label_color(TEXT_COLOR)
.label_font_size(17) .label_font_size(20)
.set(state.ids.menu_button_3, ui) .set(state.ids.menu_button_3, ui)
.was_clicked() .was_clicked()
{ {
return Some(Event::Logout); // TODO: Open Character Selection return Some(Event::OpenSettings(SettingsTab::Controls));
};
// Characters
if Button::image(self.imgs.button)
.mid_bottom_with_margin_on(state.ids.menu_button_3, -55.0)
.w_h(210.0, 50.0)
.hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press)
.label("Characters")
.label_y(conrod_core::position::Relative::Scalar(3.0))
.label_color(TEXT_COLOR)
.label_font_size(20)
.set(state.ids.menu_button_4, ui)
.was_clicked()
{
return Some(Event::CharacterSelection);
}; };
// Logout // Logout
if Button::image(self.imgs.button) if Button::image(self.imgs.button)
.mid_top_with_margin_on(state.ids.esc_bg, 295.0) .mid_bottom_with_margin_on(state.ids.menu_button_4, -65.0)
.w_h(170.0, 50.0) .w_h(210.0, 50.0)
.hover_image(self.imgs.button_hover) .hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press) .press_image(self.imgs.button_press)
.label("Logout") .label("Logout")
.label_y(conrod_core::position::Relative::Scalar(2.0)) .label_y(conrod_core::position::Relative::Scalar(3.0))
.label_color(TEXT_COLOR) .label_color(TEXT_COLOR)
.label_font_size(17) .label_font_size(20)
.set(state.ids.menu_button_4, ui) .set(state.ids.menu_button_5, ui)
.was_clicked() .was_clicked()
{ {
return Some(Event::Logout); return Some(Event::Logout);
}; };
// Quit // Quit
if Button::image(self.imgs.button) if Button::image(self.imgs.button)
.mid_top_with_margin_on(state.ids.esc_bg, 355.0) .mid_bottom_with_margin_on(state.ids.menu_button_5, -55.0)
.w_h(170.0, 50.0) .w_h(210.0, 50.0)
.hover_image(self.imgs.button_hover) .hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press) .press_image(self.imgs.button_press)
.label("Quit") .label("Quit Game")
.label_y(conrod_core::position::Relative::Scalar(2.0)) .label_y(conrod_core::position::Relative::Scalar(3.0))
.label_color(TEXT_COLOR) .label_color(TEXT_COLOR)
.label_font_size(17) .label_font_size(20)
.set(state.ids.menu_button_5, ui) .set(state.ids.menu_button_6, ui)
.was_clicked() .was_clicked()
{ {
return Some(Event::Quit); return Some(Event::Quit);
}; };
None None
} }
} }

View File

@ -36,6 +36,7 @@ image_ids! {
check_checked_mo: "voxygen/element/buttons/check/yes_mo.vox", check_checked_mo: "voxygen/element/buttons/check/yes_mo.vox",
slider: "voxygen/element/slider/track.vox", slider: "voxygen/element/slider/track.vox",
slider_indicator: "voxygen/element/slider/indicator.vox", slider_indicator: "voxygen/element/slider/indicator.vox",
esc_frame: "voxygen/element/frames/esc_menu.vox",
// Map Window // Map Window
map_frame_l: "voxygen/element/frames/map_l.vox", map_frame_l: "voxygen/element/frames/map_l.vox",

View File

@ -18,7 +18,7 @@ use esc_menu::EscMenu;
use img_ids::Imgs; use img_ids::Imgs;
use map::Map; use map::Map;
use minimap::MiniMap; use minimap::MiniMap;
use settings_window::SettingsWindow; use settings_window::{SettingsTab, SettingsWindow};
use skillbar::Skillbar; use skillbar::Skillbar;
use small_window::{SmallWindow, SmallWindowType}; use small_window::{SmallWindow, SmallWindowType};
@ -112,6 +112,7 @@ pub enum Event {
AdjustViewDistance(u32), AdjustViewDistance(u32),
AdjustVolume(f32), AdjustVolume(f32),
ChangeAudioDevice(String), ChangeAudioDevice(String),
CharacterSelection,
Logout, Logout,
Quit, Quit,
} }
@ -138,6 +139,7 @@ pub struct Show {
inventory_test_button: bool, inventory_test_button: bool,
mini_map: bool, mini_map: bool,
ingame: bool, ingame: bool,
settings_tab: SettingsTab,
want_grab: bool, want_grab: bool,
} }
@ -229,6 +231,14 @@ impl Show {
self.want_grab = false; self.want_grab = false;
} }
} }
fn open_setting_tab(&mut self, tab: SettingsTab) {
self.open_windows = Windows::Settings;
self.esc_menu = false;
self.settings_tab = tab;
self.bag = false;
self.want_grab = false;
}
} }
pub struct Hud { pub struct Hud {
@ -272,6 +282,7 @@ impl Hud {
ui: true, ui: true,
inventory_test_button: false, inventory_test_button: false,
mini_map: false, mini_map: false,
settings_tab: SettingsTab::Interface,
want_grab: true, want_grab: true,
ingame: true, ingame: true,
}, },
@ -546,7 +557,7 @@ impl Hud {
// Settings // Settings
if let Windows::Settings = self.show.open_windows { if let Windows::Settings = self.show.open_windows {
for event in SettingsWindow::new(&self.show, &self.imgs, &self.fonts, &global_state) for event in SettingsWindow::new(&global_state, &self.show, &self.imgs, &self.fonts)
.set(self.ids.settings_window, ui_widgets) .set(self.ids.settings_window, ui_widgets)
{ {
match event { match event {
@ -555,10 +566,8 @@ impl Hud {
self.show.inventory_test_button = !self.show.inventory_test_button self.show.inventory_test_button = !self.show.inventory_test_button
} }
settings_window::Event::ToggleDebug => self.show.debug = !self.show.debug, settings_window::Event::ToggleDebug => self.show.debug = !self.show.debug,
settings_window::Event::Close => { settings_window::Event::ChangeTab(tab) => self.show.open_setting_tab(tab),
self.show.settings(false); settings_window::Event::Close => self.show.open_windows = Windows::None,
self.force_ungrab = true;
}
settings_window::Event::AdjustViewDistance(view_distance) => { settings_window::Event::AdjustViewDistance(view_distance) => {
events.push(Event::AdjustViewDistance(view_distance)); events.push(Event::AdjustViewDistance(view_distance));
} }
@ -617,9 +626,8 @@ impl Hud {
// Esc-menu // Esc-menu
if self.show.esc_menu { if self.show.esc_menu {
match EscMenu::new(&self.imgs, &self.fonts).set(self.ids.esc_menu, ui_widgets) { match EscMenu::new(&self.imgs, &self.fonts).set(self.ids.esc_menu, ui_widgets) {
Some(esc_menu::Event::OpenSettings) => { Some(esc_menu::Event::OpenSettings(tab)) => {
self.show.esc_menu = false; self.show.open_setting_tab(tab);
self.show.open_windows = Windows::Settings;
} }
Some(esc_menu::Event::Close) => { Some(esc_menu::Event::Close) => {
self.show.esc_menu = false; self.show.esc_menu = false;
@ -628,6 +636,7 @@ impl Hud {
} }
Some(esc_menu::Event::Logout) => events.push(Event::Logout), Some(esc_menu::Event::Logout) => events.push(Event::Logout),
Some(esc_menu::Event::Quit) => events.push(Event::Quit), Some(esc_menu::Event::Quit) => events.push(Event::Quit),
Some(esc_menu::Event::CharacterSelection) => events.push(Event::CharacterSelection),
None => {} None => {}
} }
} }

View File

@ -16,7 +16,6 @@ use conrod_core::{
}; };
widget_ids! { widget_ids! {
struct Ids { struct Ids {
settings_content, settings_content,
settings_icon, settings_icon,
settings_button_mo, settings_button_mo,
@ -51,7 +50,7 @@ widget_ids! {
} }
} }
enum SettingsTab { pub enum SettingsTab {
Interface, Interface,
Video, Video,
Sound, Sound,
@ -61,37 +60,35 @@ enum SettingsTab {
#[derive(WidgetCommon)] #[derive(WidgetCommon)]
pub struct SettingsWindow<'a> { pub struct SettingsWindow<'a> {
global_state: &'a GlobalState,
show: &'a Show, show: &'a Show,
imgs: &'a Imgs, imgs: &'a Imgs,
fonts: &'a Fonts, fonts: &'a Fonts,
global_state: &'a GlobalState,
#[conrod(common_builder)] #[conrod(common_builder)]
common: widget::CommonBuilder, common: widget::CommonBuilder,
} }
impl<'a> SettingsWindow<'a> { impl<'a> SettingsWindow<'a> {
pub fn new( pub fn new(
global_state: &'a GlobalState,
show: &'a Show, show: &'a Show,
imgs: &'a Imgs, imgs: &'a Imgs,
fonts: &'a Fonts, fonts: &'a Fonts,
global_state: &'a GlobalState,
) -> Self { ) -> Self {
Self { Self {
global_state,
show, show,
imgs, imgs,
fonts, fonts,
global_state,
common: widget::CommonBuilder::default(), common: widget::CommonBuilder::default(),
} }
} }
} }
pub struct State { pub struct State {
settings_tab: SettingsTab,
ids: Ids, ids: Ids,
} }
@ -99,6 +96,7 @@ pub enum Event {
ToggleHelp, ToggleHelp,
ToggleInventoryTestButton, ToggleInventoryTestButton,
ToggleDebug, ToggleDebug,
ChangeTab(SettingsTab),
Close, Close,
AdjustViewDistance(u32), AdjustViewDistance(u32),
AdjustVolume(f32), AdjustVolume(f32),
@ -112,7 +110,6 @@ impl<'a> Widget for SettingsWindow<'a> {
fn init_state(&self, id_gen: widget::id::Generator) -> Self::State { fn init_state(&self, id_gen: widget::id::Generator) -> Self::State {
State { State {
settings_tab: SettingsTab::Interface,
ids: Ids::new(id_gen), ids: Ids::new(id_gen),
} }
} }
@ -170,18 +167,18 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.settings_title, ui); .set(state.ids.settings_title, ui);
// Interface // Interface
if Button::image(if let SettingsTab::Interface = state.settings_tab { if Button::image(if let SettingsTab::Interface = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button self.imgs.settings_button
}) })
.w_h(31.0 * 4.0, 12.0 * 4.0) .w_h(31.0 * 4.0, 12.0 * 4.0)
.hover_image(if let SettingsTab::Interface = state.settings_tab { .hover_image(if let SettingsTab::Interface = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_hover self.imgs.settings_button_hover
}) })
.press_image(if let SettingsTab::Interface = state.settings_tab { .press_image(if let SettingsTab::Interface = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_press self.imgs.settings_button_press
@ -193,10 +190,10 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.interface, ui) .set(state.ids.interface, ui)
.was_clicked() .was_clicked()
{ {
state.update(|s| s.settings_tab = SettingsTab::Interface); events.push(Event::ChangeTab(SettingsTab::Interface));
} }
if let SettingsTab::Interface = state.settings_tab { if let SettingsTab::Interface = self.show.settings_tab {
// Help // Help
let show_help = let show_help =
ToggleButton::new(self.show.help, self.imgs.check, self.imgs.check_checked) ToggleButton::new(self.show.help, self.imgs.check, self.imgs.check_checked)
@ -265,18 +262,18 @@ impl<'a> Widget for SettingsWindow<'a> {
} }
// 2 Gameplay // 2 Gameplay
if Button::image(if let SettingsTab::Gameplay = state.settings_tab { if Button::image(if let SettingsTab::Gameplay = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button self.imgs.settings_button
}) })
.w_h(31.0 * 4.0, 12.0 * 4.0) .w_h(31.0 * 4.0, 12.0 * 4.0)
.hover_image(if let SettingsTab::Gameplay = state.settings_tab { .hover_image(if let SettingsTab::Gameplay = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_hover self.imgs.settings_button_hover
}) })
.press_image(if let SettingsTab::Gameplay = state.settings_tab { .press_image(if let SettingsTab::Gameplay = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_press self.imgs.settings_button_press
@ -288,22 +285,22 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.gameplay, ui) .set(state.ids.gameplay, ui)
.was_clicked() .was_clicked()
{ {
state.update(|s| s.settings_tab = SettingsTab::Gameplay); events.push(Event::ChangeTab(SettingsTab::Gameplay));
} }
// 3 Controls // 3 Controls
if Button::image(if let SettingsTab::Controls = state.settings_tab { if Button::image(if let SettingsTab::Controls = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button self.imgs.settings_button
}) })
.w_h(31.0 * 4.0, 12.0 * 4.0) .w_h(31.0 * 4.0, 12.0 * 4.0)
.hover_image(if let SettingsTab::Controls = state.settings_tab { .hover_image(if let SettingsTab::Controls = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_hover self.imgs.settings_button_hover
}) })
.press_image(if let SettingsTab::Controls = state.settings_tab { .press_image(if let SettingsTab::Controls = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_press self.imgs.settings_button_press
@ -315,9 +312,9 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.controls, ui) .set(state.ids.controls, ui)
.was_clicked() .was_clicked()
{ {
state.update(|s| s.settings_tab = SettingsTab::Controls); events.push(Event::ChangeTab(SettingsTab::Controls));
} }
if let SettingsTab::Controls = state.settings_tab { if let SettingsTab::Controls = self.show.settings_tab {
Text::new( Text::new(
"Free Cursor\n\ "Free Cursor\n\
Toggle Help Window\n\ Toggle Help Window\n\
@ -472,18 +469,18 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.controls_controls, ui); .set(state.ids.controls_controls, ui);
} }
// 4 Video // 4 Video
if Button::image(if let SettingsTab::Video = state.settings_tab { if Button::image(if let SettingsTab::Video = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button self.imgs.settings_button
}) })
.w_h(31.0 * 4.0, 12.0 * 4.0) .w_h(31.0 * 4.0, 12.0 * 4.0)
.hover_image(if let SettingsTab::Video = state.settings_tab { .hover_image(if let SettingsTab::Video = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_hover self.imgs.settings_button_hover
}) })
.press_image(if let SettingsTab::Video = state.settings_tab { .press_image(if let SettingsTab::Video = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_press self.imgs.settings_button_press
@ -496,10 +493,10 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.video, ui) .set(state.ids.video, ui)
.was_clicked() .was_clicked()
{ {
state.update(|s| s.settings_tab = SettingsTab::Video); events.push(Event::ChangeTab(SettingsTab::Video));
} }
// Contents // Contents
if let SettingsTab::Video = state.settings_tab { if let SettingsTab::Video = self.show.settings_tab {
Text::new("View Distance") Text::new("View Distance")
.top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0) .top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0)
.font_size(14) .font_size(14)
@ -525,18 +522,18 @@ impl<'a> Widget for SettingsWindow<'a> {
} }
} }
// 5 Sound // 5 Sound
if Button::image(if let SettingsTab::Sound = state.settings_tab { if Button::image(if let SettingsTab::Sound = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button self.imgs.settings_button
}) })
.w_h(31.0 * 4.0, 12.0 * 4.0) .w_h(31.0 * 4.0, 12.0 * 4.0)
.hover_image(if let SettingsTab::Sound = state.settings_tab { .hover_image(if let SettingsTab::Sound = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_hover self.imgs.settings_button_hover
}) })
.press_image(if let SettingsTab::Sound = state.settings_tab { .press_image(if let SettingsTab::Sound = self.show.settings_tab {
self.imgs.settings_button_pressed self.imgs.settings_button_pressed
} else { } else {
self.imgs.settings_button_press self.imgs.settings_button_press
@ -549,11 +546,10 @@ impl<'a> Widget for SettingsWindow<'a> {
.set(state.ids.sound, ui) .set(state.ids.sound, ui)
.was_clicked() .was_clicked()
{ {
state.update(|s| s.settings_tab = SettingsTab::Sound); events.push(Event::ChangeTab(SettingsTab::Sound));
} }
// Contents // Contents
if let SettingsTab::Sound = state.settings_tab { if let SettingsTab::Sound = self.show.settings_tab {
// Volume Slider ----------------------------------------------------
Text::new("Volume") Text::new("Volume")
.top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0) .top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0)
.font_size(14) .font_size(14)

View File

@ -181,7 +181,10 @@ impl PlayState for SessionState {
// TODO: Handle result // TODO: Handle result
self.client.borrow_mut().send_chat(msg); self.client.borrow_mut().send_chat(msg);
} }
HudEvent::Logout => return PlayStateResult::Pop, HudEvent::CharacterSelection => {
self.client.borrow_mut().request_remove_character()
}
HudEvent::Logout => self.client.borrow_mut().request_logout(),
HudEvent::Quit => { HudEvent::Quit => {
return PlayStateResult::Shutdown; return PlayStateResult::Shutdown;
} }