scriptName NorPortcullisSCRIPT extends ObjectReference import debug import utility bool isOpen = false ;Is the portcullis already open bool property isOpening { True if the door is currently in the process of opening } bool Function Get() if ( (GetState() == "busy") && (!isOpen) ) return true else return false endif endFunction EndProperty bool property isClosing { True if the door is currently in the process of opening } bool Function Get() if ( (GetState() == "busy") && (isOpen) ) return true else return false endif endFunction EndProperty bool property isAlreadyOpen ;Set "isOpen" to same as property "isAlreadyOpen" { True = Portcullis is already open False = Portcullis is closed (default) } bool Function Get () return isOpen endFunction Function Set(bool value) isOpen = value endFunction endProperty EVENT OnLoad() SetDefaultState() endEVENT Event OnReset() SetDefaultState() EndEvent ;This has to be handled as a function, since OnLoad and OnReset can fire in either order, and we can't handle competing animation calls. Function SetDefaultState() if (isOpen == false) playAnimation("close") ; Animate Closed gotostate ("upPosition") ;Portcullis Start Closed else playAnimation("open") ;Portcullis Starts Opened gotostate ("downPosition") endif EndFunction STATE upPosition ; This is the state I'm in when open and at rest EVENT onActivate (objectReference triggerRef) gotoState ("busy") ;trace("Portcullis Opening") playAnimationandWait("open","opening") ; Animate Open ;trace("Portcullis Opened") isOpen = true gotoState("downPosition") endEVENT endState STATE downPosition ; This is the state I'm in when i'm closed and at rest EVENT onActivate (objectReference triggerRef) gotoState ("busy") ;trace("Portcullis Closing") playAnimationandWait("close","closing") ; Animate Closed ;trace("Portcullis Closed") isOpen = false gotoState("upPosition") endEVENT endState STATE busy ; This is the state when I'm busy animating EVENT onActivate (objectReference triggerRef) ;trace ("Portcullis Busy") endEVENT endSTATE