FORO Railsim.es
Cambio de textura mediante script - Versión para impresión

+- FORO Railsim.es (https://www.railsim.es/foro)
+-- Foro: Train Simulator (https://www.railsim.es/foro/forumdisplay.php?fid=6)
+--- Foro: Lua Script (https://www.railsim.es/foro/forumdisplay.php?fid=44)
+--- Tema: Cambio de textura mediante script (/showthread.php?tid=2226)

Páginas: 1 2


Cambio de textura mediante script - AEC - 06-14-2014

Hola a todos.
Me interesaria saber si es posible mediante script configurar si un objeto lee una textura u otra, es decir, por ejemplo, tenemos dos texturas a mostrar y apretando un boton en cabina, cambie la textura de un objeto por medio de renombrar las texturas con LUA y que el simulador lo lea en el acto sin necesidad de reiniciar.
Si existe algun metodo efectivo, seria de gran utilidad, ya que no puedo hacer el clonar el objeto y con animacion lo oculto y muestro otro identico con la otra textura.

Gracias de antemano.
Un saludo,
Alberto


Re: Cambio de textura mediante script - el_pinchos - 06-14-2014

Por supuesto que se puede, aunque es necesario que en archivo de forma IGS (GeoPcDx una vez exportado), se hayan declarado todas las texturas del vehículo con las diferentes libreas. Después habría que hacer un control en la locomotora que apuntara a la librea que quisiéramos cambiar. Con ese control ya sólo deberíamos activar las libreas como nodos del modelo.

Una teórica función de script LUA para cambiar las libreas podría ser:

Código:

function ControlLibrea( Librea )

  engine_1 = 0
  engine_2 = 0
  engine_3 = 0

  if (Librea == 1) then
  engine_1 = 1
  end
  
  if (Librea == 2) then
  engine_2 = 1
  end

  if (Librea == 3) then
  engine_3 = 1
  end

  Call("*:ActivateNode", "engine_1", engine_1 )
  Call("*:ActivateNode", "engine_2", engine_2 )
  Call("*:ActivateNode", "engine_3", engine_3 )

  end

Cada librea debería ser un nodo del archivo de forma nombrado como "engine_x', que se activaría con la librea que hubiéramos seleccionado con el control 'Librea'.


Re: Cambio de textura mediante script - AEC - 06-14-2014

el_pinchos Por supuesto que se puede, aunque es necesario que en archivo de forma IGS (GeoPcDx una vez exportado), se hayan declarado todas las texturas del vehículo con las diferentes libreas. Después habría que hacer un control en la locomotora que apuntara a la librea que quisiéramos cambiar. Con ese control ya sólo deberíamos activar las libreas como nodos del modelo.

Una teórica función de script LUA para cambiar las libreas podría ser:

Código:

function ControlLibrea( Librea )

  engine_1 = 0
  engine_2 = 0
  engine_3 = 0

  if (Librea == 1) then
  engine_1 = 1
  end
  
  if (Librea == 2) then
  engine_2 = 1
  end

  if (Librea == 3) then
  engine_3 = 1
  end

  Call("*:ActivateNode", "engine_1", engine_1 )
  Call("*:ActivateNode", "engine_2", engine_2 )
  Call("*:ActivateNode", "engine_3", engine_3 )

  end

Cada librea debería ser un nodo del archivo de forma nombrado como "engine_x', que se activaría con la librea que hubiéramos seleccionado con el control 'Librea'.
Muchiiisimas gracias el_pinchos :maestro: :maestro: En este caso, ¿el nodo sería el nombre del material o del map? por ejemplo engine_1 seria "Material #25" (de los nombres de materiales por defecto) :?:

Gracias de nuevo.
Un saludo,
Alberto


Re: Cambio de textura mediante script - madroño - 06-14-2014

Sería la malla con esa textura. El nombre que hayas dado a esa pieza. El sistema que te ha propuesto se basa en hacer varias piezas con distintas texturas, y mostrar/ocultarlas mediante script.


Re: Cambio de textura mediante script - AEC - 06-15-2014

madroño Sería la malla con esa textura. El nombre que hayas dado a esa pieza. El sistema que te ha propuesto se basa en hacer varias piezas con distintas texturas, y mostrar/ocultarlas mediante script.
Pues entonces no me sirve, porque es un velocimetro digital al que le tienen que cambiar de color los numeros (o sea cambiar la textura) y no vale el clonar porque entonces deja de funcionar el script. :oops:


Re: Cambio de textura mediante script - AEC - 06-17-2014

Hola de nuevo.
Aprovecho el hilo para preguntaros sobre el "*:ActivateNode".
A mi esta funcion no me funciona asi que no se si lo hago bien. Agradeceria un explicacion.

Yo pensaba que simplemente dentro de tu archivo de Max tenias un objeto llamado por ejemplo "1_0500_nombre" (en el ejemplo que pongo es para hacer aparecer en la pantalla de ordenador de abordo de una cabina un icono) y al usar:
Call("*:ActivateNode", "nombre", 0) el objeto no desaparece y se sigue viendo en el simulador tal y como se ve en Max, asi que no puedo controlar la visualizacion de 1_0500_nombre mediante el script.

Gracias de antemano.


Re: Cambio de textura mediante script - HANNIBAL SMITH - 06-18-2014

ActivateNode lo que hace es mostra u ocultar el objeto en cuestión, habría que ver si ocultando el objeto los fotogramas aumentan, no sea que lo oculte pero siga estando ahí y se renderice.


Re: Cambio de textura mediante script - madroño - 06-18-2014

El código está bien puesto

Call( "*:ActivateNode","nombre", 0) -- desactiva

Call( "*:ActivateNode","nombre", 1) -- activa

No se si tendrá algo que ver, pero si es para una cabina, las piezas se suelen llamar 1_0000_nombre. Ah y supongo que lo estás haciendo dentro de la función Update, ¿no?

¿Has probado a hacerlo de esta manera?

http://forums.uktrainsim.com/viewtopic.php?f=368&t=132520


Re: Cambio de textura mediante script - AEC - 06-18-2014

madroño El código está bien puesto

Call( "*:ActivateNode","nombre", 0) -- desactiva

Call( "*:ActivateNode","nombre", 1) -- activa

No se si tendrá algo que ver, pero si es para una cabina, las piezas se suelen llamar 1_0000_nombre. Ah y supongo que lo estás haciendo dentro de la función Update, ¿no?

¿Has probado a hacerlo de esta manera?

http://forums.uktrainsim.com/viewtopic.php?f=368&t=132520
El velocimetro funciona genial, ya que va con el SetControlValue, y los otros objetos que deseo mostrar, me gustaria ahorarme lo de escribirlos en el .xml, ya que con el SetControlValue funciona genial, aparecen y desaparecen, pero con el ActiveNode no lo consigo. Probare con lo de 1_0000_nombre, pero no se si eso hara algo.

¿Es posible que en vez de el asterisco tenga q referenciar la cabina? Es decir, Call("Cabina:ActivateNode", "nombre", 0) :?:

Muchas gracias


Re: Cambio de textura mediante script - madroño - 06-18-2014

No creo. A mi siempre me funciona como he puesto. ¿Has revisado el código anterior? A veces cuando hay fallos de sintaxis en líneas anteriores directamente se salta ese código, pese a no dar error.

No se si has visto la otra solución que plantean, que es crear un cilindro de 11 caras y controlar su rotación, aunque personalmente me gusta más la forma de hacerlo de Reppo, pese a ser más pesada. Creo que se basa en el principio de las texturas animadas si no recuerdo mal.


Que fácil sería con un blueprint tipo digital speedometer Sad