You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.9 KiB
C++
116 lines
2.9 KiB
C++
#include <SFML/Graphics.hpp>
|
|
#include <SFML/System.hpp>
|
|
#include <SFML/Window.hpp>
|
|
|
|
#include "main.hpp"
|
|
#include "game.hpp"
|
|
|
|
namespace Proto4 {
|
|
|
|
bool Game::init() {
|
|
mainView.setCenter(0, 0);
|
|
mainView.setSize(xResolution, yResolution);
|
|
return true;
|
|
}
|
|
|
|
AppState Game::handleKey(const sf::Event &event) {
|
|
switch (state) {
|
|
case GameState::Paused:
|
|
switch (event.key.code) {
|
|
case sf::Keyboard::Q:
|
|
state = GameState::Finished;
|
|
break;
|
|
case sf::Keyboard::S:
|
|
state = GameState::Running;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case GameState::Running:
|
|
if (event.key.code == sf::Keyboard::Q)
|
|
state = GameState::Paused;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return AppState::Game;
|
|
}
|
|
|
|
AppState Game::update(sf::RenderWindow &window, sf::Time timestep) {
|
|
switch (state) {
|
|
case GameState::Finished:
|
|
reset();
|
|
return AppState::MainMenu;
|
|
|
|
case GameState::Uninitialized:
|
|
start();
|
|
break;
|
|
|
|
case GameState::Paused:
|
|
break;
|
|
|
|
case GameState::Running:
|
|
level.update(timestep);
|
|
player.update(timestep, window.mapPixelToCoords(sf::Mouse::getPosition(window), mainView));
|
|
// mainView acts as camera. TODO: introduce lagging camera
|
|
mainView.setCenter(player.getPosition());
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return AppState::Game;
|
|
}
|
|
|
|
void Game::draw(sf::RenderTarget &target, sf::RenderStates states) const {
|
|
states.transform *= getTransform();
|
|
target.setView(mainView);
|
|
target.draw(level, states);
|
|
target.draw(player, states);
|
|
}
|
|
|
|
bool Game::reset() {
|
|
player.reset();
|
|
state = GameState::Uninitialized;
|
|
return true;
|
|
}
|
|
|
|
bool Game::start() {
|
|
player.setPosition(mainView.getCenter());
|
|
level = Level(mainView.getCenter());
|
|
level.spawn(200);
|
|
level.spawn(200);
|
|
level.spawn(200);
|
|
level.spawn(700);
|
|
level.spawn(100);
|
|
level.spawn(100);
|
|
level.spawn(100);
|
|
level.spawn(100);
|
|
level.spawn(100);
|
|
level.spawn(100);
|
|
state = GameState::Running;
|
|
return true;
|
|
}
|
|
|
|
// TODO: pause menu
|
|
void Game::pause() {
|
|
if (state == GameState::Running)
|
|
state = GameState::Paused;
|
|
}
|
|
void Game::resume() {
|
|
if (state == GameState::Paused)
|
|
state = GameState::Running;
|
|
}
|
|
|
|
void Game::resize(sf::Event &resizeEvent) {
|
|
mainView.setSize(resizeEvent.size.width, resizeEvent.size.height);
|
|
mainView.setCenter(resizeEvent.size.width / 2, resizeEvent.size.height / 2);
|
|
}
|
|
|
|
sf::View& Game::getMainView() { return mainView; }
|
|
}
|