Beispiel #1
0
        static void Main()
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var clientForm = new ClientForm()
            {
                ClientSize = new Size(800, 576),
                Text       = "Maze™",
            };

            GDIRenderer     renderer = new GDIRenderer(clientForm);
            ClientFormInput input    = new ClientFormInput();
            ClientGameState state    = new ClientGameState();

            HookInputEvents(clientForm, input);

            GameEngine engine = new GameEngine(renderer, input, new InterpolationEngine(state))
            {
                EnableRender   = true,
                MinFrameTime   = 16,
                UpdateTimeStep = 33,
            };

            var game         = new GameRunner(engine, state);
            var synchronizer = new StateSynchronizer(state, input);

            // TODO: Stop game thread and clean up when window starts closing
            game.RunAsync();
            Application.Run(clientForm);
        }
Beispiel #2
0
        private static void Connect(String server, ClientFormInput input, GameState state)
        {
            try
            {
                Int32           port            = 1239;
                TcpClient       client          = new TcpClient(server, port);
                NetworkStream   stream          = client.GetStream();
                BinaryFormatter binaryFormatter = new BinaryFormatter();

                while (true)
                {
                    binaryFormatter.Serialize(stream, input);

                    var newState = (GameState)binaryFormatter.Deserialize(stream);

                    if (!input.IsInitialized())
                    {
                        input.SetUserId(newState.UserId);
                    }

                    state.SyncState(newState);
                }


                // stream.Close();
                // throw new Exception("sss");
                // client.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e);
            }
            Console.Read();
        }
Beispiel #3
0
 public StateSynchronizer(GameState state, ClientFormInput input)
 {
     new Thread(() =>
     {
         Thread.CurrentThread.IsBackground = true;
         Connect("127.0.0.1", input, state);
     }).Start();
 }
Beispiel #4
0
        private static void HookInputEvents(ClientForm form, ClientFormInput input)
        {
            form.KeyUp += (object sender, KeyEventArgs e) => {
                input.KeyUp(e.KeyCode);
            };

            form.KeyDown += (object sender, KeyEventArgs e) => {
                input.KeyDown(e.KeyCode);
            };
        }
        public void Put(Keys key)
        {
            ClientFormInput input = new ClientFormInput();

            input.SetUserId(1);
            input.Initialize(1);
            input.KeyDown(key);
            var result = input.IsUserKeyDown(1, key);

            Assert.True(result);
        }
        public void TestOverridesWithPressedKeysFromSeparateInstance()
        {
            var otherInput = new ClientFormInput();

            otherInput.SetUserId(1);
            _input.SetUserId(1);

            otherInput.KeyDown(Keys.Up);
            _input.KeyDown(Keys.Enter);

            _input.Merge(otherInput);

            Assert.False(_input.IsKeyDown(Keys.Enter));
            Assert.True(_input.IsKeyDown(Keys.Up));
        }
 public ClientFormInputTest()
 {
     _input = new ClientFormInput();
 }