From: Samual Lenks Date: Fri, 20 Dec 2013 23:19:04 +0000 (-0500) Subject: Fix demolist playing and timing X-Git-Tag: xonotic-v0.8.0~139^2~1^2~77 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=40cc80799ae40c550b40f5de35afaeb7b081c848;p=xonotic%2Fxonotic-data.pk3dir.git Fix demolist playing and timing --- diff --git a/qcsrc/menu/xonotic/demolist.c b/qcsrc/menu/xonotic/demolist.c index 7ce54d32c..3e3563fe7 100644 --- a/qcsrc/menu/xonotic/demolist.c +++ b/qcsrc/menu/xonotic/demolist.c @@ -6,6 +6,7 @@ CLASS(XonoticDemoList) EXTENDS(XonoticListBox) METHOD(XonoticDemoList, drawListBoxItem, void(entity, float, vector, float)) METHOD(XonoticDemoList, getDemos, void(entity)) METHOD(XonoticDemoList, startDemo, void(entity)) + METHOD(XonoticDemoList, timeDemo, void(entity)) METHOD(XonoticDemoList, demoName, string(entity, float)) METHOD(XonoticDemoList, clickListBoxItem, void(entity, float, vector)) METHOD(XonoticDemoList, keyDown, float(entity, float, float, float)) @@ -27,8 +28,6 @@ ENDCLASS(XonoticDemoList) entity demolist; // for reference elsewhere entity makeXonoticDemoList(); -void StartDemo_Click(entity btn, entity me); -void TimeDemo_Click(entity btn, entity me); void DemoList_Filter_Change(entity box, entity me); #endif @@ -155,20 +154,32 @@ void DemoList_Filter_Change(entity box, entity me) void XonoticDemoList_startDemo(entity me) { string s; - s = me.demoName(me,me.selectedItem); + s = me.demoName(me, me.selectedItem); localcmd("playdemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n"); } -void StartDemo_Click(entity btn, entity me) +void XonoticDemoList_timeDemo(entity me) { - me.startDemo(me); + string s; + s = me.demoName(me, me.selectedItem); + localcmd("timedemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n"); } -void TimeDemo_Click(entity btn, entity me) +void DemoConfirm_ListClick_Check_Gamestatus(entity me) { - string s; - s = me.demoName(me,me.selectedItem); - localcmd("timedemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n"); + if not(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)) // we're not in a match, lets watch the demo + { + me.startDemo(me); + } + else // already in a match, player has to confirm + { + DialogOpenButton_Click_withCoords( + me, + main.demostartconfirmDialog, + boxToGlobal(eY * (me.selectedItem * me.itemHeight - me.scrollPos), me.origin, me.size), + boxToGlobalSize(eY * me.itemHeight + eX * (1 - me.controlWidth), me.size) + ); + } } void XonoticDemoList_clickListBoxItem(entity me, float i, vector where) @@ -178,7 +189,7 @@ void XonoticDemoList_clickListBoxItem(entity me, float i, vector where) { // DOUBLE CLICK! me.setSelected(me, i); - me.startDemo(me); + DemoConfirm_ListClick_Check_Gamestatus(me); } me.lastClickedDemo = i; me.lastClickedTime = time; @@ -186,12 +197,15 @@ void XonoticDemoList_clickListBoxItem(entity me, float i, vector where) float XonoticDemoList_keyDown(entity me, float scan, float ascii, float shift) { - if(scan == K_ENTER || scan == K_KP_ENTER) { - me.startDemo(me); + if(scan == K_ENTER || scan == K_KP_ENTER) + { + DemoConfirm_ListClick_Check_Gamestatus(me); return 1; } else + { return SUPER(XonoticDemoList).keyDown(me, scan, ascii, shift); + } } #endif diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c b/qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c index 47a988278..e8b1f85ae 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c @@ -19,9 +19,9 @@ void DemoConfirm_Check_Gamestatus(entity btn, entity me) if not(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)) // we're not in a match, lets watch the demo { if(btn.democlicktype == DMO_PLAY) - { StartDemo_Click(btn, demolist); } + { demolist.startDemo(demolist); } else if(btn.democlicktype == DMO_TIME) - { TimeDemo_Click(btn, demolist); } + { demolist.timeDemo(demolist); } } else // already in a match, player has to confirm { diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c b/qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c new file mode 100644 index 000000000..a5a97c550 --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c @@ -0,0 +1,31 @@ +#ifdef INTERFACE +CLASS(XonoticDemoStartConfirmDialog) EXTENDS(XonoticDialog) + METHOD(XonoticDemoStartConfirmDialog, fill, void(entity)) + ATTRIB(XonoticDemoStartConfirmDialog, title, string, _("Disconnect")) + ATTRIB(XonoticDemoStartConfirmDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM) + ATTRIB(XonoticDemoStartConfirmDialog, intendedWidth, float, 0.5) + ATTRIB(XonoticDemoStartConfirmDialog, rows, float, 4) + ATTRIB(XonoticDemoStartConfirmDialog, columns, float, 2) +ENDCLASS(XonoticDemoStartConfirmDialog) +#endif + +#ifdef IMPLEMENTATION +void Handle_StartDemo_Click(entity unused, entity me) { demolist.startDemo(demolist); } +void XonoticDemoStartConfirmDialog_fill(entity me) +{ + entity e; + + me.TR(me); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Playing a demo will disconnect you from the current match."))); + me.TR(me); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Do you really wish to disconnect now?"))); + me.TR(me); + me.TR(me); + me.TD(me, 1, 1, e = makeXonoticButton(ZCTX(_("DMCNFRM^Yes")), '1 0 0')); + e.onClick = Handle_StartDemo_Click; + e.onClickEntity = demolist; + me.TD(me, 1, 1, e = makeXonoticButton(ZCTX(_("DMCNFRM^No")), '0 1 0')); + e.onClick = Dialog_Close; + e.onClickEntity = me; +} +#endif diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c b/qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c new file mode 100644 index 000000000..5510710c2 --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c @@ -0,0 +1,31 @@ +#ifdef INTERFACE +CLASS(XonoticDemoTimeConfirmDialog) EXTENDS(XonoticDialog) + METHOD(XonoticDemoTimeConfirmDialog, fill, void(entity)) + ATTRIB(XonoticDemoTimeConfirmDialog, title, string, _("Disconnect")) + ATTRIB(XonoticDemoTimeConfirmDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM) + ATTRIB(XonoticDemoTimeConfirmDialog, intendedWidth, float, 0.5) + ATTRIB(XonoticDemoTimeConfirmDialog, rows, float, 4) + ATTRIB(XonoticDemoTimeConfirmDialog, columns, float, 2) +ENDCLASS(XonoticDemoTimeConfirmDialog) +#endif + +#ifdef IMPLEMENTATION +void Handle_TimeDemo_Click(entity unused, entity unused) { demolist.timeDemo(demolist); } +void XonoticDemoTimeConfirmDialog_fill(entity me) +{ + entity e; + + me.TR(me); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Timing a demo will disconnect you from the current match."))); + me.TR(me); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Do you really wish to disconnect now?"))); + me.TR(me); + me.TR(me); + me.TD(me, 1, 1, e = makeXonoticButton(ZCTX(_("DMCNFRM^Yes")), '1 0 0')); + e.onClick = Handle_TimeDemo_Click; + e.onClickEntity = demolist; + me.TD(me, 1, 1, e = makeXonoticButton(ZCTX(_("DMCNFRM^No")), '0 1 0')); + e.onClick = Dialog_Close; + e.onClickEntity = me; +} +#endif