[ROZWIĄZANE] Odległość punktu od najbliższ...
Gość_21977_* 23.02.2013
Jak można sprawdzić, jaka jest odległość punktu do najbliższej ściany?
Albo jak sprawdzić, czy sześcian o podanych wierzchołkach zawiera się w ścianie?
Docelowo, chcę przerobić Generator losowych spawnów, gdyż zdarza się, że losowane są
miejsca bardzo blisko ściany, przez co późniejszy box o wymiarach 50×50 jest częściowo w ścianie.
Próbowałem sprawdzić typ przestrzeni dla pobliskich punktów, lecz funkcja nie działa prawidłowo
Męczę się z tym i nie mogę znaleźć żadnych informacji, jak wykryć ścianę, może ktoś z Was wie, jak tego dokonać?
Albo jak sprawdzić, czy sześcian o podanych wierzchołkach zawiera się w ścianie?
Docelowo, chcę przerobić Generator losowych spawnów, gdyż zdarza się, że losowane są
miejsca bardzo blisko ściany, przez co późniejszy box o wymiarach 50×50 jest częściowo w ścianie.
Próbowałem sprawdzić typ przestrzeni dla pobliskich punktów, lecz funkcja nie działa prawidłowo
stock wallCollision(Float:point[3]){
new Float:vec_add[10][3]={
{-50.0, -50.0, 50.0},
{-50.0, 0.0, 50.0},
{-50.0, 50.0, 50.0},
{0.0, -50.0, 50.0},
{0.0, 0.0, 0.0},
{0.0, 0.0, 50.0},
{0.0, 50.0, 50.0},
{50.0, -50.0, 50.0},
{50.0, 0.0, 50.0},
{50.0, 50.0, 50.0}
};
for(new i, i<10; ++i){
new Float:vec[3];
for(new j, j<3; ++j){
vec[j]=point[j]+vec_add[i][j];
}
if(engfunc(EngFunc_PointContents, data)==CONTENTS_EMPTY){
continue;
}
break;
}
return (i==10);
}
Męczę się z tym i nie mogę znaleźć żadnych informacji, jak wykryć ścianę, może ktoś z Was wie, jak tego dokonać?
DarkGL
23.02.2013
Zamiast szukać odległości od najbliższej ściany możesz zrobić kilka traceline z punktów skrajnych i sprawdzac czy cały obszar traceline był pusty jednak jeżeli jest to obszar przeznaczony specjalnie dla gracza to możesz użyć tracehull
MarWit
23.02.2013
stock findNearestWall( Float: fOrigin[ 3 ], Float: fReturn[ 3 ] )
{
new iTR = 0;
new Float: fDistance = 9999.0;
new Float: fEnd[ 3 ], Float: fDirection[ 3 ];
for( new Float: i = -180.0; i < 180.0; i += 10.0 )
{
fDirection[ 0 ] = 0.0; fDirection[ 1 ] = i; fDirection[ 2 ] = 0.0;
angle_vector( fDirection, 1, fDirection );
fDirection[ 0 ] *= 9999.0; fDirection[ 1 ] *= 9999.0;
engfunc( EngFunc_TraceLine, fOrigin, fDirection, IGNORE_MONSTERS, 0, iTR );
get_tr2( iTR, TR_vecEndPos, fEnd );
free_tr2( iTR );
if( vector_distance( fOrigin, fEnd ) < fDistance )
{
fReturn[ 0 ] = fEnd[ 0 ]; fReturn[ 1 ] = fEnd[ 1 ]; fReturn[ 2 ] = fEnd[ 2 ];
fDistance = vector_distance( fOrigin, fEnd );
}
}
return floatround( fDistance );
}
Gość_21977_* 02.03.2013
Wiadomość wygenerowana automatycznie
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL