clWindow = {}

function clWindow:SetName(_name)
    self.name = _name;
end

function clWindow:GetName()
    return self.name;
end

function clWindow:SetDepth(depth)
	cpp_item_set_depth(self.name, depth);
end

function clWindow:SetOpacity(opacity)
	cpp_item_set_opacity(self.name, opacity);
end

function clWindow:RemoveItem(item_name, time)
	if(time == nil) then
		cpp_item_remove(self.name, item_name);
	else
		ItemChangeOpacity(item_name, 0.0, time);
		DelayedExecStr(time, "cpp_item_remove('"..self.name.."', '"..item_name.."')");
	end
end

function clWindow:SetMiniGame(mini_game)
    self.mini_game = mini_game;
end

function clWindow:FadeOut(_time)
    local time = _time or 0.3;
    
    ItemSetOpacity(self.name, 0.0);
    ItemChangeOpacity(self.name, 1.0, time);
end

function clWindow:FadeIn(_time)
    local time = _time or 0.3;
    
    ItemSetOpacity(self.name, 1.0);
    ItemChangeOpacity(self.name, 0.0, time);
end
-------------------------------------------------------------------------------
function clWindow:OnClick(item_name) 
end

function clWindow:OnMouseUp(item_name)
end

function clWindow:OnMouseEnter(item_name)
end

function clWindow:OnMouseLeave(item_name)
end

function clWindow:OnMouseMove(item_name)
end

function clWindow:OnMouseRightDown(item_name) 
end

function clWindow:OnMouseRightUp(item_name) 
end

function clWindow:OnButtonDown(item_name) 
end

function clWindow:OnKeyDown(key) 
end

function clWindow:Update()
end
-------------------------------------------------------------------------------

function clWindow:CreateObj(type, item_name, texture_path, _x, _y, _w, _h)
	--Что бы в каждом скрипте не делать создание окна. Делаем это перед созданием первого объекта окна
	if(self.win == false) then
		cpp_application_add_window(self.name);
		self.win = true;
	end
	local flag = cpp_create_sprite(self.name,  type, item_name, texture_path, _x, _y);
	if(_w ~= nil and _h ~= nil) then
		cpp_item_set_size(item_name, _w, _h);
	end
	
	return flag;
end
-------------------------------------------------------------------------------
function clWindow:CreateAnim(type, item_name, texture_path, _x, _y, _w, _h)
	--Что бы в каждом скрипте не делать создание окна. Делаем это перед созданием первого объекта окна
	if(self.win == false) then
		cpp_application_add_window(self.name);
		self.win = true;
	end
	local flag = cpp_create_animation(self.name,  type, item_name, texture_path, _x, _y);
	if(_w ~= nil and _h ~= nil) then
		cpp_item_set_size(item_name, _w, _h );
    end
    
	
	return flag;
end
-------------------------------------------------------------------------------
function clWindow:CreateLabel(item_name, string, _x, _y, size, font)
    --Что бы в каждом скрипте не делать создание окна. Делаем это перед созданием первого объекта окна
	if(self.win == false) then
		cpp_application_add_window(self.name);
		self.win = true;
	end
	cpp_create_label(self.name,  item_name, string, _x, _y, size, font);
end

-------------------------------------------------------------------------------
function clWindow:CreateTextEdit(item_name, string, _x, _y, size, font)
    --Что бы в каждом скрипте не делать создание окна. Делаем это перед созданием первого объекта окна
	if(self.win == false) then
		cpp_application_add_window(self.name);
		self.win = true;
	end
	cpp_create_edit_label(self.name,  item_name, string, _x, _y, size, font);
end


function clWindow:UnLoadScreen()
	cpp_application_remove_window(self.name);
	self.win = false;
end


function NewWindow(objects_list, win_name, _script_name)
	objects_list[win_name] = {}
	setmetatable(objects_list[win_name], {__index =  clWindow})
	objects_list[win_name].name = win_name;
	objects_list[win_name].script_name = _script_name;
	objects_list[win_name].win = false;
	GameScreen = objects_list[win_name];
	require(_script_name);
end