123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- class LogoutMenu extends UIScriptedMenu
- {
- private TextWidget m_LogoutTimeText;
- private TextWidget m_DescriptionText;
- private ButtonWidget m_bLogoutNow;
- private ButtonWidget m_bCancel;
- #ifdef PLATFORM_CONSOLE
- private ButtonWidget m_bCancelConsole;
- #endif
- 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;
-
- #ifdef PLATFORM_CONSOLE
- if (GetGame().GetMission())
- {
- GetGame().GetMission().GetOnInputDeviceChanged().Remove(OnInputDeviceChanged);
- }
- #endif
- }
-
- 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_bCancelConsole = ButtonWidget.Cast(layoutRoot.FindAnyWidget("bCancelConsole"));
- m_bCancel.Show(false);
- m_bLogoutNow.Show(false);
- #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);
- }
- #ifdef PLATFORM_CONSOLE
- if (GetGame().GetMission())
- {
- GetGame().GetMission().GetOnInputDeviceChanged().Insert(OnInputDeviceChanged);
- }
-
- OnInputDeviceChanged(GetGame().GetInput().GetCurrentInputDevice());
- #endif
- 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;
- }
- #ifdef PLATFORM_CONSOLE
- else if (w == m_bCancelConsole)
- #else
- else if (w == m_bCancel)
- #endif
- {
- 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();
- }
-
- #ifdef PLATFORM_CONSOLE
- protected void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
- {
- UpdateControlsElementVisibility();
- }
- protected void UpdateControlsElementVisibility()
- {
- bool toolbarShow = false;
- toolbarShow = !GetGame().GetInput().IsEnabledMouseAndKeyboard() || GetGame().GetInput().GetCurrentInputDevice() == EInputDeviceType.CONTROLLER;
- layoutRoot.FindAnyWidget("toolbar_bg").Show(toolbarShow);
- m_bCancelConsole.Show(!toolbarShow);
- if (toolbarShow)
- {
- RichTextWidget toolbar_b = RichTextWidget.Cast(layoutRoot.FindAnyWidget("BackIcon"));
- toolbar_b.SetText(InputUtils.GetRichtextButtonIconFromInputAction("UAUIBack", "", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR));
- }
- }
- #endif
- }
|