115 lines
3.1 KiB
Plaintext
115 lines
3.1 KiB
Plaintext
|
scriptName defaultPuzzlePillarScript extends ObjectReference
|
||
|
{
|
||
|
- User can use properties to set the pillar's initial state and solve state
|
||
|
- The script first checks to see if the initial state is the same as the solve state
|
||
|
- When the pillar is activated, the pillar rotates to a new position and then checks to see if its solved
|
||
|
- If pillar is solved, the script increments neccessary vars in the defaultPillarPuzzleLever.psc
|
||
|
- Each pillar needs to have its linkedRef point to the lever where the defaultPillarPuzzleLever.psc lives
|
||
|
}
|
||
|
|
||
|
|
||
|
import debug
|
||
|
import utility
|
||
|
|
||
|
bool pillarSolved
|
||
|
bool doOnce
|
||
|
|
||
|
defaultPillarPuzzleLever myLinkedRef
|
||
|
|
||
|
int property initialState auto
|
||
|
{
|
||
|
This is the position the pillar starts out in.
|
||
|
1 = Position 1 (eagle)
|
||
|
2 = Position 2 (snake)
|
||
|
3 = Position 3 (whale)
|
||
|
Position 1,2,3 refer to the havok animations
|
||
|
}
|
||
|
|
||
|
int property solveState auto
|
||
|
{
|
||
|
This is the position the pillar needs to be in to be considered solved.
|
||
|
1 = Position 1 (eagle)
|
||
|
2 = Position 2 (snake)
|
||
|
3 = Position 3 (whale)
|
||
|
Position 1,2,3 refer to the havok animations
|
||
|
}
|
||
|
|
||
|
Event OnCellLoad()
|
||
|
myLinkedRef = GetLinkedRef() as defaultPillarPuzzleLever
|
||
|
|
||
|
;account for case where initialState and solveState are equal in the beginning
|
||
|
if(!doOnce)
|
||
|
if (initialState == solveState)
|
||
|
myLinkedRef.numPillarsSolved = myLinkedRef.numPillarsSolved + 1
|
||
|
pillarSolved = true
|
||
|
endif
|
||
|
|
||
|
;now move the pillar into initialState
|
||
|
if (initialState == 1)
|
||
|
;no animation
|
||
|
gotoState("position01")
|
||
|
elseif (initialState == 2)
|
||
|
playAnimation("StartState02")
|
||
|
gotoState("position02")
|
||
|
elseif (initialState == 3)
|
||
|
playAnimation("StartState03")
|
||
|
gotoState("position03")
|
||
|
endif
|
||
|
|
||
|
doOnce = true
|
||
|
endif
|
||
|
endEvent
|
||
|
|
||
|
; Makes the pillar rotate to the next state and checks whether it is 'solved' as a result
|
||
|
FUNCTION RotatePillarToState(int stateNumber, int animEventNumber)
|
||
|
gotoState ("busy")
|
||
|
if (solveState == stateNumber)
|
||
|
;trace(self + " pillar solved!")
|
||
|
myLinkedRef.numPillarsSolved = myLinkedRef.numPillarsSolved + 1
|
||
|
pillarSolved = true
|
||
|
elseif (pillarSolved == True)
|
||
|
;if the puzzle is solved and the door is open, then activate the linkedRef (lever)
|
||
|
;and set the puzzleSolved to false as well as the doorOpened
|
||
|
if (myLinkedRef.puzzleSolved == true && myLinkedRef.doorOpened == 1)
|
||
|
myLinkedRef.refActOnSuccess01.activate (myLinkedRef.puzzleDoorActivator)
|
||
|
myLinkedRef.puzzleSolved = false
|
||
|
myLinkedRef.doorOpened = false
|
||
|
endif
|
||
|
myLinkedRef.numPillarsSolved = myLinkedRef.numPillarsSolved - 1
|
||
|
pillarSolved = False
|
||
|
endif
|
||
|
playAnimationandWait("Trigger0" + animEventNumber, "Turned0" + animEventNumber)
|
||
|
endFUNCTION
|
||
|
|
||
|
|
||
|
STATE position01
|
||
|
EVENT onActivate (objectReference triggerRef)
|
||
|
RotatePillarToState(2, 1)
|
||
|
gotoState("position02")
|
||
|
endEVENT
|
||
|
endState
|
||
|
|
||
|
|
||
|
STATE position02
|
||
|
EVENT onActivate (objectReference triggerRef)
|
||
|
RotatePillarToState(3, 2)
|
||
|
gotoState("position03")
|
||
|
endEVENT
|
||
|
endState
|
||
|
|
||
|
|
||
|
STATE position03
|
||
|
EVENT onActivate (objectReference triggerRef)
|
||
|
RotatePillarToState(1, 3)
|
||
|
gotoState("position01")
|
||
|
endEVENT
|
||
|
endState
|
||
|
|
||
|
|
||
|
STATE busy
|
||
|
; This is the state when I'm busy animating
|
||
|
EVENT onActivate (objectReference triggerRef)
|
||
|
;do nothing
|
||
|
endEVENT
|
||
|
endSTATE
|