|
发表于 2009-8-8 11:32:36
|
显示全部楼层
来自 中国–北京–北京–朝阳区
- stock bool:fm_is_in_viewcone(index, const Float:point[3]) {
- new Float:angles[3];
- pev(index, pev_angles, angles);
- engfunc(EngFunc_MakeVectors, angles);
- global_get(glb_v_forward, angles);
- angles[2] = 0.0;
- new Float:origin[3], Float:diff[3], Float:norm[3];
- pev(index, pev_origin, origin);
- xs_vec_sub(point, origin, diff);
- diff[2] = 0.0;
- xs_vec_normalize(diff, norm);
- new Float:dot, Float:fov;
- dot = xs_vec_dot(norm, angles);
- pev(index, pev_fov, fov);
- if (dot >= floatcos(fov * M_PI / 360))
- return true;
- return false;
- }
- stock bool:fm_is_visible(index, const Float:point[3], ignoremonsters = 0) {
- new Float:start[3], Float:view_ofs[3];
- pev(index, pev_origin, start);
- pev(index, pev_view_ofs, view_ofs);
- xs_vec_add(start, view_ofs, start);
- engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0);
- new Float:fraction;
- get_tr2(0, TR_flFraction, fraction);
- if (fraction == 1.0)
- return true;
- return false;
- }
复制代码 这两个函数是从hlsdk里找出来的,第一个是判断给定坐标是否在id的视锥里,第二个是判断id能否看到给定坐标。
要判断B在A身后,你可以先判断A的坐标在B的视锥里且B的坐标不在A的视锥里且B能看到A的坐标,另外可以加入距离作为附加参考 |
|