Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

[ROZWIĄZANE] Odległość punktu od najbliższej ściany


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 23.02.2013 08:47

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
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ć?

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 23.02.2013 09:05

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
  • +
  • -
  • 2

#3 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 23.02.2013 21:59


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 );
}

  • +
  • -
  • 2

marwit-0.png


#4 Gość_21977_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 02.03.2013 22:32

Dzięki wielkie, stock działa dokładnie tak, jak chciałem.

#5 Gość_21977_*

  • Autor tematu
  • Gość

Reputacja: 0

Offline

Napisano 02.03.2013 22:32

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych