void SimpleSkeletalAnimatedObject_cl::ListenToEvents() { // start a simple skeletalanimation VSmartPtr<VisSkeletalAnimControl_cl> spAnimControl = VisAnimConfig_cl::StartSkeletalAnimation( this, "Walk", VANIMCTRL_LOOP|VSKELANIMCTRL_DEFAULTS); spAnimControl->SetSpeed(0.5f); // register two animation events (time: when feet touch floor) VisAnimEventList_cl *pEventList = spAnimControl->GetEventList(); pEventList->AddEvent(0.26f, m_iAnimEventFootStepRight); pEventList->AddEvent(0.76f, m_iAnimEventFootStepLeft); spAnimControl->AddEventListener(this); }
void VAnimationComponent::AddEndEvent(const char * szEventName, bool bAutoRemove) { if(m_pAnimCtrl) { //get the current event list VisAnimEventList_cl* pControlEventList = m_pAnimCtrl->GetEventList(); if(!pControlEventList) return; //get or create anim event int iEventId = Vision::Animations.LookUpEvent(szEventName); if(!iEventId) iEventId = Vision::Animations.RegisterEvent(szEventName); float fLength = pControlEventList->GetSequenceLength(); pControlEventList->RemoveEvent(fLength, iEventId); //just to be sure... pControlEventList->AddEvent(fLength, iEventId, bAutoRemove); } }
void AnimatedWarrior_cl::SetupAnimations() { m_bModelValid = false; VDynamicMesh *pMesh = GetMesh(); VVERIFY_OR_RET(pMesh); VisAnimEventList_cl *pEventList = NULL; // idle animations m_spSkeletalSequenceList[ANIMID_IDLE] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Idle", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_IDLE]); m_spSkeletalSequenceList[ANIMID_IDLE_TORCH] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Idle_Look_Torch", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_IDLE_TORCH]); // run animation m_spSkeletalSequenceList[ANIMID_RUN] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Run", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_RUN]); pEventList = m_spSkeletalSequenceList[ANIMID_RUN]->GetEventList(); pEventList->AddEvent(0.0f, EVENT_ANIM_LEGSPARALLEL_FIRSTTIME); pEventList->AddEvent(0.396f, EVENT_ANIM_LEGSPARALLEL_SECONDTIME); // run with torch animation m_spSkeletalSequenceList[ANIMID_RUN_TORCH] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Run_Torch", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_RUN_TORCH]); pEventList = m_spSkeletalSequenceList[ANIMID_RUN_TORCH]->GetEventList(); pEventList->AddEvent(0.0f, EVENT_ANIM_LEGSPARALLEL_FIRSTTIME); pEventList->AddEvent(0.396f, EVENT_ANIM_LEGSPARALLEL_SECONDTIME); // walk animation m_spSkeletalSequenceList[ANIMID_WALK] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Walk", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_WALK]); pEventList = m_spSkeletalSequenceList[ANIMID_WALK]->GetEventList(); pEventList->AddEvent(0.0f, EVENT_ANIM_LEGSPARALLEL_FIRSTTIME); pEventList->AddEvent(0.495f, EVENT_ANIM_LEGSPARALLEL_SECONDTIME); // walk with torch animation m_spSkeletalSequenceList[ANIMID_WALK_TORCH] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Walk_Torch", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_WALK_TORCH]); pEventList = m_spSkeletalSequenceList[ANIMID_WALK_TORCH]->GetEventList(); pEventList->AddEvent(0.0f, EVENT_ANIM_LEGSPARALLEL_FIRSTTIME); pEventList->AddEvent(0.495f, EVENT_ANIM_LEGSPARALLEL_SECONDTIME); // turn animation m_spSkeletalSequenceList[ANIMID_TURN] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Turn", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_TURN]); // turn with torch animation m_spSkeletalSequenceList[ANIMID_TURN_TORCH] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Turn_Torch", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_TURN_TORCH]); // walk backwards animation m_spSkeletalSequenceList[ANIMID_WALKBACKWARDS] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Run_BWD_V2", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_WALKBACKWARDS]); // walk backwards with torch animation m_spSkeletalSequenceList[ANIMID_WALKBACKWARDS_TORCH] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Run_BWD_Torch_V2", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_WALKBACKWARDS_TORCH]); // upper body animations (torch) m_spSkeletalSequenceList[ANIMID_UPPERBODY_ARM] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Draw_Dagger", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_UPPERBODY_ARM]); m_spSkeletalSequenceList[ANIMID_UPPERBODY_ARM]->RemoveOffsetDeltaTrack(); pEventList = m_spSkeletalSequenceList[ANIMID_UPPERBODY_ARM]->GetEventList(); pEventList->AddEvent(m_spSkeletalSequenceList[ANIMID_UPPERBODY_ARM]->GetLength(), EVENT_ANIM_UPPERBODY_ARMING_FINISHED); m_spSkeletalSequenceList[ANIMID_UPPERBODY_DISARM] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Holster_Dagger", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_UPPERBODY_DISARM]); m_spSkeletalSequenceList[ANIMID_UPPERBODY_DISARM]->RemoveOffsetDeltaTrack(); pEventList = m_spSkeletalSequenceList[ANIMID_UPPERBODY_DISARM]->GetEventList(); pEventList->AddEvent(m_spSkeletalSequenceList[ANIMID_UPPERBODY_DISARM]->GetLength(), EVENT_ANIM_UPPERBODY_DISARMING_FINISHED); m_spSkeletalSequenceList[ANIMID_UPPERBODY_ATTACK] = (VisSkeletalAnimSequence_cl*)pMesh->GetSequence("Strike_Dagger", VIS_MODELANIM_SKELETAL); VVERIFY_OR_RET(m_spSkeletalSequenceList[ANIMID_UPPERBODY_ATTACK]); m_spSkeletalSequenceList[ANIMID_UPPERBODY_ATTACK]->RemoveOffsetDeltaTrack(); pEventList = m_spSkeletalSequenceList[ANIMID_UPPERBODY_ATTACK]->GetEventList(); pEventList->AddEvent(m_spSkeletalSequenceList[ANIMID_UPPERBODY_ATTACK]->GetLength(), EVENT_ANIM_UPPERBODY_ATTACK_FINISHED); m_bModelValid = true; }