//****************************************************************************************************
// 	All clear screen
//	Author: Helepolis
//	Version: 1.0
// 	Library:
//		endingDialogue					- Summons the ending dialogues
// 		endingScene						- Summons the ending picture as reward
//
//****************************************************************************************************

#include "script/thdcs/functions/function_loaddata.txt"

let bg00;

@Initialize {
	SetAutoDeleteObject(true);
	endingDialogue;
	SetScriptResult("dummy");
}

@MainLoop { yield; }
@Finalize { } 


// Ending dialogue
task endingDialogue {
	let endingPair = GetAreaCommonData("game","team",0);
	let path = "script/thdcs/functions/function_ending.txt";
	let id = LoadScript(path);
	StartScript(id);
	let dialogueScriptID = GetCommonData("dialogueScriptID",0);
	if(GetAreaCommonData("game","fightHina",false) && GetAreaCommonData("game","fightIku",false) && GetAreaCommonData("game","fightTewi",false)) { 
		if(endingPair == 0) { SetAreaCommonData("core","goodEndBorder",true); }
		if(endingPair == 1) { SetAreaCommonData("core","goodEndMagic",true); }
		SaveCommonDataAreaA1("core");
		NotifyEvent(dialogueScriptID,EV_USER,15);
	}
	else {
		if(endingPair == 0) { SetAreaCommonData("core","normalEndBorder",true); }
		if(endingPair == 1) { SetAreaCommonData("core","normalEndMagic",true);	}		
		SaveCommonDataAreaA1("core");
		NotifyEvent(dialogueScriptID,EV_USER,16);
	}
	while(!IsCloseScript(id)) {
		yield;
	}	
	endingScene;
}

task endingScene {
    bg00 = drawPlayerScreen(imgPSelBg,BLEND_ALPHA);
	let dimbg = 0;
	loop(60) { 
		ObjRender_SetAlpha(bg00,dimbg);
		dimbg+=105/60;
		yield;
	}
	loop(30) { yield; }
	creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2-64); creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2+64); 
	showCredit(credit00);
	
	creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2-64); 
	showCredit(credit01);
	
	creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2-128); creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2-32); 
	creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2+64); creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2+128);
	showCredit(credit02);
	
	creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2-112); creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2-16); creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2+64); 
	showCredit(credit03);
	
	creditRollEffect(GetScreenWidth/2-128,GetScreenHeight/2); 
	showCredit(credit04);
	loop(60) { yield; } 
	dimbg = 105;
	loop(120) { 
		ObjRender_SetAlpha(bg00,dimbg);
		dimbg-=105/120;
		yield;
	}	
	Obj_Delete(bg00);
	loop(60) { yield; }
	CloseScript(GetOwnScriptID);

}

task creditRollEffect(x,y) {
	// red, green, blue, cyan, purple, yellow, orange
	let colSet = [[255, 16, 16],[16,255,16],[16,16,255],[16,255,255],[255,16,255],[255,255,16],[255,128,16]]; 
	let colKies = 0;	
	let dir = 0;
	
	ascent(i in 0..12) { 
		colKies = truncate(rand(0,7));
		creditGlitter(x+24*cos(dir),y+24*sin(dir),rand(0.1,0.5),rand(0,360),rand(0.4,2.0),255,colSet[colKies][0],colSet[colKies][1],colSet[colKies][2]);
		creditGlitter(x+24*cos(dir+180),y+24*sin(dir+180),rand(0.1,0.5),rand(0,360),rand(0.4,1.8),255,colSet[colKies][0],colSet[colKies][1],colSet[colKies][2]);
		
		creditGlitter(x+i*16,y+rand(-16,32),rand(0.1,0.5),rand(0,360),rand(0.2,1.5),255,colSet[colKies][0],colSet[colKies][1],colSet[colKies][2]);
		creditGlitter(x+i*20,y+rand(-16,32),rand(0.1,0.5),rand(0,360),rand(0.2,1.5),255,colSet[colKies][0],colSet[colKies][1],colSet[colKies][2]);
		dir+=360/36;
		yield;
	}
}

task creditGlitter(x,y,v,dir,parts,alphaValue,red,green,blue) {

	let obj = ObjPrim_Create(OBJ_SPRITE_2D);
	let partc = 0;
	let partSizeScale = parts;
	
	ObjPrim_SetTexture(obj,circglit);
	ObjRender_SetBlendType(obj,BLEND_ADD_RGB);
	Obj_SetRenderPriorityI(obj,90);
	ObjRender_SetPosition(obj,x,y,0);
	ObjRender_SetScaleXYZ(obj,parts,parts,0);
	ObjSprite2D_SetSourceRect(obj,0,0,64,64);
	ObjSprite2D_SetDestCenter(obj);

	ObjMove_Special(obj,x,y,v,dir);
	
	while(! Obj_IsDeleted(obj)) {
		ObjRender_SetColor(obj,red,green,blue); 
		ObjRender_SetAlpha(obj,alphaValue);
		ObjRender_SetScaleXYZ(obj,parts,parts,0);

		// glittering effect
		parts = rand(partSizeScale,partSizeScale+0.5)*sin(partc*round(rand(10,20)));
		partc++;

		// remove timer
		if(partc > round(rand(300,380))){ Obj_Delete(obj); }
		
		yield;
	}
}

task ObjMove_Special(obj,x,y,v,dir) {
	let vx = v * cos(dir);
	let vy = v * sin(dir);

	while(!Obj_IsDeleted(obj)) {
		ObjRender_SetPosition(obj,x,y,0);
		yield;
		x += vx;
		y += vy;
	}
}

function showCredit(tex) {
	let obj = ObjPrim_Create(OBJ_SPRITE_2D);
	let nAlpha = 0;

	ObjPrim_SetTexture(obj,tex);
	ObjRender_SetBlendType(obj,BLEND_ALPHA);
	ObjRender_SetAlpha(obj,nAlpha);
	ObjRender_SetAngleXYZ(obj,0,0,0);
	ObjRender_SetScaleXYZ(obj,0.768,0.768,0);
	ObjRender_SetPosition(obj,GetScreenWidth/2,GetScreenHeight/2,0);	
	Obj_SetRenderPriorityI(obj,90);
	ObjSprite2D_SetSourceRect(obj,0,0,512,512); 
	ObjSprite2D_SetDestCenter(obj);
	
	loop(60) { nAlpha += 250/60; ObjRender_SetAlpha(obj,nAlpha); yield; } 
	loop(240) { yield; }
	loop(60) { nAlpha -= 250/60; ObjRender_SetAlpha(obj,nAlpha); yield; }
	
	Obj_Delete(obj);
}

function drawPlayerScreen(tex,btype) {
	let obj = ObjPrim_Create(OBJ_SPRITE_2D);

	ObjPrim_SetTexture(obj,tex);
	ObjRender_SetBlendType(obj,btype);
	ObjRender_SetAlpha(obj,254);
	Obj_SetRenderPriorityI(obj,20);
	ObjSprite2D_SetSourceRect(obj,0,0,640,480);
	ObjSprite2D_SetDestRect(obj,0,0,640,480);
	
	return obj;	
}