Levier d'avancement et SpeedControl "Modif de mod"

Vos forums pour toutes les discussions sur le modding.
Rivet
Posts: 5
Joined: Mon Dec 10, 2018 9:59 am

Levier d'avancement et SpeedControl "Modif de mod"

Post by Rivet »

Bonjour,
… Débutant à besoin de laide d'un modeur...

J'aimerais simuler le levier d'avancement des véhicules par un joystick.
Existe-t-il un mod pour ceci. (ce levier doit agir sur la vitesse du véhicule et non sur la pédale des gaz.)

Selon moi, il faut que le levier d'avancemet agisse sur le régulateur de vitesse du véhicule que l'on conduit.
Mon idée est de modifier le mod « SpeedControl » comme suit :
  • 1
Lui ajouter le joystick dans les "inputBinding" et mettre ça course à l'échelle de -5 à +5 .
  • 2
Ajouter une quatrième vitesse de régulation au mod qui s'active automatiquement dès que le joystick est différent de 0 .
  • 3
Tant-que le joystick est différent de 0, définir la vitesse de ce 4ème régulateur égal à la vitesse courante du véhicule + la valeur du joystick.


J'espère que vous avez compris le principe ! L'échelle du joystick de -5 à +5, c'est une valeur de départ, il faudra tester et l'adapter.

Maintenant début des questions  :confusednew: dans le fichier « SpeedControl.lua » quelle ligne de commande pour lire la vitesse courante du véhicule ?

Salutations Rivet
Rivet
Posts: 5
Joined: Mon Dec 10, 2018 9:59 am

Re: Levier d'avancement et SpeedControl "Modif de mod"

Post by Rivet »

:arrow: Pour avoir la vitesse à la quelle le véhicule est en train de rouler, j'ai trouver ici. self :getLastSpeed() .

1er test que je trouve concluant.

Code: Select all

function SpeedControl.onInputAction_setSpeedEvent(self, actionName, inputValue, callbackState, isAnalog)
--	#######################################################################################################################################
--	########################################   Fonction à modifier  (1er test v3) dans "SpeedControl.lua   ####### ~ligne 230 #############
--	#######################################################################################################################################
--	#####   avec cette modif, la troisième vitesse du régulateur servira pour le levier d'avancement   ####################################
--	########   les touches KEY_KP_plus / KEY_KP_minus, incrémente / décrémente la vitesse actuel de 1km/h   ###############################
--	###########   "Accélération lente"   ######   pour une accélération plus rapide, maintenir la touche enfoncée             ##########
--	#######################################################################################################################################
--	### -> cette fonction modifie lors de l'apuis sur la touche. Si la touche reste enfoncée c'est une autre fonction qui agie ############
--	#######################################################################################################################################

    if self:getIsEntered() then
	------------------------
		if self.speedControl.currentKey < 3 then	-- # New line
			if inputValue < 0 and self.speedControl.keys[self.speedControl.currentKey].speed > 0 then
				self.speedControl.keys[self.speedControl.currentKey].speed = self.speedControl.keys[self.speedControl.currentKey].speed - 1;
			elseif inputValue > 0 and self.speedControl.keys[self.speedControl.currentKey].speed < math.ceil(self:getMotor():getMaximumForwardSpeed()*3.6) then
				self.speedControl.keys[self.speedControl.currentKey].speed = self.speedControl.keys[self.speedControl.currentKey].speed + 1;
			end;
		elseif inputValue ~= 0 then	-- # New line
			-- local vitesseIncrémente = 1;	-- # New line	// vitesse incrémentée avec les touches + et - 
		local realSpeed = self:getLastSpeed()-- # New line	// vitesse actuel du véhicule
			if self.speedControl.keys[self.speedControl.currentKey].isActive == false then	-- # New line	// si le régulateur n'est pas actif
				self.speedControl.keys[self.speedControl.currentKey].speed = realSpeed;	-- # New line	// défini la vitesse actuel du véhicule comme vitesse du régulateur
				self.speedControl.keys[self.speedControl.currentKey].isActive = true;	-- # New line	// écrit le régulateur actuel comme actif
				self:setSpeedControl(self.speedControl.currentKey, true);	-- # New line	// fonction définissant le régulateur actuel comme actif
			else	-- # New line	// ci le régulateur et déjà actif ...
				if inputValue < 0 and self.speedControl.keys[self.speedControl.currentKey].speed > 0 then	-- # New line	// ralentir ...
					self.speedControl.keys[self.speedControl.currentKey].speed = realSpeed - 1;	-- # New line
				elseif inputValue > 0 and self.speedControl.keys[self.speedControl.currentKey].speed < math.ceil(self:getMotor():getMaximumForwardSpeed()*3.6) then	-- # New line	// accélérer ...
					self.speedControl.keys[self.speedControl.currentKey].speed = realSpeed + 1;	-- # New line
				end;	-- # New line
			end;	-- # New line
		end;	-- # New line
    end;
	
	self.spec_drivable.cruiseControl.speed = math.ceil(self.speedControl.keys[self.speedControl.currentKey].speed);
	SpeedControlSpeedMPEvent:updateSendEvent(self);	
	
