--Убирание оружия при открытии окон
--внимание: active_weapon_slot данный флаг может менятся в контейнере из движка
hide_and_disable=function()
	local active_slot=db.actor:active_slot()
	keyvals():set("active_weapon_slot",active_slot) --ключ в контейнере по умолчанию
	if active_slot~=inventory_slots.NO_ACT_SLOT then
		--db.actor:activate_slot(inventory_slots.NO_ACT_SLOT,true) --спрячем с анимацией активное оружие
	end
	--db.actor:hide_weapon() --запретим использование слотов
end

show_and_enable=function()
	db.actor:clear_blocked_slots() --разрешим использование слотов
	local stored_slot=keyvals():get("active_weapon_slot",inventory_slots.NO_ACT_SLOT) --ключ в контейнере по умолчанию
	if stored_slot~=inventory_slots.NO_ACT_SLOT then
		db.actor:activate_slot(stored_slot,true) --активируем с анимацией сохраненный слот
	end
end
local prev_move_state=false

function check_hwg()
	if get_value("hide_wpn_global",false) then
		local active_slot=db.actor:active_slot()
		if active_slot~=inventory_slots.NO_ACT_SLOT then
			db.actor:activate_slot(inventory_slots.NO_ACT_SLOT,true)
			db.actor:hide_weapon()
		end	
		return true
	end
	return false
end

local info2func={
	["ui_inventory"]={
		func=function()
			if has_info("actor_cant_move") then
				prev_move_state=true
			else
				--give_info("actor_cant_move")
			end
			if not check_hwg() then
				hide_and_disable()
			end
		end
	},
	["ui_inventory_hide"]={
		func=function()
			if not prev_move_state then
				disable_info("actor_cant_move")
			else
				prev_move_state=false
			end
			if not check_hwg() then
				show_and_enable()
			end
		end
	},
	["ui_car_body"]={
		func=function() 
			give_info("actor_cant_move")
			if check_hwg() then
				return
			end	
			if monster_parts.get_monster() then
				local knife=db.actor:item_in_slot(inventory_slots.KNIFE)
				local active_item=db.actor:active_item()
				if knife and monster_parts.right_knife(knife) then
					if not active_item then
						db.actor:activate_slot(inventory_slots.KNIFE,true)
						return
					end
					if active_item and knife:id()~=active_item:id() then
						db.actor:activate_slot(inventory_slots.KNIFE,true)
						return
					end
					return
				end
			end
			hide_and_disable()
		end
	},
	["ui_car_body_hide"]={
		func=function() --для обыска слот активировать не будем, только разрешим использование
			disable_info("actor_cant_move")
			if not check_hwg() then
				db.actor:clear_blocked_slots()
			end		
		end
	},
	["gravisak_on"]={
		func=function() --запрет на использование слотов вообще
			--db.actor:hide_weapon()
			--set_value("hide_wpn_global",true)			
			set_value("gravisak_on",true)			
		end
	},
	["gravisak_off"]={
		func=function()
			db.actor:restore_weapon()
			set_value("hide_wpn_global",false)
			del_value("gravisak_on")			
		end
	},
	["ui_talk"]={
		func=function()
			if not check_hwg() then		
				if has_info("ui_trade_hide") then
					--hide_and_disable()
				end
			end
		end
	},
	["ui_talk_hide"]={
		func=function()
			if not check_hwg() then
				if not has_info("ui_trade") then
					--show_and_enable()
				end
			end
		end
	},
	["ui_trade"]={
		func=function()
			give_info("actor_cant_move")
			if not check_hwg() then		
				if not has_info("ui_talk") then
					--hide_and_disable()
				end
			end
		end
	},
	["ui_trade_hide"]={
		func=function()
			disable_info("actor_cant_move")
			if not check_hwg() then
				if not has_info("ui_talk") then
					--show_and_enable()
				end
			end
		end
	},
	["rm_mp_start"]={
		func=function()
			set_value("hide_wpn_global",true)
			--db.actor:hide_weapon()
		end
	},
	["rm_mp_end"]={
		func=function()
			if has_value("gravisak_on") then
				return
			end
			set_value("hide_wpn_global",false)
			db.actor:clear_blocked_slots() --после множественных hide_weapon сфорсим очистку m_blockCounter
			local stored_slot=keyvals():get("active_weapon_slot",inventory_slots.NO_ACT_SLOT) --ключ в контейнере по умолчанию
			if stored_slot~=inventory_slots.NO_ACT_SLOT then
				db.actor:activate_slot(stored_slot,true)
			end
		end
	}
}

info2func["ui_pda"]				=	{func=info2func["ui_inventory"].func}
info2func["ui_pda_hide"]		=	{func=info2func["ui_inventory_hide"].func}

info2func["ui_rukzak"]			=	{func=info2func["ui_inventory"].func}
info2func["ui_rukzak_hide"]		=	{func=info2func["ui_inventory_hide"].func}

--ничего не делать на эти поршни
info2func["ui_pda_map_local"]		=	{func=function() end}
info2func["ui_pda_ranking"]			=	{func=function() end}
info2func["ui_pda_events"]			=	{func=function() end}
info2func["ui_pda_encyclopedia"]	=	{func=function() end}
info2func["ui_pda_contacts"]		=	{func=function() end}
info2func["ui_pda_actor_info"]		=	{func=function() end}

function on_info(info_id)
	local info=info2func[info_id]
	if info then
		local func=info.func
		if not func then
			abort("! ERROR invalid table struct info2func!")
		end
		func()
	else
--		log("~ WARNING unknown info [%s] for process in hide_wpn.script",info_id)
	end
end

