void Client::start(const std::string & name) { sf::ContextSettings settings; settings.antialiasingLevel = 2; m_window.create(sf::VideoMode(800, 600), "The Best Sailor", sf::Style::Default, settings); m_window.setFramerateLimit(60); m_window.setKeyRepeatEnabled(false); m_window.setJoystickThreshold(100.0f); m_player.setName(name); m_state.activate(); while (m_window.isOpen()) { sf::Event event; while (m_window.pollEvent(event)) { if (!m_state.read(event)) { m_window.close(); } } pollMessages(); m_state.update(m_clock.restart().asSeconds()); m_window.clear(sf::Color(5, 52, 79, 255)); m_state.render(m_window); TextView::setAbs(true); TextView::update(); m_window.display(); } m_state.release(); }
void GameServer::update(float deltaTime) { pollMessages(); if (state == GameState::Playing) { stage.update(deltaTime); } else if (state == GameState::Preparatory) { if (countdown <= 0) { // Release the ball and notify clients sf::Packet p; p << Message::BallReleased << stage.ball.angle; sendMessage(p); state = GameState::Playing; stage.start(); } else { countdown -= deltaTime; } } timeUntilSync -= deltaTime; if (timeUntilSync <= 0) { // Send the clients a snapshot of the game sf::Packet p; p << Message::GameSync << GameSnapshot(this); sendMessage(p); timeUntilSync = syncRate; } }
bool Client::pollMessagesWait(sf::Time timeout) { if (m_network.getMessageQueue().empty()) { std::cout << "[Client][PoolM][Wait]" << std::endl; if (!m_network.getMessageQueue().waitEvent(timeout)) { std::cout << "[Client][PoolM][Wait] \t timeout" << std::endl; return false; } } pollMessages(); return true; }
bool Server::readMessagesWait(sf::Time timeout) { //std::cout << "[Serv][PollM][Start] \t Poll messages started (With wait)" << std::endl; if (m_network.getMessageQueue().empty()) if (!m_network.getMessageQueue().waitEvent(timeout)) { //std::cout << "[Serv][PollM][End] \t Poll messages ended (With timeout)" << std::endl; return false; } pollMessages(); //std::cout << "[Serv][PollM][End] \t Poll messages ended (With receive message)" << std::endl; return true; }