@duyquangnvx/pixi-game-engine 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -285,7 +285,7 @@ interface ModalButtonConfig {
285
285
  /**
286
286
  * Base modal class providing backdrop, close button, animations, and dragging.
287
287
  * Extend this class and build your content in onShow or constructor.
288
- * Uses Game.instance singleton for screen dimensions - no need to pass them.
288
+ * Uses Engine static class for screen dimensions - no need to pass them.
289
289
  */
290
290
  declare class BaseModal<TData = void> extends PIXI.Container {
291
291
  protected backdrop: PIXI.Graphics;
@@ -303,9 +303,9 @@ declare class BaseModal<TData = void> extends PIXI.Container {
303
303
  readonly didHide: Signal<void>;
304
304
  /** Signal emitted when modal is shown (with data) */
305
305
  readonly didShow: Signal<TData>;
306
- /** Get screen width from Game singleton */
306
+ /** Get screen width from Engine */
307
307
  protected get screenWidth(): number;
308
- /** Get screen height from Game singleton */
308
+ /** Get screen height from Engine */
309
309
  protected get screenHeight(): number;
310
310
  constructor(config?: BaseModalConfig);
311
311
  private setup;
@@ -379,8 +379,8 @@ declare class ParticleManager {
379
379
  }
380
380
 
381
381
  declare abstract class Scene extends PIXI.Container {
382
- /** Get game instance */
383
- protected get game(): Game;
382
+ /** Get engine class for static access */
383
+ protected get engine(): typeof Engine;
384
384
  /** Called when scene becomes active */
385
385
  abstract onEnter(): void | Promise<void>;
386
386
  /** Called every frame while scene is active */
@@ -549,9 +549,9 @@ declare class ToastManager {
549
549
  private currentColors;
550
550
  private currentThemeName;
551
551
  private resizeBinding;
552
- /** Get screen width from Game singleton */
552
+ /** Get screen width from Engine */
553
553
  private get screenWidth();
554
- /** Get screen height from Game singleton */
554
+ /** Get screen height from Engine */
555
555
  private get screenHeight();
556
556
  constructor(stage: PIXI.Container, config?: ToastManagerConfig);
557
557
  /**
@@ -657,7 +657,7 @@ declare class UIManager {
657
657
  }
658
658
 
659
659
  type ScaleMode = 'none' | 'letterbox' | 'fill';
660
- interface GameConfig {
660
+ interface EngineConfig {
661
661
  width: number;
662
662
  height: number;
663
663
  backgroundColor?: number;
@@ -669,66 +669,94 @@ interface GameConfig {
669
669
  /** Auto-resize on window resize. Default: true */
670
670
  autoResize?: boolean;
671
671
  }
672
- declare class Game {
673
- private static _instance;
674
- /** Get the singleton Game instance. Throws if not initialized. */
675
- static get instance(): Game;
676
- /** Initialize the Game singleton. Throws if already initialized. */
677
- static init(config: GameConfig): Game;
678
- readonly app: PIXI.Application;
679
- readonly scenes: SceneManager;
680
- readonly input: InputManager;
681
- readonly assets: AssetManager;
682
- readonly sound: SoundManager;
683
- readonly particles: ParticleManager;
684
- readonly tween: TweenManager;
685
- readonly ui: UIManager;
686
- readonly spine: SpineManager;
687
- readonly toast: ToastManager;
688
- readonly alert: AlertManager;
689
- readonly modal: ModalManager;
690
- /** Logger instance for consistent logging across the game */
691
- readonly logger: LoggerClass;
692
- /** Signal emitted when game is paused */
693
- readonly onPause: Signal<void>;
694
- /** Signal emitted when game is resumed */
695
- readonly onResume: Signal<void>;
696
- /** Signal emitted when game is resized */
697
- readonly onResize: Signal<{
672
+ declare class Engine {
673
+ private constructor();
674
+ private static _app;
675
+ private static _scenes;
676
+ private static _input;
677
+ private static _assets;
678
+ private static _sound;
679
+ private static _particles;
680
+ private static _tween;
681
+ private static _ui;
682
+ private static _spine;
683
+ private static _toast;
684
+ private static _alert;
685
+ private static _modal;
686
+ /** Signal emitted when engine is paused */
687
+ static readonly onPause: Signal<void>;
688
+ /** Signal emitted when engine is resumed */
689
+ static readonly onResume: Signal<void>;
690
+ /** Signal emitted when engine is resized */
691
+ static readonly onResize: Signal<{
698
692
  width: number;
699
693
  height: number;
700
694
  scale: number;
701
695
  }>;
702
- /** Signal emitted when game is updated */
703
- readonly onUpdate: Signal<number>;
696
+ /** Signal emitted when engine is updated */
697
+ static readonly onUpdate: Signal<number>;
698
+ /** Signal emitted at the end of init() after all managers are constructed */
699
+ static readonly onReady: Signal<void>;
700
+ /** Signal emitted at the start of destroy() before any teardown */
701
+ static readonly onDestroy: Signal<void>;
702
+ /** Signal emitted when browser tab visibility changes (true = visible, false = hidden) */
703
+ static readonly onVisibilityChange: Signal<boolean>;
704
+ /** Signal emitted when browser window gains/loses focus (true = focused, false = blurred) */
705
+ static readonly onFocusChange: Signal<boolean>;
704
706
  /** Design resolution width (original config width) */
705
- readonly designWidth: number;
707
+ private static _designWidth;
706
708
  /** Design resolution height (original config height) */
707
- readonly designHeight: number;
709
+ private static _designHeight;
708
710
  /** Current scale mode */
709
- scaleMode: ScaleMode;
711
+ private static _scaleMode;
710
712
  /** Current scale factor */
711
- private _scale;
712
- private _isRunning;
713
- private readonly _resizeHandler;
714
- private constructor();
715
- private update;
716
- get view(): PIXI.ICanvas;
717
- get stage(): PIXI.Container;
713
+ private static _scale;
714
+ private static _isRunning;
715
+ private static _resizeHandler;
716
+ private static _visibilityHandler;
717
+ private static _focusHandler;
718
+ private static _blurHandler;
719
+ private static _initialized;
720
+ /** Logger instance for consistent logging across the engine */
721
+ static readonly logger: LoggerClass;
722
+ static get scenes(): SceneManager;
723
+ static get input(): InputManager;
724
+ static get assets(): AssetManager;
725
+ static get sound(): SoundManager;
726
+ static get particles(): ParticleManager;
727
+ static get tween(): TweenManager;
728
+ static get ui(): UIManager;
729
+ static get spine(): SpineManager;
730
+ static get toast(): ToastManager;
731
+ static get alert(): AlertManager;
732
+ static get modal(): ModalManager;
733
+ static get app(): PIXI.Application;
734
+ static get view(): PIXI.ICanvas;
735
+ static get stage(): PIXI.Container;
718
736
  /** Returns design resolution dimensions (use for positioning game elements) */
719
- get screen(): PIXI.Rectangle;
737
+ static get screen(): PIXI.Rectangle;
720
738
  /** Returns actual renderer/viewport dimensions */
721
- get viewport(): PIXI.Rectangle;
722
- get isRunning(): boolean;
723
- pause(): void;
724
- resume(): void;
739
+ static get viewport(): PIXI.Rectangle;
740
+ static get isRunning(): boolean;
741
+ /** Design resolution width (original config width) */
742
+ static get designWidth(): number;
743
+ /** Design resolution height (original config height) */
744
+ static get designHeight(): number;
745
+ /** Current scale mode */
746
+ static get scaleMode(): ScaleMode;
747
+ static set scaleMode(value: ScaleMode);
725
748
  /** Get current scale factor */
726
- get scale(): number;
749
+ static get scale(): number;
750
+ /** Initialize the Engine. Throws if already initialized. */
751
+ static init(config: EngineConfig): void;
752
+ private static update;
753
+ static pause(): void;
754
+ static resume(): void;
727
755
  /**
728
756
  * Get bounds in stage coordinates that cover the full viewport (including letterbox areas).
729
757
  * Use this for fullscreen overlays, backdrops, modals that need to cover the entire screen.
730
758
  */
731
- getFullscreenBounds(): {
759
+ static getFullscreenBounds(): {
732
760
  x: number;
733
761
  y: number;
734
762
  width: number;
@@ -737,17 +765,12 @@ declare class Game {
737
765
  /**
738
766
  * Resize to fit window while maintaining aspect ratio based on scaleMode
739
767
  */
740
- resizeToWindow(): void;
741
- /**
742
- * Resize game to fit target dimensions while maintaining aspect ratio
743
- */
744
- resize(targetWidth: number, targetHeight: number): void;
768
+ static resizeToWindow(): void;
745
769
  /**
746
- * Propagate resize to all managers that need viewport dimensions
747
- * Note: Toast/BaseModal auto-resize via Game.instance.onResize signal
770
+ * Resize engine to fit target dimensions while maintaining aspect ratio
748
771
  */
749
- private propagateResize;
750
- destroy(): void;
772
+ static resize(targetWidth: number, targetHeight: number): void;
773
+ static destroy(): void;
751
774
  }
752
775
 
753
776
  /**
@@ -977,4 +1000,4 @@ declare class LoggerClass {
977
1000
  /** Global logger instance */
978
1001
  declare const Logger: LoggerClass;
979
1002
 
980
- export { type AlertButton, type AlertConfig, AlertManager, type AlertType, type AssetBundle, type AssetEntry, AssetManager, type AssetManifest, BaseModal, type BaseModalConfig, COUNT_PRESETS, type CloseButtonPosition, CountAnimator, type CountAnimatorConfig, type CountPreset, Game, type GameConfig, GamepadManager, type ICountRenderer, InputManager, KeyboardManager, type LogLevel, Logger, LoggerClass, type ModalAnimation, type ModalButtonConfig, ModalManager, ParticleManager, PointerManager, type ScaleMode, Scene, SceneManager, Signal, type SignalBinding, SoundManager, SpineManager, TOAST_PRESETS, TextCountRenderer, type ToastColorSet, type ToastConfig, ToastManager, type ToastManagerConfig, type ToastTheme, type ToastThemePreset, type ToastType, TweenManager, UIManager, createTheme, getCountPreset, getDefaultColors, getPreset };
1003
+ export { type AlertButton, type AlertConfig, AlertManager, type AlertType, type AssetBundle, type AssetEntry, AssetManager, type AssetManifest, BaseModal, type BaseModalConfig, COUNT_PRESETS, type CloseButtonPosition, CountAnimator, type CountAnimatorConfig, type CountPreset, Engine, type EngineConfig, GamepadManager, type ICountRenderer, InputManager, KeyboardManager, type LogLevel, Logger, LoggerClass, type ModalAnimation, type ModalButtonConfig, ModalManager, ParticleManager, PointerManager, type ScaleMode, Scene, SceneManager, Signal, type SignalBinding, SoundManager, SpineManager, TOAST_PRESETS, TextCountRenderer, type ToastColorSet, type ToastConfig, ToastManager, type ToastManagerConfig, type ToastTheme, type ToastThemePreset, type ToastType, TweenManager, UIManager, createTheme, getCountPreset, getDefaultColors, getPreset };
package/dist/index.d.ts CHANGED
@@ -285,7 +285,7 @@ interface ModalButtonConfig {
285
285
  /**
286
286
  * Base modal class providing backdrop, close button, animations, and dragging.
287
287
  * Extend this class and build your content in onShow or constructor.
288
- * Uses Game.instance singleton for screen dimensions - no need to pass them.
288
+ * Uses Engine static class for screen dimensions - no need to pass them.
289
289
  */
290
290
  declare class BaseModal<TData = void> extends PIXI.Container {
291
291
  protected backdrop: PIXI.Graphics;
@@ -303,9 +303,9 @@ declare class BaseModal<TData = void> extends PIXI.Container {
303
303
  readonly didHide: Signal<void>;
304
304
  /** Signal emitted when modal is shown (with data) */
305
305
  readonly didShow: Signal<TData>;
306
- /** Get screen width from Game singleton */
306
+ /** Get screen width from Engine */
307
307
  protected get screenWidth(): number;
308
- /** Get screen height from Game singleton */
308
+ /** Get screen height from Engine */
309
309
  protected get screenHeight(): number;
310
310
  constructor(config?: BaseModalConfig);
311
311
  private setup;
@@ -379,8 +379,8 @@ declare class ParticleManager {
379
379
  }
380
380
 
381
381
  declare abstract class Scene extends PIXI.Container {
382
- /** Get game instance */
383
- protected get game(): Game;
382
+ /** Get engine class for static access */
383
+ protected get engine(): typeof Engine;
384
384
  /** Called when scene becomes active */
385
385
  abstract onEnter(): void | Promise<void>;
386
386
  /** Called every frame while scene is active */
@@ -549,9 +549,9 @@ declare class ToastManager {
549
549
  private currentColors;
550
550
  private currentThemeName;
551
551
  private resizeBinding;
552
- /** Get screen width from Game singleton */
552
+ /** Get screen width from Engine */
553
553
  private get screenWidth();
554
- /** Get screen height from Game singleton */
554
+ /** Get screen height from Engine */
555
555
  private get screenHeight();
556
556
  constructor(stage: PIXI.Container, config?: ToastManagerConfig);
557
557
  /**
@@ -657,7 +657,7 @@ declare class UIManager {
657
657
  }
658
658
 
659
659
  type ScaleMode = 'none' | 'letterbox' | 'fill';
660
- interface GameConfig {
660
+ interface EngineConfig {
661
661
  width: number;
662
662
  height: number;
663
663
  backgroundColor?: number;
@@ -669,66 +669,94 @@ interface GameConfig {
669
669
  /** Auto-resize on window resize. Default: true */
670
670
  autoResize?: boolean;
671
671
  }
672
- declare class Game {
673
- private static _instance;
674
- /** Get the singleton Game instance. Throws if not initialized. */
675
- static get instance(): Game;
676
- /** Initialize the Game singleton. Throws if already initialized. */
677
- static init(config: GameConfig): Game;
678
- readonly app: PIXI.Application;
679
- readonly scenes: SceneManager;
680
- readonly input: InputManager;
681
- readonly assets: AssetManager;
682
- readonly sound: SoundManager;
683
- readonly particles: ParticleManager;
684
- readonly tween: TweenManager;
685
- readonly ui: UIManager;
686
- readonly spine: SpineManager;
687
- readonly toast: ToastManager;
688
- readonly alert: AlertManager;
689
- readonly modal: ModalManager;
690
- /** Logger instance for consistent logging across the game */
691
- readonly logger: LoggerClass;
692
- /** Signal emitted when game is paused */
693
- readonly onPause: Signal<void>;
694
- /** Signal emitted when game is resumed */
695
- readonly onResume: Signal<void>;
696
- /** Signal emitted when game is resized */
697
- readonly onResize: Signal<{
672
+ declare class Engine {
673
+ private constructor();
674
+ private static _app;
675
+ private static _scenes;
676
+ private static _input;
677
+ private static _assets;
678
+ private static _sound;
679
+ private static _particles;
680
+ private static _tween;
681
+ private static _ui;
682
+ private static _spine;
683
+ private static _toast;
684
+ private static _alert;
685
+ private static _modal;
686
+ /** Signal emitted when engine is paused */
687
+ static readonly onPause: Signal<void>;
688
+ /** Signal emitted when engine is resumed */
689
+ static readonly onResume: Signal<void>;
690
+ /** Signal emitted when engine is resized */
691
+ static readonly onResize: Signal<{
698
692
  width: number;
699
693
  height: number;
700
694
  scale: number;
701
695
  }>;
702
- /** Signal emitted when game is updated */
703
- readonly onUpdate: Signal<number>;
696
+ /** Signal emitted when engine is updated */
697
+ static readonly onUpdate: Signal<number>;
698
+ /** Signal emitted at the end of init() after all managers are constructed */
699
+ static readonly onReady: Signal<void>;
700
+ /** Signal emitted at the start of destroy() before any teardown */
701
+ static readonly onDestroy: Signal<void>;
702
+ /** Signal emitted when browser tab visibility changes (true = visible, false = hidden) */
703
+ static readonly onVisibilityChange: Signal<boolean>;
704
+ /** Signal emitted when browser window gains/loses focus (true = focused, false = blurred) */
705
+ static readonly onFocusChange: Signal<boolean>;
704
706
  /** Design resolution width (original config width) */
705
- readonly designWidth: number;
707
+ private static _designWidth;
706
708
  /** Design resolution height (original config height) */
707
- readonly designHeight: number;
709
+ private static _designHeight;
708
710
  /** Current scale mode */
709
- scaleMode: ScaleMode;
711
+ private static _scaleMode;
710
712
  /** Current scale factor */
711
- private _scale;
712
- private _isRunning;
713
- private readonly _resizeHandler;
714
- private constructor();
715
- private update;
716
- get view(): PIXI.ICanvas;
717
- get stage(): PIXI.Container;
713
+ private static _scale;
714
+ private static _isRunning;
715
+ private static _resizeHandler;
716
+ private static _visibilityHandler;
717
+ private static _focusHandler;
718
+ private static _blurHandler;
719
+ private static _initialized;
720
+ /** Logger instance for consistent logging across the engine */
721
+ static readonly logger: LoggerClass;
722
+ static get scenes(): SceneManager;
723
+ static get input(): InputManager;
724
+ static get assets(): AssetManager;
725
+ static get sound(): SoundManager;
726
+ static get particles(): ParticleManager;
727
+ static get tween(): TweenManager;
728
+ static get ui(): UIManager;
729
+ static get spine(): SpineManager;
730
+ static get toast(): ToastManager;
731
+ static get alert(): AlertManager;
732
+ static get modal(): ModalManager;
733
+ static get app(): PIXI.Application;
734
+ static get view(): PIXI.ICanvas;
735
+ static get stage(): PIXI.Container;
718
736
  /** Returns design resolution dimensions (use for positioning game elements) */
719
- get screen(): PIXI.Rectangle;
737
+ static get screen(): PIXI.Rectangle;
720
738
  /** Returns actual renderer/viewport dimensions */
721
- get viewport(): PIXI.Rectangle;
722
- get isRunning(): boolean;
723
- pause(): void;
724
- resume(): void;
739
+ static get viewport(): PIXI.Rectangle;
740
+ static get isRunning(): boolean;
741
+ /** Design resolution width (original config width) */
742
+ static get designWidth(): number;
743
+ /** Design resolution height (original config height) */
744
+ static get designHeight(): number;
745
+ /** Current scale mode */
746
+ static get scaleMode(): ScaleMode;
747
+ static set scaleMode(value: ScaleMode);
725
748
  /** Get current scale factor */
726
- get scale(): number;
749
+ static get scale(): number;
750
+ /** Initialize the Engine. Throws if already initialized. */
751
+ static init(config: EngineConfig): void;
752
+ private static update;
753
+ static pause(): void;
754
+ static resume(): void;
727
755
  /**
728
756
  * Get bounds in stage coordinates that cover the full viewport (including letterbox areas).
729
757
  * Use this for fullscreen overlays, backdrops, modals that need to cover the entire screen.
730
758
  */
731
- getFullscreenBounds(): {
759
+ static getFullscreenBounds(): {
732
760
  x: number;
733
761
  y: number;
734
762
  width: number;
@@ -737,17 +765,12 @@ declare class Game {
737
765
  /**
738
766
  * Resize to fit window while maintaining aspect ratio based on scaleMode
739
767
  */
740
- resizeToWindow(): void;
741
- /**
742
- * Resize game to fit target dimensions while maintaining aspect ratio
743
- */
744
- resize(targetWidth: number, targetHeight: number): void;
768
+ static resizeToWindow(): void;
745
769
  /**
746
- * Propagate resize to all managers that need viewport dimensions
747
- * Note: Toast/BaseModal auto-resize via Game.instance.onResize signal
770
+ * Resize engine to fit target dimensions while maintaining aspect ratio
748
771
  */
749
- private propagateResize;
750
- destroy(): void;
772
+ static resize(targetWidth: number, targetHeight: number): void;
773
+ static destroy(): void;
751
774
  }
752
775
 
753
776
  /**
@@ -977,4 +1000,4 @@ declare class LoggerClass {
977
1000
  /** Global logger instance */
978
1001
  declare const Logger: LoggerClass;
979
1002
 
980
- export { type AlertButton, type AlertConfig, AlertManager, type AlertType, type AssetBundle, type AssetEntry, AssetManager, type AssetManifest, BaseModal, type BaseModalConfig, COUNT_PRESETS, type CloseButtonPosition, CountAnimator, type CountAnimatorConfig, type CountPreset, Game, type GameConfig, GamepadManager, type ICountRenderer, InputManager, KeyboardManager, type LogLevel, Logger, LoggerClass, type ModalAnimation, type ModalButtonConfig, ModalManager, ParticleManager, PointerManager, type ScaleMode, Scene, SceneManager, Signal, type SignalBinding, SoundManager, SpineManager, TOAST_PRESETS, TextCountRenderer, type ToastColorSet, type ToastConfig, ToastManager, type ToastManagerConfig, type ToastTheme, type ToastThemePreset, type ToastType, TweenManager, UIManager, createTheme, getCountPreset, getDefaultColors, getPreset };
1003
+ export { type AlertButton, type AlertConfig, AlertManager, type AlertType, type AssetBundle, type AssetEntry, AssetManager, type AssetManifest, BaseModal, type BaseModalConfig, COUNT_PRESETS, type CloseButtonPosition, CountAnimator, type CountAnimatorConfig, type CountPreset, Engine, type EngineConfig, GamepadManager, type ICountRenderer, InputManager, KeyboardManager, type LogLevel, Logger, LoggerClass, type ModalAnimation, type ModalButtonConfig, ModalManager, ParticleManager, PointerManager, type ScaleMode, Scene, SceneManager, Signal, type SignalBinding, SoundManager, SpineManager, TOAST_PRESETS, TextCountRenderer, type ToastColorSet, type ToastConfig, ToastManager, type ToastManagerConfig, type ToastTheme, type ToastThemePreset, type ToastType, TweenManager, UIManager, createTheme, getCountPreset, getDefaultColors, getPreset };