trensim.comSimulación Ferroviaria
   

CGFC serie 27-42 "Berga"

Foro para la discusión de aspectos relacionados con la creación de material rodante para RailWorks.

Moderador: Moderadores

Notapor javierfl » Dom Jul 27, 2008 12:28 am

brill escribió:
Ahora sólo falta que alguien me cuente como conseguir que salga vapor a chorro... :?


De lo que se sabe, mientras no resuelvan este grave bug, y no parecen estar por la labor, RS sólo permite vaporcillos fijos. Sigo insistiendo que ésta es una de las peores limitaciones de este simulador, hasta el punto de que para mí lo inhabilita por completo.

El modelo, por cierto, una gozada... :D

Saludos:

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

Notapor Oriol » Dom Jul 27, 2008 12:38 am

brill escribió:Seguimos... :roll:


Eso es lo realmente importante, que sigas con el ímpetud, la motivación y sobretodo la ilusión del primer día.

Espero postear novedades próximamente yo, pero estoy algo liado con los drivers de nVidia para GNU/Linux y sobretodo todos los elementos que requieren de aceleración 3D en Ubuntu (Beryl, animaciones de ventanas...) que no parecen ser muy compatibles con Blender. De todos modos, desactivados me va bien. Ultimamente, por la pereza de reconfigurar cada vez el escritorio, prefiero tirar más de Windows. Jeje, pecador pillado :wink:

Bueno, OT a parte, Anims Carles!
Oriol Munuera i Roqué
Avatar de Usuario
Oriol
 
Mensajes: 2075
Registrado: Jue Sep 11, 2003 1:07 am
Ubicación: Cerdanyola del Vallès (Barcelona)

Notapor Sierra » Lun Jul 28, 2008 8:10 am

Magnifico Carles

Es una maravilla que consigas animar distintas partes de la locomotora en funcion de los controles que tienes activos en ese momento. Tendremos que plantearnos zapatas de freno moviles y los limpiaparabrisas.
Entiendo que esos ganchos amarillos que cuelgan son parte del modelo de ejemplo que aparecen en tanto no tengas un propio. Una de las cosas que me gustan menos de este simulador es el blueprint necesario para todo. Menos mal que estan los modelos de ejemplo.

Saludos
Sierra Menera
----------------------------------
www.todoscontraelcanon.com
Avatar de Usuario
Sierra
 
Mensajes: 1197
Registrado: Mar Mar 23, 2004 5:17 pm
Ubicación: valencia

Notapor brill » Mar Jul 29, 2008 5:56 pm

Hola,

Ya está el mecanismo motor completo:

Imagen

Imagen

Imagen

Ya ahora un tour de force para la tarjeta gráfica: un convoy de ¡23 locomotoras! :shock:

Imagen
Última edición por brill el Mié Ago 13, 2008 1:37 pm, editado 1 vez en total
Avatar de Usuario
brill
 
Mensajes: 435
Registrado: Mié Sep 10, 2003 6:37 am
Ubicación: La Garriga

Notapor LordMannu » Mar Jul 29, 2008 7:10 pm

:shock: :shock: :shock: :shock:
Excelente Brill! Y mis felicitaciones a tu tarjeta grafica :lol:
Avatar de Usuario
LordMannu
 
Mensajes: 485
Registrado: Mar May 09, 2006 8:53 pm
Ubicación: Capital Federal, Buenos Aires, Argentinisima

Notapor fernando » Mié Jul 30, 2008 6:01 pm

Hola a todos,parece que los compañeros de uktraimsim han descubierto como modificar el humo de las locomotoras y han sacado un parchecillo.
Yo lo he probado y bueno no sale esa humareda negra pero cambia algo.Es un buen principio.
Grande esas locomotoras brill,enhorabuena.
Un saludo.
Avatar de Usuario
fernando
 
Mensajes: 227
Registrado: Sab Mar 04, 2006 11:25 am
Ubicación: sitges(bcn)

Notapor RodrigoR » Jue Jul 31, 2008 1:31 am

Que belleza ese modelo!!!! :shock:
Felicitaciones!!!!!
"Una diesel en funcionamiento es un tren, una vaporera en funcionamiento es un espectáculo."
Avatar de Usuario
RodrigoR
 
