bool FAnimMontageInstance::SetNextSectionID(int32 const & SectionID, int32 const & NewNextSectionID) { bool const bHasValidNextSection = NextSections.IsValidIndex(SectionID); // disconnect prev section if (bHasValidNextSection && (NextSections[SectionID] != INDEX_NONE) && PrevSections.IsValidIndex(NextSections[SectionID])) { PrevSections[NextSections[SectionID]] = INDEX_NONE; } // update in-reverse next section if (PrevSections.IsValidIndex(NewNextSectionID)) { PrevSections[NewNextSectionID] = SectionID; } // update next section for the SectionID // NextSection can be invalid if (bHasValidNextSection) { NextSections[SectionID] = NewNextSectionID; OnMontagePositionChanged(GetSectionNameFromID(NewNextSectionID)); return true; } UE_LOG(LogAnimation, Warning, TEXT("SetNextSectionName %s to %s failed for Montage %s"), *GetSectionNameFromID(SectionID).ToString(), *GetSectionNameFromID(NewNextSectionID).ToString(), *GetNameSafe(Montage)); return false; }
void UAnimInstance::Montage_SetNextSection(FName SectionNameToChange, FName NextSection) { FAnimMontageInstance * CurMontageInstance = GetActiveMontageInstance(); if ( CurMontageInstance && CurMontageInstance->ChangeNextSection(SectionNameToChange, NextSection) == false ) { UE_LOG(LogAnimation, Warning, TEXT("Changing section from %s to %s failed for Montage (%s) "), *SectionNameToChange.ToString(), *NextSection.ToString(), *CurMontageInstance->Montage->GetName() ); } else { OnMontagePositionChanged(CurMontageInstance, NextSection); } }
void UAnimInstance::Montage_JumpToSectionsEnd(FName SectionName) { FAnimMontageInstance * CurMontageInstance = GetActiveMontageInstance(); if ( CurMontageInstance && CurMontageInstance->ChangePositionToSection(SectionName, CurMontageInstance->PlayRate >= 0.0f) == false ) { UE_LOG(LogAnimation, Warning, TEXT("Jumping section to %s failed for Montage (%s) "), *SectionName.ToString(), *CurMontageInstance->Montage->GetName() ); } else { OnMontagePositionChanged(CurMontageInstance, SectionName); } }
bool FAnimMontageInstance::JumpToSectionName(FName const & SectionName, bool bEndOfSection) { const int32 SectionID = Montage->GetSectionIndex(SectionName); if (Montage->IsValidSectionIndex(SectionID)) { FCompositeSection & CurSection = Montage->GetAnimCompositeSection(SectionID); Position = Montage->CalculatePos(CurSection, bEndOfSection ? Montage->GetSectionLength(SectionID) - KINDA_SMALL_NUMBER : 0.0f); OnMontagePositionChanged(SectionName); return true; } UE_LOG(LogAnimation, Warning, TEXT("JumpToSectionName %s bEndOfSection: %d failed for Montage %s"), *SectionName.ToString(), bEndOfSection, *GetNameSafe(Montage)); return false; }