File indexing completed on 2024-04-14 03:59:52

0001 /*
0002     SPDX-FileCopyrightText: 2012 Christian Krippendorf <Coding@Christian-Krippendorf.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 // own
0008 #include "movelistanimation.h"
0009 
0010 // KMahjongg
0011 #include "gamedata.h"
0012 
0013 MoveListAnimation::MoveListAnimation(QObject * parent)
0014     : QTimer(parent)
0015     , m_step(0)
0016     , m_animationSpeed(0)
0017     , m_gameData(nullptr)
0018 {
0019     connect(this, &MoveListAnimation::timeout, this, &MoveListAnimation::timeoutOccurred);
0020 }
0021 
0022 MoveListAnimation::~MoveListAnimation()
0023 {
0024 }
0025 
0026 void MoveListAnimation::setAnimationSpeed(int animationSpeed)
0027 {
0028     m_animationSpeed = animationSpeed;
0029 }
0030 
0031 int MoveListAnimation::getAnimationSpeed() const
0032 {
0033     return m_animationSpeed;
0034 }
0035 
0036 void MoveListAnimation::start(GameData * gameData)
0037 {
0038     m_gameData = gameData;
0039 
0040     // Test whether the tileNum is max or 0.
0041     if (m_gameData->m_tileNum == m_gameData->m_maxTileNum) {
0042         m_direction = AnimationDirection::Forward;
0043     } else {
0044         m_direction = AnimationDirection::Backward;
0045     }
0046 
0047     QTimer::start(m_animationSpeed);
0048 }
0049 
0050 void MoveListAnimation::stop()
0051 {
0052     QTimer::stop();
0053 
0054     m_step = 0;
0055 }
0056 
0057 void MoveListAnimation::timeoutOccurred()
0058 {
0059     if (m_gameData == nullptr) {
0060         return;
0061     }
0062 
0063     if (m_direction == AnimationDirection::Forward) {
0064         // Remove items...
0065         Q_EMIT removeItem(m_gameData->MoveListData(m_gameData->m_tileNum));
0066         Q_EMIT removeItem(m_gameData->MoveListData(m_gameData->m_tileNum));
0067 
0068         if (m_gameData->m_tileNum == 0) {
0069             m_direction = AnimationDirection::Backward;
0070         }
0071     } else {
0072         ++m_gameData->m_tileNum;
0073         Q_EMIT addItem(m_gameData->MoveListData(m_gameData->m_tileNum));
0074         ++m_gameData->m_tileNum;
0075         Q_EMIT addItem(m_gameData->MoveListData(m_gameData->m_tileNum));
0076 
0077         if (m_gameData->m_tileNum == m_gameData->m_maxTileNum) {
0078             m_direction = AnimationDirection::Forward;
0079         }
0080     }
0081 }
0082 
0083 #include "moc_movelistanimation.cpp"