예제 #1
0
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);
}