Sonntag, 13. Mai 2012

die Gegnerchen, die Dummerchen

die Gegner sehen - endlich - Hindernisse in ihrer Umgebung und können ihnen ausweichen.
Wochen saßen wir vor dem Problem und hatte mehrere komplizierte Versuche mit Knoten und Pathfinding, mit 6 versch. Bacon um jeden Gegner, die die Umgebung abscannen, oder 6 versch. Bacon um den Spieler, die als Anlaufstelle für Nahkampfgegner dienten, ....

.... am Ende war es die simpelste Idee, die den Erfolg brachte:
2 kleine Positionen neben jedem Gegner, die vom Gegner angetraced wurden. Liegt was dazwischen, dreht er sich weg - das ist alles. Schon rennen die Gegner schön um Hindernisse und positionieren sich damit total selbständig um den Spieler
function gegner_checkt_Umwelt()
{
    VECTOR content_left;
    VECTOR content_right;
    int content_range = 120;

    vec_set(content_left.x, vector(content_range, -content_range/2, 20));
    vec_rotate(content_left.x, vector(my.pan,0,0));
    vec_add(content_left.x, my.x);
    draw_point3d(content_left, vector(0,0,255), 100, 10); // debugzwecke

    vec_set(content_right.x, vector(content_range, content_range/2, 20));
    vec_rotate(content_right.x, vector(my.pan,0,0));
    vec_add(content_right.x, my.x);
    draw_point3d(content_right, vector(0,0,255), 100, 10); // debugzwecke
   
    if( c_trace(my.x, content_left.x,  IGNORE_ME | IGNORE_PASSABLE) > 0)
        my.pan += 5 * time_step;
    if(c_trace(my.x, content_right.x, IGNORE_ME | IGNORE_PASSABLE) > 0)
        my.pan -= 5 * time_step;
   
    if((c_trace(my.x,content_left.x,  IGNORE_ME | IGNORE_PASSABLE) + c_trace(my.x,content_right.x, IGNORE_ME | IGNORE_PASSABLE)) <= 0)
    {
        you = enet_ent_locpointer(my.ziel_pointer); // wenn nichts dazwischen, dreh dich zum Ziel
        VECTOR vTarget_Angle;
        vec_to_angle(vTarget_Angle, vec_sub(vec_set(temp, you.x),my.x));
        var diff = ang(vTarget_Angle.x - my.pan + 360);
        my.pan += diff * 0.125 * time_step;
    }
}
...manchmal ist die einfachste Lösung die beste!

Keine Kommentare:

Kommentar veröffentlichen