-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmouse.cpp
103 lines (86 loc) · 3.47 KB
/
mouse.cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <SFML/Window/Mouse.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include "mouse.h"
#include "interactionMode.h"
#include "buildingType.h"
Mouse::Mouse(sf::RenderWindow* hutrieApplication, ModelController* modelController,
GameLogicController* gameLogicController)
{
MouseLock* mouseLock = new MouseLock();
this->mouseLock = mouseLock;
this->hutrieApplication = hutrieApplication;
this->modelController = modelController;
this->gameLogicController = gameLogicController;
}
void Mouse::leftClickActions()
{
if (mouseLock->getIsLocked())
{
return;
}
if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
int applicationWidth = modelController->getApplicationWidth();
int applicationHeight = modelController->getApplicationHeight();
if( modelController->getChosenInteractionMode() == InteractionMode::MENUMODE)
{
gameLogicController->handleMenuButtonsAction();
if (!modelController->getReadyForGame()) return;
}
if( modelController->getPauseGame())
{
gameLogicController->handlePauseButtonsAction();
return;
}
if(modelController->getExitWindow())
{
gameLogicController->handleExitButtonsAction();
return;
}
gameLogicController->endHighlightUnit(); //zeby po kliknieciu gdzie indziej nie zostawala niepotrzebna ramka
if (sf::Mouse::getPosition(*hutrieApplication).x < applicationWidth &&
sf::Mouse::getPosition(*hutrieApplication).y > 64 &&
sf::Mouse::getPosition(*hutrieApplication).y <
applicationHeight + 64) //jesli klikniecie w obrebie mapy
{
gameLogicController->findSelectedUnit();
handleClickOnMap();
return;
}
gameLogicController->handleGUIButtonsAction();
gameLogicController->updateBuildingGrid(); //przy kliknieciu sprawdza czy siatka pokazujaca wolne pola powinna byc wyswietlana
}
}
void Mouse::rightClickActions()
{
if (mouseLock->getIsLocked())
{
return;
}
if (sf::Mouse::isButtonPressed(sf::Mouse::Right))
{
modelController->setChosenInteractionMode(InteractionMode::NEUTRALMODE);
gameLogicController->updateBuildingGrid();
}
}
void Mouse::updateMouseLock()
{
mouseLock->update();
}
void Mouse::handleClickOnMap()
{
if (gameLogicController->isUnitEmpty()) //jesli unit jest wolny, bez zadnego mapobjectu
{
if ( modelController->getChosenInteractionMode() == InteractionMode::BUILDMODE )
{
gameLogicController->handleBuildingCreation();
}
}
else if ( modelController->getChosenInteractionMode() != InteractionMode::BUILDMODE || ( modelController->getChosenInteractionMode() == InteractionMode::BUILDMODE && modelController->getChosenBuildingType() == BuildingType::HUTRIESHALL) )
////////////////////////////EMPHASIZE UNIT WITH MAPOBJECT///////////////////////////////////////////////////////////////////////////////////
{
modelController->setChosenInteractionMode(InteractionMode::INFOMODE);
gameLogicController->updateBuildingGrid(); //przy kliknieciu sprawdza czy siatka pokazujaca wolne pola powinna byc wyswietlana
gameLogicController->highlightUnits();
}
}