Windows-classic-samples/Samples/DynamicDPI/cpp/LinearEaseInOutAnimation.cpp
2025-11-28 00:35:46 +09:00

91 lines
1.9 KiB
C++

//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
//// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
//// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//// PARTICULAR PURPOSE.
////
//// Copyright (c) Microsoft Corporation. All rights reserved
#include "pch.h"
#include "LinearEaseInOutAnimation.h"
CLinearEaseInOutAnimation::CLinearEaseInOutAnimation()
{
}
CLinearEaseInOutAnimation::CLinearEaseInOutAnimation(
_In_ float begin,
_In_ float change,
_In_ float duration,
_In_ bool infinite
)
{
m_currentTime = 0.0F;
m_currentValue = 0.0F;
m_goBackwards = false;
m_begin = begin;
m_change = change;
m_duration = duration;
m_complete = false;
m_infinite = infinite;
}
CLinearEaseInOutAnimation::~CLinearEaseInOutAnimation()
{
}
// <summary>
// This function causes a linear fade in/out for animations.
// </summary>
float
CLinearEaseInOutAnimation::LinearEaseInOut(
_In_ float time,
_In_ float begin,
_In_ float change,
_In_ float duration
)
{
return(((time * change) / duration) + begin);
}
float
CLinearEaseInOutAnimation::GetCurrentValue()
{
return m_currentValue;
}
void
CLinearEaseInOutAnimation::Tick()
{
if (m_currentTime == m_duration)
{
if (m_infinite)
{
m_goBackwards = true;
}
else
{
m_complete = true;
}
}
else if (m_currentTime == 0.0F)
{
m_goBackwards = false;
}
if (!m_goBackwards && m_currentTime < m_duration)
{
m_currentTime += 1;
m_currentValue = LinearEaseInOut(m_currentTime, m_begin ,m_change, m_duration);
}
else if (m_goBackwards && m_currentTime >= 0)
{
m_currentTime -= 1;
m_currentValue = LinearEaseInOut(m_currentTime, m_begin, m_change, m_duration);
}
}
bool
CLinearEaseInOutAnimation::IsComplete()
{
return m_complete;
}