scriptName TrapTriggerHinge extends TrapTriggerBase
;
;
;
;================================================================


int popmessage
bool triggeredOnce = False
objectReference objectSelf
objectReference trapLinkedRef
keyword property TrapKeyword auto
message property LockpickMessage auto
sound property disarmSound auto

event onCellLoad()
	objectSelf = self as ObjectReference
	trapLinkedRef = getLinkedRef(TrapKeyword) as objectReference
	if trapLinkedRef as trapTriggerBase
		(trapLinkedRef as trapTriggerBase).triggerType = triggertype
	endif
endEvent

auto State Active
	;Over ride trapTriggerBase events
	event onBeginState()
	endevent
	
	event onTriggerEnter(objectReference triggerRef)
	endevent
	
	event onTriggerLeave(objectReference triggerRef)
	endevent
	
	event OnMagicEffectApply(objectReference akCaster, MagicEffect akEffect)
	endevent

	;Activation
	event onActivate(objectReference triggerRef)
		if triggerRef as actor == game.getPlayer()
			if !isLocked()
				goToState("Disarmed")
			endif
		else
; 			;;Debug.Trace(self + " has been activated by " + triggerRef)
			goToState("Triggered")
		EndIf
	EndEvent
	
	event onLockStateChanged()
		if !isLocked()
			goToState("Disarmed")
		elseif isLockBroken()
			goToState("Triggered")
		else
			;goToState("Active")
		endif
	endEvent
	
	event onHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
		if TriggeredOnce == False
; 			;Debug.Trace(self + " has been hit by " + akAggressor)
			goToState("Triggered")
		EndIf
	EndEvent
EndState



state Disarmed
	event onBeginState()
		if disarmSound
			disarmSound.play(self)
		endif
		playanimation("Disarm01")
		setDestroyed(true)
	EndEvent
EndState

state Triggered
	event onBeginState()
		(trapLinkedRef).activate(self) ; USKP 2.0.1 - No need to have it use a variable with no purpose. "self" works just fine.
		setDestroyed(true)
		playAnimation("Trigger01")
	EndEvent
endState

event onTriggerEnter(objectReference triggerRef)
endEvent

event onTriggerLeave(objectReference triggerRef)
endEvent
		
state Inactive
endState

event onReset()
	self.Reset()
	self.clearDestruction()
	self.setDestroyed(False)
	goToState("Active")
endEvent