]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix demolist playing and timing
authorSamual Lenks <samual@xonotic.org>
Fri, 20 Dec 2013 23:19:04 +0000 (18:19 -0500)
committerSamual Lenks <samual@xonotic.org>
Fri, 20 Dec 2013 23:19:04 +0000 (18:19 -0500)
qcsrc/menu/xonotic/demolist.c
qcsrc/menu/xonotic/dialog_multiplayer_media_demo.c
qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.c [new file with mode: 0644]
qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.c [new file with mode: 0644]

index 7ce54d32c07713720ca326c5386fff1c6bd7c8c1..3e3563fe7a289690751f86e37f24bcdba51b5dfd 100644 (file)
@@ -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
 
index 47a9882782eabaad43565bdac9dbee7c8056ab6d..e8b1f85ae70bb074840215373775790af33d238d 100644 (file)
@@ -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 (file)
index 0000000..a5a97c5
--- /dev/null
@@ -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 (file)
index 0000000..5510710
--- /dev/null
@@ -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