_=[[
			SprayCapacityWarning
	Author: Bluebaby210    www.mod-portal.com
	Date 29/07/2012
	Version 1.0

							frei verwendbar - keine Erlaubnis notwendig
							keine Änderungen am Skript ohne meine Erlaubnis

Für Fahrzeuge mit dem Eintrag "Sprayer".
Bei Restinhalt des Spritztanks wird ein Hud erzeugt und ein Warnton abgespielt.
Bei unterschiedlichen Volumen Rest inhalt,je niedriger der Füllstand
desto mehr Pieptöne kommen.

Prozente der Warnungen können in der XML frei vergeben werden.
Unbedingt darauf achten das die stufen von oben nach unten kleiner werden, 1. ist die grösste, 4 die niedrigste stufe
		
----------------------------------------------------------------------------------
Einträge in der Moddesc:

 <specializations>
	  <specialization name="SprayCapacityWarning" className="sprayCapacityWarning" filename="SprayCapacityWarning.lua" />
 </specializations>

   <specialization name="SprayCapacityWarning" />

Zudem folgende Texte:
   Sprayer_Low_Capacity			Das GiantsWarningHud was kurz vor ende erscheint, der Text kann frei vergeben werden
   fill_sprayer					Text der Eingeblendet wird, wenn der Füllstand nur noch 4 sekunden reicht
   sprayer_full					Text der eingeblendet wird, wenn das Gerät in 4 sekunden zu 100% voll ist
   spraying_is_good				Text der eingeblendet wird, wenn man das Gerät voll war und man anfängt zu spritzen
   Remaining_quantity			Ein Teil der Teste die bei den WarningProzenten eingeblendet werden: Restmenge von
   below						zweiter Teil der WarningProzente: % erreicht
   Sprayer_Empty				Hilfetext wenn man den Tank per Knopfdruck vollständig leeren kann
   
   Zudem wird InputBinding zum Tank entleeren benötigt.
   	<input name="Sprayer_Empty"  category="VEHICLE" key1="KEY_5"    key2="" button="" device="0" mouse="" />

-----------------------------------------------------------------------------------
Einträge in der XML:

	<SprayCapacityWarning>
		<SprayWarning1 Prozent="60"/>   <!--Only One Piep (lowCapacity1) Show Text of % Capacity/-->
		<SprayWarning2 Prozent="40"/>   <!--Two Piep (lowCapacity2)  Show Text of % Capacity/-->
		<SprayWarning3 Prozent="29"/>   <!--Three Piep (lowCapacity3) and HUD show until 1 liter of capacity! Green/Orange/Red Point render by 100% /65,5% and 34,5% of Warning3/-->
		<SprayWarning4 Prozent="4"/>    <!--Render WarningHUD Giants and Moddesc Text "Sprayer_Low_Capacity"/-->
	</SprayCapacityWarning>

Bei falschen angaben der Warnstufen werden die StandartWarnstufen aus dem Skript gelesen.

Texturen: Texturen/ lowSpray_green, lowSpry_orange, lowSpray_green, lowSprayCapacity müssen im Texture Ordner sein.
Sounds:   Sounds/ lowCapacity1, lowCapacity2, lowCapacity3, lowCapacity4   müssen im Sounds Ordner sein.
------------------------------------------------------------------------------------

Dank an Modelleicher für sein tolles TUT auf YouTube. 

]]

sprayCapacityWarning = {};

function sprayCapacityWarning.prerequisitesPresent(specializations)
   return SpecializationUtil.hasSpecialization(Sprayer, specializations);
end;

