#pragma once
#include "image/image.hpp"
#include "scene.hpp"
#include "scene-state.hpp"
#include "game/game-archive.hpp"
//! сцена ингрового процесса
class Scene_loading: public Scene {
protected:
  bool first_update = true;
public:
  explicit Scene_loading(Scene* pv = nullptr): Scene(pv)
    { a83::log("goto scene LOADING"); }
  ~Scene_loading() { a83::log("exit from scene LOADING"); }
  void update(float dt) override {
    /* эта сцена обновляется только один раз, потом она меняется
    на сцену из scene_ext и, когда оттуда возвращаются, сцена
    закрывается */
    if ( !first_update)
      set_scene(scene_st::PREV);
    first_update = false;
    Scene::update(dt);
  }
  void draw() override {
    using namespace Game;
    draw_tapir(screen);
    font->print(screen, 15, 15, U"Loading...", true);
  }
private:
  nocopy(Scene_loading);
  //! рисует картинку с тапиром в рандомном дизере
  void draw_tapir(Image& dst) const {
    Image tapir(Game::archive, "common/pics/tapir.png");
    switch (a83::irand() % 7) {
      case 0: tapir.make_dither_bayer<3, 2, mtx_2x2>(); break;
      case 1: tapir.make_dither_bayer<3, 3, mtx_3x3>(); break;
      case 2: tapir.make_dither_bayer<3, 4, mtx_4x4>(); break;
      case 3: tapir.make_dither_bayer<3, 8, mtx_8x8>(); break;
      case 4: tapir.make_dither_bayer<3, 16, mtx_16x16>(); break;
      case 5: tapir.make_dither_bayer<1, 2, mtx_2x2>(); break;
      case 6:
      default: break;
    }
    tapir.print(0, 0, dst);
  } // draw_tapir
};