; -RA- v 1.4 Add-on UUV Doctrine
; Added option -Subtraction Power From Battery Energy For Every New Ping-

var PreEnableCourse
var PreEnableSpeed
var PreenableDepth
var RunToEnable
var Runout
var CircleSearchPattern
var Enabled
var SearchDepth
var Floor
var Ceiling
var AcousticMode
var spdmin
var InitTime
var InitX
var InitY
var Run
var Enabled1
var Trange
var HFMode
var SweepDelay
var SpdReduce
var DL
var PassMode
var CorrInterogg
var PRESET
var fuel
var FSR
var K
var FSRMIN
VAR DMAX
VAR DMIN
var TorpMaxDepth
var ImpactTime
var CrushDpth
var Explode
var SrcSpeed
var LS
var Mode
var PassiveActive
var Timer
var ReAl_Time
var dept
var delta
var temp
var sss
var ImpulseEnergyFlow
var Period
var Scale
var STOP_FLOW

func SearchON {
IF Not AcousticMode THEN {
	PASSIVEENABLE
} ELSE {
	IF Mode != 3 THEN {
		ENABLE
	ImpulseEnergyFlow = 1
	SensorEnable "UUV LF Sonar" 0
	} ENDIF
} ENDIF
}

IF INIT THEN {
	CorrInterogg = Time
	DL = Ownalt
	TorpMaxDepth = ( MinAlt * 3.28 )
	Explode = RND 10
	ImpactTime = 0
	CrushDpth = 0
	InitTime = ( Time + 2 )
	Enabled = 0
	Enabled1 = 0
	InitX = OwnX
	InitY = OwnY
	ReAl_Time = TIME
	LS = 0.005
	PRESET = 1
	Scale = 10
	spdmin = 3
	TorpMaxDepth = -1739
	FUEL = 1000
	TRange = 7500
	DMAX = 4630
	DMIN = ( Trange / 1852 )
	DMAX = ( DMAX / 1852 )
	FSRMIN = ( FUEL / ( DMIN / ( LS / 3600 ) ) )
	K = ( ( ( FUEL / ( DMAX / ( MAXSPD / 3600 ) ) ) - FSRMIN ) / ( MAXSPD - LS ) )
	SpdReduce = False 
	RunToEnable = 1000
	Runout = -1
	Floor = Floor
	Ceiling = -10
	SearchDepth = PreEnableDepth
	dept = ownalt
} ELSE {
	IF PRESET THEN {
	HFMode = false
	PassMode = false
IF Ceiling <= -15 Then { Timer = 60 } ELSE { Timer = 0 } Endif
IF AcousticMode Then {
	HFMode = true
	Mode = "HFMode"
} ELSE {
	PassMode = true
	Mode = "PassMode"
} ENDIF
IF CircleSearchPattern Then {
	PassiveActive = False
} ELSE {
	PassiveActive = True
} ENDIF
IF HFMode And Not PassiveActive THEN {
	Mode = 1
	SrcSpeed = PreEnableSpeed
		If ( SrcSpeed <= 4 ) Then {
		SrcSpeed = 5
	} ENDIF
} ELSEIF HFMode And PassiveActive THEN {
	Mode = 2
	SrcSpeed = PreEnableSpeed
		If ( SrcSpeed >= 5 ) Then {
		SrcSpeed = 4
	} ENDIF
} ELSEIF PassMode THEN {
	PassMode = true
	Mode = 3
	SrcSpeed = PreEnableSpeed
		If ( SrcSpeed >= 5 ) Then {
		SrcSpeed = 4
	} ENDIF
} ENDIF
IF ( PreEnableSpeed < spdmin ) THEN { PreEnableSpeed = spdmin } ENDIF
	If Mode == 1 Then {
IF ( Floor > -2006 ) AND ( Floor < -2004 ) Then { SrcSpeed = 5
} ELSEIF ( Floor > -2007 ) AND ( Floor < -2005 ) Then { SrcSpeed = 6
} ELSEIF ( Floor > -2008 ) AND ( Floor < -2006 ) Then { SrcSpeed = 7
} ELSEIF ( Floor > -2009 ) AND ( Floor < -2007 ) Then { SrcSpeed = 8
} ELSEIF ( Floor > -2010 ) AND ( Floor < -2008 ) Then { SrcSpeed = 9
} ELSEIF ( Floor > -2011 ) AND ( Floor < -2009 ) Then { SrcSpeed = 10
} ELSEIF ( Floor > -2012 ) AND ( Floor < -2010 ) Then { SrcSpeed = 11
} ELSEIF ( Floor > -2013 ) AND ( Floor < -2011 ) Then { SrcSpeed = 12
} ELSEIF ( Floor > -2014 ) AND ( Floor < -2012 ) Then { SrcSpeed = 13
} ELSEIF ( Floor > -2015 ) AND ( Floor < -2013 ) Then { SrcSpeed = 14
} ELSEIF ( Floor > -2016 ) AND ( Floor < -2014 ) Then { SrcSpeed = 15
} ELSEIF ( Floor > -6579 ) AND ( Floor < -6577 ) Then { SrcSpeed = 5
} ELSEIF ( Floor > -6582 ) AND ( Floor < -6580 ) Then { SrcSpeed = 6
} ELSEIF ( Floor > -6586 ) AND ( Floor < -6584 ) Then { SrcSpeed = 7
} ELSEIF ( Floor > -6589 ) AND ( Floor < -6587 ) Then { SrcSpeed = 8
} ELSEIF ( Floor > -6592 ) AND ( Floor < -6590 ) Then { SrcSpeed = 9
} ELSEIF ( Floor > -6595 ) AND ( Floor < -6593 ) Then { SrcSpeed = 10
} ELSEIF ( Floor > -6599 ) AND ( Floor < -6597 ) Then { SrcSpeed = 11
} ELSEIF ( Floor > -6602 ) AND ( Floor < -6600 ) Then { SrcSpeed = 12
} ELSEIF ( Floor > -6605 ) AND ( Floor < -6603 ) Then { SrcSpeed = 13
} ELSEIF ( Floor > -6609 ) AND ( Floor < -6607 ) Then { SrcSpeed = 14
} ELSEIF ( Floor > -6612 ) AND ( Floor < -6610 ) Then { SrcSpeed = 15
	} ENDIF
} ENDIF
	PRESET = 0
} ENDIF
} ENDIF
IF FUEL < 0 THEN {
	SHUTDOWN
;	DebugOut "Battery Charged Lost - UUV has been Shut_down"
} ELSE {
	CorrInterogg = ( Time - CorrInterogg )
	IF ( ( OWNALT < 0 ) AND ( ( OWNSPD >= ( LS - 1 ) ) OR ( OWNSPD <= ( MAXSPD + 1 ) ) ) ) THEN {
	FSR = ( FSRMIN + ( ( OWNSPD - LS ) * K ) )
	FSR = ( FSR * CorrInterogg )
} ELSE {
	FSR = 0 } ENDIF	
	FUEL = ( FUEL - FSR )	
} ENDIF
	CorrInterogg = Time
	Run = XYRng ( OwnX - InitX ) ( OwnY - InitY )
;	DebugValueOut ( TIME - ReAl_Time )
IF NOT Enabled THEN {
	IF ( RunToEnable != -1 ) AND ( Run >= RunToEnable ) THEN {
		SearchOn
		Enabled1 += 1
		Enabled = 1
		RunToEnable = -1
	} ENDIF
} ENDIF
IF Enabled != 1 Then {
	ImpulseEnergyFlow = 0
	SetSpd PreEnableSpeed
	dept = DL
	SETPRIORITY 250 SetCrs PreEnableCourse
	SweepDelay = ( TIME + Timer )
} ELSE {
	SETPRIORITY 250 SetCrs PreEnableCourse
	SetSpd SrcSpeed
If Time > SweepDelay Then {
	dept = SearchDepth
	} ENDIF
} ENDIF
DELTA = ( dept - OWNALT )
sss = ABS DELTA
if sss > 200 then { temp = 45 } else { temp = XYBRG sss ( 200 * 3.28 ) } endif
if DELTA < 0 then { temp = ( -1 * temp ) } endif

SETPRIORITY 250 SETPITCH TEMP

If ImpulseEnergyFlow Then {
	If Enabled Then {
; DebugOut "Get Mark - PING!"
	If ( STOP_FLOW == -1 ) Then {
		If ( Time >= Period ) Then {
			Period = ( Time + Scale )
			Stop_Flow = ( Time + 2 )
; DEBUGOUT "Subtraction Power From Battery Energy, For Every New Ping"
			Fuel = ( Fuel - 20 )
		} endif
	} endif
} endif
IF ( STOP_FLOW != -1 ) THEN {
	IF TIME > ( STOP_FLOW ) THEN {
		STOP_FLOW = -1
		} ENDIF
	} Endif
} endif
