void display() { glClear(GL_COLOR_BUFFER_BIT); drawNeutrons(tailFlag); if (explosionFlag) drawExplosions(); // measure, limit, and display framerate frameMark(FRAME_LIMIT); //if (frameFlag) frameDraw(GLUT_BITMAP_HELVETICA_10, 1.0, 1.0, 1.0, 0.05, 0.95); glutSwapBuffers(); }
bool drawGame() { arduboy.clear(); drawScore(); drawLives(); drawEnemies(); if(player.alive) drawPlayer(); drawSupply(); drawBullets(); drawStars(); bool finished = drawExplosions(); arduboy.display(); return finished; }
/** Function called to refresh the view on canvas */ void CGameBoard::OnUpdate() { Clear(sf::Color(195, 195, 195)); /* Grey */ sf::Shape rightBorder = sf::Shape::Rectangle(510, 0, 630, 510, sf::Color(127, 127, 127)); Draw(rightBorder); if (m_fpsRefreshTime.GetElapsedTime() >= 1.0f) { m_frameRate = 1.f / GetFrameTime(); m_fpsRefreshTime.Reset(); } drawMap(); drawFPS(); drawStatus(); drawExplosions(); drawPlayers(); drawBonusCanvas(); if (!m_gameBegin || !m_connected) { return; } /* Handling Event */ CPlayer *me = m_playersList[0]; /* I am the first player of the list */ float x = me->GetPosition().x; float y = me->GetPosition().y; std::string pos = QString("%1 %2").arg(me->GetPosition().x).arg(me->GetPosition().y) .toStdString(); if (me->isDead()) { return; } sf::Event event; while (GetEvent(event)) { switch (event.Type) { case sf::Event::KeyPressed: if (event.Key.Code == sf::Key::Space) { plantBomb(); } else if (event.Key.Code == sf::Key::E) { useSpecialBonus(); } break; default: break; } } if (GetInput().IsKeyDown(sf::Key::Right) || GetInput().IsKeyDown(sf::Key::D)) { switch (me->getCollision(Right, m_map)) { case Floor: case Bonus: if (me->getDirection() != Right) { m_networkManager->sendMovePacket(me->getNick(), Right, x, y); me->setDirection(Right); } break; case Bomb: if (me->getBonus(CBonus::BombPass) != NULL) { me->setDirection(Right); } else if (me->getBonus(CBonus::BombKick) != NULL) { QList<CBomb *>::iterator it; for (it = m_bombsList.begin(); it != m_bombsList.end(); ++it) { CBomb *bomb = *it; if (bomb->getX() == me->getX() + 1 && bomb->getY() == me->getY()) { bomb->setDirection(CBomb::Right); m_map.setBlock(bomb->getX(), bomb->getY(), Floor); break; } } } break; default: break; } if (me->IsPaused()) { me->Play(); } } else if (GetInput().IsKeyDown(sf::Key::Left) || GetInput().IsKeyDown(sf::Key::Q)) { switch (me->getCollision(Left, m_map)) { case Floor: case Bonus: if (me->getDirection() != Left) { me->setDirection(Left); m_networkManager->sendMovePacket(me->getNick(), Left, x, y); } break; case Bomb: if (me->getBonus(CBonus::BombPass) != NULL) { me->setDirection(Left); } else if (me->getBonus(CBonus::BombKick) != NULL) { QList<CBomb *>::iterator it; for (it = m_bombsList.begin(); it != m_bombsList.end(); ++it) { CBomb *bomb = *it; if (bomb->getX() == me->getX() - 1 && bomb->getY() == me->getY()) { bomb->setDirection(CBomb::Left); m_map.setBlock(bomb->getX(), bomb->getY(), Floor); break; } } } break; default: break; } if (me->IsPaused()) { me->Play(); } } else if (GetInput().IsKeyDown(sf::Key::Down) || GetInput().IsKeyDown(sf::Key::S)) { switch (me->getCollision(Down, m_map)) { case Floor: case Bonus: if (me->getDirection() != Down) { me->setDirection(Down); m_networkManager->sendMovePacket(me->getNick(), Down, x, y); } else if (me->getBonus(CBonus::BombKick) != NULL) { QList<CBomb *>::iterator it; for (it = m_bombsList.begin(); it != m_bombsList.end(); ++it) { CBomb *bomb = *it; if (bomb->getX() == me->getX() && bomb->getY() == me->getY() + 1) { bomb->setDirection(CBomb::Down); m_map.setBlock(bomb->getX(), bomb->getY(), Floor); break; } } } break; case Bomb: if (me->getBonus(CBonus::BombPass) != NULL) { me->setDirection(Down); } break; default: break; } if (me->IsPaused()) { me->Play(); } } else if (GetInput().IsKeyDown(sf::Key::Up) || GetInput().IsKeyDown(sf::Key::Z)) { switch (me->getCollision(Up, m_map)) { case Floor: case Bonus: if (me->getDirection() != Up) { m_networkManager->sendMovePacket(me->getNick(), Up, x, y); me->setDirection(Up); } break; case Bomb: if (me->getBonus(CBonus::BombPass) != NULL) { me->setDirection(Up); } else if (me->getBonus(CBonus::BombKick) != NULL) { QList<CBomb *>::iterator it; for (it = m_bombsList.begin(); it != m_bombsList.end(); ++it) { CBomb *bomb = *it; if (bomb->getX() == me->getX() && bomb->getY() == me->getY() - 1) { bomb->setDirection(CBomb::Up); m_map.setBlock(bomb->getX(), bomb->getY(), Floor); break; } } } break; default: break; } if (me->IsPaused()) { me->Play(); } } else { if (me->getDirection() != Stopped && me->getElapsedTime() >= me->getStopTime()) { me->setDirection(Stopped); m_networkManager->sendMovePacket(me->getNick(), Stopped, x, y); me->Pause(); } } }