1
0

BulbShadowOverlay.gml 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /// @param renderer
  2. function BulbShadowOverlay(_renderer) constructor
  3. {
  4. visible = true;
  5. x = 0;
  6. y = 0;
  7. sprite = undefined;
  8. image = 0;
  9. xscale = 1.0;
  10. yscale = 1.0;
  11. angle = 0.0;
  12. alpha = 1.0;
  13. __oldSprite = undefined;
  14. __radius = 0;
  15. __destroyed = false;
  16. static Destroy = function()
  17. {
  18. __destroyed = true;
  19. }
  20. static __CheckSpriteDimensions = function()
  21. {
  22. // Redefine light sprite boundaries
  23. if (sprite != __oldSprite)
  24. {
  25. __oldSprite = sprite;
  26. if ((sprite != undefined) && sprite_exists(sprite))
  27. {
  28. //Choose the longest axis of the sprite as the radius
  29. //We apply x/y scaling in the __IsOnScreen() function
  30. var _xOffset = sprite_get_xoffset(sprite);
  31. var _yOffset = sprite_get_yoffset(sprite);
  32. var _x = max(_xOffset, sprite_get_width( sprite) - _xOffset);
  33. var _y = max(_yOffset, sprite_get_height(sprite) - _yOffset);
  34. __radius = sqrt(_x*_x + _y*_y);
  35. }
  36. else
  37. {
  38. __radius = 0;
  39. }
  40. }
  41. }
  42. static AddToRenderer = function(_renderer)
  43. {
  44. if (__destroyed) return;
  45. array_push(_renderer.__shadowOverlayArray, weak_ref_create(self));
  46. }
  47. static RemoveFromRenderer = function(_renderer)
  48. {
  49. var _array = _renderer.__shadowOverlayArray;
  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. var _radius = __radius*max(xscale, yscale);
  68. return (!__destroyed && visible && __BulbRectInRect(x - _radius, y - _radius, x + _radius, y + _radius, _cameraL, _cameraT, _cameraR, _cameraB));
  69. }
  70. if (_renderer != undefined) AddToRenderer(_renderer);
  71. }