--[[ 
		Fichier contenant tous les traitements que l'on pourrait avoir sur l'attribut State
		des éléments interactifs du jeu (objets, areas, hotspots
		à include dans les script où oàn se sert des flags																	--]]
																								
--fonction générique, pas de namespace
																								
-- ajoute un flag à la variable State de l'élément
-- ne fait rien si le flag n'est pas présent
function AddFlag( p_flag, LevelData, name )
	AssertPopup( type(p_flag) == "number","Erreur dans l'appel à la méthode AddFlag,\r le paramètre p_flag doit être un nombre")
	if LevelData==nil then
		LevelData=OPUnitFactory.GetUnit("NavigationManager","Unit").GetCurrentLevelData()
	end
	if name==nil then
		name=self.Name
	end
	if OPArith.And( LevelData.Get(name), p_flag ) ~= p_flag then
		--OPLog.Log(name.." : "..LevelData.Name)
		LevelData.Set(name, OPArith.Or(LevelData.Get(name), p_flag ))
	end
end

-- retire un flag à la variable State de l'élément
-- ne fait rien si le flag n'est pas présent
function SubFlag( p_flag, LevelData, name )
	AssertPopup( type(p_flag) == "number","Erreur dans l'appel à la méthode SubFlag,\r le paramètre p_flag doit être un nombre")
	if LevelData==nil then
		LevelData=OPUnitFactory.GetUnit("NavigationManager","Unit").GetCurrentLevelData()
	end
	if name==nil then
		name=self.Name
	end
	if OPArith.And( LevelData.Get(name), p_flag ) == p_flag then
		LevelData.Set(name, OPArith.Xor(LevelData.Get(name), p_flag ))
	end
end

-- teste su la variable State de l'élément contient le flag p_flag
-- si oui, renvoie true, sinon, renvoie false
function CompareFlag( p_flag,LevelData, name)
	AssertPopup( type(p_flag) == "number","Erreur dans l'appel à la méthode CompareFlag,\r le paramètre p_flag doit être un nombre")
	if LevelData == nil then
		LevelData=OPUnitFactory.GetUnit("NavigationManager","Unit").GetCurrentLevelData()
	end
	if name==nil then
		name=self.Name
	end
	AssertPopup(type(LevelData.Get(name) == "number" , "erreur de flag sur l'unit "..name))
	if OPArith.And(LevelData.Get(name), p_flag ) == p_flag then
		return true
	end	
	return false
end


-- cette fonction sauvegarde dans le leveldata concerné le nom de l'objet d'inventaire linké sur le hotspot voulu
-- a n'utiliser que sur les AreaHotspot bien entendu
function SetObjectLinkedToLevelData( objectName, LevelData, name )
	AssertPopup( type(objectName) == "string","Erreur, mauvais type de paramètre")
	if LevelData == nil then
		LevelData=OPUnitFactory.GetUnit("NavigationManager","Unit").GetCurrentLevelData()
	end
	if name==nil then
		name=self.Name
	end
	AssertPopup(type(LevelData.Get(name.."_ObjectLinked") == "string","erreur de type sur la sauvegarde de "..name))
	
	LevelData.Set(name.."_ObjectLinked", objectName)
end


function GetObjectLinkedFromLevelData( LevelData, name )
	if LevelData == nil then
		LevelData=OPUnitFactory.GetUnit("NavigationManager","Unit").GetCurrentLevelData()
	end
	if name==nil then
		name=self.Name
	end
	AssertPopup(type(LevelData.Get(name.."_ObjectLinked") == "string","erreur de type sur la sauvegarde de "..name))
	
	return LevelData.Get(name.."_ObjectLinked")
end


