359 lines
No EOL
6.5 KiB
C++
359 lines
No EOL
6.5 KiB
C++
// Header
|
|
#include <game/navbar.h>
|
|
|
|
// Constructor
|
|
Navbar::Navbar(Tilemap* tilemap){
|
|
// Setting variables
|
|
this->tilemap = tilemap;
|
|
didClick = false;
|
|
|
|
// Getting texture
|
|
SDL_Surface* surf = IMG_Load("data/sprites/glyph.png");
|
|
if(surf == NULL){
|
|
throw("Failed to load Glyph surface.\n");
|
|
}
|
|
|
|
texture = SDL_CreateTextureFromSurface(Engine::renderer, surf);
|
|
SDL_FreeSurface(surf);
|
|
}
|
|
|
|
// Functions
|
|
/// Private
|
|
void Navbar::_drawBackground(){
|
|
// Making a rect for the top
|
|
SDL_Rect rect;
|
|
rect.x = 0;
|
|
rect.y = 0;
|
|
rect.w = SCR_WIDTH;
|
|
rect.h = SCR_H_BUFFER;
|
|
|
|
// Color
|
|
SDL_SetRenderDrawColor(Engine::renderer, 190,190,190, 1);
|
|
SDL_RenderFillRect(Engine::renderer, &rect);
|
|
}
|
|
void Navbar::_drawFlagCounter(){
|
|
if(tilemap->flags < 10){
|
|
// Positional rect
|
|
SDL_Rect rect;
|
|
rect.x = SCR_WIDTH / 10;
|
|
rect.y = 0;
|
|
rect.w = 50; rect.h = 50;
|
|
|
|
// Frame
|
|
SDL_Rect frame;
|
|
frame.x = 0; frame.y = 0;
|
|
frame.w = 16; frame.h = 16;
|
|
|
|
// What number?
|
|
switch(tilemap->flags){
|
|
case 0:
|
|
frame.x = 0;
|
|
frame.y = 0;
|
|
break;
|
|
case 1:
|
|
frame.x = 1;
|
|
frame.y = 0;
|
|
break;
|
|
case 2:
|
|
frame.x = 2;
|
|
frame.y = 0;
|
|
break;
|
|
case 3:
|
|
frame.x = 3;
|
|
frame.y = 0;
|
|
break;
|
|
case 4:
|
|
frame.x = 4;
|
|
frame.y = 0;
|
|
break;
|
|
case 5:
|
|
frame.x = 0;
|
|
frame.y = 1;
|
|
break;
|
|
case 6:
|
|
frame.x = 1;
|
|
frame.y = 1;
|
|
break;
|
|
case 7:
|
|
frame.x = 2;
|
|
frame.y = 1;
|
|
break;
|
|
case 8:
|
|
frame.x = 3;
|
|
frame.y = 1;
|
|
break;
|
|
case 9:
|
|
frame.x = 4;
|
|
frame.y = 1;
|
|
break;
|
|
}
|
|
|
|
// Scaling to size
|
|
frame.x *= 16;
|
|
frame.y *= 16;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
}
|
|
else{
|
|
// Positional rect
|
|
SDL_Rect rect;
|
|
rect.x = SCR_WIDTH / 10;
|
|
rect.y = 0;
|
|
rect.w = 50; rect.h = 50;
|
|
|
|
// Frame
|
|
SDL_Rect frame;
|
|
frame.x = 0; frame.y = 0;
|
|
frame.w = 16; frame.h = 16;
|
|
|
|
Vector2 fPos = _getNumber(tilemap->flags%10);
|
|
frame.x = fPos.x;
|
|
frame.y = fPos.y;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
|
|
// The second one
|
|
rect.x -= 50;
|
|
|
|
fPos = _getNumber((tilemap->flags / 10)%10);
|
|
frame.x = fPos.x;
|
|
frame.y = fPos.y;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
}
|
|
}
|
|
void Navbar::_drawFace(){
|
|
// Shapes
|
|
SDL_Rect rect;
|
|
SDL_Rect frame;
|
|
|
|
rect.x = (SCR_WIDTH / 2) - (25);
|
|
rect.y = 0;
|
|
rect.w = 50; rect.h = 50;
|
|
|
|
frame.w = 16;
|
|
frame.h = 16;
|
|
|
|
// This face is gonna be weird to draw..
|
|
if(Engine::clicking){
|
|
// Anxious face
|
|
frame.x = 1;
|
|
frame.y = 2;
|
|
}
|
|
else if(!tilemap->playing && !tilemap->win){
|
|
// Sad face
|
|
frame.x = 2;
|
|
frame.y = 2;
|
|
}
|
|
else{
|
|
// Happy face
|
|
frame.x = 0;
|
|
frame.y = 2;
|
|
}
|
|
|
|
// Scaling to size
|
|
frame.x *= 16;
|
|
frame.y *= 16;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
}
|
|
void Navbar::_drawTime(){
|
|
if(tilemap->gameTime < 10){
|
|
// Positional rect
|
|
SDL_Rect rect;
|
|
rect.x = SCR_WIDTH / 1.2f;
|
|
rect.y = 0;
|
|
rect.w = 50; rect.h = 50;
|
|
|
|
// Frame
|
|
SDL_Rect frame;
|
|
frame.x = 0; frame.y = 0;
|
|
frame.w = 16; frame.h = 16;
|
|
|
|
// What number?
|
|
switch(tilemap->gameTime){
|
|
case 0:
|
|
frame.x = 0;
|
|
frame.y = 0;
|
|
break;
|
|
case 1:
|
|
frame.x = 1;
|
|
frame.y = 0;
|
|
break;
|
|
case 2:
|
|
frame.x = 2;
|
|
frame.y = 0;
|
|
break;
|
|
case 3:
|
|
frame.x = 3;
|
|
frame.y = 0;
|
|
break;
|
|
case 4:
|
|
frame.x = 4;
|
|
frame.y = 0;
|
|
break;
|
|
case 5:
|
|
frame.x = 0;
|
|
frame.y = 1;
|
|
break;
|
|
case 6:
|
|
frame.x = 1;
|
|
frame.y = 1;
|
|
break;
|
|
case 7:
|
|
frame.x = 2;
|
|
frame.y = 1;
|
|
break;
|
|
case 8:
|
|
frame.x = 3;
|
|
frame.y = 1;
|
|
break;
|
|
case 9:
|
|
frame.x = 4;
|
|
frame.y = 1;
|
|
break;
|
|
}
|
|
|
|
// Scaling to size
|
|
frame.x *= 16;
|
|
frame.y *= 16;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
}
|
|
else{
|
|
// Positional rect
|
|
SDL_Rect rect;
|
|
rect.x = SCR_WIDTH / 1.2f;
|
|
rect.y = 0;
|
|
rect.w = 50; rect.h = 50;
|
|
|
|
// Frame
|
|
SDL_Rect frame;
|
|
frame.x = 0; frame.y = 0;
|
|
frame.w = 16; frame.h = 16;
|
|
|
|
Vector2 fPos = _getNumber(tilemap->gameTime%10);
|
|
frame.x = fPos.x;
|
|
frame.y = fPos.y;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
|
|
// The second one
|
|
rect.x -= 50;
|
|
|
|
fPos = _getNumber((tilemap->gameTime / 10)%10);
|
|
frame.x = fPos.x;
|
|
frame.y = fPos.y;
|
|
|
|
// Drawing
|
|
SDL_SetRenderDrawColor(Engine::renderer, 255,255,255, 1);
|
|
SDL_RenderCopy(Engine::renderer, texture, &frame, &rect);
|
|
}
|
|
}
|
|
Vector2 Navbar::_getNumber(int number){
|
|
// Result
|
|
Vector2 frame(0,0);
|
|
|
|
// What number?
|
|
switch(number){
|
|
case 0:
|
|
frame.x = 0;
|
|
frame.y = 0;
|
|
break;
|
|
case 1:
|
|
frame.x = 1;
|
|
frame.y = 0;
|
|
break;
|
|
case 2:
|
|
frame.x = 2;
|
|
frame.y = 0;
|
|
break;
|
|
case 3:
|
|
frame.x = 3;
|
|
frame.y = 0;
|
|
break;
|
|
case 4:
|
|
frame.x = 4;
|
|
frame.y = 0;
|
|
break;
|
|
case 5:
|
|
frame.x = 0;
|
|
frame.y = 1;
|
|
break;
|
|
case 6:
|
|
frame.x = 1;
|
|
frame.y = 1;
|
|
break;
|
|
case 7:
|
|
frame.x = 2;
|
|
frame.y = 1;
|
|
break;
|
|
case 8:
|
|
frame.x = 3;
|
|
frame.y = 1;
|
|
break;
|
|
case 9:
|
|
frame.x = 4;
|
|
frame.y = 1;
|
|
break;
|
|
}
|
|
|
|
// Scaling to size
|
|
frame.x *= 16;
|
|
frame.y *= 16;
|
|
|
|
// Return result
|
|
return frame;
|
|
}
|
|
/// Public
|
|
void Navbar::Update(){
|
|
// Did we click on the face?
|
|
if(Engine::clicking
|
|
&& !didClick){
|
|
// Clicking!
|
|
didClick = true;
|
|
|
|
// Getting the mouse position
|
|
Vector2 mPos = Engine::mousePos;
|
|
|
|
// Constant
|
|
const int mid_w = SCR_WIDTH / 2;
|
|
|
|
// Face clicking?
|
|
if(mPos.x >= mid_w - 50
|
|
&& mPos.x <= mid_w + 50
|
|
&& mPos.y <= SCR_H_BUFFER){
|
|
// Restart game
|
|
tilemap->Reset();
|
|
}
|
|
}
|
|
if(!Engine::clicking){
|
|
didClick = false;
|
|
}
|
|
}
|
|
void Navbar::Draw(){
|
|
// Drawing stuff in order
|
|
/// Background
|
|
_drawBackground();
|
|
|
|
/// Flags counter
|
|
_drawFlagCounter();
|
|
|
|
/// Smiley face
|
|
_drawFace();
|
|
|
|
/// Time
|
|
_drawTime();
|
|
} |