File indexing completed on 2024-11-10 03:44:27

0001 /*
0002     SPDX-FileCopyrightText: 2007-2008 Thomas Gallinari <tg8187@yahoo.fr>
0003     SPDX-FileCopyrightText: 2007-2008 Pierre-Benoit Besse <besse.pb@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "ghostitem.h"
0009 #include "game.h"
0010 
0011 GhostItem::GhostItem(Ghost *p_model)
0012     : CharacterItem(p_model)
0013 {
0014     connect(p_model, &Ghost::stateChanged, this, &GhostItem::updateState);
0015 
0016     // Calculations for the duration of blinking stuff
0017     const int blinkTimerDuration = (int)(500 * Game::s_durationRatio);
0018     // Define the timer which sets the blinking frequency
0019     m_blinkTimer = new QTimer(this);
0020     m_blinkTimer->setInterval(blinkTimerDuration);
0021     connect(m_blinkTimer, &QTimer::timeout, this, &GhostItem::blink);
0022 }
0023 
0024 GhostItem::~GhostItem()
0025 {
0026     delete m_blinkTimer;
0027 }
0028 
0029 void GhostItem::update(qreal p_x, qreal p_y)
0030 {
0031     // Compute the top-right coordinates of the item
0032     qreal x = p_x - boundingRect().width() / 2;
0033     qreal y = p_y - boundingRect().height() / 2;
0034     // Updates the view coordinates
0035     setPos(x, y);
0036 }
0037 
0038 void GhostItem::updateState()
0039 {
0040     if (m_blinkTimer->isActive()) {
0041         m_blinkTimer->stop();
0042     }
0043     switch (((Ghost *)getModel())->getState()) {
0044     case Ghost::PREY:
0045         m_blinkTimer->start();
0046         setElementId(QStringLiteral("scaredghost"));
0047         // The ghosts are now weaker than the kapman, so they are under him
0048         setZValue(1);
0049         break;
0050     case Ghost::HUNTER:
0051         setElementId(((Ghost *)getModel())->getImageId());
0052         // The ghosts are stronger than the kapman, they are above him
0053         setZValue(3);
0054         break;
0055     case Ghost::EATEN:
0056         setElementId(QStringLiteral("ghosteye"));
0057         // The ghosts are now weaker than the kapman, so they are under him
0058         setZValue(1);
0059         break;
0060     }
0061 }
0062 
0063 void GhostItem::blink()
0064 {
0065     if (((Ghost *)getModel())->getState() == Ghost::PREY && ((Ghost *)getModel())->preyStateAlmostOver()) {
0066         CharacterItem::blink();
0067         if (m_nbBlinks % 2 == 0) {
0068             setElementId(QStringLiteral("scaredghost"));
0069         } else {
0070             setElementId(QStringLiteral("whitescaredghost"));
0071         }
0072     }
0073 }
0074 
0075 #include "moc_ghostitem.cpp"