--------------------------------------------------------------------------------
--  File     : Wizard's_tower_lab
--  Author(s): Prokopovich Larisa
--
--  Summary  : Скрипт управления локацией.
--
--  Copyright © 2012 Floodlight Games.  All rights reserved.
--------------------------------------------------------------------------------
time_light = 0.5			--время исчезновения света вокруг установки
time_pipe_light = 9			--время от начала старта частиц вокруг установки до вылетания колдуна
time_smoke_wizard = 8.5		--время от начала старта диалога колдуна до появления дыма вокруг него
time_vial = 4				--время от начала старта дыма вокруг колдуна до появления бутылки
time_disappear_wizard = 4	--время от появления бутылки до анимации исчезновения колдуна
--------------------------------------------------------------------------------
function OnSerialize(system)
	time_pipe_light_dt = system:Serialize(time_pipe_light_dt)
	start_pipe_light = system:Serialize(start_pipe_light)
	time_wizard_dt = system:Serialize(time_wizard_dt)
	start_wizard = system:Serialize(start_wizard)
		
	if start_pipe_light == 1 then
		start_pipe_light = 3
	end
	ExitDialogWizard()
end
--------------------------------------------------------------------------------
function OnFirstEntry()
	--[[if inventory:IsItemExisting("MATCHES") then
		inventory:EraseOneItemFromCell("MATCHES")
	end
	if inventory:IsItemExisting("KNIFE") then
		inventory:EraseOneItemFromCell("KNIFE")
	end
	inventory:CheatLoadAndAddItem ("KNIFE_Q", "Hut_1st_floor_Cabinet", 0)
	inventory:CheatLoadAndAddItem("RAVEN_SKULL", "Wizard's_tower_int_Tank", 0)--]]
		
	time_pipe_light_dt = 0
	start_pipe_light = 0
	
	time_wizard_dt = 0
	start_wizard = 0
	
	room:GetItem("FIELD_CONTROL"):Disable()
	music:Stop(true)
	music:PlayLoopWithDelay(0, "wizard_tower") 
	room.sfx:PlayEx ("electric_field_loop", true, 1, 0)	--звук "электрополе зацикленное"

	room.sfx:Play("jingle_2")				-- джингл!	

	stars:Show("M_TABLE", "2")
	stars:Show("M_CRYSTAL_HOLDER", "2")
	stars:Show("M_UNIT", "4")
	stars:Show("M_SKULL", "4")
	stars:Show("WAX", "4")
end
--------------------------------------------------------------------------------
function OnEntry()
	ambient:Play("Wizard's_tower_lab")
	music:PlayLoopWithDelay(20, "wizard_tower") 
end
--------------------------------------------------------------------------------
function OnMouseClickOnItem(item)
	local itemName = item:GetName()

	if itemName == "M_TO_TOWER" then							--выход из лаборатории	
		chapter:JumpRoom("Wizard's_tower_int")
		return true

	elseif itemName == "M_TABLE" then
		if cstore.Visit_Cache_HO == nil then
			chapter:JumpCloseup("Wizard's_tower_lab_Table")		--переход в close-up со столом
		elseif cstore.Cache_HO == 0 then
			chapter:JumpRoom("Wizard's_tower_lab_Cache_HO")		--переход в close-up с HO
		end
		return true	
		
	elseif itemName == "M_CRYSTAL_HOLDER" then
		chapter:JumpCloseup("Wizard's_tower_lab_Unit")			--переход в close-up с установкой
		return true	
	end
		

	if 	itemName == "WAX" then								--восковая свеча
		pick_panel:AddItems(itemName, false)
		return true
		
	elseif 	itemName == "M_FIELD" then						--поле
		comment:Add("CMT_Field_Player")
		return true

	elseif (itemName == "FIELD_CONTROL") and				--основание пульта
		    not(item:IsEnabled()) then
		comment:Add("CMT_Panel_Player")
		return true

	elseif 	itemName == "M_SKULL" then						--место для черепа
		comment:Add("CMT_SkullPlace_Player")
		return true

	elseif itemName == "M_UNIT" then						--установка
		comment:Add("CMT_Unit_Player")
		return true	
	end
end
--------------------------------------------------------------------------------
function OnClickItemOnItem(item)					
	local itemName = item:GetName()
	
	if itemName == "M_TABLE" then
		if cstore.Visit_Cache_HO == nil then
			chapter:JumpCloseup("Wizard's_tower_lab_Table")		--переход в close-up со столом
		end
		return true	
		
	elseif itemName == "M_CRYSTAL_HOLDER" then
		chapter:JumpCloseup("Wizard's_tower_lab_Unit")			--переход в close-up с установкой
		return true	
	end
	
	
	if itemName == "M_SKULL" then							--череп на пульт
		if cursor:IsItemNameEqual("RAVEN_SKULL") then			
			cursor:RemoveItem()
			item:Hide()
			room:GetItem("FIELD_CONTROL"):Enable()
			room:GetItem("RAVEN_SKULL"):Show()
			room:GetItem("M_FIELD"):Hide()
			room:GetItem("WIZARD_LAB_MAGIC_SHIELD"):Hide()
			room.sfx:Stop("electric_field_loop")
			
			room:GetItem("M_TABLE"):Show()
			room:GetItem("M_UNIT"):Show()
			room:GetItem("M_CRYSTAL_HOLDER"):Show()
			room.sfx:Play ("skull_install")	--звук "вставляем череп ворона в нишу"
			
			comment:Add("CMT_Skull_Player")
			return true
		end
	end
end
--------------------------------------------------------------------------------
function OnUpdate (elapsedTime)
	
	if start_pipe_light == 3 then
		local pipe_light = room:GetItem("PIPE_LIGHT")
		pipe_light:Show()
		pipe_light:PlayAnimation()
		room:AddControlForParticleSys("PIPE_LIGHT")
		
		room:DisableUserControl()
		start_pipe_light = 1
	end
		
	if start_pipe_light == 1 then
		time_pipe_light_dt = time_pipe_light_dt + elapsedTime
		
		if time_pipe_light_dt >= time_pipe_light then
			start_pipe_light = 2
			StopPipesEffects()
		end
	end
	
	-- Проверка диалога разговора колдуна
	local dialog = ui:GetDialog("PersSpeakTop")
	if start_wizard == 0 and dialog:GetCurrentTextID() == "DLG_End_30_Wizard" then
		start_wizard = 1
	end
	
	local vial_particles = room:GetItem("VIAL_PARTICLES")
	if vial_particles:IsVisible() == false and dialog:GetCurrentTextID() == "DLG_Final_20_Player" then
		vial_particles:Show()
		vial_particles:PlayAnimation()
	end

	--диалог колдуна
	if start_wizard == 1 then
		time_wizard_dt = time_wizard_dt + elapsedTime
		
		--запустить дым
		if time_wizard_dt >= time_smoke_wizard then
			time_wizard_dt = 0
			start_wizard = 2
			
			local wizard_smoke1 = room:GetItem("WIZARD_SMOKE1")
			wizard_smoke1:Show()
			wizard_smoke1:PlayAnimation()
			room:AddControlForParticleSys("WIZARD_SMOKE1")
			
			local wizard_smoke2 = room:GetItem("WIZARD_SMOKE2")
			wizard_smoke2:Show()
			wizard_smoke2:PlayAnimation()
			room:AddControlForParticleSys("WIZARD_SMOKE2")
			room.sfx:Play ("03_final_smoke") --TODO начало дыма
		end
	end
	
	--дым вокруг колдуна
	if start_wizard == 2 then
		time_wizard_dt = time_wizard_dt + elapsedTime
			
		--показать бутылку
		if time_wizard_dt >= time_vial then
			time_wizard_dt = 0
			start_wizard = 3
			
			room:GetItem("WIZARD_VIAL"):Show()
		end
	end
	
	--бутылка уже отображена
	if start_wizard == 3 then
		time_wizard_dt = time_wizard_dt + elapsedTime
			
		--начать анимацию исчезновения колдуна
		if time_wizard_dt >= time_vial then
			time_wizard_dt = 0
			start_wizard = 4
			
			room:GetItem("WIZARD_SMOKE1"):Hide()
			room:GetItem("WIZARD_SMOKE2"):Hide()
			room:GetItem("WIZARD_IDLE"):Hide()
			local wizard_disappear = room:GetItem("WIZARD_DISAPPEAR")
			wizard_disappear:Show()
			wizard_disappear:PlayAnimation()
			room:AddCtrlAnimation("WIZARD_DISAPPEAR", -1)
			room.sfx:Play ("04_final_wizrd_disappear") 		--TODO старт финального отлета колдуна
		end
	end

end
--------------------------------------------------------------------------------
function OnChapterStoreEvent_Cache_HO(value)				--закрыть hidden object со схемой
	if value == 1 then
		room:GetItem("M_TABLE"):Hide()	
	end
end
--------------------------------------------------------------------------------
function OnChapterStoreEvent_Visit_Cache_HO(value)			--изменить звездочки на hidden object со схемой
	stars:Hide("M_TABLE")
	stars:Show("M_TABLE", "1")