Mensajes: 497
Registrado: Lun Feb 14, 2005 12:44 pm
Ubicación: Córdoba Capital - Argentina

Notapor brill » Mar Ago 12, 2008 4:18 pm

Hola a todos,

Ya he terminado la timonería del freno. Freno echado:

Imagen

y freno liberado:

Imagen

Lo mismo desde otro ángulo:

Imagen

Imagen

Y ahora por el lado del cilindro que, de momento, no sé animar :oops: como tampoco la palanca del cambio de marchas.

Imagen

Imagen

Los talleres se cierran por vacaciones y ya seguiremos...

Saludos,
Avatar de Usuario
brill
 
Mensajes: 435
Registrado: Mié Sep 10, 2003 6:37 am
Ubicación: La Garriga

Re: CGFC serie 27-42 "Berga"

Notapor brill » Vie Sep 11, 2009 5:59 pm

Hola a todo el mundo,

Después de la aparición de RailWorks y de la última actualización (v97.6a), he empezado a investigar las nuevas posibilidades.

1.-Activación de efectos de vapor, según los valores de ciertos controles. Por ejemplo, el vapor del silbato

Imagen

que sólo se emite cuando lo hacemos sonar. Esto es sencillo y tan sólo requiere el siguiente código dentro de la función OnControlValueChange ( name, index, value ) del archivo lua Engine Script, el que está en la propia carpeta de la máquina (Engine)

Código: Seleccionar todo
      if name == "Horn" then
   
            if value > 0 then
               Call( "Vapor_Sirena:SetEmitterActive", 1 );
            else
               Call( "Vapor_Sirena:SetEmitterActive", 0 );
            end
      
      end


Previamente, dentro de la función Initialise () de ese mismo archivo, hay que hacer que ese emitter esté inactivo al empezar a jugar. Eso se consigue con la instrucción

Código: Seleccionar todo
   Call( "Vapor_Sirena:SetEmitterActive", 0 );


Un buen efecto es que, con el regulador abierto, se escape algo de vapor por los prensaestopas de los cilindros:

Imagen

La inicialización en la función Initialise () del archivo lua Engine Script para un emitter en cada cilindro es

Código: Seleccionar todo
   Call( "Vapor_cilindre_dreta:SetEmitterActive", 0 );
   Call( "Vapor_cilindre_esquerra:SetEmitterActive", 0 );


y en la función OnControlValueChange ( name, index, value ) de ese mismo archivo el código es

Código: Seleccionar todo
      if name == "Regulator" then
   
            if value > 0.05 then

               Call( "Vapor_cilindre_dreta:SetEmitterActive", 1 );
               Call( "Vapor_cilindre_esquerra:SetEmitterActive", 1 );
.......................
.......................



El caso de las purgas es algo más complejo, porque se depende de los valores de dos controles, a saber, el mando de las purgas (CylinderCock) y el regulador (Regulator). En efecto, con las purgas abiertas, si se cierra el regulador, el vapor debe dejar de salir y, con el regulador cerrado, al abrir las purgas no debe salir vapor. Contando con cuatro emisores de vapor, el código a incluir en la función OnControlValueChange ( name, index, value ) del archivo lua Engine Script es éste:

Código: Seleccionar todo
      if name == "CylinderCock" then
   
            if value > 0 then

                  if Call( "*:ControlExists", "Regulator", 0 ) ~= zero then
                     rgValue = Call( "*:GetControlValue", "Regulator", 0 );
                        if rgValue > 0 then
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 1 );
                        else
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
                        end
                  else
                     Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
                     Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
                     Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
                     Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
                  end
            else
               Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
               Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
            end
   
      end

      if name == "Regulator" then
   
            if value > 0.05 then

               Call( "Vapor_cilindre_dreta:SetEmitterActive", 1 );
               Call( "Vapor_cilindre_esquerra:SetEmitterActive", 1 );

                  if Call( "*:ControlExists", "CylinderCock", 0 ) ~= zero then
                     purgValue = Call( "*:GetControlValue", "CylinderCock", 0 );
                        if purgValue > 0 then
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 1 );
                        else
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
                        end
                  end

            else
               Call( "Vapor_cilindre_dreta:SetEmitterActive", 0 );
               Call( "Vapor_cilindre_esquerra:SetEmitterActive", 0 );
               Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
               Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
            end
   
      end



