Skocz do zawartości
BlacKly

[Rozwiązane] Detekcja kolizji klienta ze ścianą

Rekomendowane odpowiedzi

Napisano (edytowane)

Witam.

 

Mój kod wygląda w ten sposób: 

public bool IsClientColideWithWall(int client){
    float pos[3];
    GetClientEyePosition(client, pos);

    float angles[3];
    float endPos[3];
    float distance;

    Handle trace;

    bool nearWall = false;

    for(int angle = 0; angle < 360; angle+= 30){
        angles[0] = 0.0;
        angles[1] = float(angle);
        angles[2] = 0.0;

        trace = TR_TraceRayFilterEx(pos, angles, MASK_SOLID, RayType_Infinite, TraceFilter, client);

        if(TR_DidHit(trace)){
            TR_GetEndPosition(endPos, trace);

            distance = GetVectorDistance(endPos, pos, true);

            if(distance < 5)
                nearWall = true;
        }

        CloseHandle(trace);
    }
    return nearWall;
}

public bool TraceFilter(int entity, int mask, any data) {
    if(entity == data)
        return false;
    return true;
}

 

Powyższy kod cały czas zwraca FALSE.

Po usunięciu TraceFilter i zmianie TR_TraceRayFilterEx na TR_TraceRayEx kod zaczął cały czas zwracać TRUE.

 

Kod ma zwracać TRUE tylko wtedy gdy klient dotyka ściany,

Edytowane przez BlacKly

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
public bool IsClientColideWithWall(int client){
    float pos[3];
    GetClientAbsOrigin(client, pos);
    pos[2] += 25;

    float min[3];
    GetClientMins(client, min);

    float max[3];
    GetClientMaxs(client, max);

    min[0] -= 10;
    min[1] -= 10;

    max[0] += 10;
    max[1] += 10;

    Handle trace = TR_TraceHullFilterEx(pos, pos, min, max, MASK_SOLID, TraceFilter, client);

    if(TR_DidHit(trace))
        return true;
    
    CloseHandle(trace);
    return false;
}

public bool TraceFilter(int entity, int mask, any data){
    if(entity == data)
        return false;
    return true;
}

Powyższy kod działa dobrze. Do zamknięcia

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...