class 'HiddenBaseLogic'
-------------------------------------------------------------------------------

function HiddenBaseLogic:__init()
    self.indicator     = nil        -- отвечает за отображение тасков на панеле
    
    self.searchingTool = nil        -- имя тулзы, добавляемой после выполнения всех тасков
    self.dealIndex     = 0          -- порядковый номер прохождения
    self.lastDeal      = false      -- свойство, показывающеее, является ли даное прохождение последним.
                                    --   Используется для определения, нужна ли очистка стейтов найденых объектов.
    
    self.flyingSounds = nil         -- таблица звуков полета итемов. Инициализируется при первом создании эффект полета.
    self.findSound    = nil         -- звук клика по итему при находжении. Инициализируется при первом создании эффект полета.
    
    self.createdTaskObjects = {}    -- обьекты, принадлежащие таскам. Необходимы для очисткистейтов найденых обьектов после всех прохождений.
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:GetIndicator()
    return self.indicator
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:GetSearchingTool()
    return self.searchingTool
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:GetDealIndex()
    return self.dealIndex
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:IsLastDeal()
    return self.lastDeal
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:DefineToolFindOrder(...)
    local level = GetCurrentLevel()
    local tools = {...}

    for dealIndex, toolName in ipairs(tools) do
		if not IsToolFound(toolName) then
		    self.searchingTool = toolName
		    self.dealIndex     = dealIndex
		    self.lastDeal      = (dealId == #tools)
			return
		end
	end
	
	-- without tool finding or all tools already found
	assert(false)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:InitSounds()
    if not self.flyingSounds then
        self.flyingSounds = {}
        
        table.insert(self.flyingSounds, MakeSoundEntity("object_fly_1"))
        table.insert(self.flyingSounds, MakeSoundEntity("object_fly_2"))
    end
    
    if not self.findSound then
        self.findSound = MakeSoundEntity("item_found")
    end
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:PlayFlyingSound()
    assert(self.flyingSounds and #self.flyingSounds > 0)
    
    local availableSounds = {}
    
    for i, sound in ipairs(self.flyingSounds) do
        if not sound:IsPlaying() then
            table.insert(availableSounds, sound)
        end
        
        if (i == #self.flyingSounds) and (#availableSounds == 0) then
            sound:StopSound()
            table.insert(availableSounds, sound)
        end
    end
    
    local index = math.random(1, #availableSounds)
    local sound = availableSounds[index]
    
    sound:PlaySound(false)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:PlayFoundSound()
    self.findSound:StopSound()
    self.findSound:PlaySound(false)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:CreateFlyAnim(object)
    return 0
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:CheckTaskObjectMouseDown(objectName)
    return false
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:IsAllTaskObjectsFound()
    local tasks = play_field:GetLevelScreen():GetTasks()
    
    for task in tasks do
        if task:GetNumberOfObjects() > 0 then
            return false
        end
    end
    
    return true
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:OnLastItemFound()
    local level = GetCurrentLevel()
    
    RemoveActiveTaskStates()
    
	if self:IsLastDeal() then
		RemoveTaskObjectsFound()
	end
    
    if self.searchingTool then
        local info = level.tools[self.searchingTool]
        assert(info)
        
        if not IsToolFound(self.searchingTool) then
            AddGameState(TOOL_FOUND, self.searchingTool)
        end
    end
    
    SetGameState(LAST_VISITED_SCENE, level.parent_level)
    AddGameState(SCENE_CLOSED,       level.name)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:OnObjectReachPanel(object)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:OnPanelObjectMouseDown(object)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:OnPanelObjectMouseEnter(object)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:OnPanelObjectMouseLeave(object)
end
-------------------------------------------------------------------------------

function HiddenBaseLogic:OnPanelUpdate(dt)
end
-------------------------------------------------------------------------------