y, como antes, en la función Initialise () de ese mismo archivo, hay que hacer que esos emitters empiecen inactivos con el código

Código: Seleccionar todo
   Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
   Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
   Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
   Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );


El efecto es éste:

Imagen

Todo el archivo lua Engine Script queda así:

Código: Seleccionar todo
--------------------------------------------------------------------------------------
-- KUJU / Rail Simulator
--------------------------------------------------------------------------------------
-- INITIALISE

function Initialise ()

   -- All emitters are active by default so turn off some of them
   --Call( "Fum_xemeneia:SetEmitterActive", 0 );
   Call( "Vapor_Sirena:SetEmitterActive", 0 );
   Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
   Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
   Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
   Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
   Call( "Vapor_cilindre_dreta:SetEmitterActive", 0 );
   Call( "Vapor_cilindre_esquerra:SetEmitterActive", 0 );

--   call("BeginUpdate");

end

------------------------------------------------------------
-- OnControlValueChange
------------------------------------------------------------
-- Called when a cab control is modified
------------------------------------------------------------
-- Parameters:
--   name   = Name of the control
--   index   = Index of the control
--   value   = Modified control value
------------------------------------------------------------

function OnControlValueChange ( name, index, value )

   local rgValue = 0;
   local purgValue = 0;
   local increment = 0;
   local zero = 0

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

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

      end
   
      
      if name == "Horn" then
   
            if value > 0 then
               Call( "Vapor_Sirena:SetEmitterActive", 1 );
            else
               Call( "Vapor_Sirena:SetEmitterActive", 0 );
            end
      
      end


      if name == "CylinderCock" then
   
            if value > 0 then

                  if Call( "*:ControlExists", "Regulator", 0 ) ~= zero then
                     rgValue = Call( "*:GetControlValue", "Regulator", 0 );
                        if rgValue > 0 then
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 1 );
                        else
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
                        end
                  else
                     Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
                     Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
                     Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
                     Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
                  end
            else
               Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
               Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
            end
   
      end


      if name == "Regulator" then
   
            if value > 0.05 then

               Call( "Vapor_cilindre_dreta:SetEmitterActive", 1 );
               Call( "Vapor_cilindre_esquerra:SetEmitterActive", 1 );

                  if Call( "*:ControlExists", "CylinderCock", 0 ) ~= zero then
                     purgValue = Call( "*:GetControlValue", "CylinderCock", 0 );
                        if purgValue > 0 then
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 1 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 1 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 1 );
                        else
                           Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
                           Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
                           Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
                        end
                  end

            else
               Call( "Vapor_cilindre_dreta:SetEmitterActive", 0 );
               Call( "Vapor_cilindre_esquerra:SetEmitterActive", 0 );
               Call( "Vapor_purga_dreta1:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra1:SetEmitterActive", 0 );
               Call( "Vapor_purga_dreta2:SetEmitterActive", 0 );
               Call( "Vapor_purga_esquerra2:SetEmitterActive", 0 );
            end
   
      end

end


Naturalmente, esos emitters han de estar declarados como S Child en el blueprint de la máquina, en la sección Container component y puestos en su sitio con el previsualizador del Asset Editor.

2.-Animaciones exteriores de controles que no son de tipo Sí/No: el regulador, la palanca de cambio de marchas, etc. Se trata que, desde el exterior, se vea moverse el regulador, la palanca de cambio de marchas y su timonería, los frenos con su cilindro timonería y zapatas, etc. de modo que las posiciones de la animación exterior sigan fielmente las posiciones del control de dentro de la cabina.

Por ejemplo, para la palanca y timonería del cambio de marchas tenemos la posición inicial (0). Nótese el movimiento del contrapeso de la distribución, señalado con una flecha roja:

Imagen

marcha adelante a fondo:

Imagen

marcha atrás a fondo:

Imagen

y una posición intermedia (41%):

Imagen

