intelligente Tür

Posted By: TTKJonas

intelligente Tür - 06/04/07 18:18

Hallo,

Ich möchte gerne ein Türscript erstellen, das ein paar ganz spezielle Anforderungen hat
Ich versuche es mal zu erklären:

Alle Türen in meinem Level öffnen sich selbtständig, sobald sich der Spieler nähert. Nun öffnen sich die Türen bei meinem jetzigen Script aber immer in die selbe Richtung, jenachdem wie sie gedreht sind. Das führte dazu, das sich die Tür manchmal durch den Spieler bewegte. Das habe ich dann dadurch gelöst, das sich die Tür entwerder schon sehr früh, oder relativ schnell öffnet.
Das ist aber in vielen Fällen keine besonders gute Lösung.
Deswegen möchte ich mein Türscript nun nochmal überarbeiten.
Allerdings fehlt mir noch der passende Ansatz, wie ich so ein Script anfangen soll.

Das neue Script soll folgendes können:

Wenn sich der Spieler der Tür nähert, soll die Tür selbstständig erkennen aus welcher Richtung der Spieler kommt und sich dann in die entgegengesetze Richtung öffnen. Knackpunkt ist hierbei, das es egal sein sollte wie die Tür im Level gedreht ist (sie steht natürlich immer aufrecht).

Um das besser zu veranschaulichen, hab ich ein Bild gezeichnet:


Hat jemand eine Idee wie das Script dafür aussehen könnte?

Gruß
Jonas
Posted By: Germanunkol

Re: intelligente Tür - 06/04/07 19:05

also, scripten würd länger dauern, das kann ich dir grad nicht. Die erste idee die mir kommt ist:

wenn er in reichweite kommt (hast du schon, das kannst du so lassen wie's ist) dann:
var approach_angle[3];
vec_diff(temp,player.x,tür.x);
vec_to_angle(approach_angle,tür);

Jetzt hast du in approach_angle.pan den pan aus dem der spieler kommt. den vergleichst du mit dem tür.pan. wenn das eine minus das andere etwas bestimmes gibt, dann drehst du nach links, ansonsten nach rechts....?

versuch das mal. für "etwas bestimmtes" musst du rumprobieren... weis grad nicht, kommt drauf an welches du von welchem abziehst und so...

weist du was ich meine?

viel glück!
Micha
Posted By: Scorpion

Re: intelligente Tür - 06/04/07 19:21

ich würde das so lösen:
erst gucks du wie gewohn, ob der spieler in reichweite ist, wenn ja nimmst du 2 punkte die relativ zur tür sind und bestimmst welcher näher ist...:

z.b.:
Code:
action door
{
var standart_rotation[3];
vec_set(standart_rotation,my.pan);
while(1)
{
if(vec_dist(my.x,player.x)<300)
{
vec_set(temp,vector(0,20,0));
vec_rotate(temp,standart_rotation);
vec_add(temp,my.x);

vec_set(target,vector(0,-20,0));//abuse target-vector
vec_rotate(target,standart_rotation);
vec_add(target,my.x);
if(vec_dist(temp,player.x)<vec_dist(target,player.x))
{
while(abs(my.pan-standart_rotation.pan)<90)
{
my.pan+=5*time_step;
wait(1);
}
}
else
{
while(abs(my.pan-standart_rotation.pan)<90)
{
my.pan-=5*time_step;
wait(1);
}
}
while(vec_dist(my.x,player.x)<400){wait(1);}
if(my.pan>standart_rotation.pan)
{
while(abs(my.pan-standart_rotation.pan)<2)
{
my.pan-=5*time_step;
wait(1);
}
}
else
{
while(abs(my.pan-standart_rotation.pan)<2)
{
my.pan+=5*time_step;
wait(1);
}
}
my.pan = standart_rotation.pan;
}
wait(1);
}
}



PS: wouldn't it be easy when that forum would support highlighting...?
Posted By: fogman

Re: intelligente Tür - 06/05/07 07:51

Noch eine Methode:



Die Türen könnten zwei Scankegel (grün im Bild) in jede Richtung werfen. Wenn der Spieler dann erfasst wird weißt Du von wo er kommt.
Ich denke es reicht, wenn Du alle 0.3 Sekunden scannst.
Posted By: TTKJonas

Re: intelligente Tür - 06/05/07 18:21

Hallo!

Vielen, vielen Dank für Eure Hilfe!

Ich habe das Script von Scorpion genommen. Es funktioniert ausgezeichnet. Ich musste nur noch ein paar Werte vertauschen, da sich die Tür in die falsche Richtung geöffnet und abrupt wieder geschlossen hat.

Das Script sieht nun so aus:

Code:
action door
{
wait(1);
var standart_rotation[3];
vec_set(standart_rotation,my.pan);
while(1)
{
if(vec_dist(my.x,player.x)<250)
{
vec_set(temp,vector(0,20,0));
vec_rotate(temp,standart_rotation);
vec_add(temp,my.x);

vec_set(target,vector(0,-20,0));
vec_rotate(target,standart_rotation);
vec_add(target,my.x);
if(vec_dist(temp,player.x)<vec_dist(target,player.x))
{
while(abs(my.pan-standart_rotation.pan)<95)
{
my.pan-=7*time_step;
wait(1);
}
}
else
{
while(abs(my.pan-standart_rotation.pan)<95)
{
my.pan+=7*time_step;
wait(1);
}
}
while(vec_dist(my.x,player.x)<300){wait(1);}
if(my.pan>standart_rotation.pan)
{
while(abs(my.pan-standart_rotation.pan)>2)
{
my.pan-=7*time_step;
wait(1);
}
}
else
{
while(abs(my.pan-standart_rotation.pan)>2)
{
my.pan+=7*time_step;
wait(1);
}
}

my.pan = standart_rotation.pan;
}
wait(1);
}
}


Vielen Dank nochmal für Eure Hilfe!

Gruß
Jonas
Posted By: Scorpion

Re: intelligente Tür - 06/05/07 19:16

naja...ich habs ja auch net getestet
schön dass es funzt
© 2023 lite-C Forums