bool AnimationController::Play(const String& name, unsigned char layer, bool looped, float fadeInTime) { // Check if already exists unsigned index; AnimationState* state; FindAnimation(name, index, state); if (!state) { Animation* newAnimation = GetSubsystem<ResourceCache>()->GetResource<Animation>(name); state = AddAnimationState(newAnimation); if (!state) return false; } if (index == M_MAX_UNSIGNED) { AnimationControl newControl; Animation* animation = state->GetAnimation(); newControl.name_ = animation->GetName(); newControl.hash_ = animation->GetNameHash(); animations_.Push(newControl); index = animations_.Size() - 1; } state->SetLayer(layer); state->SetLooped(looped); animations_[index].targetWeight_ = 1.0f; animations_[index].fadeTime_ = fadeInTime; MarkNetworkUpdate(); return true; }
bool AnimationController::Play(const String& name, unsigned char layer, bool looped, float fadeInTime) { // Get the animation resource first to be able to get the canonical resource name // (avoids potential adding of duplicate animations) Animation* newAnimation = GetSubsystem<ResourceCache>()->GetResource<Animation>(name); if (!newAnimation) return false; // Check if already exists unsigned index; AnimationState* state; FindAnimation(newAnimation->GetName(), index, state); if (!state) { state = AddAnimationState(newAnimation); if (!state) return false; } if (index == M_MAX_UNSIGNED) { AnimationControl newControl; newControl.name_ = newAnimation->GetName(); newControl.hash_ = newAnimation->GetNameHash(); animations_.Push(newControl); index = animations_.Size() - 1; } state->SetLayer(layer); state->SetLooped(looped); animations_[index].targetWeight_ = 1.0f; animations_[index].fadeTime_ = fadeInTime; MarkNetworkUpdate(); return true; }
bool AnimationController::Play(const String& name, unsigned char layer, bool looped, float fadeInTime) { // ATOMIC BEGIN Animation* newAnimation = 0; // Check if we're using attached animation resource if (animation_.NotNull() && animation_->GetAnimationName() == name) { newAnimation = animation_; } else { for (unsigned i = 0; i < animationResources_.Size(); i++) { if (name == animationResources_[i]->GetAnimationName()) { newAnimation = animationResources_[i]; break; } } } // Get the animation resource first to be able to get the canonical resource name // (avoids potential adding of duplicate animations) if (!newAnimation) newAnimation = GetSubsystem<ResourceCache>()->GetResource<Animation>(name); if (!newAnimation) return false; // ATOMIC END // Check if already exists unsigned index; AnimationState* state; FindAnimation(newAnimation->GetName(), index, state); if (!state) { state = AddAnimationState(newAnimation); if (!state) return false; } if (index == M_MAX_UNSIGNED) { AnimationControl newControl; newControl.name_ = newAnimation->GetName(); newControl.hash_ = newAnimation->GetNameHash(); animations_.Push(newControl); index = animations_.Size() - 1; } state->SetLayer(layer); state->SetLooped(looped); animations_[index].targetWeight_ = 1.0f; animations_[index].fadeTime_ = fadeInTime; MarkNetworkUpdate(); return true; }