Scriptname _00E_DayTimeControlScript extends Quest  

ObjectReference Property NightLightsMarker Auto
ObjectReference Property TradeHoursMarker Auto

GlobalVariable Property GameHour Auto

Float Property NIGHT_LIGHTS_ON_TIME = 18.9 AutoReadOnly
Float Property NIGHT_LIGHTS_OFF_TIME = 6.25 AutoReadOnly

Float Property TRADE_ON_TIME = 8.1 AutoReadOnly
Float Property TRADE_OFF_TIME = 20.0 AutoReadOnly

Event OnInit()
	RegisterForSingleUpdate(3.0) ; Give a few seconds for the game to warm up at the start
EndEvent

Event OnUpdate()
	UpdateMarkers()
EndEvent

Event OnUpdateGameTime()
	UpdateMarkers()
EndEvent

Function UpdateMarkers()
	Float nextUpdateHour = 24.0
	
	nextUpdateHour = _UpdateMarker(NightLightsMarker, NIGHT_LIGHTS_ON_TIME, NIGHT_LIGHTS_OFF_TIME, nextUpdateHour)
	nextUpdateHour = _UpdateMarker(TradeHoursMarker, TRADE_ON_TIME, TRADE_OFF_TIME, nextUpdateHour)

	RegisterForSingleUpdateGameTime(nextUpdateHour + 0.025)
EndFunction

Float Function _UpdateMarker(ObjectReference markerRef, Float onTime, Float offTime, Float questUpdateHour)
	Float nextUpdateHour
	Float curHour = GameHour.GetValue()

	If onTime > offTime
		If curHour >= offTime && curHour < onTime
			markerRef.Disable()
			nextUpdateHour = onTime
		Else
			markerRef.Enable()
			nextUpdateHour = offTime
		EndIf
	Else ; onTime < offTime
		If curHour >= onTime && curHour < offTime
			markerRef.Enable()
			nextUpdateHour = offTime
		Else
			markerRef.Disable()
			nextUpdateHour = onTime
		EndIf
	EndIf

	If nextUpdateHour < curHour
		nextUpdateHour += 24.0
	EndIf
	nextUpdateHour -= curHour

	If nextUpdateHour < questUpdateHour
		Return nextUpdateHour
	Else
		Return questUpdateHour
	EndIf
EndFunction