Para ello, la palanca, timonería y contrapeso, es decir, todo lo que se va a mover, no debe formar parte del fichero IGS del modelo, sinó que todo ese conjunto móvil debe tener sus ficheros IGS y IA propios. Con ellos se hace un Anim procedural scenery blueprint en el que se declaran los ficheros IGS y IA. Ese blueprint se declara como S Child en el blueprint de la máquina, en la sección Container component y se pone en su sitio con el previsualizador del Asset Editor. Esa animacion no hay que declararla en la sección Render component -> Anim set del blueprint principal de la máquina.

El fichero a manipular ahora es el lua Simulation Script, el que está en la carpeta (Simulation) de la máquina. La función que maneja el proceso es AddTime (Container componentID, AnimationID, time).

En mi máquina, el nombre que le he puesto al Container component es Node_Palanca_marxes y, en su blueprint, el nombre de la animación es Anim_palanca_marxes. Así pues, el uso de la función será

Código: Seleccionar todo
Call("Node_Palanca_marxes:AddTime", "Anim_palanca_marxes", rvIncrement );


(rvincrement es el tiempo que damos a la animación para que se mueva durante el mismo)

Empezamos por definir una variable global, gPrevReverserValue, y poner la palanca justo en su punto medio:

Código: Seleccionar todo
   gPrevReverserValue   = 0
   
      if Call( "*:ControlExists", "Reverser", 0 ) ~= zero then

         Call("Node_Palanca_marxes:AddTime", "Anim_palanca_marxes", 0.29 );

      end


Ese código va dentro de la función Setup () del fichero lua Simulation Script. El valor 0.29 del tiempo se encuentra por experimentación... :?

El movimiento se controla mediante este código en la función Update (interval) de ese mismo script:

Código: Seleccionar todo
   io.output("sortida.txt")
   local rvIncrement = 0;

   -- Reverser
   if Call( "*:ControlExists", "Reverser", 0 ) ~= zero then

      controlValue = Call( "*:GetControlValue", "Reverser", 0 )

         if controlValue ~= gPrevReverserValue then

            rvIncrement = (controlValue - gPrevReverserValue)*0.333333;
--            io.write( "DEBUG: gPrevReverserValue = ", gPrevReverserValue, ", ReverserValue = ", controlValue, ", rvIncrement = ", rvIncrement, "\n" );
            Call("Node_Palanca_marxes:AddTime", "Anim_palanca_marxes", rvIncrement );
            Call( "*:SetEngineValue", "Reverser", controlValue )
            gPrevReverserValue = controlValue;

         end

   end


La instrucción io.output("sortida.txt") abre el fichero sortida.txt, que aparecerá en la carpeta raíz de RailWorks y la instrucción io.write( "DEBUG: gPrevReverserValue = ", gPrevReverserValue, ", ReverserValue = ", controlValue, ", rvIncrement = ", rvIncrement, "\n" ); escribe en este fichero, con el propósito de debuggear el script. Cuando estemos satisfechos con los resultados, podemos comentar (las dos rayitas -- del principio de la línea) esa línea para que no se gasten recursos en el funcionamiento del juego.

El freno de mano también puede animarse del mismo modo:

Posición de desfrenado:

Imagen

y su correspondencia en la vista interior de la cabina:

Imagen

Posición de frenado:

Imagen

y esa posición en la cabina:

Imagen

Una posición intermedia:

Imagen

El fichero script de simulación, queda así:

Código: Seleccionar todo
------------------------------------------------------------
-- Ficher de simulació per a les locomotores CGFC 27-42, "Bergues"
------------------------------------------------------------


------------------------------------------------------------
-- Setup
------------------------------------------------------------
-- Called when the engine script is initialised
------------------------------------------------------------

function Setup ()

   DEBUG = true
   io.output("sortida.txt")

   SG_STATE_STOPPED  = 0
   SG_STATE_FORWARD  = 1
   SG_STATE_BACKWARD = 2

   mStopGoState = SG_STATE_STOPPED

   gPrevFireBoxDoorValue   = -1 -- Forces 1st frame update
   gPrevReverserValue   = 0
   gPrevRegulatorValue   = 0
   gPrevHornValue      = 0
   gPrevHandBrakeValue    = 0
   
      if Call( "*:ControlExists", "Reverser", 0 ) ~= zero then

         Call("Node_Palanca_marxes:AddTime", "Anim_palanca_marxes", 0.29 );

      end

