aboutsummaryrefslogtreecommitdiff
path: root/src/State.cpp
blob: 9e20035270d1686342ebf8ed2509e3c630ffdc7b (plain)
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;
    }
}