示例#1
0
    //pObject中心对象, excludePlayerOther是否排除玩家
    public CObject GetNearestTargetByOrigin(CObject pObject, float fMaxDistance, bool excludePlayerOther)
    {
        float   fNearestDist   = fMaxDistance;
        CObject pNearestTarget = null;
        CObject pOriginObject  = (CObject)pObject;
        Vector2 fvOrigin       = new Vector2(pOriginObject.GetPosition().x, pOriginObject.GetPosition().z);

        foreach (int k in mServerObjects.Keys)
        {
            CObject pObj = mServerObjects[k];

            //不再查找自身
            if (pObj == pOriginObject)
            {
                continue;
            }

            if (CObjectManager.Instance.getPlayerMySelf().IsMyPet(pObj.ServerID))
            {
                continue;
            }

            //非角色
            if (!(pObj is CObject_Character))
            {
                continue;
            }
            if (excludePlayerOther)
            {
                if (pObj is CObject_PlayerOther)
                {
                    continue;
                }
            }
            //友好阵营
            CObject_Character pChar = (CObject_Character)pObj;
            if (ENUM_RELATION.RELATION_ENEMY != GameProcedure.s_pGameInterface.GetCampType(
                    getPlayerMySelf(), pChar))
            {
                continue;
            }

            //死亡
            if (ENUM_CHARACTER_LOGIC.CHARACTER_LOGIC_DEAD == pChar.CharacterLogic_Get())
            {
                continue;
            }


            //距离太远
            Vector2 vec       = fvOrigin - new  Vector2(pObj.GetPosition().x, pObj.GetPosition().z);
            float   fDistance = vec.magnitude;

            if (fDistance >= fNearestDist)
            {
                continue;
            }

            pNearestTarget = pObj;
            fNearestDist   = fDistance;
        }
        return(pNearestTarget);
    }