223 lines
6.7 KiB
Text
223 lines
6.7 KiB
Text
// 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');
|
|
int cropwidth = 584;
|
|
for ( int i=0; i<NUM_HELP_PAGES; i++ )
|
|
{
|
|
switch ( i )
|
|
{
|
|
case PAGE_STORY:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_STORY");
|
|
if ( gameinfo.gametype&GAME_Heretic ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYHERETIC"),cropwidth);
|
|
else if ( gameinfo.gametype&GAME_Hexen ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYHEXEN"),cropwidth);
|
|
else if ( SWWMUtility.IsEviternity() || SWWMUtility.IsEviternityTwo() ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYEVITERNITY"),cropwidth);
|
|
else pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYDOOM"),cropwidth);
|
|
break;
|
|
case PAGE_DEMO:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_DEMO");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_DEMOTXT"),cropwidth);
|
|
break;
|
|
case PAGE_ARSENAL1:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_ARSE1");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_ARSE1TXT"),cropwidth);
|
|
break;
|
|
case PAGE_ARSENAL2:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_ARSE2");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_ARSE2TXT"),cropwidth);
|
|
break;
|
|
case PAGE_ARSENAL3:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_ARSE3");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_ARSE3TXT"),cropwidth);
|
|
break;
|
|
case PAGE_KBASE:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_KBASE");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_KBASETXT"),cropwidth);
|
|
break;
|
|
case PAGE_TECH:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_TECH");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_TECHTXT"),cropwidth);
|
|
break;
|
|
case PAGE_TIPS:
|
|
pagehdr[i] = StringTable.Localize("$SWWM_HELP_TIPS");
|
|
pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_TIPSTXT"),cropwidth);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
override bool MenuEvent( int mkey, bool fromcontroller )
|
|
{
|
|
double alph = clamp((MenuTime()-fadetic)*(5./GameTicRate),0.,1.);
|
|
switch ( mkey )
|
|
{
|
|
case MKEY_Enter:
|
|
case MKEY_Right:
|
|
case MKEY_Down:
|
|
case MKEY_PageDown:
|
|
if ( (curpage < NUM_HELP_PAGES-1) && ((prevpage == -1) || (alph >= 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 hs, 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)*hs)/2,(Screen.GetHeight()-(h*3+lh)*hs)/2,hdr,DTA_ScaleX,hs,DTA_ScaleY,hs,DTA_Alpha,alpha);
|
|
for ( int i=0; i<l.Count(); i++ )
|
|
{
|
|
int len = l.StringWidth(i);
|
|
if ( len > maxlen ) maxlen = len;
|
|
}
|
|
for ( int i=0; i<l.Count(); i++ )
|
|
{
|
|
Screen.DrawText(mSmallFont,Font.CR_WHITE,xofs+(Screen.GetWidth()-maxlen*hs)/2,(Screen.GetHeight()-lh*hs)/2+y,l.StringAt(i),DTA_ScaleX,hs,DTA_ScaleY,hs,DTA_Alpha,alpha);
|
|
y += h*hs;
|
|
}
|
|
}
|
|
|
|
override void Drawer()
|
|
{
|
|
if ( swwm_fuzz )
|
|
{
|
|
Vector2 tsize = TexMan.GetScaledSize(bgtex);
|
|
double zoom = max(ceil(Screen.GetWidth()/tsize.x),ceil(Screen.GetHeight()/tsize.y));
|
|
Vector2 vsize = (Screen.GetWidth(),Screen.GetHeight())/zoom;
|
|
Screen.DrawTexture(bgtex,false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true,DTA_ColorOverlay,Color(192,0,0,0),DTA_Alpha,.8);
|
|
}
|
|
else Screen.Dim(0xFF000000,.8,0,0,Screen.GetWidth(),Screen.GetHeight());
|
|
double alph = clamp(((MenuTime()+System.GetTimeFrac())-fadetic)*(5./GameTicRate),0.,1.);
|
|
double hs = max(min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/360.)),1.);
|
|
if ( (prevpage == -1) || (alph >= 1.) ) DrawPage(curpage,hs);
|
|
else
|
|
{
|
|
DrawPage(prevpage,hs,-(pagedir*alph*32)*hs,(1.-alph)**3);
|
|
DrawPage(curpage,hs,(pagedir*(1.-alph)*32)*hs,alph**3);
|
|
}
|
|
int h = mSmallFont.GetHeight();
|
|
double y = Screen.GetHeight()/2-(h*2)*hs;
|
|
for ( int i=0; i<4; i++ )
|
|
{
|
|
if ( curpage > 0 )
|
|
Screen.DrawText(mSmallFont,Font.CR_GOLD,12*hs,y,"<",DTA_ScaleX,hs,DTA_ScaleY,hs);
|
|
if ( curpage < NUM_HELP_PAGES-1 )
|
|
Screen.DrawText(mSmallFont,Font.CR_GOLD,Screen.GetWidth()-18*hs,y,">",DTA_ScaleX,hs,DTA_ScaleY,hs);
|
|
y += h*hs;
|
|
}
|
|
Super.Drawer();
|
|
}
|
|
}
|