function sprayCapacityWarning:load(xmlFile)

	--Warning Prozent laden
	self.lowSprayWarning1 = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.SprayCapacityWarning.SprayWarning1#Prozent"),60);
	self.lowSprayWarning2 = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.SprayCapacityWarning.SprayWarning2#Prozent"),40);
	self.lowSprayWarning3 = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.SprayCapacityWarning.SprayWarning3#Prozent"),29);
	self.lowSprayWarning4 = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.SprayCapacityWarning.SprayWarning4#Prozent"),4);
	self.Verbrauch = getXMLFloat(xmlFile, "vehicle.sprayUsages.sprayUsage#litersPerSecond");
    self.fillLitersPerSecond = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.fillLitersPerSecond"), 500);

	--Overlay Bilder laden
	self.lowSprayCapacityHud = Overlay:new("lowSprayCapacityOverlay", Utils.getFilename("textures/lowSprayCapacity.png", self.baseDirectory), 0.90, 0.46, 0.1, 0.1);
	self.lowSpray_redHud = Overlay:new("lowSpray_redOverlay", Utils.getFilename("textures/lowSpray_red.png", self.baseDirectory), 0.90, 0.465, 0.023, 0.023);
	self.lowSpray_orangeHud = Overlay:new("lowSpray_orangeOverlay", Utils.getFilename("textures/lowSpray_orange.png", self.baseDirectory), 0.90, 0.48, 0.023, 0.023);
	self.lowSpray_greenHud = Overlay:new("lowSpray_greenOverlay", Utils.getFilename("textures/lowSpray_green.png", self.baseDirectory), 0.90, 0.495, 0.023, 0.023);

	--Sound 1 laden 1.Warnung
	lowCapacity1SoundFile = Utils.getFilename("sounds/lowCapacity1.wav", self.baseDirectory);
    self.lowCapacity1SoundId = createSample("LC1Sound");
    loadSample(self.lowCapacity1SoundId, lowCapacity1SoundFile, false);
	self.lowCapacity1SoundPlaying = false;
	self.play1Sound = true;

	--Sound 2 laden 2.Warnung
	lowCapacity2SoundFile = Utils.getFilename("sounds/lowCapacity2.wav", self.baseDirectory);
    self.lowCapacity2SoundId = createSample("LC2Sound");
    loadSample(self.lowCapacity2SoundId, lowCapacity2SoundFile, false);
	self.lowCapacity2SoundPlaying = false;
	self.play2Sound = true;

	--Sound 3 laden 3.Warnung
	lowCapacity3SoundFile = Utils.getFilename("sounds/lowCapacity3.wav", self.baseDirectory);
    self.lowCapacity3SoundId = createSample("LC3Sound");
    loadSample(self.lowCapacity3SoundId, lowCapacity3SoundFile, false);
	self.lowCapacity3SoundPlaying = false;
	self.play3Sound = true;

	--Sound 4 laden 4.Warnung
	lowCapacity4SoundFile = Utils.getFilename("sounds/lowCapacity4.wav", self.baseDirectory);
    self.lowCapacity4SoundId = createSample("LC4Sound");
    loadSample(self.lowCapacity4SoundId, lowCapacity4SoundFile, false);
	self.lowCapacity4SoundPlaying = false;
	self.play4Sound = true;

	--Warning Hud
	self.warningIsShow = false;		--Einblendung der GiantsWarnung, abfrage ob true oder false, dann erst wird aktiviert
	self.resetWarning = true;		--Abfrage ob false oder true, da sonst immer eingeblendet wäre ohne Timer
	self.Timer = false;				--Timer Ablauf für die Warnung (wenn true wird timer einmal durchlaufen)
	self.TimerTime = 0;				--Timer ablauf, wird vorher auf TimerBackup gesetzt und gibt die Zeit vor
	self.TimerBackup = 4000;		--Zeit des Timers für GiantsWarningHud und Texte
	self.falscheWarnStufen = true		--Abfrage der Warnstufen, wenn true nicht erfüllt werden standartStufen geladen(60, 40, 29, 4%)

	--Überprüfen ob die Prozente der Warnstufen richtig angegeben sind, von oben nach unten kleiner werdend.
	if self.lowSprayWarning4 >= self.lowSprayWarning3 or self.lowSprayWarning4 >= self.lowSprayWarning2 or self.lowSprayWarning4 >= self.lowSprayWarning1 or self.lowSprayWarning3 >= self.lowSprayWarning2 or self.lowSprayWarning3 >= self.lowSprayWarning1 or self.lowSprayWarning1 <= self.lowSprayWarning2 then
		print ("Warning: Bitte geben sie die Warnstufen (richtig) an, 1 ist die groesste, 4 die kleinste Fuellmenge")
		self.falscheWarnStufen = false;
	end;
			--Warnstufen falsch definiert, Skript greift auf Standart Stufen zu (60, 40, 29, 8 Prozent)
	 if self.falscheWarnStufen == false then
		self.lowSprayWarning1 = 60;
		self.lowSprayWarning2 = 40;
		self.lowSprayWarning3 = 29;
		self.lowSprayWarning4 = 8;
		print ("Warning: Warnstufen wurden auf standart gesetzt: 60, 40, 29, 8 Prozent")
	end;
