BulbStaticOccluder.gml 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /// @param renderer
  2. function BulbStaticOccluder(_renderer) constructor
  3. {
  4. x = 0;
  5. y = 0;
  6. xscale = 1.0;
  7. yscale = 1.0;
  8. angle = 0.0;
  9. vertexArray = [];
  10. __destroyed = false;
  11. static Destroy = function()
  12. {
  13. __destroyed = true;
  14. }
  15. static AddEdge = function(_x1, _y1, _x2, _y2)
  16. {
  17. if (__destroyed) return;
  18. array_push(vertexArray, _x1, _y1, _x2, _y2, _y2-_y1, _x1-_x2);
  19. }
  20. static AddCircle = function(_radius, _x = 0, _y = 0, _edges = 24)
  21. {
  22. if (__destroyed) return;
  23. var _angle = 0;
  24. var _angleStep = 360 / _edges;
  25. var _x2 = _x + lengthdir_x(_radius, _angle);
  26. var _y2 = _y + lengthdir_y(_radius, _angle);
  27. repeat(_edges)
  28. {
  29. _angle -= _angleStep;
  30. var _x1 = _x2;
  31. var _y1 = _y2;
  32. _x2 = _x + lengthdir_x(_radius, _angle);
  33. _y2 = _y + lengthdir_y(_radius, _angle);
  34. array_push(vertexArray, _x1, _y1, _x2, _y2, _y2-_y1, _x1-_x2);
  35. }
  36. }
  37. static ClearEdges = function(_x1, _y1, _x2, _y2)
  38. {
  39. if (__destroyed) return;
  40. array_resize(vertexArray, 0);
  41. }
  42. static AddToRenderer = function(_renderer)
  43. {
  44. if (__destroyed) return;
  45. array_push(_renderer.__staticOccludersArray, weak_ref_create(self));
  46. }
  47. static RemoveFromRenderer = function(_renderer)
  48. {
  49. var _array = _renderer.__staticOccludersArray;
  50. var _i = array_length(_array) - 1;
  51. repeat(array_length(_array))
  52. {
  53. var _weak = _array[_i];
  54. if (weak_ref_alive(_weak))
  55. {
  56. if (_weak.ref == self) array_delete(_array, _i, 1);
  57. }
  58. else
  59. {
  60. array_delete(_array, _i, 1);
  61. }
  62. --_i;
  63. }
  64. }
  65. static __IsOnScreen = function(_cameraL, _cameraT, _cameraR, _cameraB)
  66. {
  67. return (!__destroyed && visible && __BulbRectInRect(__bboxXMin, __bboxYMin, __bboxXMax, __bboxYMax, _cameraL, _cameraT, _cameraR, _cameraB));
  68. }
  69. if (_renderer != undefined) AddToRenderer(_renderer);
  70. }