Scriptname _00E_AgnodElevator01Script extends ObjectReference  

; SCRIPT AUTHOR DENNIS MAY 2014

; ====================================================================================
           							; EVENTS                  					 
; ====================================================================================

Event OnActivate(ObjectReference akActionRef)
if ( ElevatorStatus == 0 )
	ControlDoors(false, "elevated")
	soundcont_Move = OBJDwemerGearsMultipleLP.Play(Self)
	Utility.Wait(0.2)
	MoveElevator( _00E_AgnodElevatorUpXMarkerREF, 100 )
	ElevatorStatus = 1
elseif ( ElevatorStatus == 2 )
	ControlDoors(false, "elevated")	
	soundcont_Move = OBJDwemerGearsMultipleLP.Play(Self)
	Utility.Wait(0.2)
	MoveElevator( _00E_AgnodElevatorDownXMarkerREF, 150 )
	ElevatorStatus = -1
endif
EndEvent

Event OnTranslationComplete()
	if ( ElevatorStatus == 1 ) 				;Elevator reached upper level
		ControlDoors(true, "upper")
		soundcont_MoveEnd = _00E_OBJDwemerGearsStuck.Play(Self)  
		Sound.StopInstance(soundcont_Move) 
		ElevatorStatus = 2
	elseif ( ElevatorStatus == -1 )			;Elevator reached lower level
		ControlDoors(true, "lower")
		soundcont_MoveEnd = _00E_OBJDwemerGearsStuck.Play(Self)
		Sound.StopInstance(soundcont_Move) 
		ElevatorStatus = 0
	endif
EndEvent


; ====================================================================================
;           							FUNCTIONS                  					 
; ====================================================================================

function ControlDoors(bool open, string floor)

	int iSize = _00E_Agnod_LiftList.GetSize() - 1	;Get the count of doors in formlist
	int doorsToProceed = 0					    	;Objects
	
	; Sets the numbers of doors in the formlist we need to process
	if ( floor == "elevated" )	
		doorsToProceed = 0
	elseif ( floor == "upper" )
		doorsToProceed = 1
	elseif ( floor == "lower" )
		doorsToProceed = 0
		iSize = 0
	endif
	
	
	While ( iSize >= doorsToProceed )
		ObjectReference DoorToOpen = _00E_Agnod_LiftList.GetAt(iSize) as ObjectReference
		
		if ( open == false )			;We want close and lock the doors
			if ( DoorToOpen.GetOpenState() == 1 || DoorToOpen.GetOpenState() == 2)
				DoorToOpen.SetOpen(False)
			endif
			DoorToOpen.SetLockLevel(255)
			DoorToOpen.Lock()
		else			;We want unlock the doors
			DoorToOpen.Lock(False)
		EndIf
		
		iSize -= 1
		
	EndWhile
	Return
EndFunction


function MoveElevator(ObjectReference actionRef, int speed)
	Self.TranslateToRef( actionRef, speed )
	Return
EndFunction

; ====================================================================================
;            							PROPERTIES                  					 
; ====================================================================================


Formlist Property _00E_Agnod_LiftList Auto

int ElevatorStatus = 0
objectReference property _00E_AgnodElevatorDownXMarkerREF auto
{Points to Down Marker}
objectReference property _00E_AgnodElevatorUpXMarkerREF auto
{Points to Up Marker}


int soundcont_Move
Sound property OBJDwemerGearsMultipleLP auto
{Points to Elevator Move Sound}

int soundcont_MoveEnd
Sound property _00E_OBJDwemerGearsStuck auto
{Points to Elevator Move End Sound}