]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/xonotic/dialog_welcome.qc
Merge branch 'master' into Mario/monsters
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / dialog_welcome.qc
diff --git a/qcsrc/menu/xonotic/dialog_welcome.qc b/qcsrc/menu/xonotic/dialog_welcome.qc
new file mode 100644 (file)
index 0000000..ca80ef4
--- /dev/null
@@ -0,0 +1,102 @@
+#include "dialog_welcome.qh"
+
+#include "image.qh"
+#include "textlabel.qh"
+#include "textbox.qh"
+#include "radiobutton.qh"
+#include "commandbutton.qh"
+#include "slider.qh"
+
+void welcomeDialog_resetStrings(entity me)
+{
+       strcpy(me.serverinfo_name, _("Welcome"));
+       strcpy(me.serverinfo_MOTD, "");
+}
+
+float XonoticWelcomeDialog_keyDown(entity me, float key, float ascii, float shift)
+{
+       switch(key)
+       {
+               case K_KP_ENTER:
+               case K_ENTER:
+               case K_SPACE:
+                       me.close(me);
+                       return true;
+               default:
+                       return SUPER(XonoticWelcomeDialog).keyDown(me, key, ascii, shift);
+       }
+}
+
+// the same implentation in mousePress apparently works, but for some reason if you try to open
+// the dialog again it doesn't show up and requires opening it a seconds time to show up
+bool XonoticWelcomeDialog_mouseRelease(entity me, vector pos)
+{
+       if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1)
+       {
+               return SUPER(XonoticWelcomeDialog).mouseRelease(me, pos);
+       }
+       me.close(me);
+       return true;
+}
+
+void XonoticWelcomeDialog_destroy(entity me)
+{
+       cvar_set("_menu_welcome_dialog_available", "0");
+}
+
+void XonoticWelcomeDialog_readInputArgs(entity me, int argsbuf)
+{
+       int i = 0;
+       string s;
+       welcomeDialog_resetStrings(me);
+       if(argsbuf >= 0)
+       while((s = bufstr_get(argsbuf, i)) != "")
+       {
+               if(s == "HOSTNAME")
+                       strcpy(me.serverinfo_name, bufstr_get(argsbuf, ++i));
+               else if(s == "WELCOME")
+                       strcpy(me.serverinfo_MOTD, bufstr_get(argsbuf, ++i));
+               else if(s == "RESET")
+               {
+                       welcomeDialog_resetStrings(me);
+                       break;
+               }
+               ++i;
+       }
+       //me.serverinfo_name_ent.setText(me.serverinfo_name_ent, me.serverinfo_name);
+       me.serverinfo_MOTD_ent.setText(me.serverinfo_MOTD_ent, me.serverinfo_MOTD);
+       me.frame.setText(me.frame, me.serverinfo_name);
+}
+
+void XonoticWelcomeDialog_draw(entity me)
+{
+       SUPER(XonoticWelcomeDialog).draw(me);
+       if(me.serverinfo_MOTD == "" && gamestatus & (GAME_CONNECTED | GAME_ISSERVER))
+       {
+               // if serverinfo_MOTD is empty while connected it means we are connected to an old server
+               // in this case show the csqc welcome message and instantly close the dialog
+               localcmd("\n+show_info0; defer 2 -show_info0\n");
+               me.close(me);
+       }
+}
+
+void XonoticWelcomeDialog_fill(entity me)
+{
+       registercvar("_menu_welcome_dialog_available", "0", 0);
+       cvar_set("_menu_welcome_dialog_available", "1");
+
+       me.frame.allowColors = true; // allow color codes in the title
+
+       entity e;
+
+       me.TR(me);
+               me.TD(me, me.rows - 1, me.columns, me.serverinfo_MOTD_ent = makeXonoticTextBox());
+                       me.serverinfo_MOTD_ent.align = 0.5;
+                       me.serverinfo_MOTD_ent.allowColors = true;
+                       me.serverinfo_MOTD_ent.escapedNewLines = true;
+       me.gotoRC(me, me.rows - 1, 0);
+               me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+                       e.onClick = Dialog_Close;
+                       e.onClickEntity = me;
+                       e.preferredFocusPriority = 1;
+}