Ale wałek pisałem nawet duzo rzeczy juz i nagle komputer mi sie zresetowal i walek ale pisze od nowa, jak chcoaiz nie wiesz o co chodzi to i tak to co teraz napisze moze ci sie przydac w przyszlosci:

Problem polega na tym ze nie umie tego zastosowac do weicej niz jednej sciany bo dla jednej sciany wszystko dziala
Metoda kolizj dla jednej ściany:
Wiec tak-> Wektor normalny to wektor prostopadły do ściany, którą testujemy
Zeby sprawdzić kolizje z jedna ściana trzeba wykonać nastepujace czynności:
Sprawdzamy czy sciana jest dostatecznie blisko (odległość wektor_normalny*szerokość)
jak jest za blisko to wtedy trzeba uzyc metody śledzenia promieniem czyli przeprowadzic odpowiednio dlugoa linie od pozycji gracza o odwroconym wektorze normalnym pomnożonym razy szerokośc i jeszcze razy np. 10 i trzeba sprawdzic czy ta linia przecina jak przecian trzeba przesunac gracza od ściany, o kierunku wektora normalnego (trzeba go przesunac o szerokość razy wektor normalny) a wczesniej sprawdzic czy promien przebija sicane. Pozniej trzeba rozlozyc wektor na prostopadly i rownolegly do sciany (ten wektor ktory rozkladamy to wektor, o ktory chemy przesunac gracza) cholera szkoda ze teraz pisze jakos tak nie wyraznie i zle ujmuje technike ale tamto co napsialem nie wroci i mam nadzieje ze znowu mi sie komputer nie wylaczy. Po tym wszystkim przesuwamy gracza o wektor rownolegly do sciany i tyle wszystko dziala podsumujmy to:

Sprawdzenie czy siana jest za blisko gracza > jak tak to:
Tworzymy promien -wektor_normalnyszerokosc10 i sprawdzamy czy przecina ona sciane jak tak>
przesuwamy gracza od punktu, w kotrym przecina sie ze sciana prostopadle w kierunku zwrotu wektora (o wektor_normlany*szerokosc) i pozniej jest rozklad na rownolegly wketor, o ktorey przesuwamy w koncu gracza.

//to podaje wektor, ktory jest rownolegly do sciany i odpowiednio wielki (czyli ten o ktory mamy przesunac gracza)
//wywyolywac tylko jak nastapila kolizja
function collision_packet(wektor_przesuniecia : t3dpoint;   facenormal : t3dpoint) : t3dpoint;
var
wypadkowat : t3dpoint;
ROZKLAD_I : single;
begin


ROZKLAD_I := iloczynskalarny3d(facenormal,wektor_przesuniecia);
wypadkowat := dotproduct(ROZKLAD_I,facenormal);


result.x := wektor_przesuniecia.x-wypadkowat.x;
result.y := wektor_przesuniecia.y-wypadkowat.y;
result.z := wektor_przesuniecia.z-wypadkowat.z;


end;