[SourceMod] 클라이언트와 가장 가까운 사람 찾기

Posted by subkarsei2
2015. 1. 22. 10:48 Info/Tips/Programming

예전 2012년도 중반쯤에 SVN으로 소스모드를 이용하여 팀 프로젝트 공동 개발을 하면서 만들었던 코드입니다.


솔직히, 이 방법보다는 좀 더 효율적이고 좋은 방법이 있을 것 같지만 이렇게라도 만들어 보았네요.



/**

 * 레이더 모듈 :: 가장 가까운 사람 찾기

 *

 * @param client                 클라이언트 인덱스

 * @param range                 찾으려는 범위

 * @param targetdist            대상과의 거리 (copyback)

 * @return 대상 인덱스

 */

FindClosestTarget(client, Float:range, &Float:targetdist=0.0)

{

        new target;

        new Float:clientpos[3], Float:targetpos[3];

        

        GetClientAbsOrigin(client, clientpos); 

        

        // 모든 사람들과의 거리를 측정

        for (new i = 1; i <= MaxClients; i++)

        {

                if (client == i)  continue;

                if (!IsClientInGame(i))  continue;

                if (!IsPlayerAlive(i))  continue;

                

                GetClientAbsOrigin(i, targetpos);

                

                new Float:dist = GetVectorDistance(clientpos, targetpos);

                

                // 측정한 거리가 만약 설정한 range 보다 낮거나 같으면 체크

                if (dist <= range)

                {

                        if (targetdist == 0.0)

                        {

                                targetdist = dist;

                                target = i;

                        }

                        else

                        {

                                if (targetdist > dist)

                                {

                                        targetdist = dist;

                                        target = i;

                                }

                        }

                }

        }

        

        if (targetdist == 0.0)

                return -1;

        

        return target;

}