over_gui_effect_widget = {}

__inherite(over_gui_effect_widget, null_lua_widget_handler())

over_gui_effect_widget._clips = {}
over_gui_effect_widget._timer = __create_timer()

function over_gui_effect_widget.__CreateInstance()
    return "over_gui_effect_widget"
end

function over_gui_effect_widget.DoDraw(_this, _renderer)
	local self = over_gui_effect_widget
	
	self._effect_list:PreDraw(_renderer)
	self._effect_list:PostDraw(_renderer)
	
	-- отрисовываем эффекты - клипы
    for _, clip_info in ipairs(over_gui_effect_widget._clips) do
        clip_info.clip.Draw(_renderer)
	end
	
	if self._scene then self._scene.Draw(_renderer) end
	if self._amulet_apply_clip then self._amulet_apply_clip.Draw(_renderer) end
	return false
end

function over_gui_effect_widget.DoUpdate(_this)
	over_gui_effect_widget._effect_list:Update()
	if over_gui_effect_widget._scene then over_gui_effect_widget._scene.Update() end
	
	local cur_time = over_gui_effect_widget._timer.Get().GetTime()
    
    -- обновляем эффекты - клипы
    local i, size = 1, #over_gui_effect_widget._clips
    while i <= size do
        local clip_info = over_gui_effect_widget._clips[i]
        clip_info.clip.Update()
        if cur_time - clip_info.start_time >= clip_info.time then
            -- клип закончился, удаляем его
            table.remove(over_gui_effect_widget._clips, i)
            i = i - 1
            size = size - 1
        end
        i = i + 1
    end
	
	return true
end

-- создает клип и добавляет его в список отрисовываемых клипов
-- клип будет отображаеться пока не дойдет до конца максимальной once анимации
-- возвращает созданный клип
function over_gui_effect_widget.AddTutorialClip(_id, _time)
    local clip_info = 
    {
        clip = sf.misc.anim.CClip(),
        start_time = over_gui_effect_widget._timer.Get().GetTime()
    }
    clip_info.clip.Load(_id, true)
	clip_info.clip.SetPos(sf.misc.FloatVector(1024/2, 768/2))
	if not _time then qe.GetClipTime(clip_info.clip) end
    clip_info.time = _time
    table.insert(over_gui_effect_widget._clips, clip_info)
    return clip_info.clip
end

function over_gui_effect_widget.Load(_this, _info, _templates)
	over_gui_effect_widget._effect_list = visual_effects.CreateEffectsList()
	return true
end

function over_gui_effect_widget.AddEffect(_id, _pos)
	return over_gui_effect_widget._effect_list:CreateInstantEffect(_id, _pos)
end

function over_gui_effect_widget.OnMouseMove(_this, _pos)
    take_objects_list.BroadcastMouseMove(_pos)
    return false
end
