Scriptname _00E_Phasmalist_Soul extends ObjectReference  

bool Property enabled = true Auto
bool Property bPerkUpdate Auto Hidden

_00E_FS_NQ09_Functions Property FS_NQ09 Auto

ImageSpaceModifier Property _00E_Phasmalist_PickUpSoulIMOD Auto

GlobalVariable Property _00E_Phasmalist_CanSeeSoulsLevel auto
Formlist Property _00E_Phasmalist_LoadedSouls auto
int Property soulLevel auto
{should be in range [1;5]}
Keyword Property _00E_Phasmalist_LinkedSoul auto
Keyword Property _00E_Phasmalist_LinkedSoulSound auto
Explosion Property _00E_Phasmalist_SoulBecomeVisibleExp auto
Sound Property MAGConjureFire Auto
MiscObject Property BaseObject Auto
Message Property _00E_FS_Phasmalist_TierTooLowMSG Auto

_FS_Phasmalist_ControlQuest Property controlQuest auto

; necessary to prevent the player activate the soul twice in fast succession and getting two, 
; because of concurrent execution of OnActivate
bool taken = False

Event OnCellAttach()
	updateCanSee(false)
	_00E_Phasmalist_LoadedSouls.addform(self)
Endevent

Event OnCellDetach()
	_00E_Phasmalist_LoadedSouls.removeaddedform(self)
Endevent

Event OnLoad()
	BaseObject = self.getBaseObject() as MiscObject
	;getLinkedRef(_00E_Phasmalist_LinkedSoul).moveto(self);unnecessary
Endevent

Event OnActivate(ObjectReference akActivator)
	If !taken
		taken = true
		
		If !FS_NQ09.IsRunning()
			FS_NQ09.SetCurrentStageID(5)
		EndIf
		FS_NQ09.UpdateSoulCount()
		
		_00E_Phasmalist_LoadedSouls.removeaddedform(self)
		controlQuest.OnPlayerSoulCollected()
		
		If getLinkedRef(_00E_Phasmalist_LinkedSoulSound) != None
			getLinkedRef(_00E_Phasmalist_LinkedSoulSound).disable()
		EndIf
		
		_00E_Phasmalist_PickUpSoulIMOD.Apply()
		MAGConjureFire.Play(Game.GetPlayer())
		self.Activate(akActivator, true)
	EndIf
Endevent

function updateCanSee(bool playExp = true)
	If _00E_Phasmalist_CanSeeSoulsLevel.getValue() >= soulLevel && bPerkUpdate && enabled
		parent.enable()
		If playExp
			self.placeatme(_00E_Phasmalist_SoulBecomeVisibleExp)
		EndIf
	Else
		If _00E_Phasmalist_CanSeeSoulsLevel.getValue() < soulLevel && bPerkUpdate
			_00E_FS_Phasmalist_TierTooLowMSG.Show()
		EndIf
		parent.disable()
		;getLinkedRef(_00E_Phasmalist_LinkedSoul).disable();unnecessary
	EndIf
	self.blockActivation()
Endfunction

Function enable(bool abFadeIn = false)	; unused
	enabled = true
	If getLinkedRef(_00E_Phasmalist_LinkedSoulSound) != None
		getLinkedRef(_00E_Phasmalist_LinkedSoulSound).enable()
	EndIf
	updateCanSee(true)
Endfunction

Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
	If akOldContainer == Game.getPlayer()
		If akNewContainer == None
			akOldContainer.Additem(self)
		Else
			akOldContainer.Additem(BaseObject)
			akNewContainer.RemoveItem(BaseObject)
		EndIf
	EndIf
EndEvent