12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- class BookMenu extends UIScriptedMenu
- {
- protected TextWidget m_author;
- protected TextWidget m_title;
- protected TextWidget m_page;
- protected HtmlWidget m_content;
- protected float m_page_height;
- protected float m_content_total_height;
- protected float m_content_pos;
- override Widget Init()
- {
- layoutRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/day_z_book.layout");
- Class.CastTo(m_content, layoutRoot.FindAnyWidget("HtmlWidget"));
- Class.CastTo(m_author, layoutRoot.FindAnyWidget("Author"));
- Class.CastTo(m_title, layoutRoot.FindAnyWidget("Title"));
- Class.CastTo(m_page, layoutRoot.FindAnyWidget("Page"));
-
- float width;
- m_content.GetScreenSize(width, m_page_height);
- return layoutRoot;
- }
-
- void ReadBook(InventoryItem book)
- {
- m_content.LoadFile( book.ConfigGetString("file") );
- m_author.SetText( book.ConfigGetString("author") );
- m_title.SetText( book.ConfigGetString("title") );
- m_content_total_height = m_content.GetContentHeight();
- m_content_pos = 0;
- NextPrevPage(false);
- }
- override bool OnClick(Widget w, int x, int y, int button)
- {
- super.OnClick(w, x, y, button);
- switch (w.GetUserID())
- {
- case IDC_BOOK_VIEWER_PREV:
- NextPrevPage(false);
- return true;
- case IDC_BOOK_VIEWER_NEXT:
- NextPrevPage(true);
- return true;
- case IDC_CANCEL:
- Close();
- return true;
- }
- return false;
- }
-
- void NextPrevPage(bool next)
- {
- if (next)
- {
- m_content_pos = m_content_pos + m_page_height;
- }
- else
- {
- m_content_pos = m_content_pos - m_page_height;
- }
-
- float maxOffset = 0;
- if (m_content_total_height > m_page_height)
- {
- maxOffset = m_content_total_height - m_page_height;
- }
-
- if (m_content_pos < 0)
- {
- m_content_pos = 0;
- }
- if (m_content_pos > maxOffset)
- {
- m_content_pos = maxOffset;
- }
-
- m_content.SetContentOffset(m_content_pos, true);
-
- float pagesTotal = Math.Ceil(m_content_total_height / m_page_height);
- float currPage = Math.Round(m_content_pos / m_page_height) + 1;
- m_page.SetText( currPage.ToString() + " / " + pagesTotal.ToString() );
- }
- }
|