#e
#Title[Vufav]
#Text[]
#BGM[.\..\bgm\bgm.wav]
#BackGround[User]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main{
	
	let hx = 0;
	let hy = 0;
	
	@Initialize{
		imgBoss = imgBoss_Youmu;
		InitializeData();
		InitializeAction();
		
		SetLife(1000);
		SetX( CenterX );
		SetY( MinY + 100 );
		SetDamageRate(40,0);
		SetCollisionEx(32,16,false,360);
		SetEnemyMarker(true);
		LastSpell();
		
		Hanrei( GetX() - 30 , GetY() - 10 );
		
		TMain();
	}
	
	@MainLoop{
		yield;
	}
	
	@DrawLoop{
		DrawBoss(imgBoss);
	}
	
	@Finalize{
		FinalizeData();
	}
	
	task TMain(){
		FWait(60);
		
		DeclareSpell();
		
		Atack();
	}
	
	function DeclareSpell(){
		SetScore(2600000);
		SetTimer(74);
		CutIn(KOUMA,"Vufav",NULL,0,0,0,0);
		SetAction(ACT_SPELL,180);
		FWait(180);
	}
	
	task Atack(){
		let Val = [0,0,0];
		let angle = 0;
		let sx = 0;
		let sy = 0;
		let ex = 0;
		let ey = 0;
		
		loop{
			angle = GetGapAngle(GetPlayerX(),GetPlayerY(),GetX(),GetY());
			Val = GetReflectData(GetPlayerX(),GetPlayerY(),angle);
			sx = Val[0];
			sy = Val[1];
			angle = GetGapAngle(GetX(),GetY(),GetPlayerX(),GetPlayerY());
			Val = GetReflectData(GetX(),GetY(),angle);
			ex = Val[0];
			ey = Val[1];
			
			HanreiMove(sx,sy,20);
			FWait(20);
			
			FWait(30);
			
			Slow(2);
			SetAction(ACT_CHARGE,60);
			MotionBlur(ALL,60,128);
			HanreiMove(ex,ey,60);
			Slash(sx,sy,ex,ey,60);
			FWait(60);
			
			Slow(0);
			SetAction(ACT_SLASH_H,60);
			
			FWait(140);
		}
	}
	
	task Slash(sx,sy,ex,ey,time){
		let x = sx;
		let y = sy;
		let shotx = sx;
		let shoty = sy;
		let leng = 0;
		let wid = 6;
		let mx = (ex - sx) / time;
		let my = (ey - sy) / time;
		let ml = GetGapLength(0,0,mx,my);
		let tleng = GetGapLength(sx,sy,ex,ey);
		let sspan = 6;
		let sloop = truncate(tleng / sspan);
		let angle = GetGapAngle(sx,sy,ex,ey);
		let count = 0;
		
		let obj = CreateObjLaser(x,y,ml,angle,leng,wid,192,0,false);
		
		let lsx = sx - mx * 40;
		let lsy = sy - my * 40;
		let lex = ex + mx * 40;
		let ley = ey + my * 40;
		let lleng = GetGapLength(lsx,lsy,lex,ley);
		
		while( !Obj_BeDeleted(obj) ){
			if(count < time){
				leng += ml;
				ObjLaser_SetLength(obj,leng);
			}else if(count == time){
				CreateLaserA(1,lsx,lsy,lleng,550,192,0);
				SetLaserDataA(1,0,angle,0,0,0,0);
				SetShotKillTime(1,60);
				FireShot(1);
				
				loop(sloop){
					loop(4){
						Cherry(shotx,shoty,rand(2.2,3),rand(0,360),PURPLE23,0,rand(0,360));
					}
					
					shotx += sspan * cos(angle);
					shoty += sspan * sin(angle);
				}
			}else if(count < time + 60){
				
			}else{
				Obj_Delete(obj);
				break;
			}
			
			count += 1;
			yield;
		}
	}
	
	task Cherry(x,y,speed,angle,graph,delay,sangle){
		let vspeed = speed * 5;
		let mx = 0;
		let my = 0;
		let count = 0;
		
		let obj = CreateObjShot(x,y,0,sangle,graph,delay);
		
		while( !Obj_BeDeleted(obj) ){
			if(6 < count  && count < 12){
				vspeed -= speed / 1.016;
			}else if(count > 20 + 140 + 0){
				vspeed += speed / 60;
			}else{
			}
			
			mx = vspeed * cos(angle);
			my = vspeed * sin(angle);
			x += mx;
			y += my;
			Obj_SetPosition(obj,x,y);
			
			sangle += 0.8;
			Obj_SetAngle(obj,sangle);
			
			count += 1;
			
			yield;
		}
	}
	
	task Hanrei(x,y){
		hx = x;
		hy = y;
		
		loop{
			HanreiEffect(hx,hy,3 + rand(0,1),270 + rand(-8,8),8,8,7);
			
			yield;
		}
	}
	
	task HanreiEffect(x,y,speed,angle,graph,gtime,ltime){
		let mx = speed * cos(angle);
		let my = speed * sin(angle);
		
		let obj = CreateObjShot(x,y,0,0,graph,gtime);
		
		loop(ltime){
			if( Obj_BeDeleted(obj) ){
				break;
			}
			
			x += mx;
			y += my;
			
			Obj_SetPosition(obj,x,y);
			
			yield;
		}
		
		if( !Obj_BeDeleted(obj) ){
			Obj_Delete(obj);
		}
	}
	
	task HanreiMove(tox,toy,frame){
		let mx = (tox - hx) / frame;
		let my = (toy - hy) / frame;
		
		loop(frame){
			hx += mx;
			hy += my;
			
			yield;
		}
	}
	
	#include_function ".\initialize.txt"
	#include_function ".\..\lib\lib_anime_youmu.txt"
	
	#include_function ".\..\lib\lib_obj.txt"
	#include_function ".\..\lib\lib_value.txt"
}