end

------------------------------------------------------------
-- Update
------------------------------------------------------------
-- Called every frame to update the simulation
------------------------------------------------------------
-- Parameters:
--   interval = time since last update
------------------------------------------------------------

function Update (interval)

   local fbValue = 0;
   local sgValue = 0;
   local hbValue = 0;
   local zero = 0

   local hbIncrement = 0;
   local rvIncrement = 0;
   local hbValue = 0;
   local que = 0

   if Call( "*:ControlExists", "HandBrake", 0 ) ~= zero then

      hbValue = Call( "*:GetControlValue", "HandBrake", 0 );

         if hbValue ~= gPrevHandBrakeValue then

            hbIncrement = (hbValue - gPrevHandBrakeValue)*0.5;
            que=que+hbIncrement;
--            io.write( "DEBUG: gPrevHandBrakeValue = ", gPrevHandBrakeValue, ", HandBrakeValue = ", hbValue, ", hbIncrement = ", hbIncrement, " acumulat = ", que, "\n" );
            Call("Node_Palanca_i_espiga_fre_manual:AddTime", "Anim_palanca_i_espiga_fre_manual", hbIncrement );
            Call("Node_Timoneria_frens:AddTime", "Anim_timoneria_frens", hbIncrement );
            gPrevHandBrakeValue = hbValue

         end

   end


   if Call( "*:ControlExists", "Firebox door", 0 ) ~= zero then

      fbValue = Call( "*:GetControlValue", "Firebox door", 0 );

      Call( "*:SetEmitterColour", fbValue, fbValue, fbValue );

      if fbValue ~= gPrevFireBoxDoorValue then
         Call( "ControlSound:SetParameter", "FireBoxDoorValue", fbValue )    
         gPrevFireBoxDoorValue = fbValue
      end
   end
   
   -- Stop go controls...
   
   if Call( "*:ControlExists", "StopGoForward", 0 ) ~= zero then
      sgValue = Call( "*:GetControlValue", "StopGoForward", 0 );
      if sgValue > zero then
         mStopGoState = SG_STATE_FORWARD
      elseif sgValue < zero then
         mStopGoState = SG_STATE_BACKWARD
      end
   end
   
   
   if Call( "*:ControlExists", "StopGoStop", 0 ) ~= zero then
      sgValue = Call( "*:GetControlValue", "StopGoStop", 0 );
      if sgValue ~= zero then
         Call( "*:SetControlValue", "StopGoForward", zero, zero );
         mStopGoState = SG_STATE_STOP
      end
   end


   
   Call("SetFailureValue", "ElectricSim", "ForceMultiplierDueToFailure", 0.5)


   local controlValue = 0;

   -- Reverser
   if Call( "*:ControlExists", "Reverser", 0 ) ~= zero then

      controlValue = Call( "*:GetControlValue", "Reverser", 0 )

         if controlValue ~= gPrevReverserValue then

            rvIncrement = (controlValue - gPrevReverserValue)*0.333333;
--            io.write( "DEBUG: gPrevReverserValue = ", gPrevReverserValue, ", ReverserValue = ", controlValue, ", rvIncrement = ", rvIncrement, "\n" );
            Call("Node_Palanca_marxes:AddTime", "Anim_palanca_marxes", rvIncrement );
            Call( "*:SetEngineValue", "Reverser", controlValue )
            gPrevReverserValue = controlValue;

         end

   end

   -- Regulator
   if Call( "*:ControlExists", "Regulator", 0 ) ~= zero then

      controlValue = Call( "*:GetControlValue", "Regulator", 0 )

      if controlValue ~= gPrevRegulatorValue then

         Call( "*:SetEngineValue", "Regulator", controlValue )

         gPrevRegulatorValue = controlValue

      end

   end

   -- Horn
   if Call( "*:ControlExists", "Horn", 0 ) ~= zero then

      controlValue = Call( "*:GetControlValue", "Horn", 0 )
      
      -- KJM Print("controlValue = ", controlValue);
      
      if controlValue ~= gPrevHornValue then

         --Call( "*:SetEngineValue", "Horn", controlValue )
   
         Call( "ControlSound:SetParameter", "HornValue", controlValue )    

         gPrevHornValue = controlValue

      end

   end

