Scriptname _00E_Ark_GenericDialogueFunctions extends Quest Conditional

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

Event OnUpdateGameTime()
	If PlayerREF.GetWorldSpace() == CapitalCityUpperCity
		RegisterForSingleUpdateGameTime(1.0)
		Return
	EndIf

	; Failsafes
	bPlayerWithinHearingDistance = False

	Int Index = 0
	While Index < arrayPoemScenes.Length
		If arrayPoemScenes[Index].IsPlaying()
			arrayPoemScenes[Index].Stop()
		EndIf
		Index += 1
	EndWhile

	bPoemCurrentlyPlaying = False
EndEvent

Event OnUpdate()
	StartRandomPoemScene()
EndEvent

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

bool Function NoPoemPlaying()
	Int Index = 0
	While Index < arrayPoemScenes.Length
		If arrayPoemScenes[Index].IsPlaying()
			Return False
		EndIf
		Index += 1
	EndWhile

	Return True
EndFunction

Function StartRandomPoemScene()

	If _00E_UpperCity_PrinceMithREF.GetCurrentPackage() != _00E_CapitalCity_UpperCity_Mith_ReadPoems
		Return
	EndIf

	If PlayerREF.GetWorldSpace() != CapitalCityUpperCity
		bPlayerWithinHearingDistance = False
	EndIf

	If bPlayerWithinHearingDistance == False
		Return
	EndIf

	If NoPoemPlaying() == False
		Return
	EndIf

	; If the prince is away from his marker or in dialogue with the player, try again later
	If _00E_UpperCity_PrinceMithREF.GetDistance(PrinceMithReadPoemsMarker) > 64.0 || _00E_UpperCity_PrinceMithREF.IsInDialogueWithPlayer()
		RegisterForSingleUpdate(2.0)
		Return
	EndIf

	If !bPoemCurrentlyPlaying
		bPoemCurrentlyPlaying = True
		UnregisterForUpdate()
		; Pick a poem, but not the same as the last time
		Int poemIndex = Utility.RandomInt(0, arrayPoemScenes.Length - 1)
		While poemIndex == lastPoemPlayed
			poemIndex = Utility.RandomInt(0, arrayPoemScenes.Length - 1)
		EndWhile
		arrayPoemScenes[poemIndex].ForceStart()
		lastPoemPlayed = poemIndex
		RegisterForSingleUpdateGameTime(1.0)
	EndIf

EndFunction

Function OnPoemSceneEnd()
	bPoemCurrentlyPlaying = False
	RegisterForSingleUpdate(1.0)
EndFunction

Function RemoveAmulets()

	PlayerREF.RemoveItem(_00E_MQ01_FinnCarbosAmulet, 2)
	bPlayerHasGivenAmulets = True
	PlayerREF.AddItem(Gold001, 150)
	PlayerREF.AddItem(_00E_Eispranke, 1)
	Levelsystem.GiveEP(150)
	
EndFunction

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

_00E_QuestFunctions Property Levelsystem Auto

bool Property bPlayerHasHadMithConversation Auto Conditional Hidden
bool Property bPlayerHasHadToriusConversation Auto Conditional Hidden
bool Property bPlayerHasGivenAmulets Auto Conditional Hidden

bool Property bPlayerWithinHearingDistance Auto Hidden
bool Property bPoemCurrentlyPlaying Auto Hidden

Actor Property _00E_UpperCity_PrinceMithREF Auto
Actor Property PlayerREF Auto

Worldspace Property CapitalCityUpperCity Auto

MiscObject Property Gold001 Auto

Armor Property _00E_MQ01_FinnCarbosAmulet Auto
Potion Property _00E_Eispranke Auto

Package Property _00E_CapitalCity_UpperCity_Mith_ReadPoems Auto
ObjectReference Property PrinceMithReadPoemsMarker Auto

Scene[] Property arrayPoemScenes Auto
Int Property lastPoemPlayed = -1 Auto Hidden