Advertisement
Guest User

Untitled

a guest
May 14th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, float stepsize, bool solid, v3s16 *p)
  2. {
  3. float distance = pos1.getDistanceFrom(pos2);
  4.  
  5. //calculate normalized direction vector
  6. v3f normalized_vector = v3f((pos2.X - pos1.X)/distance,
  7. (pos2.Y - pos1.Y)/distance,
  8. (pos2.Z - pos1.Z)/distance);
  9.  
  10. //find out if there's a node on path between pos1 and pos2
  11. for (float i = 1; i < distance; i += stepsize) {
  12. v3s16 pos = floatToInt(v3f(normalized_vector.X * i,
  13. normalized_vector.Y * i,
  14. normalized_vector.Z * i) +pos1,BS);
  15.  
  16. MapNode n = getMap().getNodeNoEx(pos);
  17.  
  18. if(n.param0 != CONTENT_AIR) {
  19. if(solid == true) {
  20. if(n.drawtype == NDT_NORMAL) {
  21. if (p) {
  22. *p = pos;
  23. }
  24. return false;
  25. }
  26. }
  27. else
  28. {
  29. if (p) {
  30. *p = pos;
  31. }
  32. return false;
  33. }
  34. }
  35. }
  36. return true;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement