Blend duration can now be 0.0

This commit is contained in:
viktorljung
2016-03-04 02:24:13 +01:00
parent 1616fb20d1
commit 49802fed91
2 changed files with 49 additions and 3 deletions
+46 -1
View File
@@ -4,6 +4,7 @@ AnimationSystem::AnimationSystem(SystemParams params)
: System(params)
{
EVENT_SUBSCRIBE_MEMBER(m_EAutoAnimationBlend, &AnimationSystem::OnAutoAnimationBlend);
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &AnimationSystem::OnInputCommand);
}
void AnimationSystem::Update(double dt)
@@ -133,7 +134,12 @@ void AnimationSystem::UpdateWeights(double dt)
std::shared_ptr<BlendTree> blendTree = autoBlendQueue.second.GetBlendTree();
if (blendTree != nullptr) {
blendJob.BlendInfo.progress = glm::clamp(blendJob.CurrentTime / blendJob.Duration, 0.0, 1.0);
if (blendJob.Duration != 0.0) {
blendJob.BlendInfo.progress = glm::clamp(blendJob.CurrentTime / blendJob.Duration, 0.0, 1.0);
} else {
blendJob.BlendInfo.progress = 1.0;
}
blendJob.BlendInfo = blendTree->AutoBlendStep(blendJob.BlendInfo);
}
@@ -215,3 +221,42 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
m_AutoBlendQueues[subTreeRoot].Insert(abj);
return true;
}
bool AnimationSystem::OnInputCommand(const Events::InputCommand& e)
{
if (e.Value == 1.0f) {
if (e.Command == "Shoot") {
auto blendComponents = m_World->GetComponents("Model");
if (blendComponents == nullptr) {
return false;
}
for (auto& bc : *blendComponents) {
EntityWrapper entity = EntityWrapper(m_World, bc.EntityID);
if (entity.Name() == "Hands") {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.0;
aeb.NodeName = "Fire";
aeb.RootNode = entity;
aeb.Start = true;
aeb.Restart = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Idle";
aeb.RootNode = entity;
aeb.Delay = 0.0;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = entity.FirstChildByName("PrimaryBlendTree").FirstChildByName("Fire");
m_EventBroker->Publish(aeb);
}
}
}
}
}
}