123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- #include "StateIngame.hpp"
- #include "StateSplash.hpp"
- #include "Asset.hpp"
- StateIngame::StateIngame():
- m_player() {
- m_map.load("data/map2.tmx");
- m_map2.load("data/map3.tmx");
- m_background.setTexture(Asset::texture("data/basic_background.png"));
- Renderer::registerDrawable(&m_background, 0, Renderer::Mode::BG, "Basic background");
- Renderer::registerDrawable(&m_background, 0, Renderer::Mode::BG, "Basic background");
- for (unsigned i = 0; i < LAYER_COUNT; ++i) {
- m_layer[i].create(m_map, i);
- m_layer[i + LAYER_COUNT].create(m_map2, i);
- Renderer::registerDrawable(&m_layer[i], i == 2 || i == 3 ? i + 100 : i, Renderer::Mode::FG, "Layer" + std::to_string(i));
- Renderer::registerDrawable(&m_layer[LAYER_COUNT + i], i == 2 || i == 3 ? i + 100 : i, Renderer::Mode::FG, "Layer" + std::to_string(i));
- Renderer::registerLayer(&m_layer[i]);
- Renderer::registerLayer(&m_layer[i + LAYER_COUNT]);
- m_layer[i].m_enabled = true;
- m_layer[LAYER_COUNT + i].m_enabled = false;
- }
- Renderer::list();
- m_spectre_list.emplace_back(Spectre::Settings({
- .sheet = "data/why/hand.png",
- .frames = 3,
- .frameDuration = 1.f,
- .size = 0.25f,
- .duration = 15.f,
- .scale = true,
- .skew = true,
- .rotate = true,
- .follow = true,
- .overlay = true,
- .rainbow = true
- }));
- m_spectre_list.emplace_back(Spectre::Settings({
- .sheet = "data/why/crescent.png",
- .frames = 3,
- .alt = 2,
- .frameDuration = 0.6f,
- .size = 0.3f,
- .duration = 15.f,
- .scale = true,
- .skew = true,
- .rotate = true,
- .follow = true,
- .overlay = true,
- .rainbow = true
- }));
- m_spectre_list.emplace_back(Spectre::Settings({
- .sheet = "data/why/donut.png",
- .frames = 3,
- .alt = 1,
- .frameDuration = 0.2f,
- .size = 0.2f,
- .duration = 6.f,
- .scale = true,
- .skew = true,
- .rotateRandom = true,
- .follow = false,
- .overlay = true,
- .rainbow = false
- }));
- m_spectre_list.emplace_back(Spectre::Settings({
- .sheet = "data/why/glowie.png",
- .frames = 2,
- .alt = 1,
- .frameDuration = 0.1f,
- .size = 0.7f,
- .duration = 10.f,
- .scale = false,
- .skew = true,
- .rotateRandom = true,
- .follow = true,
- .overlay = false,
- .rainbow = false
- }));
- m_spectre_list.emplace_back(Spectre::Settings({
- .sheet = "data/why/idk.png",
- .frames = 1,
- .alt = 1,
- .frameDuration = 4.f,
- .size = 1.f,
- .duration = 4.f,
- .scale = false,
- .skew = true,
- .rotate = true,
- .follow = true,
- .overlay = false,
- .rainbow = false
- }));
- m_spectre_list.emplace_back(Spectre::Settings({
- .sheet = "data/why/scarab.png",
- .frames = 1,
- .alt = 1,
- .frameDuration = 8.f,
- .size = 0.4f,
- .duration = 8.f,
- .scale = true,
- .skew = true,
- .rotate = true,
- .rotateRandom = true,
- .follow = true,
- .overlay = false,
- .rainbow = true
- }));
- m_vignette.setTexture(Asset::texture("data/vignette.png"));
- m_vignette.setColor(sf::Color(255, 255, 255, 0));
- Renderer::registerDrawable(&m_vignette, 0, Renderer::Mode::UI);
- m_wind.openFromFile("data/whitewind.ogg");
- m_brown.openFromFile("data/brownnoise.ogg");
- m_wind.setVolume(0.f);
- m_brown.setVolume(0.f);
- m_wind.setLoop(true);
- m_brown.setLoop(true);
- m_wind.play();
- m_brown.play();
- m_snd.setBuffer(Asset::sound("data/brownshort.wav"));
- m_snd.setLoop(false);
- m_snd.setVolume(40.f);
- reset();
- Log(INFO, "Ingame state up");
- stateReady();
- }
- StateIngame::~StateIngame() {
- Renderer::deregisterDrawable(&m_background);
- for (unsigned i = 0; i < LAYER_COUNT; ++i) {
- Renderer::deregisterDrawable(&m_layer[i]);
- Renderer::deregisterLayer(&m_layer[i]);
- Renderer::deregisterDrawable(&m_layer[i + LAYER_COUNT]);
- Renderer::deregisterLayer(&m_layer[i + LAYER_COUNT]);
- }
- Renderer::deregisterDrawable(&m_vignette);
- Log(INFO, "Ingame state down");
- }
- void StateIngame::reset() {
- //Collider::populate(m_blockLayer.rebuildCollider(m_renderer.getFocus()));
- //Collider::setLocalX(m_renderer.getPosition() - 320.f);
- //Collider::sort();
- Renderer::sort();
- Renderer::list();
- }
- void StateIngame::onEvent(sf::Event event) {
- if (event.type == sf::Event::GainedFocus) {
- m_paused = false;
- } else if (event.type == sf::Event::LostFocus) {
- m_paused = true;
- } else if (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::P) {
- m_paused = !m_paused;
- }
- else if (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::F1) {
- m_player.cheat();
- }
- }
- void StateIngame::onUpdate(float dt) {
- static float previous_chaos = Spectre::getChaos();
- m_player.update(dt);
- Spectre::addChaos(-dt / 120.f);
- for (Spectre* s : m_spectres) {
- if (!s->isDead()) {
- s->update(dt);
- }
- }
- for (size_t i = 0; i < m_spectres.size(); ++i) {
- if (m_spectres[i]->isDead()) {
- delete m_spectres[i];
- m_spectres.erase(m_spectres.begin() + i);
- }
- }
- if (m_wind.getVolume() > 30.f) {
- m_wind.setVolume(30.f);
- }
- else if (m_wind.getVolume() < 30.f) {
- m_wind.setVolume(m_wind.getVolume() + dt * 0.7f);
- }
- // Chaos changed
- if (previous_chaos != Spectre::getChaos()) {
- float chaos = Spectre::getChaos();
- previous_chaos = chaos;
-
- m_brown.setVolume(std::pow(10, 1.85f * chaos) - 0.1f);
- m_vignette.setColor(sf::Color(255, 255, 255, 255 * chaos));
- }
- static float spawn_clock = -10.f;
- if (Spectre::getMaxChaos() > 0.f) {
- spawn_clock += dt;
- }
- if (Spectre::getMaxChaos() > 0.f && spawn_clock > 3.f - 2.f * Spectre::getChaos()) {
- m_spectres.push_back(new Spectre(m_spectre_list[rand() % m_spectre_list.size()]));
- int dx = rand() % 600 + 600;
- int dy = rand() % 600 + 600;
- if (rand() % 2) {
- dx *= -1;
- }
- if (rand() % 2) {
- dy *= -1;
- }
- if (Renderer::readyToDie() || rand() % 10 <= 1) {
- m_spectres.back()->setPosition(m_player.getPosition() + sf::Vector2f(dx, dy));
- }
- else {
- m_spectres.back()->setPosition(m_player.getSpawnerPosition() + sf::Vector2f(dx, dy));
- }
- if (m_spectres.size() > 15) {
- m_spectres[0]->pleaseDie();
- m_spectres[1]->pleaseDie();
- m_spectres[2]->pleaseDie();
- //m_spectres.erase(m_spectres.begin());
- }
- spawn_clock = 0.f;
- }
- //Log(DEBUG, Spectre::getChaos(), " ", m_spectres.size());
- if (Spectre::getChaos() > 0.5f) {
- static float fucklock = 0.f;
- static int fuckid = -1;
- fucklock += dt;
- if (fuckid == -1 && fucklock > 21 - 17.f * Spectre::getChaos() && rand() % 500 == 0) {
- fuckid = rand() % LAYER_COUNT;
- fucklock = 0.f;
- m_layer[fuckid].m_enabled = false;
- m_layer[LAYER_COUNT + fuckid].m_enabled = true;
- m_layer[LAYER_COUNT + fuckid].whack();
- m_snd.play();
- }
- if (fucklock > 0.5f && fuckid != -1) {
- m_layer[fuckid].m_enabled = true;
- m_layer[LAYER_COUNT + fuckid].m_enabled = false;
- fuckid = -1;
- fucklock = 0.f;
- }
- if (Renderer::isDead()) {
- stateFin();
- stateDie();
- }
- }
-
- /*m_collider.update(dt);
- for (IEntity* ie : m_entities) {
- ie->update(dt);
- }
- m_renderer.update(dt);*/
- }
- void StateIngame::onRender() {
- /*m_collider.update(dt);
- for (IEntity* ie : m_entities) {
- ie->update(dt);
- }
- m_renderer.update(dt);*/
- }
- State* StateIngame::next() const {
- return nullptr;//new StateSplash(StateSplash::SplashType::VICTORY);
- }
|