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

0001 /*
0002     This file is part of Killbots.
0003 
0004     SPDX-FileCopyrightText: 2007-2009 Parker Coates <coates@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef KILLBOTS_COORDINATOR_H
0010 #define KILLBOTS_COORDINATOR_H
0011 
0012 #include "actions.h"
0013 #include "sprite.h"
0014 
0015 class KGamePopupItem;
0016 
0017 #include <QObject>
0018 #include <QTimeLine>
0019 
0020 namespace Killbots
0021 {
0022 class Scene;
0023 class Engine;
0024 class NumericDisplayItem;
0025 
0026 class Coordinator : public QObject
0027 {
0028     Q_OBJECT
0029 
0030 public: // functions
0031     explicit Coordinator(QObject *parent = nullptr);
0032     ~Coordinator() override;
0033 
0034     void setEngine(Engine *engine);
0035     void setScene(Scene *scene);
0036 
0037     void setAnimationSpeed(int speed);
0038 
0039     void beginNewAnimationStage();
0040     Sprite *createSprite(SpriteType type, QPoint position);
0041     void slideSprite(Sprite *sprite, QPoint position);
0042     void teleportSprite(Sprite *sprite, QPoint position);
0043     void destroySprite(Sprite *sprite);
0044 
0045 public Q_SLOTS:
0046     void requestNewGame();
0047     void requestAction(int action);
0048 
0049 private: // types
0050     struct AnimationStage;
0051 
0052 private: // functions
0053     void startNewGame();
0054     void doAction(HeroAction action);
0055     void startAnimation();
0056     void startAnimationStage();
0057     void animationDone();
0058 
0059     void showUnqueuedMessage(const QString &message, int timeOut = 3000);
0060     void showQueuedMessage(const QString &message);
0061 
0062 private Q_SLOTS:
0063     void nextAnimationStage();
0064     void animate(qreal value);
0065 
0066     void updateRound(int round);
0067     void updateScore(int score);
0068     void updateEnemyCount(int enemyCount);
0069     void updateEnergy(int energy);
0070 
0071     void showNewGameMessage();
0072     void showRoundCompleteMessage();
0073     void showBoardFullMessage();
0074     void showGameOverMessage();
0075 
0076 private: // data members
0077     Engine *m_engine;
0078     Scene *m_scene;
0079 
0080     NumericDisplayItem *m_roundDisplay;
0081     NumericDisplayItem *m_scoreDisplay;
0082     NumericDisplayItem *m_enemyCountDisplay;
0083     NumericDisplayItem *m_energyDisplay;
0084 
0085     KGamePopupItem *m_unqueuedPopup;
0086     KGamePopupItem *m_queuedPopup;
0087 
0088     QTimeLine m_timeLine;
0089 
0090     QList<AnimationStage> m_stages;
0091 
0092     bool m_busyAnimating;
0093     bool m_newGameRequested;
0094     HeroAction m_repeatedAction;
0095     HeroAction m_queuedAction;
0096 };
0097 }
0098 
0099 #endif