end

function GetStopGoState()
   return mStopGoState
end


Espero haber ayudado a avanzar en la simulación.

Saludos,

Carles Romero, "Brill"
Avatar de Usuario
brill
 
Mensajes: 435
Registrado: Mié Sep 10, 2003 6:37 am
Ubicación: La Garriga

Re: CGFC serie 27-42 "Berga"

Notapor Pere » Vie Sep 11, 2009 6:34 pm

¿¿¿Ayudado???

¡No fastidies, Carles! Esto es pura ciencia, y yo no lo había visto en ninguna documentación ni foro.

Muchas gracias, sacaremos un buen partido a tus enseñanzas :wink:

:app: :app: :app: :app: :app: :app:
Avatar de Usuario
Pere
grupo TrenSim
 
Mensajes: 5043
Registrado: Jue Ago 28, 2003 11:44 pm
Ubicación: Barcelona

Re: CGFC serie 27-42 "Berga"

Notapor tomeso » Vie Sep 11, 2009 6:58 pm

Menudo desmigue de animaciones y de codigo. Utilísimo y no sólo para locomotoras de vapor.....

Un saludo
Tomeso
Hay que detallar más, porque menos no se puede.
Avatar de Usuario
tomeso
 
Mensajes: 387
Registrado: Dom May 16, 2004 10:39 pm
Ubicación: mañolandia

Re: CGFC serie 27-42 "Berga"

Notapor blas_dani » Vie Sep 11, 2009 7:14 pm

Hola:

Fantástica explicación... esto demuestra hasta donde se puede llegar con este simulador.

Y todo esto lo has hecho a base de ir probando?

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

Re: CGFC serie 27-42 "Berga"

Notapor javierfl » Vie Sep 11, 2009 8:47 pm

Gracias Carles. ¡Maravillosos avances! Realmente una gozada las posibilidades que nos abres con tu impecable trabajo de investigación.

:app: :app: :app: :app: :app: :app: :app:

Saludos:

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

Re: CGFC serie 27-42 "Berga"

Notapor JORDIHP » Vie Sep 11, 2009 11:45 pm

Carles,

Tu capacidad de análisis, de investigación y de deducción, no cesan de impresionarnos a todos.
Y lo que estás consiguiendo con tu locomotora, es un ejemplo magnífico de lo que acabo de decir.

:app: :app: :app: :app: :app: :app: :app:

Gracias por esta gran obra que esta cobrando cuerpo.
Jordi
Avatar de Usuario
JORDIHP
 
Mensajes: 555
Registrado: Lun Oct 27, 2003 3:43 pm
Ubicación: Granollers (Barcelona)

Re: CGFC serie 27-42 "Berga"

Notapor Divi4p » Sab Sep 12, 2009 9:45 am

¿Se podría hacer entonces la animación de cilindros de freno y aproximación de zapatas en todo el material?

Viendo el script se podría en función de la posición del freno, ¿pero sería posible leer valores propios del vehículo tales como presión en tubería de freno o cilindro de freno?

O Quizás alguno más interesante como de cara al vapor el de presión de la caldera o nivel de agua para animar un nivel en el ténder, por ejemplo o la válvula de seguridad.

controlValue = Call( "*:GetControlValue", "Reverser", 0 )

¿Aceptaría en vez de Reverser algo diferente a un control, un valor del vehículo?

Se me antoja más, en la función Initialise ¿puedo yo especificar los valores del vehículo que quiera? Es decir, con el freno de mano echado, con el paraguas bajado... etc.

Me veo haciendo timonerías de freno... funcionales. Es un enormísimo avance, ¡gracias Carles!

Saludos.
Última edición por Divi4p el Sab Sep 12, 2009 10:59 am, editado 1 vez en total
Imagen
Avatar de Usuario
Divi4p
Bibliotecario
 
Mensajes: 1314
Registrado: Lun Abr 04, 2005 5:19 pm
Ubicación: en un zarrio

AnteriorSiguiente

Volver a Material rodante RW

¿Quién está conectado?

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