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); }
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(); }
public StateSynchronizer(GameState state, ClientFormInput input) { new Thread(() => { Thread.CurrentThread.IsBackground = true; Connect("127.0.0.1", input, state); }).Start(); }
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(); }