Scriptname _00E_ApparitionFXScript extends activemagiceffect  

Actor Property PlayerREF Auto
EffectShader Property _00E_Phasmalist_ApparitionShaderFXS Auto
Keyword Property _00E_Phasmalist_NoSummonLocationTown Auto
Perk Property _00E_Class_Phasmalist_P08_B_PhasmalicVeil Auto
Sound Property MAGAlterationInvisibilityIn Auto
Sound Property MAGAlterationInvisibilityOut Auto

Actor Target
Bool bTownMode

Float Property TOWN_ALPHA = 0.1 AutoReadOnly
Float Property WILDERNESS_ALPHA = 0.6 AutoReadOnly

Event OnEffectStart(Actor akTarget, Actor akCaster)
	If akCaster == None || akCaster == PlayerREF
		Dispel()
		Return
	EndIf

	Target = akCaster

	Target.SetAlpha(WILDERNESS_ALPHA) ; For visual reasons, want to set any alpha ASAP, before bTownMode is figured out
	bTownMode = IsInTownMode(Target.GetCurrentLocation())
	If bTownMode
		Target.SetAlpha(TOWN_ALPHA)
	EndIf
	_00E_Phasmalist_ApparitionShaderFXS.Play(Target)
EndEvent

Event OnLocationChange(Location akOldLoc, Location akNewLoc)
	Bool bNewTownMode = IsInTownMode(akNewLoc)
	If bNewTownMode != bTownMode
		bTownMode = bNewTownMode

		If bTownMode
			MAGAlterationInvisibilityIn.Play(Target)
			Target.SetAlpha(TOWN_ALPHA, True)
		Else
			MAGAlterationInvisibilityOut.Play(Target)
			Target.SetAlpha(WILDERNESS_ALPHA, True)
		EndIf
	EndIf
EndEvent

Bool Function IsInTownMode(Location loc)
	Return (loc && loc.HasKeyword(_00E_Phasmalist_NoSummonLocationTown) && PlayerREF.HasPerk(_00E_Class_Phasmalist_P08_B_PhasmalicVeil))
EndFunction