void AppController::GameControllerStopCurrentLevel() { hdAssert(gameController != NULL); hdAssert(gameController->GetCurrentLevel() != NULL); hdAssert(m_levelPickerWorld != NULL); FreeMemory(); // Update the game stats from the recently played level UpdateGameStats(m_levelPickerWorld, gameController->GetCurrentLevel(), gameController->gameInfo); SaveGameState(); // Show the level picker controller. EnsureLevelPickerController(); InitLevelPickerWorld(); levelPickerController->PanToNewLevelBlock(); levelPickerController->ShowNewLevelMessage(gameController->GetLevelStats()); activeController = levelPickerController; activeController->AnimateShow(); // Free up the game controller resources delete gameController; gameController = NULL; DispatchMessages(); }
void AppController::LevelPickerBackClicked() { hdAssert(levelPickerController != NULL); // Saves everything... if (-1 == TowerPlayerStateController::Instance()->SaveChanges()) { hdError(-1, "There was a fault with the file system via TowerPlayerStateController::Instance()->SaveChanges(). Bailing out\n"); hdAssert(false); } FreeMemory(); EnsureMenuController(); activeController = menuController; activeController->AnimateShow(); // Delete the level picker controller to free up memory delete levelPickerController; levelPickerController = NULL; if (gameController == NULL) return; delete gameController; gameController = NULL; DispatchMessages(); }
void AppController::GameControllerRestartCurrentLevel() { #if DEBUG == 1 if (getenv("START_WORLD_OVERRIDE_PATH")) { delete gameController; gameController = NULL; activeController = NULL; Level *lev = m_levelPickerWorld->GetLevels()[m_levelId]; EnsureGameController(); gameController->InitLevel(lev, m_levelId); gameController->SetLevelStats(NULL); activeController = gameController; gameController->AnimateShow(); DispatchMessages(); return; } #endif // Complete rebuild the game controller // No need to free asset memory though - every texture/sound/font // should still be in memory. Recreating will just get handles to these. hdAssert(gameController != NULL); hdAssert(gameController->GetCurrentLevel() != NULL); hdAssert(m_levelPickerWorld != NULL); UpdateGameStats(m_levelPickerWorld, gameController->GetCurrentLevel(), gameController->gameInfo); delete gameController; gameController = NULL; activeController = NULL; InitLevelPickerWorld(); m_selectedLevelPickerLevel = m_levelPickerWorld->GetLevels()[m_levelId]; EnsureGameController(); gameController->InitLevel(m_selectedLevelPickerLevel, m_levelId); gameController->SetLevelStats(GetStatsForLevel(m_levelPickerWorld, m_selectedLevelPickerLevel)); activeController = gameController; gameController->AnimateShow(); DispatchMessages(); }
//客户端发来的数据 void GateModule::ClientData(const message& msg) { if (msg.size() == 0) return; user_id id(account_id::create(0)); id.set_socket_id(msg.get_socket_id()); if (DispatchMessages(id,msg,0)) { return; } auto pconn = m_Connections->find(msg.get_socket_id()); if (pconn == nullptr) { Log.trace("非法数据!"); return; } uint16_t msgID = *(uint16_t*)msg.data(); if (msgID > (uint16_t)EMsgID::MSG_MUST_HAVE_PLAYERID) { if (pconn->getplayer_id() == player_id()) { Log.trace("非法数据!"); return; } } UserContext ctx; ctx.accountid = pconn->getaccount_id(); ctx.playerid = pconn->getplayer_id(); msg.set_userdata((uint8_t*)&ctx,sizeof(ctx)); if (pconn->getscene_id() != 0) { //如果在玩家在场景模块中 则发送给场景模块 } else { if (m_WorldModule == 0) { m_WorldModule = GetOtherModule("world"); assert(m_WorldModule != 0); } //否则发送给 world 模块 } }
void GateModule::ActorData(const message& msg) { UserContext ctx = get_userdata<UserContext>(msg); if (ctx.receiver_echo_id != 0) { HandlerEchoMessage(ctx.receiver_echo_id, msg); return; } user_id userid; userid.set_account_id( account_id::create(ctx.accountid)); userid.set_player_id(player_id::create(ctx.playerid)); userid.set_socket_id(socket_id::create(msg.get_socket_id())); if (DispatchMessages(userid,msg,ctx.sender_echo_id)) { return; } }
void UBusServer::SendMessageFull(std::string const& message_name, glib::Variant const& args, glib::Source::Priority prio) { // queue the message msg_queue_.insert(std::pair<int, std::pair<std::string, glib::Variant>>(prio, std::make_pair(message_name, args))); // start the source (if not already running) auto src_nick = std::to_string(static_cast<int>(prio)); auto src_ptr = source_manager_.GetSource(src_nick); if (!src_ptr) { source_manager_.Add(new glib::Idle([this, prio] () { return DispatchMessages(prio); }, prio)); } }
void AppController::GameControllerQuitCurrentLevel() { hdAssert(gameController != NULL); hdAssert(gameController->GetCurrentLevel() != NULL); hdAssert(m_levelPickerWorld != NULL); FreeMemory(); // Show the level picker controller. EnsureLevelPickerController(); InitLevelPickerWorld(); levelPickerController->PanToNewLevelBlock(); activeController = levelPickerController; activeController->AnimateShow(); // Free up the game controller resources delete gameController; gameController = NULL; DispatchMessages(); }
void AppController::LevelPickerControllerLevelClicked() { hdAssert(levelPickerController != NULL); hdAssert(levelPickerController->GetSelectedLevel() != NULL); FreeMemory(); m_levelId = levelPickerController->GetSelectedLevelId(); delete levelPickerController; levelPickerController = NULL; InitLevelPickerWorld(); m_selectedLevelPickerLevel = m_levelPickerWorld->GetLevels()[m_levelId]; EnsureGameController(); gameController->InitLevel(m_selectedLevelPickerLevel, m_levelId); gameController->SetLevelStats(GetStatsForLevel(m_levelPickerWorld, m_selectedLevelPickerLevel)); activeController = gameController; gameController->AnimateShow(); DispatchMessages(); }
VuPendingSendQueue::~VuPendingSendQueue(){ DispatchMessages(-1, TRUE); }