#include "script/common.lua"
#include "ui/components/saber_credits.lua"

enabled = false
fade = 0

sectionsEnd = nil

gCredits = 
{
	{
		title = "Art Vandals by",
		content = {"Tuxedo Labs"},
		pos = "upper left",
		t0 = 3,
		t1 = 10,
	},
	{
		title = "Level design",
		content = {"Emil Bengtsson", "Olle Lundahl"},
		pos = "upper right",
		t0 = 11,
		t1 = 20,
	},
	{
		title = "Art direction",
		content = {"John Kearney"},
		pos = "upper left",
		t0 = 21,
		t1 = 30,
	},
	{
		title = "Music",
		content = {"Douglas Holmquist"},
		pos = "upper right",
		t0 = 31,
		t1 = 40,
	},
	{
		title = "Gameplay programming",
		content = {"Olle Lundahl"},
		pos = "upper left",
		t0 = 41,
		t1 = 50,
	},
	{
		title = "Project management",
		content = {"Marcus Dawson"},
		pos = "upper right",
		t0 = 51,
		t1 = 60,
	},
	{
		title = "Additional programming",
		content = {"Jim Winberg", "Dennis Gustafsson"},
		pos = "upper left",
		t0 = 61,
		t1 = 70,
	},
	{
		title = "Additional artwork",
		content = {"Saber Interactive"},
		pos = "upper right",
		t0 = 71,
		t1 = 80,
	},
	{
		title = "Woo mansion",
		content = {"Kabi Jedhagen"},
		pos = "upper left",
		t0 = 81,
		t1 = 90,
	},
	{
		title = "Thank you for playing!",
		content = {""},
		pos = "littleup",
		t0 = 91,
		t1 = 100,
	},
	
}

gTime = 0
gMusicVol = 1

function init()
	vehicle = FindVehicle("epamonstertruck", true)
end

function tick(dt)
	local inVehicle = GetPlayerVehicle() == vehicle
	if inVehicle then
		enabled = true
	end
	
	if inVehicle then
		SetBool("hud.disable", true)
		gTime = gTime + dt
		if fade == 0 then
			SetValue("fade", 1.0, "easeout", 0.3)
		end
	else
		local dist = VecLength(VecSub(GetPlayerTransform().pos, GetVehicleTransform(vehicle).pos))
		dist = math.max(dist, 1.0)*0.1;
		gMusicVol = clamp(1.05/(dist*dist)-0.05, 0.0, 1.0)
		if fade == 1 then
			SetValue("fade", 0.0, "easein", 0.3)
		end
	end

	local vol = fade + gMusicVol*(1-fade)
	if vol > 0.01 then
		PlayMusic("MOD/music/ending.ogg")
	end
	SetFloat("game.music.volume", vol)
	SetFloat("game.music.lowpass", 1.0-fade)
end


function drawCredits()
	for i=1, #gCredits do
		local s = gCredits[i]
		if gTime > s.t0 and gTime < s.t1 then
			UiPush()
			UiAlign("left")
			local width = 250
			local height = 32 + #s.content*36
			if string.find(s.pos, "lower") then
				UiTranslate(0, UiHeight() - 250 - height)
			elseif string.find(s.pos, "upper") then
				UiTranslate(0, 250)
			elseif string.find(s.pos, "littleup") then
				UiTranslate(0, 350)
			else
				UiTranslate(0, UiMiddle() - height/2)
			end
			if string.find(s.pos, "left") then
				UiTranslate(300, 0)
			elseif string.find(s.pos, "right") then
				UiTranslate(UiWidth() - 300 - width, 0)
			else
				UiTranslate(UiCenter()-width/2, 0)
			end
			if string.find(s.pos, "centered") then
				UiTranslate(width/2, 0)
				UiAlign("center")
			end	
			if s.scale then
				UiScale(s.scale)
			end
			local alpha = 1.0
			local fadeTime = 1.0
			local t = gTime - s.t0
			local duration = s.t1 - s.t0
			if t < fadeTime then
				alpha = t/fadeTime
			elseif t > duration-fadeTime then
				alpha = (duration-t)/fadeTime
			end
			UiColor(1,1,1,alpha)
			UiTextOutline(0,0,0,alpha,0.2)
			UiFont("bold.ttf", 32)
			UiText(s.title)
			UiFont("regular.ttf", 40)
			UiTranslate(0, UiFontHeight())
			for j=1, #s.content do
				UiText(s.content[j])		
				UiTranslate(0, 36)
			end
			UiPop()
		end

		sectionsEnd = gTime > s.t1 and i == #gCredits
	end

	if sectionsEnd and not Credits.prepared then
		Credits.prepare(gTime)
	elseif Credits.prepared then
		Credits.draw(gTime - Credits.startTime)
	end
end


function draw()
	if enabled then
		UiPush()
			UiColorFilter(1,1,1,fade)
			drawCredits()
		UiPop()
		UiPush()
			UiColor(0,0,0)
			UiRect(UiWidth(), 80*fade)
			UiTranslate(0, UiHeight()-80*fade)
			UiRect(UiWidth(), 80)
		UiPop()
	end
end
