; $Header: Torpedo.txt   Tue Jan 4 09:54:23 EST 2005   mike $
; $Revision: 17 $
; $Copyrt1: Copyright (c) 2003, Sonalysts, Inc.  All rights reserved. $
;

var PreenableCourse
var PreEnableSpeed
var PreenableDepth
var RunToEnable
var Runout
var CircleSearchPattern
var Enabled
var Homing
var SearchDepth
var Floor
var Ceiling
var AcousticMode
var InitTime
var initX
var initY
var run
var snakecrs
var snakeleft

IF INIT THEN {
	InitTime = ( Time + 5 )
	Enabled = 0
	Homing = 0
	CircleSearchPattern = 0
	AcousticMode = 1
	;snakeleft = false
	IF ( rnd 100 > 50 ) THEN {
	snakeleft = true
	} ELSE {
	snakeleft = false
	} ENDIF 

	initX = OwnX
	initY = OwnY
	
	PreenableDepth = OwnAlt
	IF PreenableDepth > 0 THEN {
		PreenableDepth = -10
	} ENDIF

	IF OwnAlt < 0 THEN {
		SetAlt PreenableDepth
	} ENDIF

	IF OwnAlt > 0 THEN {
		; Default to roughly 10 yards enable for Air-dropped torps
		RunToEnable = 10
	} ELSE {
		; Default to roughly .5 nmi enable
		RunToEnable = 1000
	} ENDIF

	; Default to no runout monitoring
	Runout = -1

	; Default to 3000ft floor
	Floor = -3000

	; Default to 10ft ceiling
	Ceiling = -10

	; Default to 100 ft search depth
	SearchDepth = -100

} ELSE {
	; Home
	IF NEWTRACK THEN {
	; since countermeasures are weap type, lets take out this check
	;	IF NOT ( TgtClass $= "Weap" ) THEN {
			DEBUGOUT "Torpedo Acquired"
			Runout = -1
			SETTACTIC "TorpHoming"
			Homing = ( Homing + 1 )
	;	} ENDIF
	} ENDIF

	IF LOSTTRACK THEN {
		DEBUGOUT "Torpedo Lost Target"
		Homing = ( Homing - 1 )
	} ENDIF

	run = xyrng ( OwnX - initX ) ( OwnY - initY )

	IF ownspd < ( maxSpd * 1.5 ) THEN {
		; Don't try to maneuver if we've just fallen out of the sky,
		; wait until speed is reasonable

		IF ( Homing == 0 ) AND ( OwnAlt < 0 ) THEN {
			; Preenable Steer Or Search
			IF Enabled THEN {
				; Snake Or Circle	
				IF CircleSearchPattern THEN {
					; lower priority to make sure we don't interfere with homing
					SETPRIORITY 224
					SetRudder 10
				} ELSE {
					; lower priority to make sure we don't interfere with homing
					SETPRIORITY 224
					snakecrs = RelativeBearing PreenableCourse OwnCrs
					IF snakecrs > 45 THEN {
						snakeleft = true
					} ELSEIF snakecrs < -45 THEN {
						snakeleft = false
					} ENDIF
					IF snakeleft THEN
						SetRudder -3
					ELSE
						SetRudder 3
					ENDIF
					; SNAKE PreenableCourse
				} ENDIF

				PreEnableDepth = SearchDepth
			
				SetAlt SearchDepth
			} ELSE {
				IF Time > InitTime THEN {
					; lower priority to make sure we don't interfere with homing
					SETPRIORITY 224	
					SetCrs PreenableCourse
					IF PreenableDepth > 0 THEN {
						PreenableDepth = ( Ceiling - 10 )
					} ENDIF
					SetAlt PreenableDepth
				} ENDIF
			} ENDIF
		} ENDIF

		; Enable
		IF NOT Enabled THEN {
			IF ( RunToEnable != -1 ) AND ( run >= RunToEnable ) THEN {
				IF ( AcousticMode == 0 ) THEN {
					PASSIVEENABLE
					DEBUGOUT "Torpedo Passive Enabled"
				} ELSE {
					ENABLE
					DEBUGOUT "Torpedo Active Enabled"
				} ENDIF
				IF Not CircleSearchPattern THEN {
					SetRudder 3
				} ENDIF
				Enabled = 1
				RunToEnable = -1
				DEBUGVALUEOUT TIME
			} ELSE {
				IF ( Time > InitTime ) AND ( OwnAlt <= 0 ) THEN {
					; lower priority to make sure we don't interfere with homing
					SETPRIORITY 224	
					SetCrs PreenableCourse
					SetAlt PreenableDepth
				} ENDIF
			} ENDIF
			SetSpd PreEnableSpeed
		} ENDIF
	} ENDIF

	; Shutdown
	IF ( Runout != -1 ) AND ( run >= Runout ) THEN {
		DEBUGOUT "Torpedo failed to acquire"
		RunOut = -1
		SHUTDOWN
	} ENDIF

} ENDIF
