//固定変数-----------------------------------------------------
let RANK_EASY = 0;
let RANK_NORMAL = 1;
let RANK_HARD = 2;
let RANK_LUNATIC = 3;
//便利関数-----------------------------------------------------
/*timeフレーム待つ*/
function wait(time){loop(time){yield;}}
    
//カットイン＆スペルカード
function CSpell(pattern, name, spelltime, spellscore, png, png_minX, png_minY, png_maxX, png_maxY){
    //LoadGraphic(png);
    while(OnBomb){yield;} //ボムが終わるまで待つ
    let time = 50;
    SetInvincibility(time);
    wait(time);
    SetTimer(spelltime);
    SetScore(spellscore);
    let timeA = 20;
    let timeB = 130;
    SetAction(ACT_SPELL, 100);
    SetInvincibility(timeA + timeB);
    wait(timeA);
    //CutIn(pattern, name, png, png_minX, png_minY, png_maxX, png_maxY);
    CutIn(pattern, name, png, 0, 0, 0, 0);
    wait(timeB);
    //DeleteGraphic(png);
}

//エネミーグラフィック------------------------------------------
let Bpng; //ボスドット絵
function Lgboss(png){ //ボスグラフィックの読み込み
    Bpng = png;
    LoadGraphic(Bpng);
}
sub DelBoss{DeleteGraphic(Bpng);} //ボスグラフィックの破棄

//移動関数--------------------------------------------------------

//x,yの位置に（無敵で）移動した後メイン実行
task Tde_move(x, y){
    let frame = 45;
    SetMovePosition02(x, y, frame);
    SetAction(ACT_MOVE, frame);
    SetInvincibility(frame);
    wait(frame);
    Tmain;
}

//移動
function move(frame) {
    moveToPlayer(rand(40, 80), rand(-40, 40), frame,
                 GetClipMinX + 48, GetClipMinY +  32,
                 GetClipMaxX - 48, GetClipMinY + 128);
    wait(frame);
}

// なるべくプレイヤーの方向に移動
//   xMove  : x 方向の移動量（正の数）
//   yAdd   : y 方向の移動量
//   frame  : 移動に要するフレーム数
//   left   : 以下、可動範囲
//   top    :
//   right  :
//   bottom :
function moveToPlayer(xMove, yAdd, frame, left, top, right, bottom) {
    let x;
    let y;
    if(GetPlayerX < GetX) {// プレイヤーより右に敵がいれば、敵は左に動きます。
        x = GetX - xMove;
        if(x < left) // 但し、敵が可動領域の左端よりも左にいくようなら、右に動きます。
        {x = GetX + xMove;}
    } else {// さもなくば、敵は右に動きます。
        x = GetX + xMove;
        if(right < x) // 但し、敵が可動領域の右端よりも右にいくようなら、左に動きます。
        {x = GetX - xMove;}
    }
    // 可動領域の外に行く場合は、端っこで止めます。
    y = GetY + yAdd;
    if(y < top) {y = top;}
     else if(bottom < y) {y = bottom;}
    SetMovePosition02(x, y, frame);
    SetAction(ACT_MOVE, frame);
}

//メインループ------------------------------------------------------------------
@MainLoop { //弾のループ
    SetCollisionA(GetX, GetY, 30); //敵と自弾の当たり判定
    SetCollisionB(GetX, GetY, 24); //敵と自機の当たり判定（体当たり）
    yield;
}

@DrawLoop { //描画のループ
    DrawBoss(Bpng);
}

@Finalize { //敵を倒した後
    DelBoss; //ボスグラフィックの破棄
}
//終わり
