#include "level-dummy-2.hpp"
void Level_dummy_2::test_spawn() {
  // малая длительность кадра
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-128, -96};
    p->frame_timer = TFC(0.25f);
  }
  // 1 фрейм = 1 кадр
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-112, -96};
    p->frame_timer = TFC(4);
  }
  // длительность анимации = секунда
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-96, -96};
    p->frame_timer = 1;
  }
  // случайный кадр каждый фрейм
  if (Prt* p = add_prt(PRT_DUMMY); p) {
    p->phys.pos = {-80, -96};
    p->flags |= EF_R_FRAME;
    p->frame_timer = 1;
  }
  // случайный кадр каждый фрейм 2
  if (Prt* p = add_prt(PRT_DUMMY); p) {
    p->phys.pos = {-64, -96};
    p->flags |= EF_R_FRAME;
    p->frame_timer = 1;
  }
  // каждый кадр случайная анимация
  if (Prt* p = add_prt(PRT_DUMMY); p) {
    p->phys.pos = {-48, -96};
    p->flags |= EF_R_FRAME_ANY;
  }
  // взрыв
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {-32, -96};
    p->frame_timer = TFC(3.5f);
  }
  // взрыв на 1 кадр
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {0, -96};
    p->frame_timer = TFC(3.5f);
    p->flags |= EF_KILL_FRAME;
  }
  // взрыв. смерть по окончании анимации
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {32, -96};
    p->frame_timer = TFC(3.5f);
    p->flags |= EF_KILL_ANIM;
  }
  // вечная анимация быстрая
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-128, -64};
    p->frame_timer = TFC(0.25f);
    p->set_infinity();
  }
  // вечная анимация в секунду
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-112, -64};
    p->frame_timer = 1;
    p->set_infinity();
  }
  // без обновы
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-96, -64};
    p->flags |= EF_NO_UPDATE;
  }
  // без рисования
  if (Prt* p = add_prt(PRT_DUMMY); p) { 
    p->phys.pos = {-80, -64};
    p->flags |= EF_NO_DRAW;
  }
  // взрыв случайный угол
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {-64, -64};
    p->frame_timer = TFC(7);
    p->flags |= EF_R_DEG;
    p->set_infinity();
  }
  // взрыв случайный угол 2
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {-32, -64};
    p->frame_timer = TFC(7);
    p->flags |= EF_R_DEG;
    p->set_infinity();
  }
  // взрыв случайный угол каждый кадр
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {0, -64};
    p->frame_timer = TFC(10);
    p->flags |= EF_R_DEG_ANY;
    p->set_infinity();
  }
  // взрыв с эффектами
  if (Prt* p = add_prt(PRT_SMALL_EXPL); p) {
    p->phys.pos = {32, -64};
    p->frame_timer = TFC(7);
    p->set_infinity();
    p->light = Light(1, 9999, 32, LF_STAR | LF_INFINITY | LF_RAND | LF_RSIZE);
    p->haze = Haze(9999, 3, 2, 32, 24);
  }
  // тест движения по инерции
  if (Prt* p = add_prt(PRT_SHOOT_1); p) {
    p->phys.pos = {64, -64};
    p->phys.spd = 150;
    p->phys.rst = 1.5f;
    p->phys.set_deg(240);
    p->frame_timer = TFC(5);
    p->set_infinity();
  }
  // EF_NO_MOVE
  if (Prt* p = add_prt(PRT_SHOOT_1); p) {
    p->phys.pos = {80, -64};
    p->phys.spd = 150;
    p->phys.rst = 1.5f;
    p->phys.set_deg(240);
    p->flags |= EF_NO_MOVE;
    p->frame_timer = TFC(5);
    p->set_infinity();
  }
  // летит вниз на встречу другой
  if (Prt* p = add_prt(PRT_DUMMY); p) {
    p->phys.pos = {96, -64};
    p->phys.spd = 20;
    p->phys.rst = 0.5f;
    p->phys.set_deg(270);
    p->set_infinity();
  }
  // летит вверх на встречу другой
  if (Prt* p = add_prt(PRT_DUMMY); p) {
    p->phys.pos = {96, 0};
    p->phys.spd = 20;
    p->phys.rst = 0.5f;
    p->phys.set_deg(90);
    p->set_infinity();
  }
  // пуля сталкивается с другой
  {
    if (Blt* p = add_blt(BLT_ELIPS); p) {
      p->phys.pos = {112, 128};
      p->phys.spd = 40;
      p->phys.set_deg(90);
      p->frame_timer = TFC(4);
      p->flags |= EF_R_DEG | EF_DMG_BULLET;
    }
    if (Blt* p = add_blt(BLT_ELIPS); p) {
      p->phys.pos = {112, -128};
      p->phys.spd = 40;
      p->phys.set_deg(270);
      p->frame_timer = TFC(4);
      p->flags |= EF_R_DEG | EF_DMG_BULLET;
    }
  }
  // пуля сталкивается с другой быстро
  {
    if (Blt* p = add_blt(BLT_ELIPS); p) {
      p->phys.pos = {128, 128};
      p->phys.spd = 120;
      p->phys.set_deg(90);
      p->frame_timer = TFC(4);
      p->flags |= EF_R_DEG_ANY | EF_DMG_BULLET;
    }
    if (Blt* p = add_blt(BLT_ELIPS); p) {
      p->phys.pos = {128, -128};
      p->phys.spd = 120;
      p->phys.set_deg(270);
      p->frame_timer = TFC(4);
      p->flags |= EF_R_DEG_ANY | EF_DMG_BULLET;
    }
  }
  // пуля сталкивается с другой ещё быстрее
  {
    if (Blt* p = add_blt(BLT_ELIPS); p) {
      p->phys.pos = {144, 128};
      p->phys.spd = 500;
      p->phys.set_deg(90);
      p->frame_timer = TFC(4);
      p->flags |= EF_R_DEG | EF_DMG_BULLET;
    }
    if (Blt* p = add_blt(BLT_ELIPS); p) {
      p->phys.pos = {144, -128};
      p->phys.spd = 500;
      p->phys.set_deg(270);
      p->frame_timer = TFC(4);
      p->flags |= EF_R_DEG_ANY | EF_DMG_BULLET;
    }
  }
  // тест хитбокса пули
  if (auto p = add_blt(BLT_SPIKE_OUT); p) {
    p->phys.pos = {-150, -48};
    p->phys.deg = 270 + 45;
    p->flags |= EF_DMG_PLAYER | EF_IGNORE_SELF_ID | EF_DMG_ENEMY | EF_DMG_BULLET;
    p->light = Light(1, 0, 17, LF_RSIZE | LF_STAR | LF_INFINITY | LF_RAND);
  }
  // тест хитбокса пули 2
  if (auto p = add_blt(BLT_SPIKE_OUT); p) {
    p->phys.pos = {-128, -48};
    p->phys.deg = 90 + 45;
    p->flags |= EF_DMG_PLAYER | EF_IGNORE_SELF_ID | EF_DMG_ENEMY | EF_DMG_BULLET;
    p->light = Light(1, 0, 17, LF_RSIZE | LF_STAR | LF_INFINITY | LF_RAND);
  }
  // пуля с буквой Г
  if (auto p = add_blt(BLT_DUMMY); p) {
    p->phys.pos = {-96, -48};
    p->phys.deg = 90;
    p->flags |= EF_DMG_PLAYER;
  }
  // коллизия линий 1
  if (auto p = add_blt(BLT_DUMMY); p) {
    p->phys.pos = {-128, 64};
    p->phys.set_deg(0);
    p->phys.spd = 10;
    p->phys.set_deg2(45);
    p->flags |= EF_DMG_PLAYER | EF_DMG_BULLET;
  }
  // коллизия линий 1 - встречный
  if (auto p = add_blt(BLT_DUMMY); p) {
    p->phys.pos = {0, 64};
    p->phys.set_deg(180);
    p->phys.spd = 10;
    p->phys.set_deg2(180);
    p->flags |= EF_DMG_PLAYER | EF_DMG_BULLET;
  }
  // разрушаемые кубы (мощный бенчмарк, когда много)
  FOR (y, 5)
  FOR (x, 12)
    if (auto p = add_blt(BLT_CUBE); p) {
      p->phys.pos = Vec(320 + (x * 16), -256 + (y * 16));
      p->flags |= EF_DMG_PLAYER | EF_DMG_BULLET | EF_IGNORE_SELF_ID | EF_NO_MOVE;
      p->expl = expl_bank::shard_crush;
    }
  // для теста расталкивания
  FOR (y, 24)
  FOR (x, 24)
    if (auto p = add_prt(PRT_DUMMY); p) {
      p->phys.pos = Vec(-320 + (x * 16), 256 + (y * 16));
      //p->flags |= EF_NO_MOVE;
      p->set_infinity();
      p->frame_timer = 1;
      p->frame_skip(a83::irand() % 10);
    }
  // взрыв расталкивающий частицы
  if (auto p = add_blt(ENI_NONE); p) {
    p->phys.pos = Vec(-320 + (8 * 16), 256 + (8 * 16));
    p->flags |= EF_NO_MOVE | EF_KILL_TIMER;
    p->frame_timer = 4;
    p->expl = expl_bank::plr;
  }
  //! добавить самолёты с друх сторон
  FOR (i, 3) {
    if (auto p = add_ene(new Fighter()); p) {
      p->phys.pos = {4000.0f + i * 100.0f, 2000.0f};
    }
    if (auto p = add_ene(new Fighter()); p) {
      p->phys.pos = {-8000.0f + i * 100.0f, -6000.0f};
    }
  }
  // ракеты разлетаются в стороны
  /*
  float deg = 0;
  FOR (i, 16)
    if (Blt* p = add_blt(BLT_MISSILE_3); p) {
      p->phys.pos = {-96.0f + i * 20.0f, -64.0f};
      p->phys.set_deg(deg + i * (360.0f / 16.0f));
      p->phys.spd = 30;
      p->smoke = smoke_bank::small;
      p->expl = expl_bank::dir_small;
    }
  */
} // test_spawn