-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMSSFMLController.cpp
More file actions
31 lines (28 loc) · 1.47 KB
/
MSSFMLController.cpp
File metadata and controls
31 lines (28 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//
// Created by vb-jakub on 26.04.24.
//
#include "MSSFMLController.h"
#include <cmath>
MSSFMLController::MSSFMLController(MinesweeperBoard & boardRef, MSSFMLView & viewRef) : board(boardRef), view(viewRef){}
// left click on board field revealed this field (if there is not a flag)
// left click on the reset button will reset the board
// right click on board field provided to toggle flag on this field (if this field is not revealed)
void MSSFMLController::play(sf::Event & event, bool &reset) const{
if(event.type==sf::Event::MouseButtonPressed) {
int row=floor(static_cast<double>(event.mouseButton.y-view.getOffsetY())/static_cast<double>(view.getFieldSize()));
int col=floor(static_cast<double>(event.mouseButton.x-view.getOffsetX())/static_cast<double>(view.getFieldSize()));
if(event.mouseButton.button==sf::Mouse::Left){
board.revealField(row,col);
if(isReset(event)) reset=true;
}
if(event.mouseButton.button==sf::Mouse::Right)
board.toggleFlag(row,col);
}
}
bool MSSFMLController::isReset(sf::Event &event) const {
int buttonXo=view.getOffsetX()+(board.getBoardWidth()/2-1)*view.getFieldSize();
int buttonYo=view.getOffsetY()+(board.getBoardHeight()+1)*view.getFieldSize();
if(buttonYo<=event.mouseButton.y and event.mouseButton.y<=buttonYo+view.getFieldSize())
if(buttonXo<=event.mouseButton.x and event.mouseButton.x<=buttonXo+3*view.getFieldSize()) return true;
return false;
}