void StageBuilder::addFrame(PlayerSet &players, ToonzScene *scene, TXsheet *xsh, int row, int level, bool includeUnvisible, bool checkPreviewVisibility) { int columnCount = xsh->getColumnCount(); unsigned int maskCount = m_masks.size(); std::vector<std::pair<double, int>> shuffle; for (int c = 0; c < columnCount; c++) { TXshColumnP column = xsh->getColumn(c); assert(column); TStageObject *pegbar = xsh->getStageObject(TStageObjectId::ColumnId(c)); double columnSO = pegbar->getSO(row); shuffle.push_back(std::make_pair(columnSO, c)); } std::stable_sort(shuffle.begin(), shuffle.end(), StackingOrder()); for (int i = 0; i < columnCount; i++) { int c = shuffle[i].second; if (CameraTestCheck::instance()->isEnabled() && c != m_currentColumnIndex) continue; if (level == 0) { // m_isCurrentColumn = (c == m_currentColumnIndex); m_ancestorColumnIndex = c; } TXshColumn *column = xsh->getColumn(c); bool isMask = false; if (column && !column->isEmpty()) { if (!column->isPreviewVisible() && checkPreviewVisibility) continue; if (column->isCamstandVisible() || includeUnvisible) // se l'"occhietto" non e' chiuso { if (column->isMask()) // se e' una maschera (usate solo in tab pro) { isMask = true; std::vector<int> saveMasks; saveMasks.swap(m_masks); int maskIndex = m_maskPool.size(); PlayerSet *mask = new PlayerSet(); m_maskPool.push_back(mask); addCellWithOnionSkin(*mask, scene, xsh, row, c, level); std::stable_sort(mask->begin(), mask->end(), PlayerLt()); saveMasks.swap(m_masks); m_masks.push_back(maskIndex); } else addCellWithOnionSkin(players, scene, xsh, row, c, level); } } if (!isMask) { while (m_masks.size() > maskCount) m_masks.pop_back(); } } if (level == 0) std::stable_sort(players.begin(), players.end(), PlayerLt()); }
PlayerSet PlayerMapHelper::GetAllSet() const { PlayerSet ret; //if (Player::GetSharedState().amountChanged) { for (const auto& pair : m_playerMap) { ret.insert(pair.second); } //Player::GetSharedState().amountChanged = false; } return ret; }
PlayerSet PlayerMapHelper::GetByTeamSet(char team) const { PlayerSet ret; for (const auto& pair : m_playerMap) { Player* pl = pair.second; if (pl->GetTeamTag() == team) { ret.insert(pl); } } return ret; }
void StageBuilder::visit(PlayerSet &players, Visitor &visitor, bool isPlaying) { std::vector<int> masks; int m = players.size(); int h = 0; for (; h < m; h++) { Player &player = players[h]; unsigned int i = 0; // vale solo per TAB pro for (; i < masks.size() && i < player.m_masks.size(); i++) if (masks[i] != player.m_masks[i]) break; // vale solo per TAB pro if (i < masks.size() || i < player.m_masks.size()) { while (i < masks.size()) { masks.pop_back(); visitor.disableMask(); } while (i < player.m_masks.size()) { int maskIndex = player.m_masks[i]; visitor.beginMask(); visit(*m_maskPool[maskIndex], visitor, isPlaying); visitor.endMask(); masks.push_back(maskIndex); visitor.enableMask(); i++; } } player.m_isPlaying = isPlaying; visitor.onImage(player); } // vale solo per TAB pro for (h = 0; h < (int)masks.size(); h++) visitor.disableMask(); }
void StageBuilder::addSimpleLevelFrame(PlayerSet &players, TXshSimpleLevel *level, const TFrameId &fid) { int index = -1; int row = level->guessIndex(fid); if (!m_onionSkinMask.isEmpty() && m_onionSkinMask.isEnabled()) { std::vector<int> rows; m_onionSkinMask.getAll(row, rows); std::vector<int>::iterator it = rows.begin(); while (it != rows.end() && *it < row) ++it; std::sort(rows.begin(), it, descending); m_onionSkinDistance = 0; int frontPos = 0, backPos = 0; for (int i = 0; i < (int)rows.size(); i++) { const TFrameId &fid2 = level->index2fid(rows[i]); if (fid2 == fid) continue; players.push_back(Player()); Player &player = players.back(); player.m_sl = level; player.m_frame = level->guessIndex(fid); player.m_fid = fid2; player.m_isCurrentColumn = true; player.m_isCurrentXsheetLevel = true; #ifdef NUOVO_ONION player.m_onionSkinDistance = rows[i] - row; #else player.m_onionSkinDistance = rows[i] - row < 0 ? --backPos : ++frontPos; #endif player.m_dpiAff = getDpiAffine(level, fid2); } } players.push_back(Player()); Player &player = players.back(); player.m_sl = level; player.m_frame = level->guessIndex(fid); player.m_fid = fid; if (!m_onionSkinMask.isEmpty() && m_onionSkinMask.isEnabled()) player.m_onionSkinDistance = 0; player.m_isCurrentColumn = true; player.m_isCurrentXsheetLevel = true; player.m_ancestorColumnIndex = -1; player.m_dpiAff = getDpiAffine(level, fid); }
PlayerSet PlayerMapHelper::GetByStatusSet(PlayerState::IngameStatus status) const { PlayerSet ret; //if (Player::GetSharedState().statusChanged) { for (const auto& pair : m_playerMap) { Player* pl = pair.second; if (pl->GetState().GetStatus() == status) { ret.insert(pl); } } //Player::GetSharedState().statusChanged = false; } return ret; }
PlayerSet PlayerMapHelper::GetByPhaseSet(PlayerState::GamePhase phase) const { PlayerSet ret; //if (Player::GetSharedState().phaseChanged) { for (const auto& pair : m_playerMap) { Player* pl = pair.second; if (pl->GetState().GetPhase() == phase) { ret.insert(pl); } } //Player::GetSharedState().phaseChanged = false; } return ret; }
void WorldPvPEP::HandleObjectiveComplete(PlayerSet m_sPlayersSet, uint32 uiEventId) { uint32 uiCredit = 0; switch(uiEventId) { case EVENT_CROWNGUARD_PROGRESS_ALLIANCE: case EVENT_CROWNGUARD_PROGRESS_HORDE: uiCredit = NPC_CROWNGUARD_TOWER_QUEST_DOODAD; break; case EVENT_EASTWALL_PROGRESS_ALLIANCE: case EVENT_EASTWALL_PROGRESS_HORDE: uiCredit = NPC_EASTWALL_TOWER_QUEST_DOODAD; break; case EVENT_NORTHPASS_PROGRESS_ALLIANCE: case EVENT_NORTHPASS_PROGRESS_HORDE: uiCredit = NPC_NORTHPASS_TOWER_QUEST_DOODAD; break; case EVENT_PLAGUEWOOD_PROGRESS_ALLIANCE: case EVENT_PLAGUEWOOD_PROGRESS_HORDE: uiCredit = NPC_PLAGUEWOOD_TOWER_QUEST_DOODAD; break; } if (!uiCredit) return; for(PlayerSet::iterator itr = m_sPlayersSet.begin(); itr != m_sPlayersSet.end(); ++itr) { if (!(*itr)) continue; (*itr)->KilledMonsterCredit(uiCredit); (*itr)->RewardHonor(NULL, 1, HONOR_REWARD_PLAGUELANDS); } }
void StageBuilder::dumpPlayerSet(PlayerSet &players, std::ostream &out) { out << "["; int m = players.size(); for (int i = 0; i < m; i++) { if (i > 0) out << " "; const Player &player = players[i]; out << "img"; if (!player.m_masks.empty()) { out << "(" << player.m_masks[0]; for (unsigned int j = 1; j < player.m_masks.size(); j++) out << "," << player.m_masks[j]; out << ")"; } } out << "]"; }