Hallo liebe Entwickler,
ich habe ein kleines Problem mit dem vergrößern der Bounding-Box.

Folgende Situation gibt es: ich möchte die BBox von meinem Player wenn er von der Animation "stand" oder "walk" auf "attack" wechselt, vergrößern. Dazu benutze ich den C-Lite Befehl "c_updatehull". Soweit auch kein Problem, die BBox wird problemlos vergrößert.

Im Handbuch gibt es bei "c_updatehull" jedoch den folgenden berechtigten Hinweis:

Quote:
... c_updatehull prüft keine Überschneidungen. Deswegen müssen Sie sichergehen, dass beim Vergrößern der Bounding-Box genug Platz vorhanden ist. ...


Genau jetzt kommen wir zu meinem Problem, bzw. zu meinem Anliegen.

Ich habe mir jetzt mal 3 von meinen erfolgversprechendsten Ideen herausgesucht und zeige warum keine davon richtig, bzw. nur unzureichend funktioniert.


Idee 1
Ich vergrößere die BBox des Players zum testen für 1-2 Frames und überprüfe mit EVENT_BLOCK und EVENT_ENTITY ob ein Hindernis im Weg ist.

Problem
Wenn die BBox beim vergrößern bereits durch eine Wand oder in ein anderes Model ragt, nimmt EVENT_BLOCK und EVENT_ENTITY das leider nicht wahr. Deshalb würde die BBox dann fälschlicherweise auf die "attack" Animation vergrößert werden.


Idee 2
Ich erstelle in dem Player eine Box (Model) als "Sensor" und wenn die BBox vergrößert werden soll, schiebt sich der "Sensor" mit c_move bis zu den Grenzen der BBox, die sie bei der "attack" Animation hätte. Durch EVENT_BLOCK und EVENT_ENTITY könnte wieder geprüft werden, ob kein Hindernis vorhanden ist.


Problem
Der Player müsste den "you" Pointer bekommen, damit der Sensor bei c_move den Player ignoriert. Jetzt wäre aber das Problem, wenn ein Gegner mit einer c_trace Waffe auf den Player schießen würde, der Strahl von c_trace an der Box, bzw. "Sensor" enden würde. Ich kann das "IGNORE_YOU" Flag ja nicht setzen, da der Player den Pointer "you" leider schon besitzt und nicht der "Sensor".


Idee 3
Mit c_trace könnte man einen Strahl in die Blickrichtung des Players schicken und schauen ob eine Wand in der Nähe ist und dazu noch c_scan benutzen um mögliche Entitys zu orten.

Problem
Mit 1x c_trace könnte nur eine Wand mit einer gewissen Höhe erkannt werden, d.h. ist z.B. eine Theke oder sonstiges, was nicht so hoch ist im weg, würde ein c_trace das nicht erkennen (sinngemäß auch für Wände von oben nach unten, z.B. ein Eingang einer Höhle). Ein weiteres Problem von c_scan wäre, dass es nicht von der Kollisionshülle eines anderen Entitys ausgeht, sondern vom Urspruch des Objektes. Bei größeren Objekten würde das System leider nicht zu 100% funktionieren.



Meine Vorschläge wären:

- c_scan könnte auch Wände erfassen und man könnte sich aussuchen ob man vom Ursprung des Objektes geht, oder von der Kollisionshülle

- man könnte bei c_move und c_trace neben "IGNORE_ME" und "IGNORE_YOU" ein weiteres Flag einfügen mit z.B. "IGNORE_PLAYER"


Jedenfalls bin ich im Moment ratlos und weiß keine Lösung für mein, so dachte ich zumindest, einfaches Problem. wink


Gruß
Alex =)