end
--------------------------------------------------------------------------------
function OnChapterStoreEvent_Close_up_Unit(value)			--запустить финальную анимацию
	room:GetItem("M_CRYSTAL_HOLDER"):Hide()
	room:GetItem("M_UNIT"):Hide()
		
	--вызвать функцию из кода
	--room:StartPipesEffects()
	
	game_panel:Close()
	local pipe_light = room:GetItem("PIPE_LIGHT")
	pipe_light:Show()
	pipe_light:PlayAnimation()
	room:AddControlForParticleSys("PIPE_LIGHT")
	room:DisableUserControl()
	start_pipe_light = 1
	room.sfx:Play ("01_final_battery_install") 				-- ....01.... TODO начало реакции взрыва. Вставка батарейки, свет, взрыв
	music:PlayLoopWithDelay(0, "Mystery_Quest_scare")	-- запускаем финальную музыку

end
--------------------------------------------------------------------------------
function StopPipesEffects()
	room:GetItem("UNIT_BROKEN"):Show()
	
	--исчезает свет вокруг колбы
	local unit_light = room:GetItem("UNIT_LIGHT")
	unit_light:Show()
	local color = unit_light:GetColor()
	local color1 = unit_light:GetColor()
	color1:SetNormalAlpha(0)
	unit_light:SetColor(color1)
	unit_light.effects:PlayColor(color, time_light)
	
	--запускается анимация вылетающего колдуна
	local wizard_appear = room:GetItem("WIZARD_APPEAR")
	wizard_appear:Show()
	wizard_appear:PlayAnimation()
	room:AddCtrlAnimation("WIZARD_APPEAR", -1)
	room.sfx:Play ("02_final_wizrd_appear") 				-- ....02.... вылет колдуна
end
--------------------------------------------------------------------------------
-- Окончание анимации вылетания колдуна
function OnAnimationComplete_WIZARD_APPEAR(forced)
	room:GetItem("WIZARD_APPEAR"):Hide()
	
	--запускается анимация колдуна в воздухе
	local wizard_idle = room:GetItem("WIZARD_IDLE")
	wizard_idle:Show()
	wizard_idle:PlayAnimation()
	
	--запускается первый диалог
	local dlg = ui:GetDialog("PersSpeakTop")
	dlg:Add("DLG_End_10_Wizard")
	dlg:Add("DLG_End_20_Wizard")
	dlg:Add("DLG_End_30_Wizard")
	dlg:SetUserTag("wizard_speak1")
	dlg:Show()
end
--------------------------------------------------------------------------------
-- Окончание анимации исчезновения колдуна
function OnAnimationComplete_WIZARD_DISAPPEAR(forced)
	room:GetItem("WIZARD_DISAPPEAR"):Hide()
	
	local dlg = ui:GetDialog("PersSpeakTop")
	if dlg:GetUserTag() == "" then
		--запускается второй диалог
		ShowDialog2(dlg)
		music:Stop(true)
	end
end
--------------------------------------------------------------------------------
-- Окончание диалога
function OnDialogClose_PersSpeakTop(dialog)
	
	if dialog:GetUserTag() == "wizard_speak1" then
		dialog:SetUserTag("")
		start_wizard = 5
		
		if not(room:GetItem("WIZARD_DISAPPEAR"):IsVisible()) then
			--запускается второй диалог
			local dlg = ui:GetDialog("PersSpeakTop")
			ShowDialog2(dlg)
			music:Stop(true)
			return
		end
	end
	
	if dialog:GetUserTag() == "wizard_speak2" then
		dialog:SetUserTag("")
	
		chapter:ExitRoom()
		music:Stop(true)
		music:PlayLoopWithDelayEx(0, "m_cutscene_06_final", 1.0, false)
		ui:CloseDialog("GamePanel")

		IntroText = ui:GetDialog("IntroText")
		-- Настройки ( идентификатор строки с группой, время проявления, время затухания, 
		-- имя локации в которую перейдем после закрытия диалога )
		ambient:Play("dam")
		IntroText:SetUserTag("TheEnd")
		IntroText:SetOptions("Main:FINAL_MESSAGE", 0.5, 0.5, "")
		IntroText:Show()
	end
	
end
--------------------------------------------------------------------------------
function ShowDialog2(dlg)
	dlg:Add("DLG_Final_10_Player")
	dlg:Add("DLG_Final_20_Player")
	dlg:Add("DLG_Final_30_Player")
	dlg:SetUserTag("wizard_speak2")
	dlg:Show()
end
--------------------------------------------------------------------------------
function ExitDialogWizard()
	if (start_wizard > 0) and (start_wizard < 5) then 
		start_wizard = 0
		time_wizard_dt = 0
		
		room:GetItem("WIZARD_VIAL"):Hide()
		room:GetItem("WIZARD_SMOKE1"):Hide()
		room:GetItem("WIZARD_SMOKE2"):Hide()
		room:GetItem("WIZARD_DISAPPEAR"):Hide()
		
		--запускается анимация колдуна в воздухе
		local wizard_idle = room:GetItem("WIZARD_IDLE")
		wizard_idle:Show()
		wizard_idle:PlayAnimation()
	end
end

