scriptName TrapDweBallista extends TrapBase
;
;Dart Trap extending TrapBase
;integrated with the TrapTriggerBase
;
;================================================================

import debug	
import utility
import custom

int property shotCount = 3 auto
{This property track the ammo that the ballista has, and starts with}
;int numShots = 20			;might want to make this a property
float fireRate = 0.1
float property initialDelay = 0.0 auto
weapon property ballistaWeaponM auto
weapon property ballistaWeaponL auto
weapon property ballistaWeaponR auto
bool property fireAllShots = True auto
{if this is true all three shots will be fired at once}

bool property isFiring auto hidden
bool property isLoaded auto hidden
bool property shotFired = false auto hidden
bool property weaponResolved = false auto hidden

Function initialize()
	
endFunction


Function ResetLimiter()
	shotFired = false		;shotCount is scoped outside of the OnActivate blocks. This will reset scopecount to 0, extending the firing time.
EndFunction


Function fireTrap()
	if !TrapDisarmed
		isFiring = True
		objectReference TrapSelf = self as objectReference
		if !weaponResolved
			ResolveLeveledWeapon()
		endif
		while !weaponResolved		;Do not fire till weapon is resolved
		endWhile
		;TRACE("fireTrap called")
		WindupSound.play( self as ObjectReference)		;play windup sound
		wait( initialDelay )		;wait for windup
		; if (fireOnlyOnce == True)	;If this can be fired only once then disarm
			; trapDisarmed = True
		; endif
		
		while(shotcount > 0) && !shotfired && isLoaded
			if fireAllShots
				playAnimation("TriggerAll") 			;fire all
				ballistaWeaponM.fire( TrapSelf, ballistaAmmo )		;fire 01
				ballistaWeaponL.fire( TrapSelf, ballistaAmmo )		;fire 02
				ballistaWeaponR.fire( TrapSelf, ballistaAmmo )		;fire 03
				
				shotcount -= 3
				WaitForAnimationEvent("FTransAll")
				;playAnimationAndWait("ResetAll","RTransAll") 				;reset anim all
			else
				if shotCount == 3
					playAnimation("Trigger01")		;fire anim 01
					ballistaWeaponM.fire( TrapSelf, ballistaAmmo )	;fire 01
					shotcount -= 1
					WaitForAnimationEvent("FTrans01")
					playAnimationAndWait("Reset01","RTrans01")			;reset anim 01
				elseIf ShotCount == 2
					playAnimation("Trigger02")		;fire anim 02
					ballistaWeaponL.fire( TrapSelf, ballistaAmmo )	;fire 02
					shotcount -= 1
					WaitForAnimationEvent("FTrans02")
					playAnimationAndWait("Reset02","RTrans02")			;reset anim 02
				elseIf ShotCount == 1
					playAnimation("Trigger03")		;fire anim 03
					ballistaWeaponR.fire( TrapSelf, ballistaAmmo )	;fire 03
					shotcount -= 1
					WaitForAnimationEvent("FTrans03")
					;playAnimationAndWait("Reset03","RTrans03") 			;reset anim 03
				endIf
			endIf
			shotFired = True	
			if (loop == TRUE)			;Reset Limiter
				resetLimiter()
			endif			
		endWhile
		
		if isLoaded 	
			isFiring = false
			;playAnimation("idle")
			goToState("Reset")
		endif
		
	endif
	
endFunction

State Reset

	Event OnBeginState()
		;TRACE("State Reset")
		if shotcount > 0
			;shotCount = 3
			GoToState ( "Idle" )
		Else
			TrapDisarmed = True
			GoToState ("Disabled")
		endif
		
	endEvent
	
	Event OnActivate( objectReference activateRef )
	;TRACE("Reset trigger")
	EndEvent
	
endState

;-----------------------------------------------

int property LvlThreshold1 auto
int property LvlThreshold2 auto
int property LvlThreshold3 auto
int property LvlThreshold4 auto
int property LvlThreshold5 auto
ammo property ballistaAmmo auto
ammo property TrapDweBallistaBoltAmmo01 auto
ammo property TrapDweBallistaBoltAmmo02 auto
ammo property TrapDweBallistaBoltAmmo03 auto
ammo property TrapDweBallistaBoltAmmo04 auto
ammo property TrapDweBallistaBoltAmmo05 auto
ammo property TrapDweBallistaBoltAmmo06 auto

Function ResolveLeveledWeapon ()
	;Trace("ResolveLeveledWeapon")
	int damageLevel
	damageLevel = CalculateEncounterLevel(TrapLevel)
	
	; weapon lvlWeaponM = LvlWeaponM1
	; weapon lvlWeaponL = LvlWeaponL1
	; weapon lvlWeaponR = LvlWeaponR1
	Ammo LvlAmmo = TrapDweBallistaBoltAmmo01
	
	if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2)
		; lvlWeaponM = LvlWeaponM2
		; lvlWeaponL = LvlWeaponL2
		; lvlWeaponR = LvlWeaponR2
		LvlAmmo = TrapDweBallistaBoltAmmo02
		;Trace("damage threshold =")
		;Trace("2")
	endif
	if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3)
		;lvlWeaponM = LvlWeapon3
		LvlAmmo = TrapDweBallistaBoltAmmo03
		;Trace("damage threshold =")
		;Trace("3")
	endif
	if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4)
		;lvlWeaponM = LvlWeapon4
		LvlAmmo = TrapDweBallistaBoltAmmo04
		;Trace("damage threshold =")
		;Trace("4")
	endif
	if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5)
		;lvlWeaponM = LvlWeapon5
		LvlAmmo = TrapDweBallistaBoltAmmo05
		;Trace("damage threshold =")
		;Trace("5")
	endif
	if (damageLevel > LvlThreshold5)
		;lvlWeaponM = LvlWeapon6
		LvlAmmo = TrapDweBallistaBoltAmmo06
		;Trace("damage threshold =")
		;Trace("6")
	endif
	
	; ballistaWeaponM = lvlWeaponM
	; ballistaWeaponL = lvlWeaponL
	; ballistaWeaponR = lvlWeaponR
	BallistaAmmo = LvlAmmo
	weaponResolved = True
EndFunction

event onLoad()
	isLoaded = TRUE
	if isFiring == True
		fireTrap()
	endif
	if shotCount == 3
		playAnimationAndWait("Reset03","RTrans03")			;reset anim 01
	elseIf ShotCount == 2
		playAnimationAndWait("Reset01","RTrans01")			;reset anim 02
	elseIf ShotCount == 1
		playAnimationAndWait("Reset02","RTrans02")			;reset anim 02
	endIf
EndEvent

event onUnload()
; 	debug.Trace(self + " has recieved onUnload event")
	isLoaded = FALSE
endEvent