trensim.comSimulación Ferroviaria
   

Usando LUA para poner luz en cabina

Foro destinado a la discusión de aspectos relacionados con la creación de scripts en RailWorks.

Moderador: Moderadores

Usando LUA para poner luz en cabina

Notapor 444.518 » Mié Dic 14, 2011 7:51 pm

Ayer estuve creando un punto de luz para cabinas de color azulito, para no deslumbrar. Dado que había un control en la cabina de la Class 60 para encender y apagar la luz interior, decidí ponerselo a ella. Copié el elemento de luz de cabina de la 67 de Just Trains y se lo puse en el 'blueprint' de la 60. En un principio, al carecer la 60 de cualquier tipo de control sobre la luz que le puse, se quedaba encendida todo el rato. Tras recordar algo que Repo puso por aquí sobre controles desde LUA, he copiado un trozo del control de la 67 a la 60 sobre la luz de cabina y he adecuado los nombres correctamente...
¡Funciona!
Y lo mejor es que el código es más sencillo de lo que pensaba. Este es el 'script' LUA que hace funcionar correctamente la luz de cabina de la 60:
Código: Seleccionar todo
------------------------------------------------------------
-- OnControlValueChange
------------------------------------------------------------
-- Called when a cab control is modified
------------------------------------------------------------
-- Parameters:
--   name   = Name of the control
--   index   = Index of the control
--   value   = Modified control value
------------------------------------------------------------
function OnConsistMessage ( msg, argument, direction )

   -- send the message further down the consist
   Call ( "SendConsistMessage", msg, argument, direction );
   
end
function OnControlValueChange ( name, index, value )

   if Call( "*:ControlExists", name, index ) then

      Call( "*:SetControlValue", name, index, value );

   end
   
   if name == "CabLights" then
         if value > 0.5 then
            Call( "CabLightA1:Activate", 1)
            Call( "CabLightB1:Activate", 1)
         else
            Call( "CabLightA1:Activate", 0)
            Call( "CabLightB1:Activate", 0)
         end
      end   

end


Y lo mejor no queda aquí: se puede copiar casi todo el LUA de la 67 de JT a la 60 para hacer funcionar en esta última bastante cantidad de controles que no se usan para nada.
Ya sé que tampoco he inventado nada, pero es que me hacía una 'ilu' esto de manejarme con LUA 8)
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Usando LUA para poner luz en cabina

Notapor 444.518 » Mié Dic 14, 2011 8:08 pm

Aquí teneis el resultado. Tras seleccionar la Class 60 en el editor de escenarios, teneis que elegir la 'LoadHaul Lights'. Pero ponerla de noche :wink:
Class60_luz_cabina.zip
(9.26 KiB) 1670 veces
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Usando LUA para poner luz en cabina

Notapor blas_dani » Mié Dic 14, 2011 8:09 pm

Hola:

Si, esto del lua tiene su gracia...

Un reto: si colocas un par de locomotoras en tandem, se encenderán las luces en las dos.
Se te ocurre como hacer que sólo se active la primera? o mejor dicho, la que tenga la cabina activa?

Saludos.
Avatar de Usuario
blas_dani
 
Mensajes: 2863
Registrado: Jue Sep 11, 2003 1:00 pm
Ubicación: Barri de Gràcia. Barcelona

Re: Usando LUA para poner luz en cabina

Notapor 444.518 » Mié Dic 14, 2011 8:33 pm

Jeje... Lo primero que se me ocurre es quitar la función de envío de información por la composición OnConsistMessage, pero lo que se desea es que funcione esta función y sin embargo solo se active la del conductor. Mirando el 'script' de la 67 veo que el 'if' del control de luz de cabina está anidado dentro de un 'if' de control sobre 'isPlayerLoco', se inicia como 'false' en pero que puede cambiar a 'true' con una 'function Update (time)' comprobando el control 'GetIsPlayer'... :-k

Ay, que estoy empezando a andar, no me pongais a manejar una bicicleta :lol:
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Usando LUA para poner luz en cabina

Notapor 444.518 » Mié Dic 14, 2011 8:56 pm

:-k Reto aceptado:

Código: Seleccionar todo
function Initialise ()

isPlayerLoco = false

Call("BeginUpdate")

end

function OnConsistMessage ( msg, argument, direction )

   Call ( "SendConsistMessage", msg, argument, direction );
   
end
function OnControlValueChange ( name, index, value )

   if Call( "*:ControlExists", name, index ) then

      Call( "*:SetControlValue", name, index, value );

   end
   
   if isPlayerLoco then
   
      if name == "CabLights" then
            if value > 0.5 then
               Call( "CabLightA1:Activate", 1)
               Call( "CabLightB1:Activate", 1)
            else
               Call( "CabLightA1:Activate", 0)
               Call( "CabLightB1:Activate", 0)
            end
         end   
   end
end

function Update (time)

   if Call("GetIsPlayer") > 0.5 then
      isPlayerLoco = true
   else
      isPlayerLoco = false
   end

   if isPlayerLoco == false then
   
      Call( "CabLightA1:Activate", 0)
      Call( "CabLightB1:Activate", 0)
            
   end

   
end
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Usando LUA para poner luz en cabina

Notapor javierfl » Mié Dic 14, 2011 8:58 pm

:app: :app: :app: :app: :app: :app: :app: :app:
Avatar de Usuario
javierfl
grupo TrenSim
 
Mensajes: 9620
Registrado: Sab Ago 30, 2003 11:23 pm
Ubicación: Ciudad Astur

Re: Usando LUA para poner luz en cabina

Notapor blas_dani » Mié Dic 14, 2011 9:09 pm

Hola:

Has tardado mucho menos de lo que yo pensaba en solucionar el reto! :app: y veo que entiendes el funcionamiento básico de los scripts... (a mi me costó un poquillo, la verdad).
El tema lua tiene mucho potencial.

Saludos.
Avatar de Usuario
blas_dani
 
Mensajes: 2863
Registrado: Jue Sep 11, 2003 1:00 pm
Ubicación: Barri de Gràcia. Barcelona

Re: Usando LUA para poner luz en cabina

Notapor Repo » Jue Dic 15, 2011 6:31 am

Hola, me alegro que estén dándole duro al LUA.

Sólo una aclaración respecto a lo último que han estado escribiendo en scripts.

La función "GetIsPlayer" reconoce a todos los vehículos de un "consist", es decir, no sirve de mucho para discriminar entre una locomotora que lleva al maquinista y otra que va en "tandem" con ella. Si quieren sólo afectar a la locomotora donde uno va conduciendo deben usar la función: "GetIsEngineWithKey".

Saludos.
Imagen
Avatar de Usuario
Repo
 
Mensajes: 1198
Registrado: Mar Oct 11, 2005 4:27 pm
Ubicación: Santiago de Chile

Re: Usando LUA para poner luz en cabina

Notapor 444.518 » Jue Dic 15, 2011 8:51 am

Amotado Repo, ¡gracias!
:ok:
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles


Volver a LUA Scripting RW

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados