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:
... 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 1Ich 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.
ProblemWenn 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 2Ich 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.
ProblemDer 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 3Mit 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.
ProblemMit 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.
