예제 #1
0
        public virtual void Init()
        {
            Globals.dedicated = Cvar.Get("dedicated", "0", Qcommon.CVAR_NOSET);
            Program.Q2Dialog  = new Q2DataDialog();
            Locale.SetDefault(Locale.US);
            Program.Q2Dialog.SetVisible(true);
            string DRIVER = "jsr231";

            Qcommon.Init(new string [] { "TestRenderer", "+set", "gl_mode", "6", "+set", "vid_fullscreen", "0", "+set", "vid_ref", DRIVER });
            VID.Shutdown();
            String[] names = Renderer.GetDriverNames();
            System.Diagnostics.Debug.WriteLine("Registered Drivers: " + Arrays.AsList(names));
            this.re    = Renderer.GetDriver(DRIVER);
            Globals.re = this.re;
            System.Diagnostics.Debug.WriteLine("Use driver: " + re);
            System.out_renamed.Flush();
            re.Init(0, 0);
            kbd = re.GetKeyboardHandler();
            kbd.Init();
            Cmd.AddCommand("nexttest", nexttest);
            Cbuf.AddText("bind n nexttest");
            Cbuf.Execute();
            Globals.cls.key_dest = Defines.key_game;
            Globals.cls.state    = Defines.ca_active;
        }
예제 #2
0
        public virtual void Init()
        {
            Globals.dedicated = Cvar.Get("dedicated", "0", Qcommon.CVAR_NOSET);
            Program.Q2Dialog  = new Q2DataDialog();
            Locale.SetDefault(Locale.US);
            Program.Q2Dialog.SetVisible(true);
            string DRIVER = "lwjgl";

            Qcommon.Init(new string { "DancingQueens", "+set", "gl_mode", "4", "+set", "vid_fullscreen", "0", "+set", "vid_ref", DRIVER });
            VID.Shutdown();
            String[] names = Renderer.GetDriverNames();
            System.Diagnostics.Debug.WriteLine("Registered Drivers: " + Arrays.AsList(names));
            this.re    = Renderer.GetDriver(DRIVER);
            Globals.re = this.re;
            System.Diagnostics.Debug.WriteLine("Use driver: " + re);
            System.out_renamed.Flush();
            re.Init(0, 0);
            kbd = re.GetKeyboardHandler();
            kbd.Init();
            Cbuf.AddText("unbind t");
            Cbuf.Execute();
            Cmd.AddCommand("togglemouse", togglemouse);
            Cbuf.AddText("bind t togglemouse");
            Cbuf.Execute();
            Globals.cls.key_dest = Defines.key_game;
            Globals.cls.state    = Defines.ca_active;
            viddef = Globals.viddef;
            fov_y  = Math3D.CalcFov(fov_x, viddef.GetWidth(), viddef.GetHeight());
        }
예제 #3
0
            public override void Execute( )
            {
                SCR.EndLoadingPlaque();
                if (Globals.cl.attractloop)
                {
                    Cbuf.AddText("killserver\\n");
                    return;
                }

                if (Globals.cls.state == Defines.ca_disconnected)
                {
                    Cbuf.AddText("d1\\n");
                    return;
                }

                Key.ClearTyping();
                Con.ClearNotify();
                if (Globals.cls.key_dest == Defines.key_console)
                {
                    Menu.ForceMenuOff();
                    Cvar.Set("paused", "0");
                }
                else
                {
                    Menu.ForceMenuOff();
                    Globals.cls.key_dest = Defines.key_console;
                    if (Cvar.VariableValue("maxclients") == 1 && Globals.server_state != 0)
                    {
                        Cvar.Set("paused", "1");
                    }
                }
            }
예제 #4
0
        /**
         * Cmd_ExecuteString
         *
         * A complete command line has been parsed, so try to execute it
         * FIXME: lookupnoadd the token to speed search?
         */
        public static void ExecuteString(string text)
        {
            cmd_function_t cmd;
            cmdalias_t     a;

            Cmd.TokenizeString(text.ToCharArray(), true);

            // execute the command line
            if (Cmd.Argc() == 0)
            {
                return;                 // no tokens
            }
            // check functions
            for (cmd = Cmd.cmd_functions; cmd != null; cmd = cmd.next)
            {
                if (Cmd.cmd_argv[0].Equals(cmd.name, StringComparison.OrdinalIgnoreCase))
                {
                    if (null == cmd.function)
                    {
                        // forward to server command
                        Cmd.ExecuteString("cmd " + text);
                    }
                    else
                    {
                        cmd.function();
                    }

                    return;
                }
            }

            // check alias
            for (a = Globals.cmd_alias; a != null; a = a.next)
            {
                if (Cmd.cmd_argv[0].Equals(a.name, StringComparison.OrdinalIgnoreCase))
                {
                    if (++Globals.alias_count == Cmd.ALIAS_LOOP_COUNT)
                    {
                        Com.Printf("ALIAS_LOOP_COUNT\n");

                        return;
                    }

                    Cbuf.InsertText(a.value);

                    return;
                }
            }

            // check cvars
            if (Cvar.Command())
            {
                return;
            }

            // send it as a server command if we are connected
            Cmd.ForwardToServer();
        }