end;




function SpeedControl:onUpdate(dt)
--	#######################################################################################################################################
-- 		fonction qui s'éxécute quand on garde la touche [plus] ou [moins] enffoncée plus de 250milliseconde
--	#######################################################################################################################################
--	########################################   Fonction à modifier  (1er test v3) dans "SpeedControl.lua   ####### ~ligne 300 #############
--	#######################################################################################################################################
--	#######################################################################################################################################

	local spec = self.spec_enterable
	if spec.isEntered and self.isClient then
			
		local currSpeed = self.speedControl.keys[self.speedControl.currentKey].speed;		
		local realSpeed = self:getLastSpeed()-- # New line	// vitesse actuel du véhicule
		
		if self.speedControl.inputValues.axisSteer < 0 and self.speedControl.keys[self.speedControl.currentKey].speed >= 0 then
			self.speedControl.changeWaitTime = self.speedControl.changeWaitTime + dt; -- realtime ms
			if self.speedControl.changeWaitTime > 250 then
					if self.speedControl.currentKey < 3 then	-- # New line
				self.speedControl.keys[self.speedControl.currentKey].speed = self.speedControl.keys[self.speedControl.currentKey].speed - 15*dt/1000
					else																		-- # New line
					self.speedControl.keys[self.speedControl.currentKey].speed = realSpeed - 5	-- # New line	// enlève 5km/h à la vitesse du véhicule
					end;																		-- # New line
			end;

			if self.speedControl.keys[self.speedControl.currentKey].speed < 0 then
				self.speedControl.keys[self.speedControl.currentKey].speed = 0;
			end;

		elseif self.speedControl.inputValues.axisSteer > 0 and self.speedControl.keys[self.speedControl.currentKey].speed < math.ceil(self:getMotor():getMaximumForwardSpeed()*3.6) then				
			self.speedControl.changeWaitTime = self.speedControl.changeWaitTime + dt; 
			if self.speedControl.changeWaitTime > 250 then
					if self.speedControl.currentKey < 3 then	-- # New line			
				self.speedControl.keys[self.speedControl.currentKey].speed = self.speedControl.keys[self.speedControl.currentKey].speed + 15*dt/1000
					else																		-- # New line
					self.speedControl.keys[self.speedControl.currentKey].speed = realSpeed + 5	-- # New line	// ajoute 5 à la vitesse du véhicule
					end;																		-- # New line
				
			end;
			
			if self.speedControl.keys[self.speedControl.currentKey].speed > math.ceil(self:getMotor():getMaximumForwardSpeed()*3.6) then
				self.speedControl.keys[self.speedControl.currentKey].speed = math.ceil(self:getMotor():getMaximumForwardSpeed()*3.6);
			end;
		else
			self.speedControl.changeWaitTime = 0;
		end;		
		
		if self.speedControl.keys[self.speedControl.currentKey].speed ~= currSpeed then		
			self.spec_drivable.cruiseControl.speed = math.ceil(self.speedControl.keys[self.speedControl.currentKey].speed);
			SpeedControlSpeedMPEvent:updateSendEvent(self);				
		end;
			
	end;

