Prüfen ob etwas im View liegt

Posted By: TTKJonas

Prüfen ob etwas im View liegt - 05/20/07 10:14

Hallo,

Ich habe folgendes Problem.
In meinem Level gibt es viele Partikelfeuer die zusätzlich dynamisches Licht ausstrahlen. Nun kann 3dgs A6 ja leider nur maximal 8 dynamische Lichter gleichzeitig anzeigen.
Mein Script dafür sieht so aus:

action fire
{
my.passable = on;
my.invisible = on;
my.lightrange=0;
while(1)
{
wait(1);
if(vec_dist(my.x,player.x) < 1500)
{
effect(flame_1,3,my.x,nullvector);
my.lightrange=200;
my.red=120;
my.green=50;
my.blue=0;
wait(1);
}
else
{
my.lightrange=0;
}
wait(1);
}
wait(1);
}

Wenn sich nun das Feuer im Bereich 1500 Quants um den Spieler befindet, leuchtet es auf.
Leider aber auch wenn sich das Feuer gar nicht im Sichtbereich des Spielers/ der Kamera befindet, wodurch von den maximal 8 dynamischen Lichtern noch einige verloren gehen und oftmals Fackeln im Sichtbereich des Spieles gar kein Licht mehr ausstrahlen.

Jetzt ist meine Frage, ob man irgendwie Scripten kann, das die Fackeln nur angehen wenn sie 1500 Quants vom Spieler entfernt UND im Sichtfeld des Views liegen.

Gruß
Jonas
Posted By: Xarthor

Re: Prüfen ob etwas im View liegt - 05/20/07 10:17

if(vec_dist(my.x,player.x) < 1500 && vec_to_screen(my.x,camera))

oder:
if(vec_dist(my.x,player.x) < 1500 && my.clipped != on)
Posted By: TTKJonas

Re: Prüfen ob etwas im View liegt - 05/20/07 10:32

Vielen Dank für die schnelle Antwort!

Es funktioniert, allerding musste ich das Script noch ein klein wenig verändern.

...
vec_set(temp,my.x);
if(vec_dist(my.x,player.x) < 1500 && vec_to_screen(temp,camera))
...

Gruß
Jonas
Posted By: Xarthor

Re: Prüfen ob etwas im View liegt - 05/20/07 10:33

Dann würde ich eher zur zweiten methode "my.clipped != on"
greifen.
Posted By: TTKJonas

Re: Prüfen ob etwas im View liegt - 05/20/07 10:39

Die zweite Methode hat nicht funktioniert. Das Feuer und das Licht gingen nicht an.
Posted By: TTKJonas

Re: Prüfen ob etwas im View liegt - 05/20/07 10:51

Da das Licht nun sehr abrupt ausging wenn es die Kante des Bildschirm berührte obwohl man den Lichtschein noch gesehen hat, hab ich das Script nun so umgeschrieben:

action fire
{
my.passable = on;
my.invisible = on;
my.lightrange=0;
while(1)
{
wait(1);
vec_set(temp,my.x);
if(vec_dist(my.x,player.x) < 1500 && vec_to_screen(temp,camera))
{
effect(flame_1,3,my.x,nullvector);
my.lightrange=200;
my.red=120;
my.green=50;
my.blue=0;
wait(1);
}
else
{
if(my.lightrange==200)
{
sleep(0.5);
while(my.lightrange>0)
{
my.lightrange-=10*Time;
wait(1);
}
}
}
wait(1);
}
wait(1);
}

Nachdem es außerhalb des Views kommt, wird 0,5 Sekunden gewartet und dann wird das Licht langsam heruntergedreht als ob es langsam ausginge.

Gruß
Jonas
© 2023 lite-C Forums