コード例 #1
0
ファイル: VTrack.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
// 
// VTrack::onControllerEvent( pEvent );
// 
// When the controller's state changes, this method is called. If the
// controller is reset the virtual method, onControllerReset is called.
// 
// For a full list of possible events, see the 'eControllerEventType'
// declaration in VController.h.
// 
//-----------------------------------------------------------------------------
bool VTrack::onControllerEvent( VController::eControllerEventType pEvent )
{
    if ( !getController() )
    {
        AssertFatal( false, "VTrack::onControllerEvent() - Invalid Controller." );
        return false;
    }

    // Enabled?
    if ( !isEnabled() )
    {
        // Continue Processing Events.
        return true;
    }

    switch( pEvent )
    {
        case VController::k_EventReset :
            {

                // Reset.
                onControllerReset( getControllerTime(), isControllerPlayingForward() );

            } break;
    }

    // Continue Processing Events.
    return true;
}
コード例 #2
0
ファイル: VEvent.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
// 
// VEvent::setTriggerTime( pTime );
// 
// Apply the given trigger time to the object.
// 
// If the project was built using the VT_EDITOR preprocessor argument, then
// the validity of the passed value is verified. It also cannot be changed
// while the controller is playing.
// 
//-----------------------------------------------------------------------------
void VEvent::setTriggerTime( const S32 &pTime )
{
#ifdef VT_EDITOR

    VTrack *track = getTrack();
    if ( !track )
    {
        // Apply Time.
        mTriggerTime = pTime;

        return;
    }

    if ( track->isControllerPlaying() )
    {
        // Don't Change While Playing.
        return;
    }

    /*
    // Check For Overlap.
    for ( ITreeNode *node = mChildNode; node != NULL; node = node->mSiblingNextNode )
    {
        VEvent *event = ( VEvent* )node;
        if ( event == this )
        {
            // Skip.
            continue;
        }

        const U32 startTime  = getStartTime();
        const U32 finishTime = getFinishTime();

        if ( ( pTime > startTime && pTime < finishTime )
             || ( ( pTime + mDuration ) > startTime && ( pTime + mDuration ) < finishTime )
             || ( pTime < startTime && ( pTime + mDuration ) > finishTime ) )
        {
            // Overlap!
            return;
        }
    }
    */

    // Apply Time.
    mTriggerTime = mClamp( pTime, 0, getControllerDuration() );

    // Sort Events.
    track->sort();

    // Reset Track.
    track->onControllerReset( getControllerTime(), isControllerPlayingForward() );

#else

    // Apply Time.
    mTriggerTime = pTime;

#endif
}
コード例 #3
0
ファイル: VTrack.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
// 
// VTrack::calclateInterp( pTime );
// 
// This method returns the interp time between or within events. If the given
// time is between two events, the return time is:
//
//     ( pTime - last_event_finish_time )
//                         / ( next_event_start_time - last_event_finish_time )
// 
// If the given time is within an event, the return time is:
//
//     ( pTime - event_start_time ) / ( event_duration )
//
// The value returned here is between 0.0 and 1.0.
// 
//-----------------------------------------------------------------------------
F32 VTrack::calculateInterp( S32 pTime )
{
    if ( !isControllerPlayingForward() )
    {
        return ( 1.f - _calculateInterp( pTime ) );
    }

    return _calculateInterp( pTime );
}
コード例 #4
0
ファイル: VFadeEvent.cpp プロジェクト: J0linar/Verve
//-----------------------------------------------------------------------------
//
// VFadeEvent::getFadeType();
//
// Returns the type of fade (in or out) that this event will use. Zero and Even
// indices will Fade Out, while Odd numbers will Fade In.
//
//-----------------------------------------------------------------------------
VFadeControl::eFadeType VFadeEvent::getFadeType( void )
{
    if ( !isControllerPlayingForward() )
    {
        return ( getIndex() % 2 == 0 ) ? VFadeControl::k_TypeOut : VFadeControl::k_TypeIn;
    }

    return ( getIndex() % 2 == 0 ) ? VFadeControl::k_TypeIn : VFadeControl::k_TypeOut;
}
コード例 #5
0
ファイル: VEvent.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
// 
// VEvent::getPreviousEvent();
// 
// Returns the previous event.
// 
//-----------------------------------------------------------------------------
VEvent *VEvent::getPreviousEvent( void )
{
    if ( !isControllerPlayingForward() )
    {
        return dynamic_cast<VEvent*>( mSiblingNextNode );
    }

    return dynamic_cast<VEvent*>( mSiblingPrevNode );
}
コード例 #6
0
ファイル: VTrack.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
// 
// VTrack::getPreviousEvent();
// 
// Returns the Event that the Track was last intergrating.
// 
//-----------------------------------------------------------------------------
VEvent *VTrack::getPreviousEvent( void )
{
    if ( mNextEvent )
    {
        return mNextEvent->getPreviousEvent();
    }

    if ( !isControllerPlayingForward() )
    {
        return dynamic_cast<VEvent*>( getChild() );
    }

    return dynamic_cast<VEvent*>( getLastChild() );
}
コード例 #7
0
ファイル: VMotionEvent.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
//
// VMotionTrack::getObjectSpeed();
// 
// Determine the Speed that an object must move at to travel over the segment
// length of the Path.
//
//-----------------------------------------------------------------------------
F32 VMotionEvent::getObjectSpeed( void )
{
    // Fetch Parent Track.
    VMotionTrack *track;
    if ( !getTrack( track ) )
    {
        // Invalid Track.
        return 0.f;
    }

    // Fetch Path & Reference Object.
    VTorque::PathObjectType  *path   = track->getPath();
    VTorque::SceneObjectType *object = getSceneObject();
    if ( !path || !object )
    {
        // Invalid Object(s).
        return 0.f;
    }

    // Fetch Node Index.
    const S32 &srcNodeIndex = getNodeIndex( ( isControllerPlayingForward() ) ? 0 : -1 );

    // Fetch the Next Event.
    VEvent *nextEvent = getNextEvent();

    // Valid Destination Node?
    if ( !isControllerLooping() && !nextEvent )
    {
        // No Next Node.
        return 0.f;
    }

    // Valid Next Node?
    if ( nextEvent )
    {
        // Fetch Segment Length & Duration.
        const F32 &length   = VTorque::getPathNodeLength( path, srcNodeIndex );
        const F32 &duration = mAbs( getTriggerTime() - nextEvent->getTriggerTime() );

        // Speed = Distance / Duration.
        return ( length / ( duration / 1000.f ) );
    }

    // Playing Forwards?
    if ( isControllerPlayingForward() )
    {
        // Fetch the First Event.
        VEvent *firstEvent = dynamic_cast<VEvent*>( track->getChild() );

        // Fetch Segment Length & Duration.
        const F32 &length   = VTorque::getPathNodeLength( path, srcNodeIndex );
        const F32 &duration = ( getControllerDuration() - getTriggerTime() ) + firstEvent->getTriggerTime();

        // Speed = Distance / Duration.
        return ( length / ( duration / 1000.f ) );
    }

    // Fetch the Last Event.
    VEvent *lastEvent = dynamic_cast<VEvent*>( track->getLastChild() );

    // Fetch Segment Length & Duration.
    const F32 &length   = VTorque::getPathNodeLength( path, srcNodeIndex );
    const F32 &duration = ( getControllerDuration() - lastEvent->getTriggerTime() ) + getTriggerTime();

    // Speed = Distance / Duration.
    return ( length / ( duration / 1000.f ) );
}
コード例 #8
0
ファイル: VEvent.cpp プロジェクト: AnteSim/Verve
//-----------------------------------------------------------------------------
// 
// VEvent::getFinishTime();
// 
// Returns the time, in milliseconds, that the event will cease updating.
// 
//-----------------------------------------------------------------------------
S32 VEvent::getFinishTime( void )
{
    return ( mTriggerTime + ( isControllerPlayingForward() * mDuration ) );
}