예제 #5
0
        public virtual void Run()
        {
            startTime = System.CurrentTimeMillis();
            xcommand_t callback = new Anonymousxcommand_t(this);

            while (true)
            {
                re.UpdateScreen(callback);
                kbd.Update();
                Cbuf.Execute();
            }
        }
예제 #6
0
        public static void SV_Begin_f( )
        {
            Com.DPrintf("Begin() from " + SV_MAIN.sv_client.name + "\\n");
            if (Lib.Atoi(Cmd.Argv(1)) != SV_INIT.svs.spawncount)
            {
                Com.Printf("SV_Begin_f from different level\\n");
                SV_New_f();
                return;
            }

            SV_MAIN.sv_client.state = Defines.cs_spawned;
            PlayerClient.ClientBegin(SV_USER.sv_player);
            Cbuf.InsertFromDefer();
        }
예제 #7
0
파일: Key.cs 프로젝트: optimus-code/Q2Sharp
        public static void Message(int key)
        {
            if (key == K_ENTER || key == K_KP_ENTER)
            {
                if (Globals.chat_team)
                {
                    Cbuf.AddText("say_team \\\"");
                }
                else
                {
                    Cbuf.AddText("say \\\"");
                }
                Cbuf.AddText(Globals.chat_buffer);
                Cbuf.AddText("\\\"\\n");
                Globals.cls.key_dest = Defines.key_game;
                Globals.chat_buffer  = "";
                return;
            }

            if (key == K_ESCAPE)
            {
                Globals.cls.key_dest = Defines.key_game;
                Globals.chat_buffer  = "";
                return;
            }

            if (key < 32 || key > 127)
            {
                return;
            }
            if (key == K_BACKSPACE)
            {
                if (Globals.chat_buffer.Length > 2)
                {
                    Globals.chat_buffer = Globals.chat_buffer.Substring(0, Globals.chat_buffer.Length - 2);
                }
                else
                {
                    Globals.chat_buffer = "";
                }
                return;
            }

            if (Globals.chat_buffer.Length > Defines.MAXCMDLINE)
            {
                return;
            }
            Globals.chat_buffer += (char)key;
        }
예제 #8
0
파일: Cmd.cs 프로젝트: optimus-code/Q2Sharp
        public static void ExecuteString(String text)
        {
            cmd_function_t cmd;
            cmdalias_t     a;

            TokenizeString(text.ToCharArray(), true);
            if (Argc() == 0)
            {
                return;
            }
            for (cmd = cmd_functions; cmd != null; cmd = cmd.next)
            {
                if (cmd_argv[0].EqualsIgnoreCase(cmd.name))
                {
                    if (null == cmd.function)
                    {
                        Cmd.ExecuteString("cmd " + text);
                    }
                    else
                    {
                        cmd.function.Execute();
                    }

                    return;
                }
            }

            for (a = Globals.cmd_alias; a != null; a = a.next)
            {
                if (cmd_argv[0].EqualsIgnoreCase(a.name))
                {
                    if (++Globals.alias_count == ALIAS_LOOP_COUNT)
                    {
                        Com.Printf("ALIAS_LOOP_COUNT\\n");
                        return;
                    }

                    Cbuf.InsertText(a.value);
                    return;
                }
            }

            if (Cvar.Command())
            {
                return;
            }
            Cmd.ForwardToServer();
        }
예제 #9
0
        public virtual void Run()
        {
            startTime = System.CurrentTimeMillis();
            xcommand_t callback = new Anonymousxcommand_t(this);

            while (true)
            {
                re.UpdateScreen(callback);
                kbd.Update();
                Cbuf.Execute();
                try
                {
                    Thread.Sleep(5);
                }
                catch (Exception e)
                {
                }
            }
        }
예제 #10
0
파일: Cmd.cs 프로젝트: optimus-code/Q2Sharp
            public override void Execute( )
            {
                if (Cmd.Argc() != 2)
                {
                    Com.Printf("exec <filename> : execute a script file\\n");
                    return;
                }

                Byte[] f = null;
                f = FS.LoadFile(Cmd.Argv(1));
                if (f == null)
                {
                    Com.Printf("couldn't exec " + Cmd.Argv(1) + "\\n");
                    return;
                }

                Com.Printf("execing " + Cmd.Argv(1) + "\\n");
                Cbuf.InsertText(Encoding.ASCII.GetString(f));
                FS.FreeFile(f);
            }
예제 #11
0
        public static void SV_Nextserver( )
        {
            String v;

            if (SV_INIT.sv.state == Defines.ss_game || (SV_INIT.sv.state == Defines.ss_pic && 0 == Cvar.VariableValue("coop")))
            {
                return;
            }
            SV_INIT.svs.spawncount++;
            v = Cvar.VariableString("nextserver");
            if (v.Length == 0)
            {
                Cbuf.AddText("killserver\\n");
            }
            else
            {
                Cbuf.AddText(v);
                Cbuf.AddText("\\n");
            }

            Cvar.Set("nextserver", "");
        }
예제 #12
0
        public virtual void Init()
        {
            Globals.dedicated = Cvar.Get("dedicated", "0", Qcommon.CVAR_NOSET);
            if (Globals.dedicated.value != 1F)
            {
                Program.Q2Dialog = new Q2DataDialog();
                Locale.SetDefault(Locale.US);
                Program.Q2Dialog.SetVisible(true);
            }

            Qcommon.Init(new string[] { "TestMap" });
            VID.Shutdown();
            Globals.re = this.re = Renderer.GetDriver("jsr231", true);
            re.Init(0, 0);
            Cmd.AddCommand("+tforward", forward_down);
            Cmd.AddCommand("-tforward", forward_up);
            Cbuf.AddText("bind UPARROW +tforward");
            Cbuf.Execute();
            Cmd.AddCommand("+tbackward", backward_down);
            Cmd.AddCommand("-tbackward", backward_up);
            Cbuf.AddText("bind DOWNARROW +tbackward");
            Cbuf.Execute();
            Cmd.AddCommand("+tleft", left_down);
            Cmd.AddCommand("-tleft", left_up);
            Cbuf.AddText("bind LEFTARROW +tleft");
            Cbuf.Execute();
            Cmd.AddCommand("+tright", right_down);
            Cmd.AddCommand("-tright", right_up);
            Cbuf.AddText("bind RIGHTARROW +tright");
            Cbuf.Execute();
            Cmd.AddCommand("togglemouse", togglemouse);
            Cbuf.AddText("bind t togglemouse");
            Cbuf.Execute();
            Globals.cls.key_dest = Defines.key_game;
            Globals.cls.state    = Defines.ca_active;
            viddef = Globals.viddef;
        }
예제 #13
0
        public virtual int SetMode(Size dim, int mode, bool fullscreen)
        {
            VID.Printf(Defines.PRINT_ALL, "Initializing OpenGL display\\n");
            VID.Printf(Defines.PRINT_ALL, "...setting mode " + mode + ":");

            unsafe {
                Monitor *device = GLFW.GetPrimaryMonitor();
                if (oldDisplayMode == null)
                {
                    oldDisplayMode = GLFW.GetVideoMode(device)[0];
                }
            }

            if (!VID.GetModeInfo(out var newDim, mode))
            {
                VID.Printf(Defines.PRINT_ALL, " invalid mode\\n");
                return(Base.rserr_invalid_mode);
            }

            VID.Printf(Defines.PRINT_ALL, " " + newDim.Width + " " + newDim.Height + '\\');
            Shutdown();

            var newInstance = (window == null);

            if (!newInstance)
            {
                window.Dispose();
            }

            window = new GameWindow(new GameWindowSettings(), new NativeWindowSettings
            {
                Title        = "Q2Sharp (jogl)",
                Size         = new OpenTK.Mathematics.Vector2i(newDim.Width, newDim.Height),
                StartVisible = false,
                WindowBorder = OpenTK.Windowing.Common.WindowBorder.Fixed,
                IsFullscreen = false
                               //Icon = new OpenTK.Windowing.Common.Input.WindowIcon(new OpenTK.Windowing.Common.Input.Image(32,32,null)),
            });

            window.RenderFrame += (t) => Program.Frame();
            Program.RunWindow  += () => window.Run();

            //ImageIcon icon = new ImageIcon(GetType().GetResource("/icon-small.png"));
            Bitmap bitmap = (Bitmap)Bitmap.FromStream(GetType().Assembly.GetManifestResourceStream("/icon-small.png"));

            byte[] pixels = new byte[bitmap.Width * bitmap.Height];

            for (int y = 0; y < bitmap.Height; y++)
            {
                for (int x = 0; x < bitmap.Width; x++)
                {
                    var color = bitmap.GetPixel(x, y);
                    Array.Copy(new byte[] { color.R, color.G, color.B, color.A }, 0, pixels, (y * bitmap.Width + x) * 4, 4);
                }
            }

            Image icon = new Image(bitmap.Width, bitmap.Height, pixels);

            window.Icon = new WindowIcon(icon);

            window.Minimized += (e) => JOGLKBD.listener.ComponentHidden(e);
            window.Maximized += (e) =>
            {
                JOGLKBD.c = window;
                JOGLKBD.listener.ComponentShown(e);
            };
            window.Move       += (e) => JOGLKBD.listener.ComponentMoved(e);
            window.Closing    += (e) => Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
            window.Resize     += (e) => JOGLKBD.listener.ComponentResized(e);
            window.KeyDown    += (e) => JOGLKBD.listener.KeyPressed(e);
            window.KeyUp      += (e) => JOGLKBD.listener.KeyReleased(e);
            window.TextInput  += (e) => JOGLKBD.listener.KeyTyped(e);
            window.MouseEnter += () => JOGLKBD.listener.MouseEntered();
            window.MouseLeave += () => JOGLKBD.listener.MouseExited();
            window.MouseMove  += (e) => JOGLKBD.listener.MouseMoved(e);
            window.MouseDown  += (e) => JOGLKBD.listener.MousePressed(e);
            window.MouseUp    += (e) => JOGLKBD.listener.MouseReleased(e);
            window.MouseWheel += (e) => JOGLKBD.listener.MouseWheelMoved(e);
            //window.drag += ( e ) => JOGLKBD.listener.MouseDragged( e );

            if (fullscreen)
            {
                window.WindowState = OpenTK.Windowing.Common.WindowState.Fullscreen;
                VideoMode VideoMode = FindDisplayMode(newDim);
                newDim.Width       = VideoMode.Width;
                newDim.Height      = VideoMode.Height;
                window.WindowState = WindowState.Fullscreen;
                if (window.IsFullscreen)
                {
                    unsafe
                    {
                        GLFW.SetWindowSize(window.WindowPtr, VideoMode.Width, VideoMode.Height);
                    }
                }
                window.Location = new OpenTK.Mathematics.Vector2i();
                window.Size     = new OpenTK.Mathematics.Vector2i(VideoMode.Width, VideoMode.Height);
                VID.Printf(Defines.PRINT_ALL, "...setting fullscreen " + GetModeString(VideoMode) + '\\');
                window.IsVisible = true;
            }
            else
            {
                window.Location  = new OpenTK.Mathematics.Vector2i(window_xpos, window_ypos);
                window.IsVisible = true;
            }

            Base.SetVid(newDim.Width, newDim.Height);
            VID.NewWindow(newDim.Width, newDim.Height);

            return(Base.rserr_ok);
        }
예제 #14
0
 private static void QuitOnClose()
 {
     Program.UpdateLoop = null;
     Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
 }
예제 #15
0
        public static void SV_Map(Boolean attractloop, String levelstring, Boolean loadgame)
        {
            Int32  l;
            String level, ch, spawnpoint;
            var    pos = 0;

            sv.loadgame    = loadgame;
            sv.attractloop = attractloop;
            if (sv.state == Defines.ss_dead && !sv.loadgame)
            {
                SV_InitGame();
            }
            level = levelstring;
            var c = level.IndexOf('+');

            if (c != -1)
            {
                Cvar.Set("nextserver", "gamemap \\\"" + level.Substring(c + 1) + "\\\"");
                level = level.Substring(0, c);
            }
            else
            {
                Cvar.Set("nextserver", "");
            }

            if (firstmap.Length == 0)
            {
                if (!levelstring.EndsWith(".cin") && !levelstring.EndsWith(".pcx") && !levelstring.EndsWith(".dm2"))
                {
                    pos      = levelstring.IndexOf('+');
                    firstmap = levelstring.Substring(pos + 1);
                }
            }

            if (Cvar.VariableValue("coop") != 0 && level.Equals("victory.pcx"))
            {
                Cvar.Set("nextserver", "gamemap \\\"*" + firstmap + "\\\"");
            }
            pos = level.IndexOf('$');
            if (pos != -1)
            {
                spawnpoint = level.Substring(pos + 1);
                level      = level.Substring(0, pos);
            }
            else
            {
                spawnpoint = "";
            }
            if (level[0] == '*')
            {
                level = level.Substring(1);
            }
            l = level.Length;
            if (l > 4 && level.EndsWith(".cin"))
            {
                SCR.BeginLoadingPlaque();
                SV_SEND.SV_BroadcastCommand("changing\\n");
                SV_SpawnServer(level, spawnpoint, Defines.ss_cinematic, attractloop, loadgame);
            }
            else if (l > 4 && level.EndsWith(".dm2"))
            {
                SCR.BeginLoadingPlaque();
                SV_SEND.SV_BroadcastCommand("changing\\n");
                SV_SpawnServer(level, spawnpoint, Defines.ss_demo, attractloop, loadgame);
            }
            else if (l > 4 && level.EndsWith(".pcx"))
            {
                SCR.BeginLoadingPlaque();
                SV_SEND.SV_BroadcastCommand("changing\\n");
                SV_SpawnServer(level, spawnpoint, Defines.ss_pic, attractloop, loadgame);
            }
            else
            {
                SCR.BeginLoadingPlaque();
                SV_SEND.SV_BroadcastCommand("changing\\n");
                SV_SEND.SV_SendClientMessages();
                SV_SpawnServer(level, spawnpoint, Defines.ss_game, attractloop, loadgame);
                Cbuf.CopyToDefer();
            }

            SV_SEND.SV_BroadcastCommand("reconnect\\n");
        }
예제 #16
0
        public static void ParseServerMessage( )
        {
            while (true)
            {
                if (Globals.net_message.readcount > Globals.net_message.cursize)
                {
                    Com.Error(Defines.ERR_FATAL, "CL_ParseServerMessage: Bad server message:");
                    break;
                }

                var cmd = MSG.ReadByte(Globals.net_message);
                if (cmd == -1)
                {
                    SHOWNET("END OF MESSAGE");
                    break;
                }

                if (Globals.cl_shownet.value >= 2)
                {
                    if (null == svc_strings[cmd])
                    {
                        Com.Printf(Globals.net_message.readcount - 1 + ":BAD CMD " + cmd + "\\n");
                    }
                    else
                    {
                        SHOWNET(svc_strings[cmd]);
                    }
                }

                switch (cmd)

                {
                default:
                    Com.Error(Defines.ERR_DROP, "CL_ParseServerMessage: Illegible server message\\n");
                    break;

                case Defines.svc_nop:
                    break;

                case Defines.svc_disconnect:
                    Com.Error(Defines.ERR_DISCONNECT, "Server disconnected\\n");
                    break;

                case Defines.svc_reconnect:
                    Com.Printf("Server disconnected, reconnecting\\n");
                    if (Globals.cls.download != null)
                    {
                        try
                        {
                            Globals.cls.download.Close();
                        }
                        catch (IOException e)
                        {
                        }

                        Globals.cls.download = null;
                    }

                    Globals.cls.state        = Defines.ca_connecting;
                    Globals.cls.connect_time = -99999;
                    break;

                case Defines.svc_print:
                    var i = MSG.ReadByte(Globals.net_message);
                    if (i == Defines.PRINT_CHAT)
                    {
                        S.StartLocalSound("misc/talk.wav");
                        Globals.con.ormask = 128;
                    }

                    Com.Printf(MSG.ReadString(Globals.net_message));
                    Globals.con.ormask = 0;
                    break;

                case Defines.svc_centerprint:
                    SCR.CenterPrint(MSG.ReadString(Globals.net_message));
                    break;

                case Defines.svc_stufftext:
                    var s = MSG.ReadString(Globals.net_message);
                    Com.DPrintf("stufftext: " + s + "\\n");
                    Cbuf.AddText(s);
                    break;

                case Defines.svc_serverdata:
                    Cbuf.Execute();
                    ParseServerData();
                    break;

                case Defines.svc_configstring:
                    ParseConfigString();
                    break;

                case Defines.svc_sound:
                    ParseStartSoundPacket();
                    break;

                case Defines.svc_spawnbaseline:
                    ParseBaseline();
                    break;

                case Defines.svc_temp_entity:
                    CL_tent.ParseTEnt();
                    break;

                case Defines.svc_muzzleflash:
                    CL_fx.ParseMuzzleFlash();
                    break;

                case Defines.svc_muzzleflash2:
                    CL_fx.ParseMuzzleFlash2();
                    break;

                case Defines.svc_download:
                    ParseDownload();
                    break;

                case Defines.svc_frame:
                    CL_ents.ParseFrame();
                    break;

                case Defines.svc_inventory:
                    CL_inv.ParseInventory();
                    break;

                case Defines.svc_layout:
                    Globals.cl.layout = MSG.ReadString(Globals.net_message);
                    break;

                case Defines.svc_playerinfo:
                case Defines.svc_packetentities:
                case Defines.svc_deltapacketentities:
                    Com.Error(Defines.ERR_DROP, "Out of place frame data");
                    break;
                }
            }

            CL_view.AddNetgraph();
            if (Globals.cls.demorecording && !Globals.cls.demowaiting)
            {
                CL.WriteDemoMessage();
            }
        }
