diff --git a/language.def_menu b/language.def_menu index 4537f57b4..9f02ebb08 100644 --- a/language.def_menu +++ b/language.def_menu @@ -418,6 +418,10 @@ SWWM_NOSTOREBUY = "(no items left to buy)"; SWWM_NOSTORESELL = "(no items to be sold)"; SWWM_CHATTAB = "Messages"; SWWM_NOCHAT = "(message history is empty)"; +SWWM_CLEARCHAT0 = "Are you sure you want to clear all messages?"; +SWWM_CLEARCHAT1 = "\cfEnter, Left Click\c- to confirm"; +SWWM_CLEARCHAT2 = "\cfBackspace, Right Click\c- to cancel"; +SWWM_CHATCLEARED = "Message history has been cleared."; SWWM_SECRETTAB = "Secret"; SWWM_TODEMO = "\cx\"Fight for justice, Demo-chan! You can do it!\"\c- \cg♥\c- Ibuki & Saya"; SWWM_CUTIECLUB = "\cx\"Never lose hope, Demo-chan! We're all with you!\"\c- \cg♥\c- Cutie Club"; @@ -513,7 +517,9 @@ SWWM_HELPTXT = "\cxMessages Tab - Controls\c-\n" "\cx———————————————————————\c-\n" "\n" -"\cfUp, Down:\c- Scroll"; +"\cfUp, Down:\c- Scroll\n" +"\cfBackspace, Right Click:\c- Clear messages\n" +"\cfEnter, Left Click:\c- Confirm clear"; SWWM_GAMETAB = "Games"; SWWM_PICKGAME = "Choose a game"; SWWM_GAMETITLE_MADCATGAME = "Boot Test"; diff --git a/language.es_menu b/language.es_menu index e743793ff..12b4f55c0 100644 --- a/language.es_menu +++ b/language.es_menu @@ -377,6 +377,10 @@ SWWM_NOSTOREBUY = "(no queda nada que comprar)"; SWWM_NOSTORESELL = "(no tienes ítems que vender)"; SWWM_CHATTAB = "Mensajes"; SWWM_NOCHAT = "(historial de mensajes vacío)"; +SWWM_CLEARCHAT0 = "¿Seguro que quieres borrar todos los mensajes?"; +SWWM_CLEARCHAT1 = "\cfEnter/Click Izdo.\c- para confirmar"; +SWWM_CLEARCHAT2 = "\cfRetroceso/Click Dcho.\c- para cancelar"; +SWWM_CHATCLEARED = "El historial de mensajes ha sido borrado."; SWWM_SECRETTAB = "Secreto"; SWWM_TODEMO = "\cx\"¡Lucha por la justicia, Demo-chan! ¡Tú puedes!\"\c- \cg♥\c- Ibuki y Saya"; SWWM_CUTIECLUB = "\cx\"¡Jamás pierdas la esperanza, Demo-chan! ¡Estamos todas contigo!\"\c- \cg♥\c- Club Cuqui"; @@ -472,7 +476,9 @@ SWWM_HELPTXT = "\cxPestaña de Mensajes - Controles\c-\n" "\cx———————————————————————————————\c-\n" "\n" -"\cfArriba/Abajo:\c- Scroll"; +"\cfArriba/Abajo:\c- Scroll\n" +"\cfRetroceso/Click Dcho.:\c- Borrar mensajes\n" +"\cfEnter/Click Izdo.:\c- Confirmar borrado"; SWWM_GAMETAB = "Juegos"; SWWM_PICKGAME = "Elige un juego"; SWWM_GAMETITLE_MADCATGAME = "Test de Arranque"; diff --git a/language.version b/language.version index c48860a88..3dc4f35f8 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r783 \cu(Fri 10 Mar 11:24:32 CET 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r783 \cu(2023-03-10 11:24:32)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r784 \cu(Fri 10 Mar 11:48:21 CET 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r784 \cu(2023-03-10 11:48:21)\c-"; diff --git a/zscript/handler/swwm_handler_process.zsc b/zscript/handler/swwm_handler_process.zsc index 0404df9a7..6b6651a34 100644 --- a/zscript/handler/swwm_handler_process.zsc +++ b/zscript/handler/swwm_handler_process.zsc @@ -88,6 +88,20 @@ extend Class SWWMHandler bar.ntagtic = level.totaltime; bar.ntagcol = nametagcolor; } + else if ( e.Name ~== "swwmrefreshmessagelog" ) + { + let kbase = DemolitionistMenu(Menu.GetCurrentMenu()); + if ( !kbase ) return; + foreach ( t:kbase.tabs ) + { + if ( !(t is 'DemolitionistChatTab') ) continue; + let ct = DemolitionistChatTab(t); + if ( ct.msglist ) ct.msglist.Destroy(); + break; + } + kbase.tmsg = StringTable.Localize("$SWWM_CHATCLEARED"); + kbase.tmsgtic = Menu.MenuTime()+70; + } } override void NetworkProcess( ConsoleEvent e ) @@ -454,6 +468,12 @@ extend Class SWWMHandler if ( consoleplayer != e.Args[2] ) return; SWWMFullHistory.PushMessage(e.Name.Mid(17),e.Args[0],e.Args[1]); } + else if ( e.Name ~== "swwmclearmessages" ) + { + if ( consoleplayer != e.Args[0] ) return; + SWWMFullHistory.ClearMessages(); + SendInterfaceEvent(consoleplayer,"swwmrefreshmessagelog"); + } else if ( e.Name.Left(16) ~== "swwmremoteliner." ) { if ( consoleplayer == e.Args[0] ) return; diff --git a/zscript/kbase/swwm_kbasetab_chat.zsc b/zscript/kbase/swwm_kbasetab_chat.zsc index 3d7caa71c..a11445d8b 100644 --- a/zscript/kbase/swwm_kbasetab_chat.zsc +++ b/zscript/kbase/swwm_kbasetab_chat.zsc @@ -7,6 +7,7 @@ Class DemolitionistChatTab : DemolitionistMenuTab double smofs; bool drag; bool justopened; + bool bDel; SWWMFullHistory hist; override DemolitionistMenuTab Init( DemolitionistMenu master ) @@ -116,6 +117,18 @@ Class DemolitionistChatTab : DemolitionistMenuTab case MK_UP: if ( Scroll(-16) ) master.MenuSound("menu/demoscroll"); break; + case MK_ENTER: + if ( bDel ) + { + master.MenuSound("menu/democlose"); + bDel = false; + EventHandler.SendNetworkEvent("swwmclearmessages",consoleplayer); + } + break; + case MK_BACK: + bDel = !bDel; + master.MenuSound(bDel?"menu/demosel":"menu/democlose"); + break; } } override void MouseInput( Vector2 pos, int btn ) @@ -131,6 +144,10 @@ Class DemolitionistChatTab : DemolitionistMenuTab master.MenuSound("menu/demoscroll"); drag = true; } + MenuInput(MK_ENTER); + break; + case MB_RIGHT: + MenuInput(MK_BACK); break; case MB_WHEELUP: if ( Scroll(-8) ) master.MenuSound("menu/demoscroll"); @@ -148,7 +165,24 @@ Class DemolitionistChatTab : DemolitionistMenuTab } override void Drawer( double fractic ) { - if ( !hist || (msglist.items.Size() <= 0) ) + if ( bDel ) + { + double fh = master.mSmallFont.GetHeight(); + double yy = int(master.ws.y-fh*4)/2; + String str = StringTable.Localize("$SWWM_CLEARCHAT0"); + double xx = int(master.ws.x-master.mSmallFont.StringWidth(str))/2; + Screen.DrawText(master.mSmallFont,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); + yy += fh*2; + str = StringTable.Localize("$SWWM_CLEARCHAT1"); + xx = int(master.ws.x-master.mSmallFont.StringWidth(str))/2; + Screen.DrawText(master.mSmallFont,Font.CR_WHITE,master.origin.x+xx,master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true); + yy += fh; + str = StringTable.Localize("$SWWM_CLEARCHAT2"); + xx = int(master.ws.x-master.mSmallFont.StringWidth(str))/2; + Screen.DrawText(master.mSmallFont,Font.CR_WHITE,master.origin.x+xx,master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true); + return; + } + if ( !hist || !msglist || (msglist.items.Size() <= 0) ) { String str = StringTable.Localize("$SWWM_NOCHAT"); double xx = int(master.ws.x-master.mSmallFont.StringWidth(str))/2; diff --git a/zscript/swwm_thinkers_player.zsc b/zscript/swwm_thinkers_player.zsc index 36ee4a88a..be1c879d9 100644 --- a/zscript/swwm_thinkers_player.zsc +++ b/zscript/swwm_thinkers_player.zsc @@ -53,6 +53,19 @@ Class SWWMFullHistory : SWWMStaticThinker m.rep = 1; fh.msg.Push(m); } + + static play void ClearMessages() + { + let fh = SWWMFullHistory(ThinkerIterator.Create("SWWMFullHistory",STAT_STATIC).Next()); + if ( !fh ) + { + fh = new("SWWMFullHistory"); + fh.ChangeStatNum(STAT_STATIC); + return; + } + fh.lastmap = ""; + fh.msg.Clear(); + } } // Dedicated mission log (for custom maps)