Scriptname _00E_VisionHomeSC extends ObjectReference  

Event OnTriggerEnter(ObjectReference akActionRef)

	if akActionRef == PlayerREF
		bPlayerIsInside = True

		If bLockedDoor == False || IsBattleRunning() == False
			SetWeather(_00E_MQ07aVisionWeatherNoRain)
		EndIf
	
	ElseIf (akActionRef as _00E_MQ07a_SoldierSC)
		nEnemiesInside += 1
	EndIf
	
EndEvent

Event OnTriggerLeave(ObjectReference akActionRef)

	If akActionRef == PlayerREF
		bPlayerIsInside = False

		TryCloseDoor()

		SetWeather(_00E_MQ07aVisionWeatherRain)
	ElseIf (akActionRef as _00E_MQ07a_SoldierSC)
		nEnemiesInside -= 1
		TryCloseDoor()
	EndIf

EndEvent

Event OnUpdate()
	bWeaponTransitionAllowed = True
	If PendindWeather
		UpdatePendingWeather()
	EndIf
EndEvent


;=====================================================================================
; Inside/outside weather control
;=====================================================================================

Function SetWeather(Weather newWeather)
	If newWeather == CurrentWeather
		PendindWeather = None
		Return
	EndIf

	PendindWeather = newWeather
	If bWeaponTransitionAllowed
		UpdatePendingWeather()
	EndIf
EndFunction

Function UpdatePendingWeather()
	bWeaponTransitionAllowed = False

	CurrentWeather = PendindWeather
	PendindWeather = None

	If MQ07a.GetStage() < 170
		CurrentWeather.ForceActive(True)
		If CurrentWeather == _00E_MQ07aVisionWeatherNoRain
			MQ07a_SC6_Rainparent.Enable()
		Else
			MQ07a_SC6_Rainparent.Disable()
		EndIf
		RegisterForSingleUpdate(1.5)
	EndIf
EndFunction


;=====================================================================================
; Hut's door control
;=====================================================================================

Function ResetEnemiesInside()
	nEnemiesInside = 0
	TryCloseDoor()
EndFunction

Function TryCloseDoor()
	If IsBattleRunning() && bLockedDoor == False && bPlayerIsInside == False && nEnemiesInside <= 0
		bLockedDoor = True
		MQ07a_SC8_HouseDoor.SetOpen(False)
		MQ07a_SC8_HouseDoor.Lock()
		MQ07a_SC8_HouseDoor.SetLockLevel(255)
		MQ07a_SC8_HouseDoor.BlockActivation(True)
	EndIf
EndFunction

Bool Function IsBattleRunning()
	Return (MQ07a.GetStage() == 145)
EndFunction


ObjectReference Property MQ07a_SC6_Rainparent Auto
ObjectReference Property MQ07a_SC8_HouseDoor Auto
Weather Property _00E_MQ07aVisionWeatherNoRain Auto
Weather Property _00E_MQ07aVisionWeatherRain Auto
Actor Property PlayerREF Auto

Quest Property MQ07a Auto

Weather CurrentWeather = None
Weather PendindWeather = None
Bool bWeaponTransitionAllowed = True
Int nEnemiesInside = 10
Bool bPlayerIsInside = True
Bool bLockedDoor = False