class LogoutMenu extends UIScriptedMenu { private TextWidget m_LogoutTimeText; private TextWidget m_DescriptionText; private ButtonWidget m_bLogoutNow; private ButtonWidget m_bCancel; private ButtonWidget m_bCancelConsole; private int m_iTime; private ref FullTimeData m_FullTime; void LogoutMenu() { m_iTime = 0; g_Game.SetKeyboardHandle(this); m_FullTime = new FullTimeData(); } void ~LogoutMenu() { g_Game.SetKeyboardHandle(null); if (GetGame().GetMission()) Cancel(); //cancels request on irregular close (player death, suicide, some mass-menu closure...) m_FullTime = null; } override Widget Init() { layoutRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/day_z_logout_dialog.layout"); m_LogoutTimeText = TextWidget.Cast(layoutRoot.FindAnyWidget("txtLogoutTime")); m_DescriptionText = TextWidget.Cast(layoutRoot.FindAnyWidget("txtDescription")); m_bLogoutNow = ButtonWidget.Cast(layoutRoot.FindAnyWidget("bLogoutNow")); m_bCancel = ButtonWidget.Cast(layoutRoot.FindAnyWidget("bCancel")); #ifdef PLATFORM_CONSOLE m_bCancel.Show(false); m_bLogoutNow.Show(false); layoutRoot.FindAnyWidget("toolbar_bg").Show(true); RichTextWidget toolbar_b = RichTextWidget.Cast(layoutRoot.FindAnyWidget("BackIcon")); toolbar_b.SetText(InputUtils.GetRichtextButtonIconFromInputAction("UAUIBack", "", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR)); #else m_bCancel.Show(true); m_bLogoutNow.Show(true); layoutRoot.FindAnyWidget("toolbar_bg").Show(false); #endif UpdateInfo(); // player should sit down if possible PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer()); if (player.GetEmoteManager() && !player.IsRestrained() && !player.IsUnconscious()) { player.GetEmoteManager().CreateEmoteCBFromMenu(EmoteConstants.ID_EMOTE_SITA); player.GetEmoteManager().GetEmoteLauncher().SetForced(EmoteLauncher.FORCE_DIFFERENT); } return layoutRoot; } void Show() { if (layoutRoot) layoutRoot.Show(true); } void Hide() { if (layoutRoot) layoutRoot.Show(false); } override bool OnClick(Widget w, int x, int y, int button) { super.OnClick(w, x, y, button); if (w == m_bLogoutNow) { GetGame().GetMission().AbortMission(); return true; } else if (w == m_bCancel) { Hide(); Cancel(); return true; } return false; } override void Update(float timeslice) { if (GetUApi().GetInputByID(UAUIBack).LocalPress()) { Hide(); Cancel(); } } void SetLogoutTime() { m_LogoutTimeText.SetText(" "); } void SetTime(int time) { m_iTime = time; string text = "#layout_logout_dialog_until_logout_"; TimeConversions.ConvertSecondsToFullTime(time, m_FullTime); if (m_FullTime.m_Days > 0) text += "dhms"; else if (m_FullTime.m_Hours > 0) text += "hms"; else if (m_FullTime.m_Minutes > 0) text += "ms"; else text += "s"; text = Widget.TranslateString(text); text = string.Format(text, m_FullTime.m_Seconds, m_FullTime.m_Minutes, m_FullTime.m_Hours, m_FullTime.m_Days); m_LogoutTimeText.SetText(text); } void UpdateTime() { if (m_iTime > 0) { SetTime(--m_iTime); } else { Exit(); } } void UpdateInfo() { PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer()); if (player.IsRestrained() || player.IsUnconscious()) { // display killInfo m_DescriptionText.SetText("#layout_logout_dialog_note_killed"); } else { // hide killInfo m_DescriptionText.SetText("#layout_logout_dialog_note"); } } void Exit() { // exit menu and logout screen GetGame().GetMission().Continue(); // stop updating of logout screen GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.UpdateTime); // go back to main menu GetGame().GetMission().AbortMission(); } void Cancel() { GetGame().GetMission().Continue(); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.UpdateTime); // request logout cancel from server GetGame().LogoutRequestCancel(); } }