Exemplo n.º 1
0
// ----------------------------------------------------------------------------
//
void ScenePixelAnimator::initAnimation( AnimationTask* task, DWORD time_ms, BYTE* dmx_packet )
{
    m_animation_task = task;
    m_channel_animations.clear();

    typedef std::vector<Participant> ParticipantArray;

    ParticipantArray participants;

    // Determine which channels will be participating
    for ( UID actor_uid : populateActors() ) {
        Fixture* pf = m_animation_task->getActorRepresentative( actor_uid );
        if ( pf->getNumPixels() > 0 ) {
            participants.push_back( Participant( actor_uid, pf->getPixels() ) );
        }
    }

    if ( participants.size() > 0 ) {
        PixelEngine engine;

        if ( m_combine_fixtures ) {
            for ( Participant& p : participants )
                engine.loadPixels( p.m_actor_uid, p.m_pixels );

            generateEffect( engine );
        }
        else {
            for ( Participant& p : participants ) {
                engine.clear();
                engine.loadPixels( p.m_actor_uid, p.m_pixels );
                generateEffect( engine );
            }
        }
    }

    SceneChannelAnimator::initAnimation( task, time_ms, dmx_packet );
}