123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500 |
- #include "Core.hpp"
- #include "Echo.hpp"
- #include "Animation.hpp"
- Core::Core(Global* lg):
- _player(&_settings),
- _lives(lg->lives),
- g(lg)
- {
- _settings.view = &_view;
- _settings.window = &g->window;
- _settings.evm = &_evm;
- _settings.bg = &_background;
- _settings.fog = &_fog;
- _settings.size = Vector2u(256, 224);
- _settings.running = true;
- _settings.paused = false;
- _settings.p = &_player;
- _settings._s = g->score;
- if(_settings._s == 0 && _lives == 2)
- _settings.state = 0;
- else
- _settings.state = 2;
- _view = g->window.getDefaultView();
- loadTexture(_hud_tx, "data/hud.png");
- _hud_score.setTexture(_hud_tx);
- _hud_score.setTextureRect(IntRect(0, 0, 72, 7));
- _hud_score.setPosition(8, 0);
- _hud_highscore.setTexture(_hud_tx);
- _hud_highscore.setTextureRect(IntRect(0, 7, 72, 7));
- _hud_highscore.setPosition(88, 0);
- _hud_time.setTexture(_hud_tx);
- _hud_time.setTextureRect(IntRect(0, 14, 72, 7));
- _hud_time.setPosition(15, 17);
- _hud_energy.setTexture(_hud_tx);
- _hud_energy.setTextureRect(IntRect(0, 21, 72, 7));
- _hud_energy.setPosition(80, 17);
- loadTexture(_font, "data/numbers.png");
- _score_text.setTexture(&_font);
- _score_text.setPosition(55, 8);
- _highscore_text.setTexture(&_font);
- _highscore_text.setPosition(138, 8);
- _time_text.setTexture(&_font);
- _time_text.semicolon();
- _time_text.setPosition(18, 27);
- _energy_text.setTexture(&_font);
- _energy_text.percent();
- _energy_text.setPosition(100, 27);
- loadTexture(_head_tx, "data/glim-head.png");
- _head_tx.setRepeated(true);
- _head.setTexture(_head_tx);
- _head.setPosition(0, 224);
- _head.setOrigin(0, _head_tx.getSize().y);
- _head.setTextureRect(IntRect(0, 0, _head_tx.getSize().x * _lives, _head_tx.getSize().y));
- loadTexture(_frame_tx, "data/frame.png");
- _frame.setTexture(_frame_tx);
- _frame.setPosition(128, 224);
- _frame.setOrigin(_frame_tx.getSize().x / 2.f, _frame_tx.getSize().y + 4.f);
- if(g->reachedEast)
- _player.setPosition(16 * 86, 224);
- else
- _player.setPosition(16 * 9, 224);
- _player.addAnimation("data/snowfall-walk.png", "data/glim-walk.png", 500, "walk", true);
- _player.addAnimation("data/snowfall-idle.png", "data/glim-idle.png", 10000, "idle", true);
- _player.addAnimation("data/snowfall-longidle.png", "data/glim-longidle.png", 1000, "longidle", false);
- _player.addAnimation("data/snowfall-forward.png", "data/glim-forward.png", 1000, "forward", false);
- _player.addAnimation("data/snowfall-jump.png", "data/glim-jump.png", 200, "jump", false);
- _player.setAnimation("longidle", true);
- _view.setSize(256, 224);
- _view.setCenter(_player.getPosition().x, _player.getPosition().y - 80.f);
- loadTexture(_background_tx, "data/basic_background.png");
- _background.setTexture(_background_tx);
- _background.setOrigin((Vector2f)_background_tx.getSize() / 2.f);
- _background.setPosition(_player.getPosition().x, _player.getPosition().y - 80.f);
- loadTexture(_evm_tx, "data/evilmountain.png");
- _evm.setTexture(_evm_tx);
- _evm.setOrigin((Vector2f)_evm_tx.getSize() / 2.f);
- _evm.setPosition(_player.getPosition().x + 32.f, _player.getPosition().y - 128.f);
- loadTexture(_fog_tx, "data/basic_fog.png");
- _fog.setTexture(_fog_tx);
- _fog.setOrigin((Vector2f)_fog_tx.getSize() / 2.f);
- _fog.setColor(Color(255, 255, 255, 10));
- _fog.setPosition(_player.getPosition().x, _player.getPosition().y - 80.f);
- map.load("data/map1.tmx");
- for(unsigned i = 0; i < LAYERCOUNT; ++i) {
- _layer[i].create(map, i);
- }
- /// Left invisible wall
- _settings.cb.emplace_back(-16, 0, 16, 16 * 32);
- _settings.cb.emplace_back(192 * 16, 0, 16, 16 * 32);
- /// Graves
- _settings.cb.emplace_back(6 * 16, 13 * 16, 16, 16);
- _settings.cb.emplace_back(19 * 16, 13 * 16, 16, 16);
- _settings.cb.emplace_back(38 * 16, 13 * 16, 16, 16);
- _settings.cb.emplace_back(53 * 16, 13 * 16, 16, 16);
- _settings.cb.emplace_back(28 * 16, 9 * 16, 16, 16);
- /// Ground
- _settings.cp.emplace_back(0, 224, 64 * 16 + 16, 8);
- _settings.cp.emplace_back(22 * 16, 10 * 16, 13 * 16 + 16, 8);
- _settings.cp.emplace_back(73 * 16, 224, 130 * 16 + 16, 8);
- jedi.emplace_back(2 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(11 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(48 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(86 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(101 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(112 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(124 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(139 * 16, 13 * 16, 48, 16);
- jedi.emplace_back(171 * 16, 13 * 16, 48 * 3, 16);
- jedi.emplace_back(31 * 16, 9 * 16, 48, 16);
- _p1.create(&_settings, {23, 13}, {23, 9});
- _p2.create(&_settings, {64, 13}, {74, 13});
- _p3.create(&_settings, {75, 13}, {63, 13});
- debug.setFillColor(Color(255, 0, 0, 100));
- debug.setSize(Vector2f(4.f, 4.f));
- debug.setOrigin(2.f, 2.f);
- debug2.setFillColor(Color::Red);
- debug2.setSize(Vector2f(4.f, 4.f));
- debug2.setOrigin(2.f, 2.f);
- splashtx.loadFromFile("data/splash.png");
- splash.setTexture(splashtx);
- _settings._t = sf::seconds(120);
- _settings._s = g->score;
- _settings._h = g->high;
- _settings._e = 50;
- timegranted = false;
- boom.loadFromFile("data/shoot.wav");
- sht.setBuffer(boom);
- sht.setVolume(40.f);
- ggtex.loadFromFile("data/shot.png");
- _corrupted.emplace_back(&_settings);
- _corrupted.back().setPosition(170 * 16, 224);
- _corrupted.back().out = 0.f;
- _corrupted.back().in = 0.f;
- _corrupted.back().speed = 144.f;
- _corrupted.back().lifespan = 2000000000;
- _corrupted.back().hp = 6;
- _corrupted.back().ready = true;
- _trix.loadFromFile("data/trixie.png");
- _trixie.setPosition(_player.getPosition().x + 32.f, _player.getPosition().y);
- _trixie.setOrigin(0.f, 14.f);
- _trixie.setTexture(_trix);
- }
- Core::~Core()
- {
- }
- void Core::run()
- {
- Clock clock;
- float delta;
- float minimum = 1.f / 30.f;
- Echo(INFO, "Starting.");
- while(_settings.running) {
- think(delta);
- delta = clock.restart().asSeconds();
- while(delta > minimum) {
- delta -= minimum;
- if(!_settings.paused)
- loop(minimum);
- }
- if(!_settings.paused)
- loop(delta);
- render();
- }
- }
- void Core::think(float delta)
- {
- Event event;
- _settings.jump = false;
- while(g->window.pollEvent(event)) {
- if(event.type == Event::Closed || (event.type == Event::KeyReleased && event.key.code == Keyboard::Escape)) {
- g->window.close();
- g->restart = false;
- _settings.running = false;
- }
- else if(event.type == Event::GainedFocus) {
- _settings.paused = false;
- }
- else if(event.type == Event::LostFocus) {
- _settings.paused = true;
- }
- else if(event.type == Event::KeyReleased && event.key.code == Keyboard::P) {
- _settings.paused = !_settings.paused;
- }
- else if(_settings.state == 2 && event.type == Event::KeyPressed && (event.key.code == Keyboard::Space || event.key.code == Keyboard::X)) {
- if(_settings._e >= 10.f && !_player.dead)
- {
- _settings.jump = true;
- _settings._e -= 10.f;
- }
- }
- else if(_settings.state == 2 && event.type == Event::KeyPressed && (event.key.code == Keyboard::LControl || event.key.code == Keyboard::Z)) {
- if(gg.size() < 3 && _settings._e >= 20.f) {
- _settings._e -= 20.f;
- sht.setPitch(int(80 + rand() % 40) / 100.f);
- sht.play();
- gg.emplace_back();
- gg.back().setTexture(ggtex);
- gg.back().setOrigin(4, 4 + 24);
- gg.back().setScale(_player.getScale());
- gg.back().setPosition(_player.getPosition().x, _player.getPosition().y);
- }
- }
- else if(_settings.state < 2 && event.type == Event::KeyReleased && (
- event.key.code == Keyboard::Return || event.key.code == Keyboard::Num1)) {
- _settings.state = 2;
- _s1c.restart();
- }
- }
- }
- #include <sstream>
- void Core::loop(float delta)
- {
- if(_settings.state == 2)
- _player.loop(delta);
- else
- _player.animate();
- if(_settings.state != 1) {
- _s1c.restart();
- }
- _settings.hz.clear();
- _settings.gz.clear();
- _p1.animate();
- _p2.animate();
- _p3.animate();
- _score_text.setNumber(_settings._s);
- _highscore_text.setNumber(_settings._h);
- std::stringstream ss;
- int asfioahsfuio;
- if(int(_settings._t.asSeconds() / 60) < 10)
- ss << 0;
- ss << int(_settings._t.asSeconds() / 60.f);
- if(int(_settings._t.asSeconds()) % 60 < 10)
- ss << 0;
- ss << int(_settings._t.asSeconds()) % 60;
- ss >> asfioahsfuio;
- _time_text.setNumber(asfioahsfuio);
- _energy_text.setNumber((int)_settings._e);
- if(_settings.state == 1) {
- }
- if(_settings.state == 2) {
- if(_settings._e < 100.f) {
- _settings._e += delta * 3.f;
- bool jedifound = false;
- for(unsigned i = 0; i < jedi.size(); ++i) {
- if(jedi[i].intersects(IntRect(_player.getGlobalBounds()))) {
- jedifound = true;
- break;
- }
- }
- if(jedifound) {
- if(jediClock.getElapsedTime().asSeconds() > 1.f) {
- _settings._e += delta * 17.f;
- }
- }
- else {
- jediClock.restart();
- }
- }
- _settings._t -= seconds(delta);
- if(!timegranted && _player.getPosition().x > 70.f * 16.f) {
- timegranted = true;
- _settings._t = sf::seconds(120);
- g->reachedEast = true;
- }
- for(unsigned i = 0; i < gg.size(); ++i) {
- gg[i].move(delta * 256.f * gg[i].getScale().x, 0.f);
- _settings.gz.push_back(IntRect(gg[i].getPosition().x - gg[i].getOrigin().x,
- gg[i].getPosition().y - gg[i].getOrigin().x,
- gg[i].getTextureRect().width,
- gg[i].getTextureRect().height));
- }
- for(unsigned i = 0; i < _corrupted.size(); ++i) {
- _corrupted[i].loop(delta);
- }
- if(_corrupted[0].dead) {
- _settings._s += 900;
- _settings._s += _settings._t.asSeconds() * 10;
- _settings.state = 5;
- splashtx.loadFromFile("data/gaemover.png");
- splash.setTexture(splashtx);
- }
- for(unsigned i = 1; i < _corrupted.size(); ++i) {
- if(_corrupted[i].dead) {
- _corrupted.erase(_corrupted.begin() + i);
- i--;
- }
- }
- for(unsigned i = 0; i < _corrupted.size(); ++i) {
- if(!_corrupted[i].ready) {
- continue;
- }
- _settings.hz.push_back(IntRect(_corrupted[i].getPosition().x - _corrupted[i].getOrigin().x,
- _corrupted[i].getPosition().y - _corrupted[i].getOrigin().x,
- _corrupted[i].getTextureRect().width,
- _corrupted[i].getTextureRect().height));
- }
- for(unsigned i = 0; i < keb.size(); ++i) {
- keb[i].loop(delta);
- }
- for(unsigned i = 0; i < keb.size(); ++i) {
- if(keb[i].dead) {
- keb.erase(keb.begin() + i);
- }
- }
- for(unsigned i = 0; i < keb.size(); ++i) {
- _settings.hz.push_back(IntRect(keb[i].getPosition().x + keb[i].keb.getGlobalBounds().left,
- keb[i].getPosition().y + keb[i].spr.getGlobalBounds().top + 8.f,
- keb[i].keb.getTextureRect().width,
- keb[i].keb.getTextureRect().height + 16.f));
- _settings.hz.push_back(IntRect(keb[i].getPosition().x + keb[i].spr.getGlobalBounds().left,
- keb[i].getPosition().y + keb[i].spr.getGlobalBounds().top + 8.f,
- keb[i].spr.getTextureRect().width,
- keb[i].spr.getTextureRect().height));
- }
- //debug2.setPosition(_player.getPosition().x - 8.f * _player.getScale().x, _player.getPosition().y);
- if(_player.getPosition().x < 64 * 16) {
- if(_corr_clock.getElapsedTime().asSeconds() > 2.f && !_player.isJumping() && _corrupted.size() < 6) {
- _corr_clock.restart();
- _corrupted.emplace_back(&_settings);
- bool bad = true;
- while(bad) {
- bad = true;
- _corrupted.back().setPosition(_player.getPosition().x - 32.f + rand() % 64, _player.getPosition().y + 24.f + 16.f * (rand() % 2));
- for(unsigned i = 0; i < _settings.cp.size(); ++i) {
- if(((_corrupted.back().getPosition().x >= _settings.cp[i].left + 4.f
- && _corrupted.back().getPosition().x <= _settings.cp[i].left - 4.f + _settings.cp[i].width)
- ||
- (_corrupted.back().getPosition().x - 8.f >= _settings.cp[i].left + 4.f
- && _corrupted.back().getPosition().x - 8.f <= _settings.cp[i].left - 4.f + _settings.cp[i].width))
- && _corrupted.back().getPosition().y - 24.f >= _settings.cp[i].top
- && _corrupted.back().getPosition().y - 24.f <= _settings.cp[i].top + _settings.cp[i].height) {
- bad = false;
- break;
- }
- }
- if(_corrupted.back().getPosition().x >= _player.getPosition().x - 16.f && _corrupted.back().getPosition().x <= _player.getPosition().x + 16.f)
- bad = true;
- for(unsigned i = 0; i < _settings.cb.size() && !bad; ++i) {
- if(_corrupted.back().getPosition().x + 12.f > _settings.cb[i].left
- && _corrupted.back().getPosition().x + 12.f < _settings.cb[i].left + _settings.cb[i].width
- && _corrupted.back().getPosition().y - 24.f - 8.f > _settings.cb[i].top
- && _corrupted.back().getPosition().y - 24.f - 8.f < _settings.cb[i].top + _settings.cb[i].height) {
- bad = true;
- break;
- }
- }
- }
- }
- }
- if(_player.getPosition().x > 90 * 16 && !_player.isJumping()) {
- if(_corr_clock.getElapsedTime().asSeconds() > 2.f && keb.size() < 6) {
- _corr_clock.restart();
- keb.emplace_back(&_settings);
- keb.back().setPosition(_player.getPosition().x - 128.f + rand() % 256, _player.getPosition().y - 32.f - ((rand() % 2) * 16.f));
- keb.back().keb.setColor(Color(255, 255, 255, 0));
- }
- }
- }
- for(unsigned i = 0; i < gg.size(); ++i) {
- if(_settings.gz[i].width == 0 || _settings.gz[i].left > _view.getCenter().x + _view.getSize().x / 2.f || _settings.gz[i].left + _settings.gz[i].width < _view.getCenter().x - _view.getSize().x / 2.f) {
- gg.erase(gg.begin() + i);
- break;
- }
- }
- static float waiting = 0.f;
- if(_player.dead || _settings._t.asSeconds() < 0.5f) {
- if(waiting < 1.f) {
- if(_lives == 0) {
- _settings.state = 4;
- splashtx.loadFromFile("data/gaemover2.png");
- splash.setTexture(splashtx);
- waiting += 1.f;
- }
- else waiting += 3.f;
- }
- waiting += delta;
- if(waiting > 4.f) {
- waiting = 0.f;
- --_lives;
- g->lives--;
- g->score = _settings._s;
- _settings.running = false;
- /*_player.setPosition(16 * 9, 224);
- _head.setTextureRect(IntRect(0, 0, _head_tx.getSize().x * _lives, _head_tx.getSize().y));
- if(_lives <= -1) {
- _settings.state = 4;
- splashtx.loadFromFile("data/gaemover2.png");
- splash.setTexture(splashtx);
- }
- _view.setCenter(_player.getPosition().x, _player.getPosition().y - 80.f);
- _background.setPosition(_player.getPosition().x, _player.getPosition().y - 80.f);
- _evm.setPosition(_player.getPosition().x + 32.f, _player.getPosition().y - 128.f);
- _fog.setPosition(_player.getPosition().x, _player.getPosition().y - 80.f);
- _player.dead = false;
- _player.armored = true;
- _player.iframed = true;
- _player.iframeclock.restart();*/
- }
- }
- }
- void Core::render()
- {
- g->window.setView(_view);
- g->window.draw(_background);
- g->window.draw(_evm);
- for(unsigned i = 1; i < LAYERCOUNT; ++i) {
- g->window.draw(_layer[i]);
- }
- g->window.draw(_p1);
- g->window.draw(_p2);
- g->window.draw(_p3);
- for(unsigned i = 0; i < _corrupted.size(); ++i) {
- g->window.draw(_corrupted[i]);
- }
- for(unsigned i = 0; i < keb.size(); ++i) {
- g->window.draw(keb[i]);
- }
- g->window.draw(_layer[0]);
- if(_settings.state == 2)
- g->window.draw(_player);
- if(_settings.state == 0 && _s1c.getElapsedTime().asSeconds() < 4.f)
- g->window.draw(_trixie);
- for(unsigned i = 0; i < gg.size(); ++i) {
- g->window.draw(gg[i]);
- }
- g->window.draw(_fog);
- g->window.draw(debug);
- g->window.draw(debug2);
- g->window.setView(g->window.getDefaultView());
- g->window.draw(_hud_time);
- g->window.draw(_hud_highscore);
- g->window.draw(_hud_energy);
- g->window.draw(_highscore_text);
- g->window.draw(_time_text);
- g->window.draw(_energy_text);
- if(_settings.state == 2) {
- g->window.draw(_head);
- g->window.draw(_frame);
- }
- if(_settings.state == 0 || _settings.state > 2) {
- g->window.draw(splash);
- }
- g->window.draw(_hud_score);
- g->window.draw(_score_text);
- g->window.display();
- }
|