179 lines
4.1 KiB
Plaintext
179 lines
4.1 KiB
Plaintext
scriptName TrapDwePiston 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
|
|
bool hasPlayedAttackAnimOnce = FALSE
|
|
float property initialDelay = 0.25 auto
|
|
|
|
string property fireAnim = "Up" auto
|
|
{firing animation, should not need to change}
|
|
string property fireEvent = "TransUp" auto
|
|
{firing animation event, should not need to change}
|
|
string property resetAnim = "Down" auto
|
|
{reset animation, should not need to change}
|
|
string property resetEvent = "TransDown" auto
|
|
{reset animation event, should not need to change}
|
|
string property startSwungAnim = "StartUp" auto
|
|
{anim event to start already swung}
|
|
|
|
bool property startSwung = false auto hidden
|
|
{set to true to start swung}
|
|
|
|
|
|
;-----------------------------------
|
|
|
|
|
|
|
|
EVENT OnCellAttach()
|
|
isLoaded = TRUE
|
|
|
|
if isFiring || startSwung
|
|
if startSwung
|
|
;isFiring == True
|
|
loop = True
|
|
goToState("On")
|
|
endif
|
|
fireTrap()
|
|
endif
|
|
endEVENT
|
|
|
|
Function fireTrap()
|
|
|
|
;Basic wind up and fire once checking
|
|
;TRACE("fireTrap called")
|
|
isFiring = True
|
|
|
|
if !startSwung
|
|
if WindupSound
|
|
WindupSound.play( self as ObjectReference) ;play windup sound
|
|
endif
|
|
wait( initialDelay ) ;wait for windup
|
|
endif
|
|
hasPlayedAttackAnimOnce = FALSE
|
|
;TRACE("Initial Delay complete")
|
|
|
|
if (fireOnlyOnce == True) ;If this can be fired only once then disarm
|
|
trapDisarmed = True
|
|
endif
|
|
|
|
;TRACE("Looping =")
|
|
;TRACE(Loop)
|
|
|
|
;Trap Guts
|
|
finishedPlaying = False
|
|
while !finishedPlaying && isLoaded
|
|
;trace(self + "Firing trap: playanimation(" + fireAnim + ")")
|
|
;trace(self + "Firing trap: waiting for event(" + fireEvent + ")")
|
|
if !hasPlayedAttackAnimOnce
|
|
if !startSwung
|
|
PlayAnimationAndWait(fireAnim, fireEvent)
|
|
; ;debug.Trace(self + "has finished anim once")
|
|
hasPlayedAttackAnimOnce = TRUE
|
|
else
|
|
startSwung = False
|
|
playAnimation(startSwungAnim)
|
|
hasPlayedAttackAnimOnce = TRUE
|
|
endif
|
|
Else
|
|
wait(0.5)
|
|
endif
|
|
finishedPlaying = True
|
|
|
|
if loop ;Reset Limiter
|
|
; ;debug.Trace(self + "is looping because loop = " + loop)
|
|
resetLimiter()
|
|
endif
|
|
endWhile
|
|
|
|
if isLoaded
|
|
isFiring = false
|
|
PlayAnimationAndWait(resetAnim, resetEvent)
|
|
goToState("Reset")
|
|
endif
|
|
;trace(self + "Reset trap: playanimation(" + resetAnim + ")")
|
|
;trace(self + "Reset trap: waiting for event(" + resetEvent + ")")
|
|
|
|
|
|
endFunction
|
|
|
|
|
|
;/
|
|
Function fireTrap()
|
|
|
|
|
|
isFiring = True
|
|
if hitbase
|
|
hitBase.goToState("CanHit")
|
|
endif
|
|
if windupSound
|
|
WindupSound.play( self as ObjectReference) ;play windup sound
|
|
endif
|
|
ResolveLeveledDamage()
|
|
wait( initialDelay ) ;wait for windup
|
|
hasPlayedAttackAnimOnce = FALSE
|
|
;TRACE("Initial Delay complete")
|
|
|
|
if (fireOnlyOnce == True) ;If this can be fired only once then disarm
|
|
trapDisarmed = True
|
|
endif
|
|
|
|
;TRACE("Looping =")
|
|
;TRACE(Loop)
|
|
|
|
;Trap Guts
|
|
while(finishedPlaying == False && isLoaded == true)
|
|
;trace(self + "Firing trap: playanimation(" + fireAnim + ")")
|
|
;trace(self + "Firing trap: waiting for event(" + fireEvent + ")")
|
|
if (hasPlayedAttackAnimOnce == FALSE)
|
|
PlayAnimationAndWait(fireAnim, fireEvent)
|
|
; ;debug.Trace(self + "has finished anim once")
|
|
hasPlayedAttackAnimOnce = TRUE
|
|
Else
|
|
wait(0.5)
|
|
endif
|
|
finishedPlaying = True
|
|
|
|
if (loop == TRUE) ;Reset Limiter
|
|
; ;debug.Trace(self + "is looping because loop = " + loop)
|
|
resetLimiter()
|
|
endif
|
|
endWhile
|
|
|
|
if isLoaded
|
|
isFiring = false
|
|
hitBase.goToState("CannotHit")
|
|
PlayAnimationAndWait(resetAnim, resetEvent)
|
|
goToState("Reset")
|
|
endif
|
|
;trace(self + "Reset trap: playanimation(" + resetAnim + ")")
|
|
;trace(self + "Reset trap: waiting for event(" + resetEvent + ")")
|
|
|
|
|
|
endFunction
|
|
/;
|
|
|
|
|
|
Function ResetLimiter()
|
|
finishedPlaying = False
|
|
;TrapHitBase hitBase = (self as objectReference) as TrapHitBase
|
|
;hitBase.goToState("CanHit")
|
|
EndFunction
|
|
|
|
Event onReset()
|
|
self.reset()
|
|
goToState("Idle")
|
|
endEvent
|
|
|
|
|