65 lines
1.5 KiB
Plaintext
65 lines
1.5 KiB
Plaintext
Scriptname BlackreachDoorScript extends ObjectReference Conditional
|
|
{Script to open the door to blackreach when activated by the lock.}
|
|
|
|
import game
|
|
import debug
|
|
import utility
|
|
|
|
bool property isOpen = false auto Conditional
|
|
{set to true to start open}
|
|
|
|
bool property isAnimating = false auto Hidden
|
|
{is the activator currently animating from one state to another?}
|
|
|
|
string property openAnim = "Down" auto Hidden
|
|
{animation to play when opening}
|
|
|
|
string property openEvent = "TransDown" auto Hidden
|
|
{open event name - waits for this event before considering itself "open"}
|
|
|
|
int myState = 1
|
|
; true when static or animating
|
|
; 0 == open or opening
|
|
; 1 == closed or closing
|
|
|
|
EVENT OnLoad()
|
|
if (isOpen )
|
|
myState = 0
|
|
endif
|
|
endEVENT
|
|
|
|
auto STATE waiting ; waiting to be activated
|
|
EVENT onActivate (objectReference triggerRef)
|
|
; switch open state when activated
|
|
SetOpen(!isOpen)
|
|
endEVENT
|
|
endState
|
|
|
|
STATE busy
|
|
; This is the state when I'm busy animating
|
|
EVENT onActivate (objectReference triggerRef)
|
|
;trace (self + " Busy")
|
|
endEVENT
|
|
endSTATE
|
|
|
|
function SetOpen(bool abOpen = true)
|
|
; if busy, wait to finish
|
|
while getState() == "busy"
|
|
wait(1)
|
|
endWhile
|
|
; open
|
|
isAnimating = true
|
|
if !isOpen
|
|
gotoState ("busy")
|
|
;trace(self + " Opening")
|
|
playAnimationandWait(openAnim, openEvent) ; Animate Open
|
|
endif
|
|
;trace(self + " Opened")
|
|
isOpen = true
|
|
gotoState("done")
|
|
isAnimating = false
|
|
endFunction
|
|
|
|
STATE done
|
|
; This is the end state, player should not be able to reactivate
|
|
endSTATE |