Various tweaks to menu code.
Add "mission log" thinker for use in custom maps.
This commit is contained in:
parent
4a1cbe6ec5
commit
8769496e36
18 changed files with 150 additions and 27 deletions
|
|
@ -351,7 +351,7 @@ Class DemolitionistMenu : GenericMenu
|
|||
for ( int i=0; i<tabs.Size(); i++ )
|
||||
{
|
||||
if ( tabs[i].bHidden ) continue;
|
||||
str = StringTable.Localize(tabs[i].title);
|
||||
str = tabs[i].title;
|
||||
len = smallfont.StringWidth(str)+10;
|
||||
if ( (mpos.x >= xx) && (mpos.x < xx+len) )
|
||||
{
|
||||
|
|
@ -524,7 +524,7 @@ Class DemolitionistMenu : GenericMenu
|
|||
for ( int i=0; i<tabs.Size(); i++ )
|
||||
{
|
||||
if ( tabs[i].bHidden ) continue;
|
||||
str = StringTable.Localize(tabs[i].title);
|
||||
str = tabs[i].title;
|
||||
Screen.DrawText(smallfont,(curtab==i)?Font.CR_FIRE:Font.CR_DARKGRAY,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx += smallfont.StringWidth(str)+10;
|
||||
DrawVSeparator(xx-5,0,14);
|
||||
|
|
|
|||
|
|
@ -344,6 +344,12 @@ Class DemolitionistMenuLoreItem : DemolitionistMenuListItem
|
|||
return self;
|
||||
}
|
||||
|
||||
override int GetWidth()
|
||||
{
|
||||
if ( !ent.read ) smallfont.StringWidth("‼"..label);
|
||||
return smallfont.StringWidth(label);
|
||||
}
|
||||
|
||||
// marks this entry as read
|
||||
void MarkRead()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,18 @@ extend Class DemolitionistMenu
|
|||
// initialize the crime clock
|
||||
private void SetClock()
|
||||
{
|
||||
if ( gameinfo.gametype&GAME_Heretic )
|
||||
// use mission log clock if available
|
||||
let mlog = SWWMMissionLog.Get();
|
||||
if ( mlog && mlog.clockset )
|
||||
{
|
||||
c_year = mlog.year;
|
||||
c_month = mlog.month;
|
||||
c_day = mlog.day;
|
||||
c_hour = mlog.hour;
|
||||
c_minute = mlog.minute;
|
||||
c_tz = mlog.tz;
|
||||
}
|
||||
else if ( gameinfo.gametype&GAME_Heretic )
|
||||
{
|
||||
// April 10th 2171, 17:34 JST
|
||||
// Epoch: 6351554040
|
||||
|
|
|
|||
|
|
@ -42,8 +42,10 @@ Class DemolitionistMenuTab ui abstract
|
|||
virtual void Drawer()
|
||||
{
|
||||
// placeholder (so don't call super)
|
||||
String str = "NOT IMPLEMENTED";
|
||||
Screen.DrawText(smallfont,Font.CR_RED,int(master.ss.x-smallfont.StringWidth(str))/2,int(master.ss.y-smallfont.GetHeight())/2,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
|
||||
String str = StringTable.Localize("$SWWM_COMINGSOON");
|
||||
double xx = int(master.ws.x-smallfont.StringWidth(str))/2;
|
||||
double yy = int(master.ws.y-smallfont.GetHeight())/2;
|
||||
Screen.DrawText(smallfont,Font.CR_FIRE,master.origin.x+xx,master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ Class DemolitionistMenuTextBox ui
|
|||
if ( l ) l.Destroy();
|
||||
l = smallfont.BreakLines(self.txt,self.w-12);
|
||||
int h = l.Count()*13;
|
||||
scrollbar = false;
|
||||
maxofs = 0;
|
||||
if ( h > (master.ws.y-34) )
|
||||
{
|
||||
l.Destroy();
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class DemolitionistChatTab : DemolitionistMenuTab
|
|||
{
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_CHATTAB";
|
||||
title = StringTable.Localize("$SWWM_CHATTAB");
|
||||
bHidden = !SWWMFullHistory.Get();
|
||||
return Super.Init(master);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ Class DemolitionistHelpTab : DemolitionistMenuTab
|
|||
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_HELPTAB";
|
||||
title = StringTable.Localize("$SWWM_HELPTAB");
|
||||
bHidden = true;
|
||||
String kstr;
|
||||
if ( master.mkey[1] != "" ) kstr = master.mkey[0].."/"..master.mkey[1];
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class DemolitionistInventoryTab : DemolitionistMenuTab
|
|||
{
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_INVTAB";
|
||||
title = StringTable.Localize("$SWWM_INVTAB");
|
||||
return Super.Init(master);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class DemolitionistKeychainTab : DemolitionistMenuTab
|
|||
{
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_KEYTAB";
|
||||
title = StringTable.Localize("$SWWM_KEYTAB");
|
||||
bHidden = deathmatch;
|
||||
return Super.Init(master);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ Class DemolitionistLibraryTab : DemolitionistMenuTab
|
|||
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_KBASETAB";
|
||||
title = StringTable.Localize("$SWWM_KBASETAB");
|
||||
lore = SWWMLoreLibrary.Find(players[consoleplayer]);
|
||||
section = 0;
|
||||
lwidth = 0;
|
||||
|
|
@ -409,5 +409,13 @@ Class DemolitionistLibraryTab : DemolitionistMenuTab
|
|||
Screen.DrawText(smallfont,Font.CR_FIRE,master.origin.x+xx,master.origin.y+yy,"▮",DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
if ( clore && ltext ) ltext.Drawer();
|
||||
else
|
||||
{
|
||||
str = StringTable.Localize("$SWWM_LOREUNSEL");
|
||||
int lwx = lwidth+((maxofs[section]>0)?8:0);
|
||||
xx = lwx+int((master.ws.x-lwx)-smallfont.StringWidth(str))/2;
|
||||
yy = int(master.ws.y-smallfont.GetHeight())/2;
|
||||
Screen.DrawText(smallfont,Font.CR_FIRE,master.origin.x+xx,master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,11 +5,21 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
|
|||
Array<DemolitionistMenuTextBox> mtext;
|
||||
int sel;
|
||||
bool drag;
|
||||
SWWMMissionLog mlog;
|
||||
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_MISSTAB";
|
||||
title = StringTable.Localize("$SWWM_MISSTAB");
|
||||
sel = 0;
|
||||
mlog = SWWMMissionLog.Get();
|
||||
// simplified initialization if we have a dedicated mission log
|
||||
// note: mission log can't exist without one entry, so no fallback checks needed
|
||||
if ( mlog )
|
||||
{
|
||||
for ( int i=(mlog.entries.Size()-1); i>=0; i-- )
|
||||
mtext.Push(new("DemolitionistMenuTextBox").Init(master,mlog.entries[i]));
|
||||
return Super.Init(master);
|
||||
}
|
||||
// saves time
|
||||
bool nrftl = false;
|
||||
bool eviternity = false;
|
||||
|
|
@ -120,12 +130,6 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
|
|||
mtext.Push(new("DemolitionistMenuTextBox").Init(master,xstr));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// no missions, hide ourselves
|
||||
mtext.Push(new("DemolitionistMenuTextBox").Init(master,"$SWWM_MISSION_NONE"));
|
||||
bHidden = true;
|
||||
}
|
||||
return Super.Init(master);
|
||||
}
|
||||
override void OnDestroy()
|
||||
|
|
@ -136,6 +140,7 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
|
|||
|
||||
override void MenuInput( int key )
|
||||
{
|
||||
if ( mtext.Size() == 0 ) return;
|
||||
switch ( key )
|
||||
{
|
||||
case MK_DOWN:
|
||||
|
|
@ -171,6 +176,7 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
|
|||
|
||||
override void MouseInput( Vector2 pos, int btn )
|
||||
{
|
||||
if ( mtext.Size() == 0 ) return;
|
||||
switch ( btn )
|
||||
{
|
||||
case MB_LEFT:
|
||||
|
|
@ -221,22 +227,57 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
|
|||
// stop smooth scrolling for current textbox
|
||||
override void OnSelect()
|
||||
{
|
||||
if ( mtext.Size() == 0 ) return;
|
||||
mtext[sel].smofs = mtext[sel].ofs;
|
||||
}
|
||||
override void OnDeselect()
|
||||
{
|
||||
if ( mtext.Size() == 0 ) return;
|
||||
mtext[sel].smofs = mtext[sel].ofs;
|
||||
}
|
||||
|
||||
override void Ticker()
|
||||
{
|
||||
// dedicated mission log can update in real time, so append new entries to the start of the array when needed and push the selector forward
|
||||
if ( mlog && (mlog.entries.Size() > mtext.Size()) )
|
||||
{
|
||||
bool newent = false;
|
||||
if ( mtext.Size() == 0 )
|
||||
{
|
||||
for ( int i=(mlog.entries.Size()-1); i>=0; i-- )
|
||||
mtext.Push(new("DemolitionistMenuTextBox").Init(master,mlog.entries[i]));
|
||||
sel = 0;
|
||||
newent = true;
|
||||
}
|
||||
else for ( int i=(mlog.entries.Size()-1); i>=mtext.Size(); i-- )
|
||||
{
|
||||
mtext.Insert(0,new("DemolitionistMenuTextBox").Init(master,mlog.entries[i]));
|
||||
sel++;
|
||||
newent = true;
|
||||
}
|
||||
// notification for mission log updated
|
||||
if ( newent )
|
||||
{
|
||||
master.tmsg = StringTable.Localize("$SWWM_NEWMISSION");
|
||||
master.tmsgtic = gametic+70;
|
||||
}
|
||||
}
|
||||
// just tick the current textbox
|
||||
if ( mtext.Size() == 0 ) return;
|
||||
mtext[sel].Ticker();
|
||||
}
|
||||
|
||||
override void Drawer()
|
||||
{
|
||||
mtext[sel].Drawer(!!sel);
|
||||
if ( mtext.Size() > 0 ) mtext[sel].Drawer(!!sel);
|
||||
else
|
||||
{
|
||||
String str = StringTable.Localize("$SWWM_MISSION_NONE");
|
||||
double xx = int(master.ws.x-smallfont.StringWidth(str))/2;
|
||||
double yy = int(master.ws.y-smallfont.GetHeight())/2;
|
||||
Screen.DrawText(smallfont,Font.CR_FIRE,master.origin.x+xx,master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
|
||||
return;
|
||||
}
|
||||
if ( mtext.Size() <= 1 ) return;
|
||||
double xx = master.ws.x-(mtext[sel].scrollbar?11:3);
|
||||
double yy = master.ws.y-25;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class DemolitionistSecretTab : DemolitionistMenuTab
|
|||
{
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_SECRETTAB";
|
||||
title = StringTable.Localize("$SWWM_SECRETTAB");
|
||||
bHidden = true;
|
||||
return Super.Init(master);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Class DemolitionistStatsTab : DemolitionistMenuTab
|
|||
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_STATTAB";
|
||||
title = StringTable.Localize("$SWWM_STATTAB");
|
||||
section = 0;
|
||||
lwidth = 0;
|
||||
for ( int i=0; i<4; i++ )
|
||||
|
|
@ -542,9 +542,17 @@ Class DemolitionistStatsTab : DemolitionistMenuTab
|
|||
yy += 16;
|
||||
}
|
||||
master.DrawVSeparator(lwidth,14,master.ws.y-28);
|
||||
// achievement drawer has different margins
|
||||
if ( lists[section].items.Size() == 0 )
|
||||
{
|
||||
String str = StringTable.Localize("$SWWM_NOSTAT");
|
||||
xx = lwidth+int((master.ws.x-lwidth)-smallfont.StringWidth(str))/2;
|
||||
yy = int(master.ws.y-smallfont.GetHeight())/2;
|
||||
Screen.DrawText(smallfont,Font.CR_FIRE,master.origin.x+xx,master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
|
||||
return;
|
||||
}
|
||||
if ( section == 3 )
|
||||
{
|
||||
// achievement drawer has different margins
|
||||
xx = lwidth+12;
|
||||
yy = 26;
|
||||
int cliptop = int((master.origin.y+26)*master.hs);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class DemolitionistStoreTab : DemolitionistMenuTab
|
|||
{
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_STORETAB";
|
||||
title = StringTable.Localize("$SWWM_STORETAB");
|
||||
bHidden = (deathmatch||(G_SkillPropertyInt(SKILLP_ACSReturn)>=4));
|
||||
return Super.Init(master);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class DemolitionistTradeTab : DemolitionistMenuTab
|
|||
{
|
||||
override DemolitionistMenuTab Init( DemolitionistMenu master )
|
||||
{
|
||||
title = "$SWWM_TRADETAB";
|
||||
title = StringTable.Localize("$SWWM_TRADETAB");
|
||||
bHidden = true;
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue