Example #1
0
        /*
         * os_read_key
         *
         * Read a single character from the keyboard (or a mouse click) and
         * return it. Input aborts after timeout/10 seconds.
         *
         */
        public static zword read_key(int timeout, bool cursor)
        {
            _screen.RefreshScreen();

            _screen.SetInputMode(true, true);

            if (_setCursorPositionCalled == false)
            {
                set_cursor(_newCursorPosition.Y, _newCursorPosition.X);
            }

            ZPoint p = _screen.GetCursorPosition();

            try
            {
#if SILVERLIGHT

                var sw = new WiredPrairie.Silverlight.Stopwatch();
#else
                System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
#endif
                sw.Start();
                while (true)
                {
                    do
                    {
                        if (main.abort_game_loop == true)
                        {
                            return CharCodes.ZC_RETURN;
                        }

                        lock (entries)
                        {
                          
                            if (entries.Count > 0) break;
                            if (sw.Elapsed.TotalSeconds > timeout / 10 && timeout > 0) return CharCodes.ZC_TIME_OUT;
                        }
                        System.Threading.Tasks.Task.Delay(10).GetAwaiter().GetResult();
                        //System.Threading.Thread.Sleep(10);

                    } while (true);

                    lock (entries)
                    {
                        _setCursorPositionCalled = false;
                        zword c = entries.Dequeue();

                        int width = _screen.GetStringWidth(((char)c).ToString(),
                            new CharDisplayInfo(ZFont.FIXED_WIDTH_FONT, ZStyles.NORMAL_STYLE, 1, 1));
                        // _screen.SetCursorPosition(p.X + width, p.Y);

                        _newCursorPosition = new ZPoint(p.X + width, p.Y);

                        return c;
                    }
                }
            }
            finally
            {
                _screen.SetInputMode(false, false);
            }
        }
Example #2
0
        /*
         * os_read_key
         *
         * Read a single character from the keyboard (or a mouse click) and
         * return it. Input aborts after timeout/10 seconds.
         *
         */
        public static zword read_key(int timeout, bool cursor)
        {
            _screen.RefreshScreen();

            _screen.SetInputMode(true, true);

            if (_setCursorPositionCalled == false)
            {
                set_cursor(_newCursorPosition.Y, _newCursorPosition.X);
            }

            ZPoint p = _screen.GetCursorPosition();

            try
            {
#if SILVERLIGHT
                var sw = new WiredPrairie.Silverlight.Stopwatch();
#else
                System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
#endif
                sw.Start();
                while (true)
                {
                    do
                    {
                        if (main.abort_game_loop == true)
                        {
                            return(CharCodes.ZC_RETURN);
                        }

                        lock (entries)
                        {
                            if (entries.Count > 0)
                            {
                                break;
                            }
                            if (sw.Elapsed.TotalSeconds > timeout / 10 && timeout > 0)
                            {
                                return(CharCodes.ZC_TIME_OUT);
                            }
                        }
                        System.Threading.Thread.Sleep(10);
                    } while (true);

                    lock (entries)
                    {
                        _setCursorPositionCalled = false;
                        zword c = entries.Dequeue();

                        int width = _screen.GetStringWidth(((char)c).ToString(),
                                                           new CharDisplayInfo(ZFont.FIXED_WIDTH_FONT, ZStyles.NORMAL_STYLE, 1, 1));
                        // _screen.SetCursorPosition(p.X + width, p.Y);

                        _newCursorPosition = new ZPoint(p.X + width, p.Y);

                        return(c);
                    }
                }
            }
            finally
            {
                _screen.SetInputMode(false, false);
            }
        }