end;

function sprayCapacityWarning:delete()
end;

function sprayCapacityWarning:mouseEvent(posX, posY, isDown, isUp, button)
end;

function sprayCapacityWarning:keyEvent(unicode, sym, modifier, isDown)
end;

function sprayCapacityWarning:update(dt)

	--Zeit Timer für Warnung (wie lange das Warning HUD eingeblendet bleibt)
	if self.Timer then
		if self.TimerTime > 0 then
			self.TimerTime = self.TimerTime - dt;
			if self.TimerTime <= 0 then
				self.warningIsShow = false;
				self.Timer = false;
				self.TimerTime = 0;
			end;
		end;
	end;
	
	--Tastendruck zum Tank entleeren
	if self:getIsActiveForInput() then
		if InputBinding.hasEvent(InputBinding.Sprayer_Empty) == true then
			if self.fillLevel > 0 then
				self.fillLevel = 0;
				self.resetWarning = true;
				self.play1Sound = true;
				self.play2Sound = true;
				self.play3Sound = true;
			end;
		end;
	end;

	--Überpfrüfen der Füllstände
	if self:getIsActive() then
	if self.fillLevel <= (self.capacity/100) * self.lowSprayWarning1 then 
		if self.play1Sound == false then
			playSample(self.lowCapacity1SoundId,1,1,0);
			self.play1Sound = true;
			--print ("Sound 1 gespielt");
		end;
		--print ("Warnung Bed. 1 erfuellt, unter 1.Warnung")
		if self.fillLevel <= (self.capacity/100) * self.lowSprayWarning2 then 
			if self.play2Sound == false then
				playSample(self.lowCapacity2SoundId,1,1,0);
				self.play2Sound = true;
				--print ("Sound 2 gespielt");
			end;
			--print ("Warnung Bed. 2 erfuellt, unter 2.Warnung")
			if self.fillLevel <= (self.capacity/100) * self.lowSprayWarning3 then 
				if self.play3Sound == false then
					playSample(self.lowCapacity3SoundId,1,1,0);	
					self.play3Sound = true;
					--print ("Sound 3 gespielt");
				end;
				--print ("Warnung Bed. 3 erfuellt, HUD angezeigt")
				if self.fillLevel < (self.capacity/100) * self.lowSprayWarning4 then			
					if self.resetWarning == false then
						self.warningIsShow = true;
						self.resetWarning = true;
						self.Timer = true;
						self.TimerTime = self.TimerBackup;
						playSample(self.lowCapacity4SoundId,1,1,0);	
						self.play4Sound = true;
						--print ("Warnung einblenden")
					end;
				end;
			end;
		end;
	end;
	end;
		-- Zurücksetzen der Sounds und Freigeben der Warnung
	if self.fillLevel >= (self.capacity/100) * self.lowSprayWarning4 then 
		self.resetWarning = false;
		self.play4Sound = false;
		--print ("resetWarning auf false")
		if self.fillLevel > (self.capacity/100) * self.lowSprayWarning3 then 
			self.play3Sound = false;
			--print ("Zuruecksetzen Bed. 2 erfuellt,Sound 3")
			if self.fillLevel > (self.capacity/100) * self.lowSprayWarning2 then 
				self.play2Sound = false;
				--print ("Zuruecksetzen Bed. 3 erfuellt,Sound 2")
				if self.fillLevel > (self.capacity/100) * self.lowSprayWarning1 then 
					self.play1Sound = false;
					--print ("Zuruecksetzen Bed. 3 erfuellt,Sound 1")
				end;
			end;
		end;
	end;
	
		
end;	

function sprayCapacityWarning:updateTick(dt)
end;


function sprayCapacityWarning:draw()
			--Tank wird eingeblendet
		if self.fillLevel <= (self.capacity/100) * self.lowSprayWarning3 and self.fillLevel >= 1 then 
			self.lowSprayCapacityHud:render();
		end;
			--Grüner Punkt neben Tank
		if self.fillLevel <= (self.capacity/100) * self.lowSprayWarning3 and self.fillLevel >= (self.capacity/100) * self.lowSprayWarning3 * 0.655 then 
			self.lowSpray_greenHud:render();
		end;
			--Oranger Punkt neben Tank bei erreichen von 65,5% der Warnstufe 3
		if self.fillLevel < (self.capacity/100) * self.lowSprayWarning3 * 0.655 and self.fillLevel >= (self.capacity/100) * self.lowSprayWarning3 * 0.345 then 
			self.lowSpray_orangeHud:render();
		end;
			--Roter Punkt neben Tank bei erreichen von 34,5% der Warnstufe 3.(Tankinhalt/100*warnstufe3*0,345%) bis 1Liter
		if self.fillLevel < (self.capacity/100) * self.lowSprayWarning3 * 0.345 and self.fillLevel >= 1 then 
			self.lowSpray_redHud:render();
		end;
			--Einblenden des GiantsWarningHuds
		if self.warningIsShow then
			g_currentMission:addWarning(g_i18n:getText("Sprayer_Low_Capacity"), 0.1, 0.035);
		end;
			--Text wenn Tank nur noch zu Verbrauch*4 gefüllt ist, aber noch mehr wie 0 hat.
		if self.isTurnedOn and self.fillLevel <= 0 + (self.Verbrauch * 4) and self.capacity ~= 0 and self.fillLevel ~= 0 then
			setTextBold(true);
			setTextColor(1, 1, 1, 0.9);
			renderText(0.4, 0.92, 0.022, g_i18n:getText("fill_sprayer"));
		end;
			--Textausgabe wenn gefüllt wird und Tank zu (Capacität - SprayLiterPerSecond*4) gefüllt ist, "Das Gerät ist gleich voll.Aufpassen das nix überläuft!"
		if self.isSprayerFilling and self.fillLevel >= self.capacity - (self.fillLitersPerSecond * 4) then
			setTextBold(true);
			setTextColor(1, 0, 0, 0.9);
			renderText(0.375, 0.92, 0.022, g_i18n:getText("sprayer_full"));
		end;
			--Textausgabe wenn Tank zu (Capacität - SprayLiterPerSecond*4) erreicht war und angestellt wird
		if self.isTurnedOn and self.fillLevel >= self.capacity - (self.Verbrauch * 4) then
			setTextBold(true);
			setTextColor(1, 1, 1, 0.9);
			renderText(0.375, 0.92, 0.022, g_i18n:getText("spraying_is_good"));
		end;
			--Textausgaben für die Warnstufen( Füllstand von ...% erreicht. Prozente werden aus XML gelesen.
		if self.isTurnedOn and self.fillLevel <= (self.capacity/100) * self.lowSprayWarning3 and self.fillLevel >= ((self.capacity/100) * self.lowSprayWarning3) - (self.Verbrauch * 4)  then
			setTextColor(1, 1, 1, 0.9);
			renderText(0.375, 0.92, 0.022, g_i18n:getText("Remaining_quantity").." "..tostring(self.lowSprayWarning3)..g_i18n:getText("below"));
		end;

		if self.isTurnedOn and self.fillLevel <= (self.capacity/100) * self.lowSprayWarning2 and self.fillLevel >= ((self.capacity/100) * self.lowSprayWarning2) - (self.Verbrauch * 4) then
			setTextColor(1, 1, 1, 0.9);
			renderText(0.375, 0.92, 0.022, g_i18n:getText("Remaining_quantity").." "..tostring(self.lowSprayWarning2)..g_i18n:getText("below"));
		end;

		if self.isTurnedOn and self.fillLevel <= (self.capacity/100) * self.lowSprayWarning1 and self.fillLevel >= ((self.capacity/100) * self.lowSprayWarning1) - (self.Verbrauch * 4) then
			setTextColor(1, 1, 1, 0.9);
			renderText(0.375, 0.92, 0.022, g_i18n:getText("Remaining_quantity").." "..tostring(self.lowSprayWarning1)..g_i18n:getText("below"));
		end;
	
		--Textausgabe zum Tank leeren
	if self:getIsActive() then
		if self:getIsActiveForInput() then
			if self.fillLevel > 0 then
				g_currentMission:addHelpButtonText(g_i18n:getText("Sprayer_Empty"), InputBinding.Sprayer_Empty);
			end;
		end;
	end;


end;
print("Script loaded: LowSprayCapacity by Bluebaby210")
