MixedView/mainwindow.cpp
changeset 6 4c7de3e5789a
parent 1 3e3364c5ae1c
child 8 a593fb7f78c0
equal deleted inserted replaced
5:3d8bce9e1a9f 6:4c7de3e5789a
    16     ui(new Ui::MainWindow)
    16     ui(new Ui::MainWindow)
    17 {
    17 {
    18     this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    18     this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    19     ui->setupUi(this);
    19     ui->setupUi(this);
    20     mPacState = 0;
    20     mPacState = 0;
    21     bIsMoving = true;
       
    22     xAxis = yAxis = 0;
    21     xAxis = yAxis = 0;
    23     mLastPt.setX(0);
    22     mLastPt.setX(0);
    24     mLastPt.setY(0);
    23     mLastPt.setY(0);
    25     mPause = false;
    24     mPause = false;
    26 
    25 
    42     int width = screenSize.width();
    41     int width = screenSize.width();
    43     mazeImage = mazeImage.scaledToWidth(width);
    42     mazeImage = mazeImage.scaledToWidth(width);
    44     QGraphicsPixmapItem *backGround = mScene->addPixmap(mazeImage);
    43     QGraphicsPixmapItem *backGround = mScene->addPixmap(mazeImage);
    45     backGround->setPos(-140,-200);
    44     backGround->setPos(-140,-200);
    46 
    45 
       
    46     mPacCollider = new QGraphicsEllipseItem(0, 0, 18, 18);
       
    47     mPacCollider->setBrush(QBrush(Qt::transparent));
       
    48     mScene->addItem(mPacCollider);
       
    49 
    47     mPacman = new QGraphicsEllipseItem(0, 0, 18, 18);
    50     mPacman = new QGraphicsEllipseItem(0, 0, 18, 18);
    48     mPacman->setBrush(QBrush(Qt::yellow));
    51     mPacman->setBrush(QBrush(Qt::yellow));
    49     mPacman->setSpanAngle(4500);
    52     mPacman->setSpanAngle(4500);
    50     mScene->addItem(mPacman);
    53     mScene->addItem(mPacman);
       
    54 
       
    55 
    51 
    56 
    52     // lets place a pause button in the view
    57     // lets place a pause button in the view
    53     pauseButton = new QPushButton("Pause");
    58     pauseButton = new QPushButton("Pause");
    54     connect(pauseButton, SIGNAL(clicked()), this, SLOT(pause()));
    59     connect(pauseButton, SIGNAL(clicked()), this, SLOT(pause()));
    55     pauseButton->setMaximumHeight(40);
    60     pauseButton->setMaximumHeight(40);
    58 
    63 
    59     ui->mainGraphicsView->setScene(mScene);
    64     ui->mainGraphicsView->setScene(mScene);
    60     ui->mainGraphicsView->show();
    65     ui->mainGraphicsView->show();
    61 
    66 
    62     mPacman->setPos(20,-8);
    67     mPacman->setPos(20,-8);
    63 
    68     mPacCollider->setPos(20, -8);
    64     // declare our update timer
    69     // declare our update timer
    65     mUpdateTimer = new QTimer(this);
    70     mUpdateTimer = new QTimer(this);
    66     connect(mUpdateTimer, SIGNAL(timeout()), this, SLOT(updateGraphics()));
    71     connect(mUpdateTimer, SIGNAL(timeout()), this, SLOT(updateGraphics()));
    67     mUpdateTimer->start(250);
    72     mUpdateTimer->start(250);
    68 
    73 
    69     // connect the accelerometer to the readingChanged signal
    74     // connect the accelerometer to the readingChanged signal
    70     connect(mAccelerometer, SIGNAL(readingChanged()), this, SLOT(updateReading()));
    75     connect(mAccelerometer, SIGNAL(readingChanged()), this, SLOT(updateReading()));
    71     mNumHits = 1;
    76     mNumHits = 1;
       
    77 
    72 }
    78 }
    73 
    79 
    74 MainWindow::~MainWindow()
    80 MainWindow::~MainWindow()
    75 {
    81 {
    76     delete ui;
    82     delete ui;
    78 
    84 
    79 void MainWindow::updateGraphics() {
    85 void MainWindow::updateGraphics() {
    80     if (mPause)
    86     if (mPause)
    81         return;
    87         return;
    82 
    88 
    83     if (!bIsMoving)
    89 
    84         return;
       
    85     // update the pacman mouth state
    90     // update the pacman mouth state
    86     // will eventually change this to a graphic
    91     // will eventually change this to a graphic
    87     switch (mPacState) {
    92     switch (mPacState) {
    88     case 0:
    93     case 0:
    89         mPacman->setSpanAngle(5700);
    94         mPacman->setSpanAngle(5700);
    99     }
   104     }
   100 
   105 
   101     mPacState += 1;
   106     mPacState += 1;
   102     if (mPacState == 2)
   107     if (mPacState == 2)
   103         mPacState = 0;
   108         mPacState = 0;
       
   109 
   104 }
   110 }
   105 
   111 
   106 void MainWindow::updateReading() {
   112 void MainWindow::updateReading() {
   107     if (mPause)
   113     if (mPause)
   108         return;
   114         return;
   109     mNumHits = mPacman->collidingItems().count();
   115 
   110     if (mNumHits == 1)
   116     checkCollisions();
   111         mLastPt = mPacman->pos();
       
   112     xAxis = (xAxis + mAccelerometer->reading()->x()) / 2;
   117     xAxis = (xAxis + mAccelerometer->reading()->x()) / 2;
   113     yAxis = (yAxis + mAccelerometer->reading()->y()) / 2;
   118     yAxis = (yAxis + mAccelerometer->reading()->y()) / 2;
   114 
   119 
   115     QPointF pt =  mPacman->pos();
   120 }
       
   121 
       
   122 void MainWindow::checkCollisions() {
       
   123 
       
   124     mNumHits = mPacCollider->collidingItems().count();
       
   125     if (mNumHits == 2)
       
   126         mLastPt = mPacCollider->pos();
       
   127 
       
   128     QPointF pt =  mPacCollider->pos();
   116 
   129 
   117     pt.setX(pt.x()-xAxis);
   130     pt.setX(pt.x()-xAxis);
   118     pt.setY(pt.y()+yAxis);    
   131     pt.setY(pt.y()+yAxis);
   119 
   132 
   120     if (pt.x()<-103)
   133     if (pt.x()<-103)
   121         pt.setX(-103);
   134         pt.setX(-103);
   122     else if (pt.x()>180)
   135     else if (pt.x()>180)
   123         pt.setX(180);
   136         pt.setX(180);
   125     if (pt.y()<-156)
   138     if (pt.y()<-156)
   126         pt.setY(-156);
   139         pt.setY(-156);
   127     else if (pt.y()>145)
   140     else if (pt.y()>145)
   128         pt.setY(145);
   141         pt.setY(145);
   129 
   142 
   130     if (mNumHits == 1) {
   143     if (mNumHits == 2) {
   131         mPacman->setPos(pt);      
   144         mPacCollider->setPos(pt);
   132     }
   145        // mPacman->setPos(pt);
   133     else
   146     }
   134         mPacman->setPos(mLastPt);
   147     else {
       
   148         mPacCollider->setPos(mLastPt);
       
   149 
       
   150     }
       
   151      mPacman->setPos(mLastPt);
   135 
   152 
   136 }
   153 }
   137 
   154 
   138 void MainWindow::pause() {
   155 void MainWindow::pause() {
   139     mPause = !mPause;
   156     mPause = !mPause;