frage zu vec_to_angle...

Posted By: Ascalon

frage zu vec_to_angle... - 10/13/06 20:43

ich habe mehrere bäume in meinem level und ich möchte dass sich eine entity, z.b ein holzfäller, sich auf einn der bäume ausrichtet und darauf zugeht.
ich benutze dafür vec_to_angle. ich versteh jetzt aber nicht ganz, auf welchen baum er sich jetzt gerade ausrichtet, weil der am nahestehenste baum ist es nicht.
wie kann ich es so scripten, dass er sich dem nahestehensten baum zuwendet ?
Posted By: Error014

Re: frage zu vec_to_angle... - 10/13/06 21:19

vec_to_angle konvertiert lediglich einen Richtungsvektor in eine passende Eulerwinkelkombination für Acknex um. Mit anderen Worten, du brauchst erstmal den richtigen Richtungsvektor.

(Wenn du nicht weißt, was Vektoren sind, dann solltest du dir das Wissen dazu schleunigst aneignen - aber keine Angst, so schwierig ist das nicht, ein bisschen was darüber steht in meinem beitrag hier: http://www.coniserver.net/ubbthreads/sho...1164bd48e7ded56 !)


Die nächste Baumposition kannst du auf viele Arten bestimmen: die beiden besten sind sicherlich ein Scan (siehe: c_scan) oder aber das durchsuchen der entityliste nach dem nächsten Baum.

C_scan: Dafür musst du vom Holzfäller bei der Suche nach Bäumen eben einmal "scannen", zum beispiel, indem du folgende Zeile in die Holzfälleraction schreibst - ist direkt aus dem handbuch kopiert!

Code:
c_scan(my.x,my.pan,vector(360,0,200),SCAN_ENT | SCAN_LIMIT | IGNORE_ME);



Diese Zeile geht von der Position der "my"-Entity aus (in deinem Fall der Holzfäller) und scant in einem Kugelsegment um sich herum, sucht praktisch alle Entities mit einem Abstand < 200 ab (je nach level musst du die zahl verändern). Mithilfe des ausgelösten Events bei den Bäumen (wenn gesetzt) kannst du dann arbeiten, oder mit der you-entity, die nach der anweisung auf die nächste gefundene entity zeigt. aber vorsicht: das muss nicht unbedingt ein baum sein

---

zweite möglichkeit: manuelles absuchen der bäume

dazu setze in der baumaction einen bestimmten skill auf einen bestimmten wert, so dass wir wissen, das wir es mit einer baumentity zu tun haben

Code:

my.skill99 = 3; //baum



dann musst du beim holzfäller eben nur nach der nächsten baumentity suchen, dafür nötig sind ein paar variablen, die du definieren musst...

Code:

var min_abstand=999999;



definiere bitte auch noch einen weiteren pointer außerhalb der funktion/action (darüber)

Code:

entity* tmp_ptr;



Dann kannst du das hier zum suchen nutzen:

Code:

min_abstand=999999;
temp_ptr=null;
you=ent_next(null);
WHILE(you!=null) {
IF(your.skill99==3) { //baum?
IF(vec_dist(your.x,my.x)<min_abstand) {
min_abstand = vec_dist(your.x,my.x);
temp_ptr=you;
}
}
you=ent_next(you); //gehe alle entities durch
}
you=temp_ptr; //eigtl nicht nötig
//Jetzt zeigt you oder temp_ptr auf die nächste baumentity, min_abstand enthält den abstand zu ihr




Soweit alles klar?

--------

Damit erhälst du also die Entity, die am nächsten gelegen ist. Wenn das nun zb die you-entity ist, erhälst du ganz einfach den richtungsvektor durch subtraktion der beiden positionsvektoren:

Code:

vec_set(temp,your.x);
vec_sub(temp,my.x);
//hol die winkel
vec_to_angle(my.pan,temp);



geht natürlich auch mit jeder anderen position - in diesem beispiel war es eben nur your.x

Evtl willst du nur pan setzen, dann musst du danach noch my.tilt=0; schreiben.



Das wars auch schon. Wie du siehst war dein Problem eher eine Frage der nächsten Entity als vec_to_angle
Posted By: Ascalon

Re: frage zu vec_to_angle... - 10/13/06 21:58

he ! vielen dank ! habs mit der zweiten methode probiert und es funktioniert.
hab den ganzen code zwar noch nicht so ganz durchschaut, aber es geht.
jetzt hab ich aber noch ein problem:
wenn ich jetzt bei dem baum angelangt bin, dann möcht ich ihn mit ent_remove(temp_ptr) löschen, danach soll er zum nächsten baum sozusagen weiter, aber dann bekomm ich ein empty_pointer fehler. wie löse ich das jetzt ?


ok, habs schon gelöst, hab deinen code nur in der falschen schleife gehabt, aber vielen dank nochmal für deine hilfe !!
© 2023 lite-C Forums