OpenBarnyard
 
Loading...
Searching...
No Matches
AToshiAnimationInterface Class Reference

#include <AToshiAnimationInterface.h>

Classes

struct  AnimEvent
 
struct  AnimEventList
 

Public Types

enum  ANIMEVENT_TYPE_ : ANIMEVENT_TYPE { ANIMEVENT_TYPE_START , ANIMEVENT_TYPE_END , ANIMEVENT_TYPE_BREAKPOINT }
 
using ANIMEVENT_TYPE = TINT32
 

Public Member Functions

 AToshiAnimationInterface ()
 
 ~AToshiAnimationInterface ()
 
void Update (TFLOAT a_fDeltaTime, AnimEventList &a_rEventList)
 
AToshiAnimationRefPlayAnim (const Toshi::TPString8 &a_strName, TFLOAT a_fWeight, TBOOL a_bCreateNewRef)
 
TBOOL StopAnim (const AToshiAnimationRef &a_rAnimationRef)
 
TBOOL StopAnim (const AToshiAnimationRef &a_rAnimationRef, ANamedAnimationTransition *a_pTransition)
 
void KillAllAnimations ()
 
TBOOL SetAnimationTransition (AToshiAnimationRef &a_rAnimationRef, ANamedAnimationTransition *a_pTransition)
 
void SetSkeletonInstance (Toshi::TSkeletonInstance *a_pInstance)
 
void SetAnimationSet (const ANamedAnimationSetRef &a_rcAnimationSet)
 
AToshiAnimationRefCreateAnimationRef (Toshi::T2DList< AToshiAnimationRef > &a_rList, ANamedAnimation *a_pAnimation, TFLOAT a_fWeight, ANamedAnimationTransition *a_pTransition)
 
AToshiAnimationRefCreateOverlayAnimationRef (ANamedAnimation *a_pAnimation, TFLOAT a_fWeight)
 
Toshi::TAnimation * GetAnimation (const AToshiAnimationRef &a_rAnimRef)
 
ANamedAnimationSetRef GetAnimationSet ()
 
AToshiAnimationRefFindAnimationRef (const Toshi::TPString8 &a_strName)
 

Static Public Attributes

static constexpr TSIZE MAX_NUM_ANIMATIONS = 20
 

Detailed Description

Definition at line 34 of file AToshiAnimationInterface.h.

Member Typedef Documentation

◆ ANIMEVENT_TYPE

Member Enumeration Documentation

◆ ANIMEVENT_TYPE_

Enumerator
ANIMEVENT_TYPE_START 
ANIMEVENT_TYPE_END 
ANIMEVENT_TYPE_BREAKPOINT 

Definition at line 40 of file AToshiAnimationInterface.h.

Constructor & Destructor Documentation

◆ AToshiAnimationInterface()

AToshiAnimationInterface::AToshiAnimationInterface ( )

Definition at line 44 of file AToshiAnimationInterface.cpp.

45 : m_pSkeletonInstance( TNULL )
46 , m_fTime( 0.0f )
47 , m_Unk2( 0 )
48 , m_eFlags( 0 )
49{
50}
#define TNULL
Definition Typedefs.h:23

◆ ~AToshiAnimationInterface()

AToshiAnimationInterface::~AToshiAnimationInterface ( )

Definition at line 53 of file AToshiAnimationInterface.cpp.

54{
55 DestroyAnimReferences();
56}

Member Function Documentation

◆ CreateAnimationRef()

AToshiAnimationRef * AToshiAnimationInterface::CreateAnimationRef ( Toshi::T2DList< AToshiAnimationRef > & a_rList,
ANamedAnimation * a_pAnimation,
TFLOAT a_fWeight,
ANamedAnimationTransition * a_pTransition )

Definition at line 544 of file AToshiAnimationInterface.cpp.

545{
546 if ( !GetAnimationRef( m_llAnimRefs, a_pAnimation->GetName() ) &&
547 !GetAnimationRef( m_llOverlayAnimRefs, a_pAnimation->GetName() ) &&
548 !( a_pAnimation->GetFlags() & ANamedAnimation::FLAGS_NO_ANIM_REF ) )
549 {
550 AToshiAnimationRef* pAnimRef = g_oAnimationRefPool.NewObject();
551 PlayAnimImpl( a_pAnimation, a_fWeight, a_pTransition, *pAnimRef );
552 a_rList.PushBack( pAnimRef );
553
554 return pAnimRef;
555 }
556
557 return TNULL;
558}
Toshi::T2ObjectPool< AToshiAnimationRef, 100 > g_oAnimationRefPool
FLAGS GetFlags() const
const Toshi::TPString8 & GetName() const

