void SnapManager::Reinit() { int snapTo = mProject->GetSnapTo(); double rate = mProject->GetRate(); wxString format = mProject->GetSelectionFormat(); // No need to reinit if these are still the same if (snapTo == mSnapTo && rate == mRate && format == mFormat) { return; } // Save NEW settings mSnapTo = snapTo; mRate = rate; mFormat = format; mSnapPoints.clear(); // Grab time-snapping prefs (unless otherwise requested) mSnapToTime = false; // Look up the format string if (mSnapTo != SNAP_OFF && !mNoTimeSnap) { mSnapToTime = true; mConverter.SetSampleRate(mRate); mConverter.SetFormatName(mFormat); } // Add a SnapPoint at t=0 mSnapPoints.push_back(SnapPoint{}); TrackListConstIterator iter(mTracks); for (const Track *track = iter.First(); track; track = iter.Next()) { if (mTrackExclusions && mTrackExclusions->end() != std::find(mTrackExclusions->begin(), mTrackExclusions->end(), track)) { continue; } if (track->GetKind() == Track::Label) { LabelTrack *labelTrack = (LabelTrack *)track; for (int i = 0, cnt = labelTrack->GetNumLabels(); i < cnt; ++i) { const LabelStruct *label = labelTrack->GetLabel(i); const double t0 = label->getT0(); const double t1 = label->getT1(); CondListAdd(t0, labelTrack); if (t1 != t0) { CondListAdd(t1, labelTrack); } } } else if (track->GetKind() == Track::Wave) { auto waveTrack = static_cast<const WaveTrack *>(track); for (const auto &clip: waveTrack->GetClips()) { if (mClipExclusions) { bool skip = false; for (size_t j = 0, cnt = mClipExclusions->size(); j < cnt; ++j) { if ((*mClipExclusions)[j].track == waveTrack && (*mClipExclusions)[j].clip == clip.get()) { skip = true; break; } } if (skip) { continue; } } CondListAdd(clip->GetStartTime(), waveTrack); CondListAdd(clip->GetEndTime(), waveTrack); } } #ifdef USE_MIDI else if (track->GetKind() == Track::Note) { CondListAdd(track->GetStartTime(), track); CondListAdd(track->GetEndTime(), track); } #endif } // Sort all by time std::sort(mSnapPoints.begin(), mSnapPoints.end()); }
void Boss::UpdateBoss() { int x = GetTimerAttack(); if( x >= BOSS_ATTACK_START || HeadsComing == true ) { HeadsComing = true; AnimPaceBoss++; HeadTimer++; SetState( BOSS_ATTACK ); if( AnimPaceBoss >= ANIMPACEBOSSHEAD ) { UpdateFrame(); AnimPaceBoss = 0; } ResetAttackTimer(); if( HeadTimer >= 20 ) { if( HeadAnimation == true ) { HeadTimer = 0; My_BossHead.push_back( CreateBossHeads( xPos, yPos + 10, surface, 20 * SizeHeads )); SizeHeads++; } if( GetFrame() >= 4 ) { HeadAnimation = true; SetFrame( BOSS_IDLE ); } } if( SizeHeads == 6 ) { HeadsComing = false; SetFrame( BOSS_IDLE ); SizeHeads = 1; } } else { SetFrame( BOSS_IDLE ); UpdateAttackTimer(); } //sanity check switch( GetState() ) { case BOSS_IDLE: { SDL_BlitSurface( gamestate.GetSurface( surface ), &GetClips( GetFrame() ), gamestate.screen, &ReturnDestRect() ); } case BOSS_ATTACK: { SDL_BlitSurface( gamestate.GetSurface( surface ), &GetClips( GetFrame() ), gamestate.screen, &ReturnDestRect() ); } case BOSS_DIE: { SDL_BlitSurface( gamestate.GetSurface( surface ), &GetClips( GetFrame() ), gamestate.screen, &ReturnDestRect() ); } } UpdateHeads(); }