-- data/conf/system.lua
-- copyright (c) 2003-2007 rionix
-- version: 1.00
-- date: 25.01.2008

-------------------------------------------------------------------------------
-- system
-------------------------------------------------------------------------------

local fheader = "-- %s\n-- copyright (c) 2006 rionix\n-- version: %s\n-- date: %s\n\n"

-- переопределяем системную функцию
function dofile( str )
	print('^7SCRIPT:^6 Execute file ', str, '\n')
	GetScript():LoadFile(str)
end

-- дамп объектов
function dump( str )
	dump_nls15(str)
	luaDumpAB2(str)
end

-- показ окна
function window( str )
	theGUI:ShowWindow(str)
end

-------------------------------------------------------------------------------
-- GUI
-------------------------------------------------------------------------------

-- показать окно с текстурой с именем str
function tshow(str)
	theGUI:ShowWindow("texture")
	local wnd = theGUI:GetWindow("texture")
	local ctrl = wnd:GetControl( wnd:FindControl("image") )
	ctrl = luaToImageCtrl(ctrl)
	ctrl:SetTexture(str)
end

-- скрыть окно с текстурой
function thide()
	theGUI:HideWindow("texture")
end

-------------------------------------------------------------------------------
-- settings
-------------------------------------------------------------------------------

-- функция выдает строку для записи в файл при сохранении настроек игры
function GetSettingsConst( name )
	return( theGame.m_Settings[ name ] )
end

-- настройки игры
function WriteSettings( szFileName )
	-- идем по списку всех зарегистрированных членов структуры cSettings
	local vars = strlist()
	if ( not GetRegisteredMembers("cSettings", vars) ) then return(cResult.InternalError) end
	-- открываем файл и даем ему полный доступ
	local fname = filename(szFileName)
	local f = io.open( fname:path(), "w" )
	cFileSystem():FullAccess(fname)
	-- файл не найден. ошибку открытия файла выведет сам класс cFile
	if ( f == nil ) then return(cResult.FileNotFound) end
	-- напишем заголовок (имя файла/версия/дата записи)
	f:write( string.format( fheader, szFileName, "0.10", os.date("%d.%m.%Y") ) )
	-- функция загрузки настроек hardware
	f:write( "-- hardware settings\n" )
	f:write( "function LoadHardwareSettings()\n" )
		-- video
		local windowed = theEngine:IsWindowed() and "true" or "false"
		local width, height = theEngine:GetClientSize()
		f:write( string.format( "\t-- video\n\tdisplay(%s, %i, %i, 32)\n", windowed, width, height ) )
		f:write( string.format( "\ttheEngine:SetGamma(%.2f)\n", theEngine:GetGamma() ) )
		-- sound
		f:write( string.format( "\t-- sound\n\tsound( %.2f, %.2f )\n", GetSound():GetVolume(cSoundManager.e_Sound), GetSound():GetVolume(cSoundManager.e_Music) ) )
	f:write( "end\n\n" )
	-- далее пишем настройки, которые из cSettings
	f:write( "-- settings\n" )
	f:write( "function LoadSettings()\n" )
		-- чувтсвительность мыши
		f:write( string.format( "\ttheGame.m_Settings.fMouseSpeed = %.2f\n", theGame.m_Settings.fMouseSpeed ) )
		-- profile
		f:write( "\t-- profile\n" );
		f:write( "\ttheGame:SetPlayerCounter( " .. theGame:GetPlayerCounter() .. " )\n" );
		f:write( "\ttheGame:ChangePlayer( '" .. theGame:GetPlayerName() .. "' )\n" )
	f:write( "end\n" )
	f:close()
	return(cResult.Ok)
end