end;
Si vous voulez tester :
1- Modification du mod « speedControl » (version test1):
-Copier le "FS19_zzzSpeedControl.zip" et renomer la copie "FS19_zzzSpeedControl_.zip" . Ne pas laisser le mod original dans le dossier mods, ou utiliser un nouveau dossier mods vide.
-Déziper
-Dans SpeedControl.lua remplacer les function « SpeedControl.onInputAction_setSpeedEvent » et « function SpeedControl:onUpdate » par celles ci-dessus.
-Reziper et placer le zip dans le dossier mods.
2- Utilisation du mod (version test1) :
-Les régulateurs « 1 » et « 2 » fonctionnes comme à l'origine.
- > KeyPad_1/2 pour sélectionner puis on/off
- > KeyPad_+/- pour régler la vitesse.
-Le régulateur « 3 », (régulation en continue)
- > KeyPad_3 pour sélectionner
- > KeyPad_+/- pour activer et régler :
- > > En tapotant sur la touche « + », vitesse du régulateur = vitesse du véhicule + 1km/h. → Accélération lente.
- > > En gardant la touche « + » enfoncée, vitesse du régulateur = vitesse du véhicule + 5km/h. → Accélération rapide.
- > > Idem avec la touche « - » pour la décélération lente et rapide.

Maintenant la suite : Ajout de l'axe joystick.
Dans ModDesc.xml

Code: Select all

   <l10n>
		...
	<text name="input_SPEEDCONTROL_AXIS_ADVANCEMENTLEVER"> 
            	<de>SpeedControl: Vorwärtsgeschwindigkeit</de>
            	<en>SpeedControl: Advancement Lever</en>
            	<fr>SpeedControl: Levier d'avencement</fr>
        </text>
	<text name="input_SPEEDCONTROL_AXIS_ADVANCEMENTLEVER_1"> 
            	<de>SpCont: "+" Vorwärtsgeschwindigkeit</de>
           	<en>SpCont: "+" Forward speed </en>
            	<fr>SpCont: "+" Vitesse d'avencement</fr>
        </text>
	<text name="input_SPEEDCONTROL_AXIS_ADVANCEMENTLEVER_2"> 
            	<de>SpCont: "-" Vorwärtsgeschwindigkeit </de>
            	<en>SpCont: "-" Forward speed</en>
            	<fr>SpCont: "-" Vitesse d'avencement</fr>
        </text>
    </l10n>

	<actions>	
		<action name="SPEEDCONTROL_SPEED1" 		category="VEHICLE"	axisType="HALF"/>
		<action name="SPEEDCONTROL_SPEED2" 		category="VEHICLE"	axisType="HALF"/>
		<action name="SPEEDCONTROL_SPEED3" 		category="VEHICLE"	axisType="HALF"/>
		<action name="SPEEDCONTROL_AXIS_SETSPEED" 	category="VEHICLE"	axisType="FULL"/>
		<action name="SPEEDCONTROL_AXIS_ADVANCEMENTLEVER" category="VEHICLE"	axisType="FULL"/> 
	</actions>
	
	<inputBinding>
		...
		<actionBinding action="SPEEDCONTROL_AXIS_ADVANCEMENTLEVER">
            		<binding device="KB_MOUSE_DEFAULT"	input=""	axisComponent="+"	neutralInput="0"	index="1"/>
			<binding device="KB_MOUSE_DEFAULT"	input=""	axisComponent="-"	neutralInput="0"	index="1"/>
		</actionBinding>
	</inputBinding>
Question :
:confusednew: Dans le modDesc, dans la balise <actions> que veut dire axisType="FULL" ou axisType="HALF" ?
Autre question :
:confusednew: Est ce-que je dois renseigner l'axe dans register.lua ? (je comprends pas comment il arrive à faire la différence entre un bouton et un axe).

Salutations, bonne journée.
Post Reply