BulbAmbienceSprite.gml 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /// @param renderer
  2. function BulbAmbienceSprite(_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. blend = c_white;
  13. alpha = 1.0;
  14. __oldSprite = undefined;
  15. __radius = 0;
  16. __destroyed = false;
  17. static Destroy = function()
  18. {
  19. __destroyed = true;
  20. }
  21. static __CheckSpriteDimensions = function()
  22. {
  23. // Redefine light sprite boundaries
  24. if (sprite != __oldSprite)
  25. {
  26. __oldSprite = sprite;
  27. if ((sprite != undefined) && sprite_exists(sprite))
  28. {
  29. //Choose the longest axis of the sprite as the radius
  30. //We apply x/y scaling in the __IsOnScreen() function
  31. var _xOffset = sprite_get_xoffset(sprite);
  32. var _yOffset = sprite_get_yoffset(sprite);
  33. var _x = max(_xOffset, sprite_get_width( sprite) - _xOffset);
  34. var _y = max(_yOffset, sprite_get_height(sprite) - _yOffset);
  35. __radius = sqrt(_x*_x + _y*_y);
  36. }
  37. else
  38. {
  39. __radius = 0;
  40. }
  41. }
  42. }
  43. static AddToRenderer = function(_renderer)
  44. {
  45. if (__destroyed) return;
  46. array_push(_renderer.__ambienceSpriteArray, weak_ref_create(self));
  47. }
  48. static RemoveFromRenderer = function(_renderer)
  49. {
  50. var _array = _renderer.__ambienceSpriteArray;
  51. var _i = array_length(_array) - 1;
  52. repeat(array_length(_array))
  53. {
  54. var _weak = _array[_i];
  55. if (weak_ref_alive(_weak))
  56. {
  57. if (_weak.ref == self) array_delete(_array, _i, 1);
  58. }
  59. else
  60. {
  61. array_delete(_array, _i, 1);
  62. }
  63. --_i;
  64. }
  65. }
  66. static __IsOnScreen = function(_cameraL, _cameraT, _cameraR, _cameraB)
  67. {
  68. var _radius = __radius*max(xscale, yscale);
  69. return (!__destroyed && visible && __BulbRectInRect(x - _radius, y - _radius, x + _radius, y + _radius, _cameraL, _cameraT, _cameraR, _cameraB));
  70. }
  71. if (_renderer != undefined) AddToRenderer(_renderer);
  72. }