//e[Single]
#ScriptVersion[3]
#ID["DT_31_ALICE_S00"]
//System["script/default_system/Default_System.txt"]
#Title["ALICE_S00"]
#Text[""]
//Image[""]
//Background["script/default_system/Default_Background_IceMountain.txt"]
//Player[]

#include "./../../cmn/common.txt"
#include "./../../cmn/shotConst.txt"
#include "./../../cmn/Effect.txt"
#include "./../../cmn/boss/commonBossFunc.txt"
#include "./../../cmn/commonFunc.txt"
#include "./../../cmn/lib/lib_anime_Alice.txt"

let objEnemy;	//GIuWFNg
let pathDot = GetCurrentScriptDirectory() ~ "./../../img/alice_dot.png";
let pathCutin = GetCurrentScriptDirectory() ~ "./../../img/alice_cutin.png";
let pathTimer = GetCurrentScriptDirectory() ~ "./../../se/timer.wav";
let pathShot = GetCurrentScriptDirectory() ~ "./../../se/shot0.wav";

@Loading{
	if(!IsCommonDataAreaExists(nsStage)){
		LoadTexture(pathDot);
		LoadTexture(pathCutin);
		LoadSound(pathTimer);
		LoadSound(pathShot);
	}
}

@Initialize{
	objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS);
	ObjEnemy_Regist(objEnemy);
	
	ObjEnemy_SetDamageRate(objEnemy, 0, 0);
	SetShotAutoDeleteClip(64,64,64,64);
	
	InitializeAction(objEnemy, pathDot);
	Render();
//	BackGround(pathCutin, 450, 600);
	Schedule();
}

@MainLoop{
	let ex = ObjMove_GetX(objEnemy);
	let ey = ObjMove_GetY(objEnemy);
	ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);//蔻(e)o^
	ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);//蔻(̓)o^
	
	yield;
}

@Event{
	alternative(GetEventType())
	case(EV_REQUEST_LIFE){
//		SetScriptResult(2500);	//Ctݒ
		SetScriptResult(2000);	//Ctݒ
	}
	case(EV_REQUEST_TIMER){
		let timerBoss = 60;
		SetScriptResult(timerBoss);	//Ԑݒ
		TimerSE(timerBoss);
	}
	case(EV_REQUEST_SPELL_SCORE){
		SetScriptResult(10);	//XyJ[h{[iXݒ
		T_SpellCardBonus(50000);
	}
//	case(EV_REQUEST_IS_DURABLE_SPELL){
//		SetScriptResult(true);	//ϋvXyJݒ
//	}
	others{}
}

@Finalize{}

task Schedule(){
//	ObjMove_SetX(objEnemy, GetStgFrameWidth()+64);
//	ObjMove_SetY(objEnemy, GetStgFrameHeight()/2);
	ObjMove_SetDestAtFrame(objEnemy, GetStgFrameWidth()-100, GetStgFrameHeight()/2, 60);
	SetAction(ACT_MOVE, 60);
	Wait(60);
	
	ObjEnemyBossScene_StartSpell(GetEnemyBossSceneObjectID());
	CutIn(pathCutin,180,191,450,600);
	SetAction(ACT_SPELL,120);
	Wait(180);
	
	Fire();
	End(-1);
	
	Wait(30);
	SetDamageRateType();
}

task Fire(){
	let ang;
	
	CopterMaster();
	
	loop{
		SetAction(ACT_SHOT_A,36);
		Wait(12);
		if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0){	return;	}
		ang = GetAngleToPlayer(objEnemy);
		LaserMaster(ObjMove_GetX(objEnemy)+32*cos(ang),ObjMove_GetY(objEnemy)+32*sin(ang),ang);
		Wait(24);
		SetAction(ACT_MOVE,45);
		SetMoveBoss(45);
		Wait(45);
	}
}

task CopterMaster(){
	let ang;
	let way = 16;
	
	loop{
		if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0){	return;	}
		ang = GetAngleToPlayer(objEnemy);
		loop(way){
			Copter(ang);
			ang += (360/way);
		}
		Wait(25);
	}
}

task Copter(let ang){
	let shot = CreateShotA1(ObjMove_GetX(objEnemy),ObjMove_GetY(objEnemy),4,ang,S_DOLL+S_GREEN,0);
	Shot_Modify(shot);
	let len = 16;
	let lAng = 90;
	let las = CreateStraightLaserA1(ObjMove_GetX(shot)+len*cos(lAng),ObjMove_GetY(shot)+len*sin(lAng),lAng,30,5,9999,S_ZORI_S+S_WHITE,0);
	Shot_Modify(las);
	ObjStLaser_SetSource(las,false);
	ObjRender_SetColor(las,63,255,63);
	
	while(!Obj_IsDeleted(shot)){
		ObjMove_SetPosition(las,ObjMove_GetX(shot)+len*cos(lAng),ObjMove_GetY(shot)+len*sin(lAng));
		ObjStLaser_SetAngle(las,lAng);
		lAng -= 12;
		lAng %= 360;
		yield;
	}
	Obj_Delete(las);
}

task LaserMaster(let x,let y,let ang){
	let shot = CreateShotA1(x,y,0,ang,S_DOLL+S_RED,0);
	Shot_Modify(shot);
	ObjShot_SetSpellResist(shot,true);
	Wait(10);
	let las = CreateStraightLaserA1(x+24*cos(ang),y+24*sin(ang),ang,1000,10,90,S_FUDA_S+S_WHITE,45);
	ObjRender_SetColor(las,255,63,63);
	las = CreateStraightLaserA1(x+24*cos(ang),y+24*sin(ang),ang,1000,20,90,S_FUDA_S+S_WHITE,45);
	ObjRender_SetColor(las,127,31,31);
	Wait(45);
	PlaySE(pathShot);
	Wait(55);
	Obj_Delete(shot);
}