◆ CreateOverlayAnimationRef()

AToshiAnimationRef * AToshiAnimationInterface::CreateOverlayAnimationRef ( ANamedAnimation * a_pAnimation,
TFLOAT a_fWeight )

Definition at line 561 of file AToshiAnimationInterface.cpp.

562{
563 AToshiAnimationRef* pAnimRef;
564 ANamedAnimationTransition* pTransition = TNULL;
565 GetAnimationTransition( m_llAnimRefs, a_pAnimation->GetName(), pAnimRef, pTransition );
566
567 return CreateAnimationRef( m_llOverlayAnimRefs, a_pAnimation, a_fWeight, pTransition );
568}
AToshiAnimationRef * CreateAnimationRef(Toshi::T2DList< AToshiAnimationRef > &a_rList, ANamedAnimation *a_pAnimation, TFLOAT a_fWeight, ANamedAnimationTransition *a_pTransition)

◆ FindAnimationRef()

AToshiAnimationRef * AToshiAnimationInterface::FindAnimationRef ( const Toshi::TPString8 & a_strName)

Definition at line 533 of file AToshiAnimationInterface.cpp.

534{
535 AToshiAnimationRef* pAnimRef = TNULL;
536
537 pAnimRef = GetAnimationRef( m_llAnimRefs, a_strName );
538 if ( !pAnimRef ) pAnimRef = GetAnimationRef( m_llOverlayAnimRefs, a_strName );
539
540 return pAnimRef;
541}

◆ GetAnimation()

TAnimation * AToshiAnimationInterface::GetAnimation ( const AToshiAnimationRef & a_rAnimRef)

Definition at line 571 of file AToshiAnimationInterface.cpp.

572{
573 return ( a_rAnimRef.GetNamedAnimation() ) ? m_pSkeletonInstance->GetAnimation( a_rAnimRef.GetSequenceId() ) : TNULL;
574}
ANamedAnimation * GetNamedAnimation() const

◆ GetAnimationSet()

ANamedAnimationSetRef AToshiAnimationInterface::GetAnimationSet ( )

Definition at line 528 of file AToshiAnimationInterface.cpp.

529{
530 return m_pAnimationSet;
531}

◆ KillAllAnimations()

void AToshiAnimationInterface::KillAllAnimations ( )

Definition at line 501 of file AToshiAnimationInterface.cpp.

502{
503 DestroyAnimReferences();
504
505 TVALIDPTR( m_pSkeletonInstance );
506 m_pSkeletonInstance->RemoveAllAnimations();
507}
#define TVALIDPTR(PTR)
Definition Defines.h:139

◆ PlayAnim()

AToshiAnimationRef * AToshiAnimationInterface::PlayAnim ( const Toshi::TPString8 & a_strName,
TFLOAT a_fWeight,
TBOOL a_bCreateNewRef )

Definition at line 79 of file AToshiAnimationInterface.cpp.

