enderalse/source/scripts/batteringtrap.psc

83 lines
2.2 KiB
Plaintext

scriptName BatteringTrap extends MovingTrap
;
;
;This is the script for the blade trap
;Activating the trap causes it to toggle on and off
;If activated while in the process of stopping, it should be able to handle that.
;================================================================
import debug
import utility
;If Loop is true, it swings until activated again.
;If Loop is false, it swings once when activated.
bool restartLooping = false
bool finishedPlaying = false
float property initialDelay = 0.25 auto
bool property resetEventRecieved = False auto hidden
;-----------------------------------
Function fireTrap()
;Basic wind up and fire once checking
; ;debug.TRACE("fireTrap called")
WindupSound.play( self as ObjectReference) ;play windup sound
ResolveLeveledDamage()
wait( initialDelay ) ;wait for windup
; ;debug.TRACE("Initial Delay complete")
registerForAnimationEvent(self, "reset")
if (fireOnlyOnce == True) ;If this can be fired only once then disarm
trapDisarmed = True
endif
; ;debug.TRACE("Looping =")
; ;debug.TRACE(Loop)
;Trap Guts
while(finishedPlaying == False) && isloaded
;TRACE("playing anim Trigger")
hitBase.goToState("CanHit")
PlayAnimationAndWait("Trigger", "BackSwing")
hitBase.goToState("CannotHit")
while !resetEventRecieved && isLoaded
; ;debug.Trace(self + " is waiting for animationEvent")
utility.wait(0.5)
endWhile
finishedPlaying = True
resetEventRecieved = False
if (loop == TRUE) ;Reset Limiter
resetLimiter()
endif
; debug.Trace(self + " finished main while loop")
endWhile
unregisterForAnimationEvent(self, "reset")
goToState("Reset")
; ;debug.TRACE("fireTrap has finished")
PlayAnimationAndWait( "reset", "off" )
endFunction
Function ResetLimiter()
finishedPlaying = False
;TrapHitBase hitBase = (self as objectReference) as TrapHitBase
;hitBase.goToState("CanHit")
EndFunction
Event onLoad()
hitBase = (self as objectReference) as TrapHitBase
endEvent
Event OnAnimationEvent(ObjectReference akSource, string asEventName)
; ;debug.Trace(self + " has recieved animation event = " + asEventName)
if akSource == (self as objectReference) && asEventName == "reset"
resetEventRecieved = TRUE
endif
endEvent