void FinishedProxy::visit(Widget::WidgetActivateEvent *event) { std::string name = event->getWidget()->getName(); if(name == "quit") { EMIT_EVENT(new Event::QuitEvent()); } else if(name == "dismiss") { EMIT_EVENT(new Event::SwitchToScreen("")); } }
void TPropertiesMenu::calculate() { BaseMenu::calculate(); if(currentEvent != MENU_BACK) return; Render::t_screen_sizes_list::iterator it = ss->begin(); for(int i = 0; i < screen_size_->getItem(); ++i) ++it; Properties.window_width = it->width; Properties.window_height = it->height; if(antialiasing_->getItem() == 0) Properties.antialiasing = 0; else Properties.antialiasing = 1 << (antialiasing_->getItem() - 1); Properties.fog_quality = fog_->getItem() * 2 + 1; Properties.lighting_quality = lighting_->getItem(); Properties.texture_quality = texture_->getItem(); Properties.view_distance = view_distance_->getValue(); saveProperties(); Render::texturesQuality = (u_int8_t)Properties.texture_quality; Render::setLightQuality((u_int8_t)Properties.lighting_quality); Render::setViewDistance(Properties.view_distance); EMIT_EVENT(PropertiesFinishedEvent); // ==> return; }
void SDLMainLoop::quitHandler(Event::QuitEvent *event) { if(!currentlyUsingMenuLoop()) { EMIT_EVENT(new Event::DoDisconnect()); useMenuLoop(); } else { setQuit(); } }
void AboutProxy::visit(Widget::WidgetActivateEvent *event) { std::string name = event->getWidget()->getName(); if(name == "back") { EMIT_EVENT(new Event::SwitchToScreen("")); } else { LOG2(GUI, WARNING, "No action for clicking on \"" << name << "\""); } }
PathingUpdater::PathingUpdater( boost::shared_ptr<Object::WorldManager> worldManager, boost::shared_ptr<RaceManager> raceManager, boost::shared_ptr<World::PlayerManager> playerManager) { this->worldManager = worldManager; this->raceManager = raceManager; this->playerManager = playerManager; EMIT_EVENT(new Event::PlayerProgressEvent(0, 0.0, raceManager->getNumLapsToWin())); warpDetector = new WarpDetector(raceManager.get()); }
void NetworkPortal::checkNetwork() { if(!portal) return; unsigned long now = Misc::Sleeper::getTimeMilliseconds(); if(now >= lastPing + 1000) { //LOG(NETWORK, "client sending ping"); Network::Packet *packet = new Network::PingPacket(); portal->sendPacket(packet); delete packet; lastPing = now; } while(checking) { Network::Packet *packet = portal->nextPacket(); if(!packet) break; //LOG2(NETWORK, PACKET, "Received packet " << typeid(*packet).name()); if(dynamic_cast<Network::EventPacket *>(packet)) { EMIT_EVENT(dynamic_cast<Network::EventPacket *>(packet) ->getEvent()); } else if(dynamic_cast<Network::PingPacket *>(packet)) { unsigned long sent = dynamic_cast<Network::PingPacket *>(packet) ->getMilliseconds(); unsigned long now = Misc::Sleeper::getTimeMilliseconds(); long offset = -long(now - sent); History::PingTimeMeasurer::getInstance()->setClockOffset(offset); LOG(NETWORK, "ClockOffset set to " << offset); } EMIT_EVENT(new Event::PacketReceived(packet)); delete packet; } }
void SDLMainLoop::gameStageChangedHandler(Event::GameStageChanged *event) { if(event->getStage() == World::WorldSetup::START_COUNTDOWN) { gameLoop->setGuiPointers( menuLoop->getGUI(), menuLoop->getGUIInput()); menuLoop->getGUI()->popScreen(); //menuLoop->getGUI()->pushScreen("running"); EMIT_EVENT(new Event::SwitchToScreen("running")); // set up camera if necessary gameLoop->setProjection(Point2D( SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h)); //Timing::AccelControl::getInstance()->setPauseSkipDirectly(SDL_GetTicks()); useLoopBase(gameLoop); } }
void SDLMainLoop::handleEvents() { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: EMIT_EVENT(new Event::QuitEvent()); break; case SDL_VIDEORESIZE: SDL_SetVideoMode(event.resize.w, event.resize.h, 0, sdl_init_flags); resizeGL(event.resize.w, event.resize.h); /*projector.setCurrentDimensions( Point2D(event.resize.w, event.resize.h));*/ break; } loop->handleEvent(&event); inputManager->getInputMapper()->handleEvent(&event); } }
void TGameplayPhase::calculate() { double d_ = _D_MAN_SPEED * timer.elapsed_ms(); double angle_ = camera->getAngle() * _DEG_TO_RAD; float dY = (float)(d_ * cos(angle_)); float dX = (float)(d_ * -sin(angle_)); bool is_now_walk = false; Input::collectControlsStates(); if(Input::getPushed(_KEY_QUIT)) { EMIT_EVENT(GameplayQuitEvent); // ==> return; } if(Input::getHolded(_KEY_FORWARD)) { camera->translate_position(dX, dY, .0f); is_now_walk = true; } if(Input::getHolded(_KEY_BACK)) { camera->translate_position(-dX, -dY, .0f); is_now_walk = true; } if(Input::getHolded(_KEY_LEFT)) { camera->translate_position(-dY, dX, .0f); is_now_walk = true; } if(Input::getHolded(_KEY_RIGHT)) { camera->translate_position(dY, -dX, .0f); is_now_walk = true; } camera->translate_rotation((float)(timer.elapsed_ms() * Input::getAxis(_AXIS_X)), (float)(timer.elapsed_ms() * Input::getAxis(_AXIS_Y))); zero_light->set_position(camera->getX(), camera->getY(), _F_LIGHT_HEIGHT); if((! is_walk) && is_now_walk) man->setAnimation("walk"); else if(is_walk && (! is_now_walk)) man->setFrame("stand"); is_walk = is_now_walk; timer.start(); return; }
void PathingUpdater::update() { if(!GET_SETTING("game.enablepathing", true)) { return; } Object::WorldManager::PlayerIteratorType iterator = worldManager->getPlayerIterator(); while (iterator.hasNext()) { Object::Player* player = iterator.next(); // Raycast downward to find the update point Math::Point origin_pos = player->getPosition(); Math::Point dir_pos = origin_pos; dir_pos.setY(dir_pos.getY() - VEHICLE_PATH_RAY_MAX_HEIGHT); Math::Point update_pos; Physics::PhysicsWorld *physicsWorld = Physics::PhysicsWorld::getInstance(); // Update if the player is above the track if(physicsWorld->raycastPoint(origin_pos, dir_pos, &update_pos)) { if(!player->getPathTracker()) continue; // no path tracker if(!player->getPathTracker()->atLeastOneNode()) continue; player->getPathTracker()->update(update_pos); // Start a new lap for the player if they have crossed the finish plane if (player->getPathTracker()->readyforNewLap() && raceManager->getBoundingPlane().pointInside(origin_pos)) { player->getPathTracker()->startNewLap(); LOG(WORLD, "Player: " << player->getID() << " has finished lap " << player->getPathTracker()->getNumLaps()); if (!player->getPathTracker()->getFinished() && player->getPathTracker()->getNumLaps() >= raceManager->getNumLapsToWin() && !GET_SETTING("internal.practicemode", false) ) { player->getPathTracker()->setFinished(true); Map::PlayerTimes::getInstance().setFinished( player->getID(), World::TimeElapsed::getInstance().getGameTime()); if (Bonus::GlobalBonusManager::getInstance()) Bonus::GlobalBonusManager::getInstance()->getPlayerBonuses(player->getID()).playerFinish(player->getPathTracker()->getRanking()); } if(playerManager->getPlayer() == player) { EMIT_EVENT(new Event::PlayerProgressEvent( player->getPathTracker()->getNumLaps(), player->getPathTracker()->getLapProgress(), raceManager->getNumLapsToWin() ) ); } } } warpDetector->checkForWarping(player); } raceManager->updatePlayerRankings(worldManager.get()); }
void FinishedProxy::handleRaceFinished(Event::RaceFinished *event) { LOG(GLOBAL, "Race finished!"); Widget::CompositeWidget *ranks = dynamic_cast<Widget::CompositeWidget *>( finished->getChild("ranks")); ranks->removeAllChildren(); Widget::CompositeWidget *teams = dynamic_cast<Widget::CompositeWidget *>( finished->getChild("teams")); teams->removeAllChildren(); Widget::WidgetRect scoreArea(0.1, 0.45, 0.8, 0.4); Widget::WidgetRect teamArea(0.1, 0.05, 0.8, 0.35); double scoreHeight = scoreArea.getHeight() / 11.0; double teamHeight = teamArea.getHeight() / 6.0; Map::RaceResults results = event->getResults(); for(int r = 0; r <= results.getRanks() && r <= 10; r ++) { Widget::WidgetRect textRect( scoreArea.getCorner().getX(), scoreArea.getCorner().getY() + scoreHeight * r, scoreArea.getWidth() / 3.0 - 0.03, scoreHeight); Widget::WidgetRect textRect1 = textRect; Widget::WidgetRect textRect2 = textRect; Widget::WidgetRect textRect3 = textRect; textRect2.getCorner().addX(scoreArea.getWidth() / 3.0); textRect3.getCorner().addX(scoreArea.getWidth() / 3.0 * 2); if (r == 0) { ranks->addChild( new Widget::TextWidget("playerColTitle", "Player", Widget::NormalTextLayout::ALIGN_HCENTRE, textRect1)); ranks->addChild( new Widget::TextWidget("timeColTitle", "Time - Bonus", Widget::NormalTextLayout::ALIGN_HCENTRE, textRect2)); ranks->addChild( new Widget::TextWidget("bonusColTitle", "Final", Widget::NormalTextLayout::ALIGN_HCENTRE, textRect3)); } else { int p = results.getPlayerByRank(r-1); int score = results.getPlayerPoints(p); int bonus = results.getPlayerBonus(p); Object::Player *player = playerManager->getPlayer(p); ranks->addChild( new Widget::TextWidget(Misc::StreamAsString() << "rank" << r-1, player->getPlayerName(), Widget::NormalTextLayout::ALIGN_LEFT, textRect1, Map::Teams::teamColor(player->getTeamID()))); ranks->addChild( new Widget::TextWidget(Misc::StreamAsString() << "time" << r-1, Misc::StreamAsString() << formatTime((score+bonus) / 1000.0) << " - " << formatTime(bonus / 1000.0) << " secs", Widget::NormalTextLayout::ALIGN_HCENTRE, textRect2)); ranks->addChild( new Widget::TextWidget(Misc::StreamAsString() << "final" << r-1, Misc::StreamAsString() << "= " << formatTime(score / 1000.0) << " secs", Widget::NormalTextLayout::ALIGN_RIGHT, textRect3)); } } for(int r = 0; r <= results.getTeams() && r <= 5; r ++) { Widget::WidgetRect textRect( teamArea.getCorner().getX(), teamArea.getCorner().getY() + teamHeight * r, teamArea.getWidth() / 2.0 - 0.03, teamHeight); Widget::WidgetRect textRect1 = textRect; Widget::WidgetRect textRect2 = textRect; textRect2.getCorner().addX(scoreArea.getWidth() / 2.0); if(r == 0) { ranks->addChild( new Widget::TextWidget("teamNamesTitle", "Best Teams", Widget::NormalTextLayout::ALIGN_LEFT, textRect1)); ranks->addChild( new Widget::TextWidget("teamScoresTitle", "Average Score", Widget::NormalTextLayout::ALIGN_RIGHT, textRect2)); } else { int team = results.getTeamByRank(r-1); int score = results.getTeamPoints(team); ranks->addChild( new Widget::TextWidget(Misc::StreamAsString() << "rank" << r-1, Misc::StreamAsString() << "Team " << Map::Teams::teamName(team), Widget::NormalTextLayout::ALIGN_LEFT, textRect1, Map::Teams::teamColor(team))); ranks->addChild( new Widget::TextWidget(Misc::StreamAsString() << "team" << r-1, Misc::StreamAsString() << formatTime(score / 1000.0) << " secs", Widget::NormalTextLayout::ALIGN_RIGHT, textRect2)); } } EMIT_EVENT(new Event::SwitchToScreen("finished")); }