Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "../../main.h"
- namespace a
- {
- vector get_hitbox_pos(c_baseentity* target, int id)
- {
- matrix3x4_t matrix[MAXSTUDIOBONES];
- if (target->setup_bones(matrix, MAXSTUDIOBONES, BONE_USED_BY_HITBOX, i::globals->curtime)) {
- if (target->get_model() != nullptr) {
- studiohdr_t* hdr = i::modelinfo->get_studio_model(target->get_model());
- if (hdr != nullptr) {
- mstudiohitboxset_t* set = hdr->get_hitbox_set(0);
- mstudiobbox_t* hitbox = set->get_hitbox(id);
- if (hitbox) {
- vector min, max, center;
- u::vector_transform(hitbox->bbmin, matrix[hitbox->bone], min);
- u::vector_transform(hitbox->bbmax, matrix[hitbox->bone], max);
- center = (min + max) * 0.5;
- return center;
- }
- }
- }
- }
- return vector(0, 0, 0);
- }
- bool is_visible(c_baseentity* ent, vector start, vector end)
- {
- trace_t trace;
- ray_t ray;
- trace_filter filter(g::local);
- ray.init(start, end);
- i::enginetrace->trace_ray(ray, MASK_SHOT, &filter, &trace);
- return (trace.ent == ent || trace.fraction >= 0.99f);
- }
- bool is_visible_length(c_baseentity* ent, vector start, vector end)
- {
- trace_t trace;
- ray_t ray;
- trace_filter filter(g::local);
- vector start_pos, end_bone, end_pos[3];
- start_pos = start;
- end_bone = end;
- if (is_visible(ent, start, end)) return true;
- ray.init(start, end);
- i::enginetrace->trace_ray(ray, MASK_SHOT, &filter, &trace);
- end_pos[0] = trace.end_pos;
- ray.init(end_bone, start_pos);
- filter.skip = ent;
- i::enginetrace->trace_ray(ray, MASK_SHOT, &filter, &trace);
- end_pos[1] = trace.end_pos;
- vector_subtract(end_pos[0], end_pos[1], end_pos[2]);
- float length = end_pos[2].length();
- if (trace.fraction != 0)
- if (length < 13)
- return true;
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment