--_=[[
------------------------------------------------------------------------------------------------------------------------------------------------------
--AttacherSetRpm Specialization
--Idee und ertse Versuche: "Pitzmann Tuning"
--Realisierung: "Sven777b"
--V1.0 12.07.2011
--Edit by Marc85(Thanks to Modelleicher) 3.06.2013--
--frei verwendbar, keine erlaubnis nötig.
--free for use, no permission needed.
--Modifikationen erst nach Rücksprache!!
--modifications only with my permission!!
-------------------------------------------------------------------------------------------------------------------------------------------------------
--AttacherSetRpm Beschreibung:

--Diese Speci sorgt dafür das der Spritverbrauch und die Drehzahl des Fahrzeuges immer dann erhöht wird wenn ein Anhänger oder Anbaugerät arbeitet, kippt 
--oder auf- beziehungsweise zuklappt (vorausgesetzt der Anhänger oder das Anbaugerät benutzt die Standardspecis für diese Aktionen). Ausserdem wird die 
--Drehzahl und der Spritverbrauch auch dann erhöht wenn man einen Frontlader, falls vorhanden, bewegt.
--Weiter hat man die Möglichkeit bei Drehzahlerhöhung die Rundumleuchte, falls vorhanden, mitlaufen zu lassen (ausgenommen ist hier die Drehzahlerhöhung 
--per Tastendruck).
------------------------------------------------------------------------------------------------------------------------------------------------------
--Einträge in Fahrzeug XML:

	--<togglebeacon> 	
	--<togglebeacon vehiclesetrpmbeacon="true" />
	--</togglebeacon> 

--Wenn hier der Eintrag "true" vorgenommen wird leuchtet die RUL bei Drehzahlerhöhung mit (ausgenommen ist hier die Drehzahlerhöhung per Tastendruck).
--Wenn hier der Eintrag "false" vorgenommen wird leuchtet die RUL bei Drehzahlerhöhung nicht mit.
------------------------------------------------------------------------------------------------------------------------------------------------------
--Einträge in moddesc:

   -- <specializations>
	-- <specialization name="AttacherSetRpm" className="AttacherSetRpm" filename="AttacherSetRpm.lua" />
    --- </specializations>
	
--und folgendes natürlich nach <specialization name="motorized" />:

    --<vehicleTypes>
	--...
	--...
	--<specialization name="AttacherSetRpm" />
        --</type>
    --</vehicleTypes>

	
--wenn eine Drehzahlerhöhung zum einschalten per Tastndruck gewünscht wird (hier ist die RUL in jedem Fall inaktiv), 
--muß noch dieser Eintrag vorgenommen werden:

  --  <inputBindings>
--	<input name="togglerpm" key1="___" button="" />	
  --  </inputBindings>
	
--Bei "___" einfach gewünchte Taste eintragen (zB für F7 dann "KEY_f7")
------------------------------------------------------------------------------------------------------------------------------------------------------
--]]

AttacherSetRpm = {};


function AttacherSetRpm.prerequisitesPresent(specializations)
	return SpecializationUtil.hasSpecialization(Motorized, specializations);
end;


function AttacherSetRpm:load(xmlFile)
	self.engine = false;
	self.rul = false;
	self.standardMinRpm = self.motor.minRpm;
	self.auswahl = Utils.getNoNil(getXMLBool(xmlFile, "vehicle.togglebeacon.togglebeacon#vehiclesetrpmbeacon"),true);
end;


function AttacherSetRpm:delete()
end;

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


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


function AttacherSetRpm:update(dt)
	 if self:getIsActive() or self.isHired then      
          Cylindered.updateMovingPart(self, self.movingParts[1]); 
          for _, part in pairs(self.movingParts) do 
               part.isDirty = true; 
          end; 
     end;

	if self:getIsActiveForInput() then
		if InputBinding.hasEvent(InputBinding.togglerpm) then
			self.engine = not self.engine;
		end;
	end;
end;


function AttacherSetRpm:updateTick(dt)
	if self:getIsActive() then 
			local einschalten = checkImplements(self);
		if self.cylinderedHydraulicSoundEnabled then 
			einschalten = true; 
		end;
		if self.tipState == Trailer.TIPSTATE_CLOSING or self.tipState == Trailer.TIPSTATE_OPENING or self.isTurnedOn then      --Edit by Marc85, erweiterung um eigenes Gerät fest im Gerät/ zugmaschine--
				einschalten = true; 																					
			end;																											   -- Edit Ende--
		if einschalten and self.auswahl then
			if not self.beaconLightsActive then 
				self:setBeaconLightsVisibility(true);
				self.rul = true;
			end;
		else
			if self.rul then
				self:setBeaconLightsVisibility(false);
				self.rul = false;
			end;
		end;
		if einschalten and self.isMotorStarted or self.engine and self.isMotorStarted then
			local fuelUsed = 0.00000003*dt*math.abs(self.motor.minRpm);
			self:setFuelFillLevel(self.fuelFillLevel-fuelUsed);
			g_currentMission.missionStats.fuelUsageTotal = g_currentMission.missionStats.fuelUsageTotal + fuelUsed;
			g_currentMission.missionStats.fuelUsageSession = g_currentMission.missionStats.fuelUsageSession + fuelUsed;
			if self.motor.minRpm == self.standardMinRpm then
				self.motor.minRpm = math.max(self.motor.minRpm-1000, -1000);
			end;
		else
			if self.motor.minRpm ~= self.standardMinRpm then
				self.motor.minRpm = self.standardMinRpm;
			end;
		end;
	end;
end;


function AttacherSetRpm:draw()
end;


function AttacherSetRpm:onLeave()
	self.engine = false;
	self.rul = false;
	self.motor.minRpm = self.standardMinRpm;
end;

function checkImplements( objekt ) 
	if objekt.attachedImplements ~= nil then 
		for _, implement in pairs(objekt.attachedImplements) do 
			if implement.object.foldAnimTime ~= nil then 
				if implement.object.foldAnimTime > 0 and implement.object.foldAnimTime < 1 then 
				return true; 
				end; 
			end; 
			if implement.object.tipState == Trailer.TIPSTATE_CLOSING or implement.object.tipState == Trailer.TIPSTATE_OPENING or implement.object.isTurnedOn then 
				return true; 
				end;				
			if implement.object.attachedImplements ~= nil then 
				if checkImplements(implement.object) == true then 
					return true; 
				end; 
			end; 
		end; 
	end; 
	return false; 
end;