예제 #1
0
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();
}
예제 #2
0
파일: GameServer.cpp 프로젝트: jrm780/Ping
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;
    }
}
예제 #3
0
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;
}
예제 #4
0
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;
}