예제 #17
0
파일: Key.cs 프로젝트: optimus-code/Q2Sharp
        public static void Event(int key, bool down, int time)
        {
            string kb;
            string cmd;

            if (key_waiting == -1)
            {
                if (down)
                {
                    key_waiting = key;
                }
                return;
            }

            if (down)
            {
                key_repeats[key]++;
                if (key_repeats[key] > 1 && Globals.cls.key_dest == Defines.key_game && !(Globals.cls.state == Defines.ca_disconnected))
                {
                    return;
                }
                if (key >= 200 && Globals.keybindings[key] == null)
                {
                    Com.Printf(Key.KeynumToString(key) + " is unbound, hit F4 to set.\\n");
                }
            }
            else
            {
                key_repeats[key] = 0;
            }

            if (key == K_SHIFT)
            {
                shift_down = down;
            }
            if (key == '`' || key == '~')
            {
                if (!down)
                {
                    return;
                }
                Con.ToggleConsole_f.Execute();
                return;
            }

            if (Globals.cl.attractloop && Globals.cls.key_dest != Defines.key_menu && !(key >= K_F1 && key <= K_F12))
            {
                key = K_ESCAPE;
            }
            if (key == K_ESCAPE)
            {
                if (!down)
                {
                    return;
                }
                if (Globals.cl.frame.playerstate.stats[Defines.STAT_LAYOUTS] != 0 && Globals.cls.key_dest == Defines.key_game)
                {
                    Cbuf.AddText("cmd putaway\\n");
                    return;
                }

                switch (Globals.cls.key_dest)

                {
                case Defines.key_message:
                    Key.Message(key);
                    break;

                case Defines.key_menu:
                    Menu.Keydown(key);
                    break;

                case Defines.key_game:
                case Defines.key_console:
                    Menu.Menu_Main_f();
                    break;

                default:
                    Com.Error(Defines.ERR_FATAL, "Bad cls.key_dest");
                    break;
                }

                return;
            }

            Globals.keydown[key] = down;
            if (down)
            {
                if (key_repeats[key] == 1)
                {
                    Key.anykeydown++;
                }
            }
            else
            {
                Key.anykeydown--;
                if (Key.anykeydown < 0)
                {
                    Key.anykeydown = 0;
                }
            }

            if (!down)
            {
                kb = Globals.keybindings[key];
                if (kb != null && kb.Length > 0 && kb[0] == '+')
                {
                    cmd = "-" + kb.Substring(1) + " " + key + " " + time + "\\n";
                    Cbuf.AddText(cmd);
                }

                return;
            }

            if ((Globals.cls.key_dest == Defines.key_menu && menubound[key]) || (Globals.cls.key_dest == Defines.key_console && !consolekeys[key]) || (Globals.cls.key_dest == Defines.key_game && (Globals.cls.state == Defines.ca_active || !consolekeys[key])))
            {
                kb = Globals.keybindings[key];
                if (kb != null)
                {
                    if (kb.Length > 0 && kb[0] == '+')
                    {
                        cmd = kb + " " + key + " " + time + "\\n";
                        Cbuf.AddText(cmd);
                    }
                    else
                    {
                        Cbuf.AddText(kb + "\\n");
                    }
                }

                return;
            }

            if (!down)
            {
                return;
            }
            switch (Globals.cls.key_dest)

            {
            case Defines.key_message:
                Key.Message(key);
                break;

            case Defines.key_menu:
                Menu.Keydown(key);
                break;

            case Defines.key_game:
            case Defines.key_console:
                Key.Console(key);
                break;

            default:
                Com.Error(Defines.ERR_FATAL, "Bad cls.key_dest");
                break;
            }
        }