80{
81 // Check if this animation is not already playing
82 AToshiAnimationRef* pAnimRef = FindAnimationRef( a_strName );
83 pAnimRef = FindAnimationRef( a_strName ); // ???
84
85 if ( pAnimRef )
86 {
87 // Get internal (exported) name of the playing animation
88 TPString8 strPlayingName = pAnimRef->GetNamedAnimation()->GetExportedName();
89 ANamedAnimation* pNamedAnimation = GetAnimationSet()->GetNamedAnimation( a_strName );
90 TVALIDPTR( pNamedAnimation );
91
92 TPString8 strAnimationName = pNamedAnimation->GetExportedName();
93
94 if ( strAnimationName == strPlayingName )
95 {
96 // This animation is already playing
97 return pAnimRef;
98 }
99 }
100
101 // Get info about the animation and play it
102 ANamedAnimation* pNamedAnimation = GetAnimationSet()->GetNamedAnimation( a_strName );
103 TVALIDPTR( pNamedAnimation );
104
105 // Adjust playing parameters
106 TFLOAT fWeight = ( a_fWeight < 0.0f ) ? pNamedAnimation->GetDefaultWeight() : a_fWeight;
107
108 // Create overlay animation
109 if ( pNamedAnimation->IsOverlay() )
110 return CreateOverlayAnimationRef( pNamedAnimation, fWeight );
111
112 // Create new animation if there are no other animations
113 if ( m_llAnimRefs.IsEmpty() || m_llAnimRefs.Begin() == TNULL )
114 return CreateAnimationRef( m_llAnimRefs, pNamedAnimation, fWeight, TNULL );
115
116 // Create new animation if client asked
117 if ( a_bStartNewAnimation )
118 return CreateAnimationRef( m_llAnimRefs, pNamedAnimation, fWeight, TNULL );
119
120 // Client didn't require starting new animation and some animations are already playing...
121 ANamedAnimationTransition* pTransition;
122 TBOOL bHasTransition = GetAnimationTransition( m_llAnimRefs, a_strName, pAnimRef, pTransition );
123
124 if ( bHasTransition )
125 {
126 // Transition of this animation already exists
127 SetAnimationTransition( *pAnimRef, pTransition );
128 pAnimRef->SetWeight( fWeight );
129
130 StopAnim( *pAnimRef );
131 return TNULL;
132 }
133
134 // There's currently no transition of this animation
135 pAnimRef = m_llAnimRefs.Head();
136 ANamedAnimation* pCurrentAnimation = pAnimRef->GetNamedAnimation();
137
138 // Set transition settings
139 m_oAnimTransition.SetManaged( !pCurrentAnimation->IsFinishManual() );
140 m_oAnimTransition.SetBlendInTime( pNamedAnimation->GetDefaultBlendInTime() );
141 m_oAnimTransition.SetBlendOutTime( pCurrentAnimation->GetDefaultBlendOutTime() );
142 m_oAnimTransition.SetAnimationName( pNamedAnimation->GetName() );
143 SetAnimationTransition( *pAnimRef, &m_oAnimTransition );
144
145 pAnimRef->SetWeight( fWeight );
146 StopAnim( *pAnimRef );
147
148 return TNULL;
149}
float TFLOAT
Definition Typedefs.h:4
bool TBOOL
Definition Typedefs.h:6
TFLOAT GetDefaultBlendOutTime() const
TBOOL IsFinishManual() const
const Toshi::TPString8 & GetExportedName() const
TFLOAT GetDefaultWeight() const
TFLOAT GetDefaultBlendInTime() const
TBOOL IsOverlay() const
void SetWeight(TFLOAT a_fWeight)
AToshiAnimationRef * FindAnimationRef(const Toshi::TPString8 &a_strName)
TBOOL SetAnimationTransition(AToshiAnimationRef &a_rAnimationRef, ANamedAnimationTransition *a_pTransition)
TBOOL StopAnim(const AToshiAnimationRef &a_rAnimationRef)
AToshiAnimationRef * CreateOverlayAnimationRef(ANamedAnimation *a_pAnimation, TFLOAT a_fWeight)
ANamedAnimationSetRef GetAnimationSet()

◆ SetAnimationSet()

void AToshiAnimationInterface::SetAnimationSet ( const ANamedAnimationSetRef & a_rcAnimationSet)
inline

Definition at line 97 of file AToshiAnimationInterface.h.

97{ m_pAnimationSet = a_rcAnimationSet; }

◆ SetAnimationTransition()

TBOOL AToshiAnimationInterface::SetAnimationTransition ( AToshiAnimationRef & a_rAnimationRef,
ANamedAnimationTransition * a_pTransition )

Definition at line 510 of file AToshiAnimationInterface.cpp.

511{
512 a_rAnimationRef.m_pTransition = a_pTransition;
513 ANamedAnimation* pNamedAnimation = a_rAnimationRef.m_pNamedAnimation;
514
515 if ( pNamedAnimation )
516 {
517 if ( TAnimation* pAnimation = m_pSkeletonInstance->GetAnimation( a_rAnimationRef.GetSequenceId() ) )
518 {
519 pAnimation->SetBlendOutSpeed( a_pTransition ? a_pTransition->GetBlendOutTime() : 0.0f );
520 return TTRUE;
521 }
522 }
523
524 return TTRUE;
525}
#define TTRUE
Definition Typedefs.h:25

◆ SetSkeletonInstance()

