We now have FPS
This commit is contained in:
parent
c257c24488
commit
41399e6c19
@ -40,9 +40,9 @@ private:
|
|||||||
void handleScoreSaving();
|
void handleScoreSaving();
|
||||||
|
|
||||||
// drawing methods
|
// drawing methods
|
||||||
void display() const;
|
void display(unsigned fps) const;
|
||||||
void displayGod() const;
|
void displayGod() const;
|
||||||
void displayInvader(const Position& basePos, unsigned size, InvaderType type) const;
|
void displayInvader(const Position& basePos, InvaderType type) const;
|
||||||
|
|
||||||
|
|
||||||
// managers
|
// managers
|
||||||
@ -59,6 +59,7 @@ private:
|
|||||||
bool invadersTouchPlayer() const;
|
bool invadersTouchPlayer() const;
|
||||||
|
|
||||||
// god things
|
// god things
|
||||||
|
void awakeGod();
|
||||||
void manageGod();
|
void manageGod();
|
||||||
void _manageGod_retrieve(bool back);
|
void _manageGod_retrieve(bool back);
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
enum class GodState{
|
enum class GodState{
|
||||||
NONE,
|
NONE,
|
||||||
LOAD,
|
AWAKE,
|
||||||
WAIT,
|
WAIT,
|
||||||
RETRIEVE1,
|
RETRIEVE1,
|
||||||
RETRIEVE2,
|
RETRIEVE2,
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
#include "mingl/shape/rectangle.h"
|
#include "mingl/shape/rectangle.h"
|
||||||
#include "mingl/shape/circle.h"
|
#include "mingl/shape/circle.h"
|
||||||
#include "mingl/gui/sprite.h"
|
#include "mingl/gui/sprite.h"
|
||||||
|
#include "mingl/gui/text.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "playMode.h"
|
#include "playMode.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace nsGraphics;
|
|
||||||
|
|
||||||
class PixelManager{
|
class PixelManager{
|
||||||
public:
|
public:
|
||||||
@ -39,6 +39,8 @@ public:
|
|||||||
void drawSprite(nsGui::Sprite& sprite, const Position& pos) const;
|
void drawSprite(nsGui::Sprite& sprite, const Position& pos) const;
|
||||||
void drawBackground() const;
|
void drawBackground() const;
|
||||||
|
|
||||||
|
void drawFPS(unsigned fps) const;
|
||||||
|
|
||||||
PlayMode showInitialMenu() const;
|
PlayMode showInitialMenu() const;
|
||||||
bool showDeathMenu() const;
|
bool showDeathMenu() const;
|
||||||
unsigned getScreenHeight() const;
|
unsigned getScreenHeight() const;
|
||||||
|
@ -11,14 +11,17 @@
|
|||||||
// ou alors faire une method dans Game ?
|
// ou alors faire une method dans Game ?
|
||||||
#define INV_POS(i) confData.invadersSize*(i)+confData.invadersDistance*(i)
|
#define INV_POS(i) confData.invadersSize*(i)+confData.invadersDistance*(i)
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using nsGraphics::RGBAcolor;
|
||||||
|
|
||||||
|
|
||||||
enum class WinValue{
|
enum class WinValue{
|
||||||
NOBODY, // should never be used
|
NOBODY, // should never be used
|
||||||
PLAYERS,
|
PLAYERS,
|
||||||
INVADERS,
|
INVADERS,
|
||||||
};
|
};
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
enum class InvaderType {
|
enum class InvaderType {
|
||||||
TYPEA,
|
TYPEA,
|
||||||
TYPEB,
|
TYPEB,
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
|
|
||||||
/** Displays the screen once, and returns
|
/** Displays the screen once, and returns
|
||||||
*
|
* The more important stuff must be drawn last
|
||||||
*/
|
*/
|
||||||
void Game::display() const {
|
void Game::display(unsigned fps) const {
|
||||||
pm.drawBackground();
|
pm.drawBackground();
|
||||||
for (unsigned i = 0; i < this->grid.size(); ++i){
|
for (unsigned i = 0; i < this->grid.size(); ++i){
|
||||||
for (unsigned j = 0; j < this->grid[i].size(); ++j){
|
for (unsigned j = 0; j < this->grid[i].size(); ++j){
|
||||||
@ -12,7 +12,7 @@ void Game::display() const {
|
|||||||
basePos.getX() + i * confData.invadersSize + i * confData.invadersDistance,
|
basePos.getX() + i * confData.invadersSize + i * confData.invadersDistance,
|
||||||
basePos.getY() + j * confData.invadersSize + j * confData.invadersDistance
|
basePos.getY() + j * confData.invadersSize + j * confData.invadersDistance
|
||||||
);
|
);
|
||||||
displayInvader(vec, confData.invadersSize, grid[i][j]);
|
displayInvader(vec, grid[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,22 +28,25 @@ void Game::display() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
displayGod();
|
displayGod();
|
||||||
|
|
||||||
|
pm.drawFPS(fps);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::displayInvader(const Position& pos, unsigned size, InvaderType type) const {
|
void Game::displayInvader(const Position& pos, InvaderType type) const {
|
||||||
if(type==InvaderType::NONE)return;
|
if(type==InvaderType::NONE)return;
|
||||||
InvaderTypeDef invDef = confData.invadersDef.at(type);
|
InvaderTypeDef invDef = confData.invadersDef.at(type);
|
||||||
switch(type){
|
switch(type){
|
||||||
case InvaderType::TYPEA:{
|
case InvaderType::TYPEA:{
|
||||||
pm.drawInvaderA(pos, size, invDef.color);
|
pm.drawInvaderA(pos, confData.invadersSize, invDef.color);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case InvaderType::TYPEB:{
|
case InvaderType::TYPEB:{
|
||||||
pm.drawInvaderB(pos, size, invDef.color);
|
pm.drawInvaderB(pos, confData.invadersSize, invDef.color);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case InvaderType::TYPEC:{
|
case InvaderType::TYPEC:{
|
||||||
pm.drawInvaderC(pos, size, invDef.color);
|
pm.drawInvaderC(pos, confData.invadersSize, invDef.color);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,7 +61,7 @@ void Game::displayGod() const {
|
|||||||
switch (god.state) {
|
switch (god.state) {
|
||||||
case GodState::NONE:
|
case GodState::NONE:
|
||||||
return;
|
return;
|
||||||
case GodState::LOAD: {
|
case GodState::AWAKE: {
|
||||||
pm.displayGodBench(god.counter - GOD_BENCH_SIZE);
|
pm.displayGodBench(god.counter - GOD_BENCH_SIZE);
|
||||||
|
|
||||||
Position leftHand = Position(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, god.counter - GOD_BENCH_SIZE);
|
Position leftHand = Position(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, god.counter - GOD_BENCH_SIZE);
|
||||||
@ -93,17 +96,19 @@ void Game::displayGod() const {
|
|||||||
}
|
}
|
||||||
case GodState::RETRIEVE2:{
|
case GodState::RETRIEVE2:{
|
||||||
// similar with RETRIEVE1
|
// similar with RETRIEVE1
|
||||||
Position startPos(GOD_HAND_DISTANCE, 0);
|
Position pos(GOD_HAND_DISTANCE, 0);
|
||||||
Position endPos = basePos+Position(INV_POS(god.throwedInvPos.getX()), INV_POS(god.throwedInvPos.getY()));
|
Position endPos = basePos+Position(INV_POS(god.throwedInvPos.getX()), INV_POS(god.throwedInvPos.getY()));
|
||||||
|
|
||||||
applyBezier(startPos, god.thrownTransition, 1-(god.counter/100));
|
applyBezier(pos, god.thrownTransition, 1 - (god.counter / 100));
|
||||||
applyBezier(startPos, endPos, 1-(god.counter/100));
|
applyBezier(pos, endPos, 1 - (god.counter / 100));
|
||||||
|
|
||||||
pm.displayGodRightHand(startPos);
|
pm.displayGodRightHand(pos);
|
||||||
pm.displayGodLeftHand(Position(GOD_HAND_DISTANCE, 0));
|
pm.displayGodLeftHand(Position(GOD_HAND_DISTANCE, 0));
|
||||||
|
|
||||||
|
// TODO maybe a little transition to pos to better reflect the invader's position ?
|
||||||
|
|
||||||
// but now, you come with me you invader !
|
// but now, you come with me you invader !
|
||||||
// pm.drawInvader1();
|
displayInvader(pos, god.thrownInvType);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GodState::THROW:{
|
case GodState::THROW:{
|
||||||
|
@ -83,14 +83,25 @@ WinValue Game::playGame(){ // returns when game is finished
|
|||||||
basePos = Position(200, 0);
|
basePos = Position(200, 0);
|
||||||
// GAMELOOP
|
// GAMELOOP
|
||||||
|
|
||||||
#define MAX_FPS 1000
|
#define MAX_FPS 60
|
||||||
|
|
||||||
|
chrono::milliseconds fpsTime;
|
||||||
|
unsigned tmpFps = 0;
|
||||||
|
unsigned fps = 0;
|
||||||
while(window.isOpen()){
|
while(window.isOpen()){
|
||||||
auto targetTime = chrono::high_resolution_clock::now() + chrono::duration<double, ratio<1, MAX_FPS>>(1);
|
chrono::time_point startTime = chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
pm.startFrame();
|
pm.startFrame();
|
||||||
|
|
||||||
managePlayers();
|
managePlayers();
|
||||||
if(manageInvaders() && invadersTouchPlayer())return WinValue::INVADERS;
|
if(manageInvaders()) { // if they went down
|
||||||
|
if (invadersTouchPlayer())return WinValue::INVADERS;
|
||||||
|
// TODO abstract this ?
|
||||||
|
if (basePos.getY() > 200 /*lambda value*/ && god.state==GodState::NONE) {
|
||||||
|
cout << "hey" << endl;
|
||||||
|
awakeGod();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
moveMissiles();
|
moveMissiles();
|
||||||
remCollidingProjectiles();
|
remCollidingProjectiles();
|
||||||
@ -100,11 +111,23 @@ WinValue Game::playGame(){ // returns when game is finished
|
|||||||
if(checkMissilesAndPlayers())return WinValue::INVADERS;
|
if(checkMissilesAndPlayers())return WinValue::INVADERS;
|
||||||
if(checkTorpedosAndInvaders())return WinValue::PLAYERS;
|
if(checkTorpedosAndInvaders())return WinValue::PLAYERS;
|
||||||
|
|
||||||
display();
|
display(fps);
|
||||||
|
|
||||||
pm.endFrame();
|
pm.endFrame();
|
||||||
|
|
||||||
this_thread::sleep_until(targetTime);
|
chrono::time_point endTime = chrono::high_resolution_clock::now();
|
||||||
|
chrono::milliseconds frameTime = chrono::duration_cast<chrono::milliseconds>(endTime-startTime);
|
||||||
|
fpsTime = fpsTime + frameTime;
|
||||||
|
if(fpsTime>chrono::seconds(1)){
|
||||||
|
fps = tmpFps;
|
||||||
|
tmpFps = 0;
|
||||||
|
fpsTime = chrono::milliseconds(0);
|
||||||
|
}else ++tmpFps;
|
||||||
|
|
||||||
|
// old implementation, too volatile
|
||||||
|
// cout << "FPS : " << chrono::milliseconds(1000)/frameTime << endl;
|
||||||
|
|
||||||
|
this_thread::sleep_until(startTime+chrono::duration<double, ratio<1, MAX_FPS>>(1));
|
||||||
}
|
}
|
||||||
return WinValue::NOBODY;
|
return WinValue::NOBODY;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
|
void Game::awakeGod() {
|
||||||
|
god.counter = 0;
|
||||||
|
god.state = GodState::AWAKE;
|
||||||
|
}
|
||||||
|
|
||||||
void Game::manageGod(){
|
void Game::manageGod(){
|
||||||
switch(god.state){
|
switch(god.state){
|
||||||
case GodState::NONE:{
|
case GodState::NONE:{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case GodState::LOAD:{
|
case GodState::AWAKE:{
|
||||||
if(god.counter==GOD_BENCH_SIZE){
|
if(god.counter==GOD_BENCH_SIZE){
|
||||||
god.counter = 0;
|
god.counter = 0;
|
||||||
god.state = GodState::WAIT;
|
god.state = GodState::WAIT;
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
#include <playMode.h>
|
#include <playMode.h>
|
||||||
#include "pixelManager.h"
|
#include "pixelManager.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "god.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace nsShape;
|
||||||
|
|
||||||
PixelManager::PixelManager(MinGL& a) : window(a) {
|
PixelManager::PixelManager(MinGL& a) : window(a) {
|
||||||
window.initGlut();
|
window.initGlut();
|
||||||
@ -9,40 +13,40 @@ PixelManager::PixelManager(MinGL& a) : window(a) {
|
|||||||
|
|
||||||
void PixelManager::drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
|
void PixelManager::drawInvaderA(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
|
||||||
float scale = size/(float)100;
|
float scale = size/(float)100;
|
||||||
window << nsShape::Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGray);
|
window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGray);
|
||||||
window << nsShape::Triangle(Position(35*scale, 50*scale)+baseVector, Position(15*scale, 25*scale)+baseVector, Position(15*scale, 75*scale)+baseVector, nsGraphics::KBlack);
|
window << Triangle(Position(35*scale, 50*scale)+baseVector, Position(15*scale, 25*scale)+baseVector, Position(15*scale, 75*scale)+baseVector, nsGraphics::KBlack);
|
||||||
window << nsShape::Triangle(Position(25*scale, 50*scale)+baseVector, Position(10*scale, 25*scale)+baseVector, Position(10*scale, 75*scale)+baseVector, nsGraphics::KGray);
|
window << Triangle(Position(25*scale, 50*scale)+baseVector, Position(10*scale, 25*scale)+baseVector, Position(10*scale, 75*scale)+baseVector, nsGraphics::KGray);
|
||||||
window << nsShape::Triangle(Position(65*scale, 50*scale)+baseVector, Position(85*scale, 25*scale)+baseVector, Position(85*scale, 75*scale)+baseVector, nsGraphics::KBlack);
|
window << Triangle(Position(65*scale, 50*scale)+baseVector, Position(85*scale, 25*scale)+baseVector, Position(85*scale, 75*scale)+baseVector, nsGraphics::KBlack);
|
||||||
window << nsShape::Triangle(Position(75*scale, 50*scale)+baseVector, Position(90*scale, 25*scale)+baseVector, Position(90*scale, 75*scale)+baseVector, nsGraphics::KGray);
|
window << Triangle(Position(75*scale, 50*scale)+baseVector, Position(90*scale, 25*scale)+baseVector, Position(90*scale, 75*scale)+baseVector, nsGraphics::KGray);
|
||||||
window << nsShape::Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
|
window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
|
void PixelManager::drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
|
||||||
float scale = size/(float)100;
|
float scale = size/(float)100;
|
||||||
window << nsShape::Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KRed);
|
window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KRed);
|
||||||
window << nsShape::Rectangle(Position(25*scale, 30*scale)+baseVector, Position(45*scale, 40*scale)+baseVector, nsGraphics::KBlack);
|
window << Rectangle(Position(25*scale, 30*scale)+baseVector, Position(45*scale, 40*scale)+baseVector, nsGraphics::KBlack);
|
||||||
window << nsShape::Rectangle(Position(55*scale, 30*scale)+baseVector, Position(75*scale, 40*scale)+baseVector, nsGraphics::KBlack);
|
window << Rectangle(Position(55*scale, 30*scale)+baseVector, Position(75*scale, 40*scale)+baseVector, nsGraphics::KBlack);
|
||||||
window << nsShape::Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
|
window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
|
void PixelManager::drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const {
|
||||||
float scale = size/(float)100;
|
float scale = size/(float)100;
|
||||||
window << nsShape::Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGreen);
|
window << Circle(Position(50*scale, 50*scale)+baseVector, 50*scale, nsGraphics::KGreen);
|
||||||
window << nsShape::Circle(Position(35*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack);
|
window << Circle(Position(35*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack);
|
||||||
window << nsShape::Circle(Position(65*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack);
|
window << Circle(Position(65*scale, 35*scale)+baseVector, 10*scale, nsGraphics::KBlack);
|
||||||
window << nsShape::Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
|
window << Rectangle(Position(35*scale, 65*scale)+baseVector, Position(65*scale, 72*scale)+baseVector, nsGraphics::KBlack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::drawPlayer(unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const {
|
void PixelManager::drawPlayer(unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const {
|
||||||
width = width-10-10;
|
width = width-10-10;
|
||||||
width = width/2;
|
width = width/2;
|
||||||
window << nsShape::Triangle(Position(0+x, 720), Position(5+x, 720), Position(5+x, 720-PLAYER_HEIGHT/2), color);
|
window << Triangle(Position(0+x, 720), Position(5+x, 720), Position(5+x, 720-PLAYER_HEIGHT/2), color);
|
||||||
window << nsShape::Rectangle(Position(5+x, 720), Position(5+width+x, 720-PLAYER_HEIGHT/2), color);
|
window << Rectangle(Position(5+x, 720), Position(5+width+x, 720-PLAYER_HEIGHT/2), color);
|
||||||
window << nsShape::Rectangle(Position(5+width+x, 720), Position(15+width+x, 720-PLAYER_HEIGHT), color);
|
window << Rectangle(Position(5+width+x, 720), Position(15+width+x, 720-PLAYER_HEIGHT), color);
|
||||||
window << nsShape::Rectangle(Position(15+width+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), color);
|
window << Rectangle(Position(15+width+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), color);
|
||||||
window << nsShape::Triangle(Position(15+width*2+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), Position(20+width*2+x, 720), color);
|
window << Triangle(Position(15+width*2+x, 720), Position(15+width*2+x, 720-PLAYER_HEIGHT/2), Position(20+width*2+x, 720), color);
|
||||||
window << nsShape::Triangle(Position(5+x,720-PLAYER_HEIGHT/2), Position(5+width+x,720-PLAYER_HEIGHT/2), Position(5+width+x,720-PLAYER_HEIGHT*0.9), color);
|
window << Triangle(Position(5+x,720-PLAYER_HEIGHT/2), Position(5+width+x,720-PLAYER_HEIGHT/2), Position(5+width+x,720-PLAYER_HEIGHT*0.9), color);
|
||||||
window << nsShape::Triangle(Position(15+width+x,720-PLAYER_HEIGHT/2), Position(15+width*2+x,720-PLAYER_HEIGHT/2), Position(15+width+x,720-PLAYER_HEIGHT*0.9), color);
|
window << Triangle(Position(15+width+x,720-PLAYER_HEIGHT/2), Position(15+width*2+x,720-PLAYER_HEIGHT/2), Position(15+width+x,720-PLAYER_HEIGHT*0.9), color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::askPlayerNameMenu(playerID pID, string& name) const {
|
void PixelManager::askPlayerNameMenu(playerID pID, string& name) const {
|
||||||
@ -51,11 +55,11 @@ void PixelManager::askPlayerNameMenu(playerID pID, string& name) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const {
|
void PixelManager::drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const {
|
||||||
window << nsShape::Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
|
window << Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const {
|
void PixelManager::drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const {
|
||||||
window << nsShape::Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
|
window << Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::drawSprite(nsGui::Sprite& sprite, const Position& pos) const {
|
void PixelManager::drawSprite(nsGui::Sprite& sprite, const Position& pos) const {
|
||||||
@ -97,7 +101,7 @@ void PixelManager::endFrame() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::displayGodBench(int y) const {
|
void PixelManager::displayGodBench(int y) const {
|
||||||
|
window << Rectangle(Position(0, y), Position(0, y+GOD_BENCH_SIZE), nsGraphics::KBlack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PixelManager::displayGodRightHand(const Position& pos) const {
|
void PixelManager::displayGodRightHand(const Position& pos) const {
|
||||||
@ -107,3 +111,7 @@ void PixelManager::displayGodRightHand(const Position& pos) const {
|
|||||||
void PixelManager::displayGodLeftHand(const Position& pos) const {
|
void PixelManager::displayGodLeftHand(const Position& pos) const {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PixelManager::drawFPS(unsigned fps) const {
|
||||||
|
window << nsGui::Text(Position(getScreenWidth()-100, 10), "FPS : "+ to_string(fps), nsGraphics::KWhite);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user