void Gamefield::onStart(ClientPtr client, PacketPtr packet) { auto p = std::dynamic_pointer_cast<StartPacket >(packet); String color = mOptions.player.color[rand()%mOptions.player.color.size()]; printf("Player %s joind the game\n", p->Name.c_str()); PlayerPtr ply = std::make_shared<Player>(shared_from_this(), client, color, p->Name); mPlayer[client->getId()] = ply; ply->addBall(createBall(ply)); ply->updateClient(); client->emit(std::make_shared<EmptyPacket<PID_Start> >()); }
void Gamefield::onJoin(ClientPtr client, PacketPtr packet) { //Set Callbacks client->on(PID_Leave, std::bind(&Gamefield::onLeave, this, _1, _2)); client->on(PID_Start, std::bind(&Gamefield::onStart, this, _1, _2)); client->on(PID_GetStats, std::bind(&Gamefield::onGetStats, this, _1, _2)); client->setOnDisconnect(std::bind(&Gamefield::onDisconnected, this, _1)); //Send all elements client->emit(std::make_shared<SetElementsPacket>(mElements)); //Add to update queue mClients.push_back(client); if(mUpdaterRunning == false) startUpdater(); }
void Gamefield::onGetStats(ClientPtr client, PacketPtr packet) { double timerUpdate = 0; double timerCollision = 0; double timerOther = 0; for(auto it : mFPSControl.timerUpdate) timerUpdate += std::chrono::duration_cast<std::chrono::duration<double, std::milli> >(it).count() / mFPSControl.timerUpdate.size(); for(auto it : mFPSControl.timerCollision) timerCollision += std::chrono::duration_cast<std::chrono::duration<double, std::milli> >(it).count() / mFPSControl.timerCollision.size(); for(auto it : mFPSControl.timerOther) timerOther += std::chrono::duration_cast<std::chrono::duration<double, std::milli> >(it).count() / mFPSControl.timerOther.size(); printf("Timings: Update: %lf Collision: %lf Other: %lf Elements: %ld QuadTreeNodes: %ld\n", timerUpdate, timerCollision, timerOther, mElements.size(), mQuadTree->getChildCount()); if(client) client->emit(std::make_shared<StatsPacket>(timerUpdate, timerCollision, timerOther, (uint32_t)mElements.size(), (uint32_t)mPlayer.size())); }