Un petit tuto pour passer ce que j'ai un peu près compris...
Je crée un objet nommé Lampe01.nl2sco qui contient le chemin du Cube.3ds que j'agrandis à l’échelle (basescalex="10") en lui ajoutant une lightsource (spot) à 0.1f au dessus (position y="0.1") de son point de pivot éclairant contre le bas (direction y="-1").
Lampe01.nl2sco :
Resumons :
-Un parc vide
-Un objet 3ds (Cube.3ds)
-Une Lampe01.nl2sco avec source light (spot) nommée ''Ampoule''
Voici ce que j'obtiens, j'en place autant que je veux ... (ici 3)
A présent je crée un script que j'appelle ''LightTimeControle.nlvm''.
Je reprend le fichier Lampe01.nl2sco que je copie et sauvegarde en Controle.nl2sco.
Je lui enlève la source light et je lui ajoute le script nommé ''LightTimeControle.nlvm''. Qui suit l'exemple :
A présent, je peux nommé mes lampes avec l'éditeur de propriétés d'objets :
Je les nommes ainsi :
Cube_Lampe01
Cube_Lampe02
Cube_Lampe03
Je les ajoutes à ''LightTimeControle.nlvm'' :
Si je lance le simulateur, les 3 spots sont éteints.
A présent j’ajoute une constante de temps avec un cycle qui va l'obliger a revenir à zéro toutes les 3sec. Pour vérifier, j’ajoute un message qui va lire cette constante à toutes les images.
Maintenant je peux donner des conditions pour que les lampes fassent ce que j'ai envie en fonction du temps.
Comme cela, elles vont s'allumer une après l'autre et s'éteindre toutes au bout de 6 sec.
On peut faire un chenillard sur 3 secondes:
import com.nolimitscoaster.*;
Ce qu'il faut comprendre c'est qu'il suffit de lancer une constante de temps depuis n'importe quel action. Un trigger, un contact, une vue caméra, ... et on peut aussi leur attribuer des mouvements.
LE PARC http://dawaweb.ch/NoLimits2/Light_time/Light_time.zip
Je crée un objet nommé Lampe01.nl2sco qui contient le chemin du Cube.3ds que j'agrandis à l’échelle (basescalex="10") en lui ajoutant une lightsource (spot) à 0.1f au dessus (position y="0.1") de son point de pivot éclairant contre le bas (direction y="-1").
Lampe01.nl2sco :
Code:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<sceneobject>
<model path="Cube.3ds"/>
<param basescalex="10"/>
<param basescaley="10"/>
<param basescalez="10"/>
<lightsource range="1" intensity="1" type="spot" spotcutoff="30" spotexponent="25">
<direction x="0" y="-1" z="0"/>
<upvector x="0" y="1" z="0"/>
<name>Ampoule</name>
<position x="0" y="0.1" z="0"/>
<color r="1" g="1" b="1"/>
<halo zoffset="1" intensity="1" size="1"/>
<volume range="1" intensity="1" size="0.1"/>
</lightsource>
</sceneobject>
</root>
Resumons :
-Un parc vide
-Un objet 3ds (Cube.3ds)
-Une Lampe01.nl2sco avec source light (spot) nommée ''Ampoule''
Voici ce que j'obtiens, j'en place autant que je veux ... (ici 3)
A présent je crée un script que j'appelle ''LightTimeControle.nlvm''.
Code:
import com.nolimitscoaster.*;
public class LightTimeControle extends Script
{
//Lampe01
private SceneObject Lampe01;
private SceneObjectLight spotLight;
public bool onInit()
{
// Cube_Lampe01
Lampe01 = sim.getSceneObject("Cube_Lampe01");
spotLight = Lampe01.getLightForName("Ampoule");
return true;
}
public void onNextFrame(float fTickTime)
{
spotLight.setEnabled(false);
}
}
Je reprend le fichier Lampe01.nl2sco que je copie et sauvegarde en Controle.nl2sco.
Je lui enlève la source light et je lui ajoute le script nommé ''LightTimeControle.nlvm''. Qui suit l'exemple :
Code:
Controle.nl2sco :
<?xml version="1.0" encoding="UTF-8"?>
<root>
<sceneobject>
<model path="Cube.3ds"/>
<param basescalex="10"/>
<param basescaley="10"/>
<param basescalez="10"/>
[color=red][color=red]<script>
<classpath></classpath>
<class>LightTimeControle</class>
</script>[/color][/color]
</sceneobject>
</root>
A présent, je peux nommé mes lampes avec l'éditeur de propriétés d'objets :
Je les nommes ainsi :
Cube_Lampe01
Cube_Lampe02
Cube_Lampe03
Je les ajoutes à ''LightTimeControle.nlvm'' :
Code:
import com.nolimitscoaster.*;
public class LightTimeControle extends Script
{
//Lampe et spots
private SceneObject Lampe01;[color=red]
private SceneObject Lampe02;
private SceneObject Lampe03;[/color]
private SceneObjectLight spotLight01;[color=red]
private SceneObjectLight spotLight02;
private SceneObjectLight spotLight03;[/color]
public bool onInit()
{
//Lampe et spots
Lampe01 = sim.getSceneObject("Cube_Lampe01");[color=red]
Lampe02 = sim.getSceneObject("Cube_Lampe02");
Lampe03 = sim.getSceneObject("Cube_Lampe03");[/color]
spotLight01 = Lampe01.getLightForName("Ampoule");[color=red]
spotLight02 = Lampe02.getLightForName("Ampoule");
spotLight03 = Lampe03.getLightForName("Ampoule");[/color]
return true;
}
public void onNextFrame(float fTickTime)
{
spotLight01.setEnabled(false);[color=red]
spotLight02.setEnabled(false);
spotLight03.setEnabled(false);[/color]
}
}
Si je lance le simulateur, les 3 spots sont éteints.
A présent j’ajoute une constante de temps avec un cycle qui va l'obliger a revenir à zéro toutes les 3sec. Pour vérifier, j’ajoute un message qui va lire cette constante à toutes les images.
Code:
import com.nolimitscoaster.*;
public class LightTimeControle extends Script
{
//Lampe et spots
private SceneObject Lampe01;
private SceneObject Lampe02;
private SceneObject Lampe03;
private SceneObjectLight spotLight01;
private SceneObjectLight spotLight02;
private SceneObjectLight spotLight03;
[color=red]private static float startTime = 0.0f;[/color]
public bool onInit()
{
//Lampe et spots
Lampe01 = sim.getSceneObject("Cube_Lampe01");
Lampe02 = sim.getSceneObject("Cube_Lampe02");
Lampe03 = sim.getSceneObject("Cube_Lampe03");
spotLight01 = Lampe01.getLightForName("Ampoule");
spotLight02 = Lampe02.getLightForName("Ampoule");
spotLight03 = Lampe03.getLightForName("Ampoule");
return true;
}
public void onNextFrame(float fTickTime)
{
[color=red]float cycle = 6.0f;
startTime = fTickTime;
float t = startTime % cycle;
System.out.println(t);[/color]
spotLight01.setEnabled(false);
spotLight02.setEnabled(false);
spotLight03.setEnabled(false);
}
}
Maintenant je peux donner des conditions pour que les lampes fassent ce que j'ai envie en fonction du temps.
Code:
import com.nolimitscoaster.*;
public class LightTimeControle extends Script
{
//Lampe et spots
private SceneObject Lampe01;
private SceneObject Lampe02;
private SceneObject Lampe03;
private SceneObjectLight spotLight01;
private SceneObjectLight spotLight02;
private SceneObjectLight spotLight03;
private static float startTime = 0.0f;
public bool onInit()
{
//Lampe et spots
Lampe01 = sim.getSceneObject("Cube_Lampe01");
Lampe02 = sim.getSceneObject("Cube_Lampe02");
Lampe03 = sim.getSceneObject("Cube_Lampe03");
spotLight01 = Lampe01.getLightForName("Ampoule");
spotLight02 = Lampe02.getLightForName("Ampoule");
spotLight03 = Lampe03.getLightForName("Ampoule");
return true;
}
public void onNextFrame(float fTickTime)
{
float cycle = 6.0f;
startTime = fTickTime;
float t = startTime % cycle;
System.out.println(t);
spotLight01.setEnabled(false);
spotLight02.setEnabled(false);
spotLight03.setEnabled(false);
[color=red] if (t >= 0)[/color]
[color=red]{[/color]
[color=red]if (t >= 1)[/color]spotLight01.setEnabled(true);
[color=red] }
{[/color]
[color=red]if (t >= 3)[/color]spotLight02.setEnabled(true);
[color=red]}
{[/color]
[color=red]if (t >= 5)[/color]spotLight03.setEnabled(true);
}
}
}
Comme cela, elles vont s'allumer une après l'autre et s'éteindre toutes au bout de 6 sec.
On peut faire un chenillard sur 3 secondes:
import com.nolimitscoaster.*;
Code:
public class LightTimeControle extends Script
{
//Lampe et spots
private SceneObject Lampe01;
private SceneObject Lampe02;
private SceneObject Lampe03;
private SceneObjectLight spotLight01;
private SceneObjectLight spotLight02;
private SceneObjectLight spotLight03;
private static float startTime = 0.0f;
public bool onInit()
{
//Lampe et spots
Lampe01 = sim.getSceneObject("Cube_Lampe01");
Lampe02 = sim.getSceneObject("Cube_Lampe02");
Lampe03 = sim.getSceneObject("Cube_Lampe03");
spotLight01 = Lampe01.getLightForName("Ampoule");
spotLight02 = Lampe02.getLightForName("Ampoule");
spotLight03 = Lampe03.getLightForName("Ampoule");
return true;
}
public void onNextFrame(float fTickTime)
{
float cycle = [color=red][color=blue]3.0f;[/color][/color]
startTime = fTickTime;
float t = startTime % cycle;
System.out.println(t);
spotLight01.setEnabled(false);
spotLight02.setEnabled(false);
spotLight03.setEnabled(false);
if (t >= 0 && t <= 1)
{
spotLight01.setEnabled(true);
}
if (t >= 1 && t <= 2)
{
spotLight02.setEnabled(true);
}
if (t >= 2 && t <= 3)
{
spotLight03.setEnabled(true);
}
}
}
LE PARC http://dawaweb.ch/NoLimits2/Light_time/Light_time.zip