Small fix for level numbers.
[evilplumber] / src / game.h
index cf83eb2..4fa333d 100644 (file)
@@ -28,7 +28,7 @@ class QTableWidgetItem;
 class QLabel;
 class QWidget;
 class QPushButton;
-class QFrame;
+class QListWidget;
 
 enum PieceType
 {
@@ -51,7 +51,8 @@ enum Direction
     DirRight,
     DirDown,
     DirDone,
-    DirFailed
+    DirFailed,
+    DirPassed
 };
 
 typedef struct Piece
@@ -82,9 +83,9 @@ static const Piece ppieces[] = {
     {PieceCross, 0, true, 3, 0,              // 7
      {DirLeft, DirRight, DirUp, DirDown}},
     {PieceCorners, 0, true, 4, 0,            // 8
-     {DirLeft, DirUp, DirRight, DirDown}},
+     {DirLeft, DirDown, DirRight, DirUp}},
     {PieceCorners, 90, true, 4, 1,          // 9
-     {DirUp, DirRight, DirLeft, DirDown}},
+     {DirRight, DirDown, DirLeft, DirUp}},
     {PieceStart, 0, false, 0, 0,             // 10
      {DirLeft, DirNone, DirNone, DirNone}},
     {PieceStart, 90, false, 0, 0,            // 11
@@ -170,11 +171,9 @@ private slots:
     void onItemClicked(QTableWidgetItem* item);
 
 private:
-    void initPieceCache();
     static int pieceToId(const Piece* piece);
     static const Piece* idToPiece(int id);
 
-    static QHash<QPair<PieceType, int>, const Piece*> pieceCache;
     QTableWidget* pieceUi;
     QHash<const Piece*, int> pieceCounts;
 };
@@ -193,14 +192,16 @@ signals:
     void levelFailed();
 
 private slots:
+    void onDoneClicked();
     void onCellClicked(int row, int column);
     void onValidPieceSelected(const Piece* piece);
     void onInvalidPieceSelected();
     void onTimeout();
-    void levelEnds();
     void computeFlow();
 
 private:
+    void levelEnds();
+
     AvailablePieces* pieceUi; // Not owned
     GameField* fieldUi; // Not owned
     QLabel* timeLabel; // Not owned
@@ -223,35 +224,50 @@ private:
     Direction flowDir;
     int flowPreplaced;
     int flowScore;
+    bool animate;
 };
 
 class LevelSwitcher : public QObject
 {
     Q_OBJECT
 public:
-    LevelSwitcher(GameController* gameController, QLabel* levelLabel, 
-                  QFrame* startFrame, QLabel* startTitle, QLabel* startLabel, QPushButton* startButton,
-                  QLabel* scoreLabel,
+    LevelSwitcher(GameController* gameController,
+                  QWidget* levelWidget, QListWidget* levelList, QPushButton* levelStartButton,
+                  QWidget* startWidget, QLabel* startTitle, QLabel* startLabel, QPushButton* startButton,
+                  QWidget* gameWidget, QLabel* levelLabel, QLabel* scoreLabel,
                   QStringList levels);
-    void initiateLevel();
 
 private slots:
+    void onLevelCollectionChosen();
     void onStartClicked();
     void onLevelPassed(int score);
     void onLevelFailed();
+    void chooseLevelCollection();
 
 private:
+    void initiateLevel();
+    void readSavedGames();
+    void writeSavedGames();
+    void readLevelCollections(QStringList collections);
+
     GameController* gameController; // Not owned
-    QLabel* levelLabel; // Not owned
-    QFrame* startFrame; // Not owned
+    QWidget* levelWidget; // Not owned
+    QListWidget* levelList; // Not owned
+    QPushButton* levelStartButton; // Not owned
+    QWidget* startWidget; // Not owned
     QLabel* startTitle; // Not owned
     QLabel* startLabel; // Not owned
     QPushButton* startButton; // Not owned
+    QWidget* gameWidget; // Not owned
+    QLabel* levelLabel; // Not owned
     QLabel* scoreLabel; // Not owned
 
+    QString curColl;
     QStringList levels;
     int level;
     int totalScore;
+    QHash<QString, int> savedGames; // level collection -> next level ix
+    QHash<QString, QStringList> levelCollections; // level collection -> level names
 };
 
 #endif