예제 #18
0
        /**
         * Called by the system between frames for both key up and key down events.
         */
        public static void Event(int key, bool down, int time)
        {
            string kb;
            string cmd;

            // hack for modal presses
            if (Key.key_waiting == -1)
            {
                if (down)
                {
                    Key.key_waiting = key;
                }

                return;
            }

            // update auto-repeat status
            if (down)
            {
                Key.key_repeats[key]++;

                if (Key.key_repeats[key] > 1 && Globals.cls.key_dest == Defines.key_game && !(Globals.cls.state == Defines.ca_disconnected))
                {
                    return;                     // ignore most autorepeats
                }
                if (key >= 200 && Globals.keybindings[key] == null)
                {
                    Com.Printf(Key.KeynumToString(key) + " is unbound, hit F4 to set.\n");
                }
            }
            else
            {
                Key.key_repeats[key] = 0;
            }

            if (key == Key.K_SHIFT)
            {
                Key.shift_down = down;
            }

            // console key is hardcoded, so the user can never unbind it
            if (key == '`' || key == '~')
            {
                if (!down)
                {
                    return;
                }

                client.Console.ToggleConsole_f();

                return;
            }

            // any key during the attract mode will bring up the menu
            if (Globals.cl.attractloop && Globals.cls.key_dest != Defines.key_menu && !(key >= Key.K_F1 && key <= Key.K_F12))
            {
                key = Key.K_ESCAPE;
            }

            // menu key is hardcoded, so the user can never unbind it
            if (key == Key.K_ESCAPE)
            {
                if (!down)
                {
                    return;
                }

                if (Globals.cl.frame.playerstate.stats[Defines.STAT_LAYOUTS] != 0 && Globals.cls.key_dest == Defines.key_game)
                {
                    // put away help computer / inventory
                    Cbuf.AddText("cmd putaway\n");

                    return;
                }

                switch (Globals.cls.key_dest)
                {
                case Defines.key_message:
                    Key.Message(key);

                    break;

                case Defines.key_menu:
                    Menu.Keydown(key);

                    break;

                case Defines.key_game:
                case Defines.key_console:
                    Menu.Menu_Main_f();

                    break;

                default:
                    Com.Error(Defines.ERR_FATAL, "Bad cls.key_dest");

                    break;
                }

                return;
            }

            // track if any key is down for BUTTON_ANY
            Globals.keydown[key] = down;

            if (down)
            {
                if (Key.key_repeats[key] == 1)
                {
                    Key.anykeydown++;
                }
            }
            else
            {
                Key.anykeydown--;

                if (Key.anykeydown < 0)
                {
                    Key.anykeydown = 0;
                }
            }

            //
            // key up events only generate commands if the game key binding is
            // a button command (leading + sign).  These will occur even in console mode,
            // to keep the character from continuing an action started before a console
            // switch.  Button commands include the kenum as a parameter, so multiple
            // downs can be matched with ups
            //
            if (!down)
            {
                kb = Globals.keybindings[key];

                if (kb != null && kb.Length > 0 && kb[0] == '+')
                {
                    cmd = "-" + kb[1..] + " " + key + " " + time + "\n";
예제 #19
0
파일: Key.cs 프로젝트: optimus-code/Q2Sharp
        public static void Console(int key)
        {
            switch (key)

            {
            case K_KP_SLASH:
                key = '/';
                break;

            case K_KP_MINUS:
                key = '-';
                break;

            case K_KP_PLUS:
                key = '+';
                break;

            case K_KP_HOME:
                key = '7';
                break;

            case K_KP_UPARROW:
                key = '8';
                break;

            case K_KP_PGUP:
                key = '9';
                break;

            case K_KP_LEFTARROW:
                key = '4';
                break;

            case K_KP_5:
                key = '5';
                break;

            case K_KP_RIGHTARROW:
                key = '6';
                break;

            case K_KP_END:
                key = '1';
                break;

            case K_KP_DOWNARROW:
                key = '2';
                break;

            case K_KP_PGDN:
                key = '3';
                break;

            case K_KP_INS:
                key = '0';
                break;

            case K_KP_DEL:
                key = '.';
                break;
            }

            if (key == 'l')
            {
                if (Globals.keydown[K_CTRL])
                {
                    Cbuf.AddText("clear\\n");
                    return;
                }
            }

            if (key == K_ENTER || key == K_KP_ENTER)
            {
                if (Globals.key_lines[Globals.edit_line][1] == '\\' || Globals.key_lines[Globals.edit_line][1] == '/')
                {
                    Cbuf.AddText(Encoding.ASCII.GetString(Globals.key_lines[Globals.edit_line], 2, Lib.Strlen(Globals.key_lines[Globals.edit_line]) - 2));
                }
                else
                {
                    Cbuf.AddText(Encoding.ASCII.GetString(Globals.key_lines[Globals.edit_line], 1, Lib.Strlen(Globals.key_lines[Globals.edit_line]) - 1));
                }
                Cbuf.AddText("\\n");
                Com.Printf(Encoding.ASCII.GetString(Globals.key_lines[Globals.edit_line], 0, Lib.Strlen(Globals.key_lines[Globals.edit_line])) + "\\n");
                Globals.edit_line = (Globals.edit_line + 1) & 31;
                history_line      = Globals.edit_line;
                Globals.key_lines[Globals.edit_line][0] = (byte)']';
                Globals.key_linepos = 1;
                if (Globals.cls.state == Defines.ca_disconnected)
                {
                    SCR.UpdateScreen();
                }
                return;
            }

            if (key == K_TAB)
            {
                CompleteCommand();
                return;
            }

            if ((key == K_BACKSPACE) || (key == K_LEFTARROW) || (key == K_KP_LEFTARROW) || ((key == 'h') && (Globals.keydown[K_CTRL])))
            {
                if (Globals.key_linepos > 1)
                {
                    Globals.key_linepos--;
                }
                return;
            }

            if ((key == K_UPARROW) || (key == K_KP_UPARROW) || ((key == 'p') && Globals.keydown[K_CTRL]))
            {
                do
                {
                    history_line = (history_line - 1) & 31;
                }while (history_line != Globals.edit_line && Globals.key_lines[history_line][1] == 0);
                if (history_line == Globals.edit_line)
                {
                    history_line = (Globals.edit_line + 1) & 31;
                }
                System.Array.Copy(Globals.key_lines[history_line], 0, Globals.key_lines[Globals.edit_line], 0, Globals.key_lines[Globals.edit_line].Length);
                Globals.key_linepos = Lib.Strlen(Globals.key_lines[Globals.edit_line]);
                return;
            }

            if ((key == K_DOWNARROW) || (key == K_KP_DOWNARROW) || ((key == 'n') && Globals.keydown[K_CTRL]))
            {
                if (history_line == Globals.edit_line)
                {
                    return;
                }
                do
                {
                    history_line = (history_line + 1) & 31;
                }while (history_line != Globals.edit_line && Globals.key_lines[history_line][1] == 0);
                if (history_line == Globals.edit_line)
                {
                    Globals.key_lines[Globals.edit_line][0] = (byte)']';
                    Globals.key_linepos = 1;
                }
                else
                {
                    System.Array.Copy(Globals.key_lines[history_line], 0, Globals.key_lines[Globals.edit_line], 0, Globals.key_lines[Globals.edit_line].Length);
                    Globals.key_linepos = Lib.Strlen(Globals.key_lines[Globals.edit_line]);
                }

                return;
            }

            if (key == K_PGUP || key == K_KP_PGUP)
            {
                Globals.con.display -= 2;
                return;
            }

            if (key == K_PGDN || key == K_KP_PGDN)
            {
                Globals.con.display += 2;
                if (Globals.con.display > Globals.con.current)
                {
                    Globals.con.display = Globals.con.current;
                }
                return;
            }

            if (key == K_HOME || key == K_KP_HOME)
            {
                Globals.con.display = Globals.con.current - Globals.con.totallines + 10;
                return;
            }

            if (key == K_END || key == K_KP_END)
            {
                Globals.con.display = Globals.con.current;
                return;
            }

            if (key < 32 || key > 127)
            {
                return;
            }
            if (Globals.key_linepos < Defines.MAXCMDLINE - 1)
            {
                Globals.key_lines[Globals.edit_line][Globals.key_linepos] = (byte)key;
                Globals.key_linepos++;
                Globals.key_lines[Globals.edit_line][Globals.key_linepos] = 0;
            }
        }
예제 #20
0
        private void HandleEvents()
        {
            var keyboardState = JOGLKBD.c.KeyboardState;

            if (keyboardState == null)
            {
                Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
            }

            var snapshot = keyboardState.GetSnapshot();

            while (LastKeyboardState != snapshot)
            {
                int  key  = Keyboard.GetEventKey();
                char ch   = Keyboard.GetEventCharacter();
                bool down = Keyboard.GetEventKeyState();
                if (down)
                {
                    lwjglKeycodeMap[key] = ch;
                    pressed[key]         = Globals.sys_frame_time;
                }
                else
                {
                    pressed[key] = 0;
                }

                Do_Key_Event(XLateKey(key, ch), down);

                LastKeyboardState = snapshot;
            }

            GenerateRepeats();
            if (IN.mouse_active)
            {
                mx = Mouse.GetDX() << 1;
                my = -Mouse.GetDY() << 1;
            }
            else
            {
                mx = 0;
                my = 0;
            }

            while (Mouse.Next())
            {
                int button = Mouse.GetEventButton();
                if (button >= 0)
                {
                    Do_Key_Event(Key.K_MOUSE1 + button, Mouse.GetEventButtonState());
                }
                else
                {
                    button = Mouse.GetEventDWheel();
                    if (button > 0)
                    {
                        Do_Key_Event(Key.K_MWHEELUP, true);
                        Do_Key_Event(Key.K_MWHEELUP, false);
                    }
                    else if (button < 0)
                    {
                        Do_Key_Event(Key.K_MWHEELDOWN, true);
                        Do_Key_Event(Key.K_MWHEELDOWN, false);
                    }
                }
            }
        }
예제 #21
0
 // add commands to the server console as if they were typed in
 // for map changing, etc
 public void AddCommandString(string text)
 {
     Cbuf.AddText(text);
 }
예제 #22
0
 public void WindowClosing(WindowEvent e)
 {
     Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
 }