void AToshiAnimationInterface::SetSkeletonInstance ( Toshi::TSkeletonInstance * a_pInstance)
inline

Definition at line 96 of file AToshiAnimationInterface.h.

96{ m_pSkeletonInstance = a_pInstance; }

◆ StopAnim() [1/2]

TBOOL AToshiAnimationInterface::StopAnim ( const AToshiAnimationRef & a_rAnimationRef)

Definition at line 442 of file AToshiAnimationInterface.cpp.

443{
444 ANamedAnimation* pNamedAnimation = a_rcAnimationRef.m_pNamedAnimation;
445 if ( !pNamedAnimation ) return TFALSE;
446
447 TAnimation* pAnimation = m_pSkeletonInstance->GetAnimation( a_rcAnimationRef.GetSequenceId() );
448 if ( !pAnimation ) return TFALSE;
449
450 ANamedAnimationTransition* pTransition = a_rcAnimationRef.m_pTransition;
451
452 if ( !pNamedAnimation || ( !pTransition && ( pTransition = pNamedAnimation->GetTransitionSet().GetDestTransition(), pTransition == TNULL ) ) )
453 {
454 if ( !pNamedAnimation->IsFinishManual() )
455 {
456 pAnimation->ChangeToManaged( pAnimation->GetBlendOutSpeed() );
457 return TTRUE;
458 }
459 }
460 else
461 {
462 if ( pTransition->IsManaged() )
463 {
464 pAnimation->ChangeToManaged( pAnimation->GetBlendOutSpeed() );
465 return TTRUE;
466 }
467
468 // Yeah, that's how this thing is in the original.
469 if ( pTransition->IsManaged() != TFALSE )
470 {
471 return TTRUE;
472 }
473 }
474
475 // It will never get here
476 TASSERT( TFALSE );
477 pAnimation->RemoveAnimation( pAnimation->GetBlendOutSpeed() );
478 return TTRUE;
479}
#define TASSERT(X,...)
Definition Defines.h:138
#define TFALSE
Definition Typedefs.h:24
TFLOAT GetBlendOutSpeed() const
Definition TAnimation.h:73
void ChangeToManaged(TFLOAT a_fBlendOutSpeed)
void RemoveAnimation(TFLOAT a_fVal)
ANamedAnimationTransition * GetDestTransition()
ANamedAnimationTransitionSet & GetTransitionSet()

◆ StopAnim() [2/2]

TBOOL AToshiAnimationInterface::StopAnim ( const AToshiAnimationRef & a_rAnimationRef,
ANamedAnimationTransition * a_pTransition )

Definition at line 482 of file AToshiAnimationInterface.cpp.

483{
484 ANamedAnimation* pNamedAnimation = a_rcAnimationRef.m_pNamedAnimation;
485 if ( !pNamedAnimation ) return TFALSE;
486
487 if ( TAnimation* pAnimation = m_pSkeletonInstance->GetAnimation( a_rcAnimationRef.GetSequenceId() ) )
488 {
489 if ( a_pTransition->IsManaged() )
490 pAnimation->ChangeToManaged( pAnimation->GetBlendOutSpeed() );
491 else
492 pAnimation->RemoveAnimation( pAnimation->GetBlendOutSpeed() );
493
494 return TTRUE;
495 }
496
497 return TFALSE;
498}

◆ Update()

void AToshiAnimationInterface::Update ( TFLOAT a_fDeltaTime,
AnimEventList & a_rEventList )

Definition at line 59 of file AToshiAnimationInterface.cpp.

60{
61 TFLOAT fOldTime = m_fTime;
62 m_fTime += a_fDeltaTime;
63
64 UpdateAnimations( m_llAnimRefs, a_fDeltaTime, a_rEventList );
65 UpdateAnimations( m_llOverlayAnimRefs, a_fDeltaTime, a_rEventList );
66
67 if ( fOldTime == 0.0f || m_fTime == 0.0f )
68 {
69 // Some animation has just started playing, update flags
70
71 if ( IsAllStatic() )
72 m_eFlags |= 1;
73 else
74 m_eFlags &= ~1;
75 }
76}

Member Data Documentation

◆ MAX_NUM_ANIMATIONS

TSIZE AToshiAnimationInterface::MAX_NUM_ANIMATIONS = 20
staticconstexpr

Definition at line 37 of file AToshiAnimationInterface.h.


The documentation for this class was generated from the following files: