|
@@ -15,9 +15,11 @@
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+#include <cmath>
|
|
|
|
+#include <thread>
|
|
|
|
+#include <sstream>
|
|
#include "IngameState.hpp"
|
|
#include "IngameState.hpp"
|
|
#include "Player.hpp"
|
|
#include "Player.hpp"
|
|
-#include <thread>
|
|
|
|
|
|
|
|
IngameState::IngameState(): State(), _player(), _paused(false), _blurSize(0.f), _frameAlpha(0.f), _wormhole() {}
|
|
IngameState::IngameState(): State(), _player(), _paused(false), _blurSize(0.f), _frameAlpha(0.f), _wormhole() {}
|
|
|
|
|
|
@@ -50,7 +52,7 @@ void IngameState::init()
|
|
|
|
|
|
_player.setContext(_context);
|
|
_player.setContext(_context);
|
|
_player.setTexture(_context->assets->loadTexture(rand() % 10 == 0 ? "data/triangle/Illuminati.png" : "data/triangle/Texture.png"));
|
|
_player.setTexture(_context->assets->loadTexture(rand() % 10 == 0 ? "data/triangle/Illuminati.png" : "data/triangle/Texture.png"));
|
|
- _player.setPosition(400.f, 400.f);
|
|
|
|
|
|
+ _player.setPosition(556.f, 2200.f);
|
|
|
|
|
|
_foreground.create("data/background/Foreground.jpg", "data/background/Foreground_normal.jpg", "data/background/75pxjitter03.png");
|
|
_foreground.create("data/background/Foreground.jpg", "data/background/Foreground_normal.jpg", "data/background/75pxjitter03.png");
|
|
_context->foreground = &_foreground;
|
|
_context->foreground = &_foreground;
|
|
@@ -77,13 +79,19 @@ void IngameState::init()
|
|
_blurH.loadFromFile("data/shaders/old_pi_blur/blur.vert", "data/shaders/old_pi_blur/blur-h.frag");
|
|
_blurH.loadFromFile("data/shaders/old_pi_blur/blur.vert", "data/shaders/old_pi_blur/blur-h.frag");
|
|
|
|
|
|
_marioSound.setBuffer(_context->assets->loadSound("data/audio/Mario.ogg"));
|
|
_marioSound.setBuffer(_context->assets->loadSound("data/audio/Mario.ogg"));
|
|
- _wasted.setTexture(_context->assets->loadTexture("data/background/Wasted.png"));
|
|
|
|
|
|
+ _dotaSound.setBuffer(_context->assets->loadSound("data/audio/Victory.ogg"));
|
|
|
|
|
|
_wormhole.load(_context->assets->loadTexture("data/triangle/Wormhole.png"), _context->assets->loadTexture("data/triangle/Wormhole_light.png"));
|
|
_wormhole.load(_context->assets->loadTexture("data/triangle/Wormhole.png"), _context->assets->loadTexture("data/triangle/Wormhole_light.png"));
|
|
_wormhole.setPosition(400.f, 400.f);
|
|
_wormhole.setPosition(400.f, 400.f);
|
|
|
|
|
|
|
|
+ _statsTime.setFont(_context->assets->loadFont("data/ttf/canonical/Ubuntu-L.ttf"));
|
|
|
|
+ _statsHull.setFont(_context->assets->loadFont("data/ttf/canonical/Ubuntu-L.ttf"));
|
|
|
|
+ _statsTime.setCharacterSize(30);
|
|
|
|
+ _statsHull.setCharacterSize(30);
|
|
|
|
+
|
|
// Global window is not initialized yet in this method. If you need _context->window->getSize(), go to refresh() instead.
|
|
// Global window is not initialized yet in this method. If you need _context->window->getSize(), go to refresh() instead.
|
|
|
|
|
|
|
|
+ _totalTime.restart();
|
|
_status = State::Ongoing;
|
|
_status = State::Ongoing;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -99,7 +107,9 @@ void IngameState::refresh()
|
|
_pauseFrame.setSize((sf::Vector2f)res);
|
|
_pauseFrame.setSize((sf::Vector2f)res);
|
|
|
|
|
|
_wasted.setScale(_context->window->getSize().x / 1920.f, _context->window->getSize().y / 1080.f);
|
|
_wasted.setScale(_context->window->getSize().x / 1920.f, _context->window->getSize().y / 1080.f);
|
|
- _wasted.setPosition(0, _context->window->getSize().y);
|
|
|
|
|
|
+ _wasted.setPosition(_context->window->getSize().x / 2.f, _context->window->getSize().y * 1.5f);
|
|
|
|
+ _statsTime.setPosition(_wasted.getPosition().x, _wasted.getPosition().y + 100.f);
|
|
|
|
+ _statsHull.setPosition(_wasted.getPosition().x, _wasted.getPosition().y + 100.f);
|
|
|
|
|
|
_backgroundH.create(_context->window->getSize().x, _context->window->getSize().y);
|
|
_backgroundH.create(_context->window->getSize().x, _context->window->getSize().y);
|
|
_backgroundV.create(_context->window->getSize().x, _context->window->getSize().y);
|
|
_backgroundV.create(_context->window->getSize().x, _context->window->getSize().y);
|
|
@@ -127,6 +137,7 @@ void IngameState::coreInput()
|
|
}
|
|
}
|
|
void IngameState::coreUpdate(sf::Time delta)
|
|
void IngameState::coreUpdate(sf::Time delta)
|
|
{
|
|
{
|
|
|
|
+ float seconds = delta.asSeconds();
|
|
if(_player.isDead())
|
|
if(_player.isDead())
|
|
{
|
|
{
|
|
if(_blurSize < 4.f)
|
|
if(_blurSize < 4.f)
|
|
@@ -144,10 +155,17 @@ void IngameState::coreUpdate(sf::Time delta)
|
|
_blurH.setParameter("blurSize", _blurSize / _context->window->getSize().x);
|
|
_blurH.setParameter("blurSize", _blurSize / _context->window->getSize().x);
|
|
_blurV.setParameter("blurSize", _blurSize / _context->window->getSize().y);
|
|
_blurV.setParameter("blurSize", _blurSize / _context->window->getSize().y);
|
|
|
|
|
|
- if(_wasted.getPosition().y > 0.f)
|
|
|
|
|
|
+ if((_wasted.getPosition().y > _context->window->getSize().y / 2.f)
|
|
|
|
+ || (_wasted.getPosition().y < -_context->window->getSize().y / 2.f
|
|
|
|
+ && _marioSound.getStatus() == sf::Sound::Status::Stopped && !_player.hasWon()))
|
|
|
|
+ {
|
|
_wasted.move(0.f, -250.f * delta.asSeconds());
|
|
_wasted.move(0.f, -250.f * delta.asSeconds());
|
|
- else if(_wasted.getPosition().y < 0.f)
|
|
|
|
- _wasted.setPosition(0.f, 0.f);
|
|
|
|
|
|
+ if(_player.hasWon())
|
|
|
|
+ {
|
|
|
|
+ _statsTime.setPosition(_wasted.getPosition().x, _wasted.getPosition().y + 100.f);
|
|
|
|
+ _statsHull.setPosition(_wasted.getPosition().x, _wasted.getPosition().y + 100.f);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if(_paused)
|
|
if(_paused)
|
|
@@ -165,10 +183,47 @@ void IngameState::coreUpdate(sf::Time delta)
|
|
if(_player.checkCollision(_foreground)) /// True if the target died.
|
|
if(_player.checkCollision(_foreground)) /// True if the target died.
|
|
{
|
|
{
|
|
_paused = true;
|
|
_paused = true;
|
|
|
|
+ _wasted.setTexture(_context->assets->loadTexture("data/background/Wasted.png"));
|
|
|
|
+ _wasted.setOrigin(sf::Vector2f(_context->assets->loadTexture("data/background/Wasted.png").getSize() / 2u));
|
|
_marioSound.play();
|
|
_marioSound.play();
|
|
}
|
|
}
|
|
|
|
+ else if(_player.isDead() && _player.hasWon())
|
|
|
|
+ {
|
|
|
|
+ _paused = true;
|
|
|
|
+ _wasted.setTexture(_context->assets->loadTexture("data/background/Victory.png"));
|
|
|
|
+ _wasted.setOrigin(sf::Vector2f(_context->assets->loadTexture("data/background/Victory.png").getSize() / 2u));
|
|
|
|
+ std::ostringstream oss;
|
|
|
|
+ int minutesElapsed = int(_totalTime.getElapsedTime().asSeconds()) / 60;
|
|
|
|
+ int secondsElapsed = int(_totalTime.getElapsedTime().asSeconds()) % 60;
|
|
|
|
+ oss << "Time: " << minutesElapsed << ":" << (secondsElapsed < 10 ? "0" : "") << secondsElapsed;
|
|
|
|
+ _statsTime.setString(oss.str());
|
|
|
|
+ oss.str(std::string());
|
|
|
|
+ oss.clear();
|
|
|
|
+ oss << "Hull: " << int(_player.getHullLeft()) << "%";
|
|
|
|
+ _statsHull.setString(oss.str());
|
|
|
|
+ _statsTime.setOrigin(_statsTime.getLocalBounds().width / 2.f, _statsTime.getLocalBounds().height / 2.f);
|
|
|
|
+ _statsHull.setOrigin(_statsTime.getLocalBounds().width / 2.f, _statsTime.getLocalBounds().height + _statsHull.getLocalBounds().height / 2.f + 30.f);
|
|
|
|
+ _dotaSound.play();
|
|
|
|
+ }
|
|
|
|
|
|
_wormhole.update(delta);
|
|
_wormhole.update(delta);
|
|
|
|
+
|
|
|
|
+ float gravity = _wormhole.gravity(_player.getPosition());
|
|
|
|
+ if(gravity < 1000.f)
|
|
|
|
+ {
|
|
|
|
+ float k = 1000000.f - gravity * gravity;
|
|
|
|
+ if(k > 0.f)
|
|
|
|
+ {
|
|
|
|
+ sf::Vector2f offset = k * seconds * 0.00025f * _wormhole.direction(_player.getPosition());
|
|
|
|
+ _camera.move(offset);
|
|
|
|
+ _player.move(offset);
|
|
|
|
+ _player.rotate(k * seconds * 0.0001f);
|
|
|
|
+ }
|
|
|
|
+ if(gravity < 200.f)
|
|
|
|
+ _player.setScale(gravity / 200.f, gravity / 200.f);
|
|
|
|
+ else
|
|
|
|
+ _player.setScale(1.f, 1.f);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
void IngameState::coreRender(const bool shaders)
|
|
void IngameState::coreRender(const bool shaders)
|
|
{
|
|
{
|
|
@@ -177,6 +232,7 @@ void IngameState::coreRender(const bool shaders)
|
|
_backgroundH.draw(_background);
|
|
_backgroundH.draw(_background);
|
|
_backgroundH.setView(*_camera.getView());
|
|
_backgroundH.setView(*_camera.getView());
|
|
_backgroundH.draw(_foreground);
|
|
_backgroundH.draw(_foreground);
|
|
|
|
+ _backgroundH.draw(_wormhole);
|
|
_backgroundH.draw(_player);
|
|
_backgroundH.draw(_player);
|
|
sf::Sprite sprite3(_lightSystem.getLightingTexture());
|
|
sf::Sprite sprite3(_lightSystem.getLightingTexture());
|
|
sf::RenderStates lightRenderStates;
|
|
sf::RenderStates lightRenderStates;
|
|
@@ -197,6 +253,8 @@ void IngameState::coreRender(const bool shaders)
|
|
_context->window->draw(sprite2, &_blurH);
|
|
_context->window->draw(sprite2, &_blurH);
|
|
_context->window->draw(_pauseFrame);
|
|
_context->window->draw(_pauseFrame);
|
|
_context->window->draw(_wasted);
|
|
_context->window->draw(_wasted);
|
|
|
|
+ _context->window->draw(_statsTime);
|
|
|
|
+ _context->window->draw(_statsHull);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|