// alternate "Read This!" menu Class SWWMHelpMenu : GenericMenu { int curpage, prevpage; int fadetic; TextureID bgtex; bool isrclick; int pagedir; Font mSmallFont, mSmallFont2; enum EHelpPage { PAGE_STORY, PAGE_DEMO, PAGE_ARSENAL1, PAGE_ARSENAL2, PAGE_ARSENAL3, PAGE_TECH, PAGE_TIPS, PAGE_KBASE, NUM_HELP_PAGES }; String pagehdr[NUM_HELP_PAGES]; BrokenLines pagetxt[NUM_HELP_PAGES]; override void Init( Menu parent ) { Super.Init(parent); Animated = true; curpage = 0; prevpage = -1; fadetic = MenuTime(); pagedir = 0; bgtex = TexMan.CheckForTexture("graphics/tempbg.png"); mSmallFont = Font.GetFont('TewiFont'); mSmallFont2 = Font.GetFont('TewiFontOutline'); for ( int i=0; i= 1.)) ) { MenuSound("menu/cursor"); prevpage = curpage; curpage++; pagedir = 1; fadetic = MenuTime(); } return true; break; case MKEY_Clear: case MKEY_Left: case MKEY_Up: case MKEY_PageUp: if ( (curpage > 0) && ((prevpage == -1) || (alph >= 1.)) ) { MenuSound("menu/cursor"); prevpage = curpage; curpage--; pagedir = -1; fadetic = MenuTime(); } return true; break; } return Super.MenuEvent(mkey,fromcontroller); } override bool MouseEvent( int type, int x, int y ) { if ( (type == MOUSE_Click) && (y != -1) ) return MenuEvent(isrclick?MKEY_Clear:MKEY_Enter,true); return false; } override bool OnUiEvent( UIEvent ev ) { int y; bool res; switch ( ev.type ) { case UIEvent.Type_WheelDown: return MenuEvent(MKEY_Enter,true); break; case UIEvent.Type_WheelUp: return MenuEvent(MKEY_Clear,true); break; case UIEvent.Type_LButtonDown: isrclick = false; return Super.OnUIEvent(ev); break; case UIEvent.Type_RButtonDown: isrclick = true; // copy over what base menus do for L click y = ev.MouseY; res = MouseEventBack(MOUSE_Click,ev.MouseX,y); if ( res ) y = -1; res |= MouseEvent(MOUSE_Click,ev.MouseX,y); if ( res ) SetCapture(true); return false; break; case UIEvent.Type_RButtonUp: // copy over what base menus do for L release if ( mMouseCapture ) { SetCapture(false); y = ev.MouseY; res = MouseEventBack(MOUSE_Release,ev.MouseX,y); if ( res ) y = -1; res |= MouseEvent(MOUSE_Release,ev.MouseX,y); } return false; break; } return Super.OnUIEvent(ev); } // big bulk of code private void DrawPage( int page, double xofs = 0., double alpha = 1. ) { int h = mSmallFont.GetHeight(); int maxlen = 0, lh; double y = 0; if ( (page < 0) || (page >= NUM_HELP_PAGES) ) return; let hdr = pagehdr[page]; let l = pagetxt[page]; lh = l.Count()*h; Screen.DrawText(mSmallFont2,Font.CR_FIRE,xofs+(Screen.GetWidth()-mSmallFont2.StringWidth(hdr)*CleanXFac_1)/2,(Screen.GetHeight()-(h*3+lh)*CleanYFac_1)/2,hdr,DTA_CleanNoMove_1,true,DTA_Alpha,alpha); for ( int i=0; i maxlen ) maxlen = len; } for ( int i=0; i= 1.) ) DrawPage(curpage); else { DrawPage(prevpage,-(pagedir*alph*32)*CleanXFac_1,(1.-alph)**3); DrawPage(curpage,(pagedir*(1.-alph)*32)*CleanXFac_1,alph**3); } int h = mSmallFont.GetHeight(); double y = Screen.GetHeight()/2-(h*2)*CleanYFac_1; for ( int i=0; i<4; i++ ) { if ( curpage > 0 ) Screen.DrawText(mSmallFont,Font.CR_GOLD,12*CleanXFac_1,y,"<",DTA_CleanNoMove_1,true); if ( curpage < NUM_HELP_PAGES-1 ) Screen.DrawText(mSmallFont,Font.CR_GOLD,Screen.GetWidth()-18*CleanXFac_1,y,">",DTA_CleanNoMove_1,true); y += h*CleanYFac_1; } Super.Drawer(); } }