math.viewport.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * Class used to represent a viewport on screen
  3. */
  4. export class Viewport {
  5. /**
  6. * Creates a Viewport object located at (x, y) and sized (width, height)
  7. * @param x defines viewport left coordinate
  8. * @param y defines viewport top coordinate
  9. * @param width defines the viewport width
  10. * @param height defines the viewport height
  11. */
  12. constructor(
  13. /** viewport left coordinate */
  14. public x: number,
  15. /** viewport top coordinate */
  16. public y: number,
  17. /**viewport width */
  18. public width: number,
  19. /** viewport height */
  20. public height: number) {
  21. }
  22. /**
  23. * Creates a new viewport using absolute sizing (from 0-> width, 0-> height instead of 0->1)
  24. * @param renderWidth defines the rendering width
  25. * @param renderHeight defines the rendering height
  26. * @returns a new Viewport
  27. */
  28. public toGlobal(renderWidth: number, renderHeight: number): Viewport {
  29. return new Viewport(this.x * renderWidth, this.y * renderHeight, this.width * renderWidth, this.height * renderHeight);
  30. }
  31. /**
  32. * Stores absolute viewport value into a target viewport (from 0-> width, 0-> height instead of 0->1)
  33. * @param renderWidth defines the rendering width
  34. * @param renderHeight defines the rendering height
  35. * @param ref defines the target viewport
  36. * @returns the current viewport
  37. */
  38. public toGlobalToRef(renderWidth: number, renderHeight: number, ref: Viewport): Viewport {
  39. ref.x = this.x * renderWidth;
  40. ref.y = this.y * renderHeight;
  41. ref.width = this.width * renderWidth;
  42. ref.height = this.height * renderHeight;
  43. return this;
  44. }
  45. /**
  46. * Returns a new Viewport copied from the current one
  47. * @returns a new Viewport
  48. */
  49. public clone(): Viewport {
  50. return new Viewport(this.x, this.y, this.width, this.height);
  51. }
  52. }