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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#include"includes/Global.hpp"
#include"includes/State.hpp"
#include"includes/Game.hpp"
#include<iostream>
State::State()
{
initwin();
initassets();
initui();
}
void State::initwin()
{
prozor=std::make_shared<sf::RenderWindow>(sf::VideoMode::getFullscreenModes()[0],"RPG igra",sf::Style::Fullscreen);
prozor->setVerticalSyncEnabled(true);
visina=prozor->getSize().y;
sirina=prozor->getSize().x;
}
void State::initassets()
{
font["default"]=std::make_shared<sf::Font>();
tex["neprijatelj"]=std::make_shared<sf::Texture>();
tex["health"]=std::make_shared<sf::Texture>();
tex["clear"]=std::make_shared<sf::Texture>();
tex["vampiric"]=std::make_shared<sf::Texture>();
//tex["djule"]=std::make_shared<sf::Texture>();
font["default"]->loadFromFile("assets/fonts/LiberationMono-Regular.ttf");
tex["health"]->loadFromFile("assets/images/healing.png");
tex["neprijatelj"]->loadFromFile("assets/images/nep.png");
tex["clear"]->loadFromFile("assets/images/clear.png");
tex["vampiric"]->loadFromFile("assets/images/vampiric.png");
//tex["djule"]->loadFromFile("assets/images/djule.png");
}
void State::events() {
sf::Event evnt;
while(prozor->pollEvent(evnt))
{
switch(evnt.type)
{
case sf::Event::EventType::Closed:
prozor->close();
break;
case sf::Event::EventType::Resized:
ischanged=1;
visina=prozor->getSize().y;
sirina=prozor->getSize().x;
prozor->setView(sf::View(sf::FloatRect(0,0,sirina,visina)));
std::cout<<"Nova velicina prozora je:"<<sirina<<'x'<<visina<<std::endl;
break;
case sf::Event::EventType::KeyPressed:
keyboard();
break;
default:
break;
}
}
}
void State::keyboard()
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::P)&&!kraj)
{
pause=1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
pause=0;
ischanged=1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Y))
{
newgame=1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::N))
{
prozor->close();
}
}
void State::initui()
{
podloga.setPosition(sirina/2.0,visina/2.0);
podloga.setFillColor(sf::Color::Black);
podloga.setOutlineColor(sf::Color::White);
podloga.setOutlineThickness(5);
podloga.setSize(sf::Vector2f(600.0f,120.0f));
podloga.setOrigin(podloga.getSize().x/2.0,podloga.getSize().y/2.0);
pausetext.setFont(*font["default"]);
pausetext.setString("Pauza\nPritisnite Esc da nastavite igru");
pausetext.setCharacterSize(24);
pausetext.setStyle(sf::Text::Bold);
pausetext.setFillColor(sf::Color::White);
pausetext.setOrigin(pausetext.getGlobalBounds().width/2.0,pausetext.getGlobalBounds().height/2.0);
krajtext.setFont(*font["default"]);
krajtext.setString("Kraj igre\nPritisnite Y da zapocnete novu igru");
krajtext.setCharacterSize(24);
krajtext.setStyle(sf::Text::Bold);
krajtext.setFillColor(sf::Color::White);
krajtext.setOrigin(krajtext.getGlobalBounds().width/2.0,krajtext.getGlobalBounds().height/2.0);
updateui();
}
void State::updateui()
{
pausetext.setPosition(sirina/2.0,visina/2.0);
krajtext.setPosition(sirina/2.0,visina/2.0);
podloga.setPosition(sirina/2.0,visina/2.0);
}
void State::loop()
{
std::unique_ptr<Game> igra=std::make_unique<Game>(prozor,font,tex);
while(prozor->isOpen())
{
events();
kraj=igra->gameover();
igra->loop(ischanged,pause||kraj);
if(ischanged) updateui();
igra->draw();
if(kraj)
{
prozor->draw(podloga);
prozor->draw(krajtext);
if(newgame)
{
igra=std::make_unique<Game>(prozor,font,tex);
}
}
if(pause)
{
prozor->draw(podloga);
prozor->draw(pausetext);
}
prozor->display();
prozor->clear();
ischanged=0;
newgame=0;
}
}
|