enderalse/source/scripts/shaderparticlegeometryscript.psc

89 lines
2.4 KiB
Plaintext
Raw Normal View History

scriptName ShaderParticleGeometryScript extends ActiveMagicEffect
{Generic ShaderParticleGeometry Data Script}
import utility
;======================================================================================;
; PROPERTIES /
;=============/
ShaderParticleGeometry property PSGD auto
{ShaderParticleGeometry applied at the start of the spell effect}
float property FadeInTime = 1.0 auto
{Time it takes for the particles to fade in.}
float property FadeOutTime = 1.0 auto
{Time it takes for the particles to fade out.}
bool Property bUseDistanceCheck = False auto
{This will activate a system for checking the distance from a source so that we can remove the effect.}
Float Property fDistnceCheck = 1000.0 auto
{If we excede this distance, the effect will be removed.}
ObjectReference Property DistanceCheckerRef auto
{This is an optional property for and Object to check distance with, in empty, we place a marker at the player's location.}
activator property ActivatorRef auto
{The name of the Activator we will be placing.}
;======================================================================================;
; EVENTS /
;=============/
bool bIsTooFar
bool bactive = false
actor player
ObjectReference DistanceCheckObject
Event OnInit()
if bUseDistanceCheck
player = game.getplayer()
endif
EndEvent
Event OnEffectStart(Actor Target, Actor Caster)
If PSGD != None ;Do we have any data?
PSGD.remove(FadeOutTime) ; remove ShaderParticleGeometry
if caster == player
PSGD.apply(FadeInTime) ; apply ShaderParticleGeometry
endif
bactive = true
if bUseDistanceCheck
if DistanceCheckerRef
DistanceCheckObject = DistanceCheckerRef
Else
DistanceCheckObject = Caster.placeAtMe(ActivatorRef)
endif
RegisterForSingleUpdate(1.0)
endif
EndIf
EndEvent
Event OnUpdate()
if bActive
if player.GetDistance(DistanceCheckObject) > fDistnceCheck
If bIsTooFar == false
PSGD.remove(FadeOutTime)
bIsTooFar = true
endif
Elseif bIsTooFar == true
PSGD.apply(FadeInTime)
bIsTooFar = false
endif
RegisterForSingleUpdate(1.0)
endif
EndEvent
Event OnEffectFinish(Actor Target, Actor Caster)
bactive = False
If PSGD != None ;Do we have any data?
If bIsTooFar == false
PSGD.remove(FadeOutTime) ; remove ShaderParticleGeometry
else
PSGD.remove(0.1)
endif
EndIf
if ActivatorRef
DistanceCheckObject.disable()
DistanceCheckObject.delete()
endif
EndEvent