scriptName trapSoulGemController extends objectReference
;
;
;=======================================================

objectReference property objSelf auto hidden
objectReference property myMagicTrap auto hidden
float idleRotateSpeed = 1.0


;/
event onAttachedToCell()
; 	;debug.Trace(self + " is firing onCellLoad, activation should be blocked")
	objSelf = self as objectReference
	self.blockActivation()
endEvent
/;


auto state waiting
	event onBeginState()
	EndEvent
	
	event onHit(objectReference akAggressor, form akWeapon, projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
	endEvent

	event onMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)
	EndEvent
	
	event onGrab()
	endEvent
endState


state inMagicTrap
	event onBeginState()
		;USLEEP 3.08 Bug #14888
		;(self as objectReference).SetMotionType(4)
; 		;debug.Trace(self + " has begun inMagicTrap")
		;self.TranslateTo(self.getpositionx(), self.getpositiony(), self.getpositionz(), self.getAngleX(), self.getAngleY() + 180, self.getAngleZ(), idleRotateSpeed)
	endEvent
	
	event onHit(objectReference akAggressor, form akWeapon, projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
		
		;self.stopTranslation()
		(self as objectReference).SetMotionType(1)
; 		;debug.Trace(self + " has been hit")
		goToState("disarmed")
	endEvent
	
	event onMagicEffectApply(ObjectReference akCaster, MagicEffect akEffect)
		;self.stopTranslation()
		(self as objectReference).SetMotionType(1)
; 		;debug.Trace(akCaster + " has cast " + akEffect + " on " + self)
		goToState("disarmed")
	endEvent
	
	event onGrab()
		;self.stopTranslation()
		(self as objectReference).SetMotionType(1)
; 		;debug.Trace(self + " has been grabbed")
		goToState("disarmed")
	endEvent

endstate

state disarmed
	event onBeginState()
		magicTrap myTrap
		myTrap = (getLinkedRef() as magicTrap)
		myTrap.clearMySoulgem()
	endEvent
endState


event OnActivate(objectReference akActivator)
; 	;debug.Trace(self + " has recieved onActivate from " + akActivator)
; 	;debug.Trace(self + " is checking if:" + akActivator + " == " + game.getPlayer())
	if akActivator  == game.getPlayer()
		goToState("disarmed")
		self.disable()
		;self.delete()
		objSelf = self as objectReference
		if objSelf
			(game.getPlayer() as actor).addItem(objSelf.getBaseObject(), 1, false)
		else
; 			;debug.Trace(self + ": objSelf was not set!")
		endif
	else
; 		;debug.Trace(akActivator + " != " + game.getPlayer())
	endif
endEvent

event onCellAttach()
; 	Debug.Trace(self + ": onCellAttach called")
	objSelf = self as objectReference
	self.blockActivation()
	
	objSelf = self as objectReference
	objectReference gemSelf = objSelf
	
	magicTrap myTrap
	myTrap = (getLinkedRef() as magicTrap)
	
	
	if self.isEnabled()
; 		Debug.Trace(self + ": is enabled")
		if myTrap ;&& !myTrap.gemTested
			myTrap.CellAttachSetUp(gemSelf)
		;elseif myTrap && myTrap.gemTested
; 		;	debug.Trace(self + ": myTrap has already resolved the gem")
		else
; 			debug.Trace(self + ": has no linked ref. This is bad.")
		endif
	else
; 		Debug.Trace(self + ": is not enabled")
	endif
endEvent
	
event onReset()
; 	debug.Trace(self + ": is running onReset")
; 	debug.Trace(self + ": onResetCalled")
	self.enable(AbFadein = false)
	self.reset()
	objSelf = self as objectReference
	objectReference gemSelf = objSelf
	goToState("waiting")
	
endEvent