Guest User

hound

a guest
Nov 18th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #include "../../main.h"
  2.  
  3.  
  4. namespace a
  5. {
  6.  
  7. vector get_hitbox_pos(c_baseentity* target, int id)
  8. {
  9.  
  10. matrix3x4_t matrix[MAXSTUDIOBONES];
  11.  
  12. if (target->setup_bones(matrix, MAXSTUDIOBONES, BONE_USED_BY_HITBOX, i::globals->curtime)) {
  13.  
  14. if (target->get_model() != nullptr) {
  15.  
  16. studiohdr_t* hdr = i::modelinfo->get_studio_model(target->get_model());
  17.  
  18. if (hdr != nullptr) {
  19.  
  20. mstudiohitboxset_t* set = hdr->get_hitbox_set(0);
  21. mstudiobbox_t* hitbox = set->get_hitbox(id);
  22.  
  23. if (hitbox) {
  24.  
  25. vector min, max, center;
  26.  
  27. u::vector_transform(hitbox->bbmin, matrix[hitbox->bone], min);
  28. u::vector_transform(hitbox->bbmax, matrix[hitbox->bone], max);
  29.  
  30. center = (min + max) * 0.5;
  31.  
  32. return center;
  33.  
  34. }
  35.  
  36. }
  37.  
  38. }
  39.  
  40. }
  41.  
  42. return vector(0, 0, 0);
  43.  
  44. }
  45.  
  46. bool is_visible(c_baseentity* ent, vector start, vector end)
  47. {
  48.  
  49. trace_t trace;
  50. ray_t ray;
  51. trace_filter filter(g::local);
  52.  
  53. ray.init(start, end);
  54.  
  55. i::enginetrace->trace_ray(ray, MASK_SHOT, &filter, &trace);
  56.  
  57. return (trace.ent == ent || trace.fraction >= 0.99f);
  58.  
  59. }
  60.  
  61. bool is_visible_length(c_baseentity* ent, vector start, vector end)
  62. {
  63.  
  64. trace_t trace;
  65. ray_t ray;
  66. trace_filter filter(g::local);
  67.  
  68. vector start_pos, end_bone, end_pos[3];
  69. start_pos = start;
  70. end_bone = end;
  71.  
  72. if (is_visible(ent, start, end)) return true;
  73.  
  74. ray.init(start, end);
  75.  
  76. i::enginetrace->trace_ray(ray, MASK_SHOT, &filter, &trace);
  77.  
  78. end_pos[0] = trace.end_pos;
  79.  
  80. ray.init(end_bone, start_pos);
  81. filter.skip = ent;
  82. i::enginetrace->trace_ray(ray, MASK_SHOT, &filter, &trace);
  83.  
  84. end_pos[1] = trace.end_pos;
  85.  
  86. vector_subtract(end_pos[0], end_pos[1], end_pos[2]);
  87.  
  88. float length = end_pos[2].length();
  89.  
  90. if (trace.fraction != 0)
  91. if (length < 13)
  92. return true;
  93.  
  94. return false;
  95.  
  96. }
Advertisement
Add Comment
Please, Sign In to add comment