@nice2dev/game-engine 0.1.0 → 1.0.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +193 -1
  2. package/dist/cjs/audio/AudioBridge.js +454 -0
  3. package/dist/cjs/audio/AudioBridge.js.map +1 -0
  4. package/dist/cjs/devtools/GameplayAnalytics.js +651 -0
  5. package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -0
  6. package/dist/cjs/dialogue/DialogueSystem.js +1023 -0
  7. package/dist/cjs/dialogue/DialogueSystem.js.map +1 -0
  8. package/dist/cjs/editor/NiceGameEditor.js +569 -71
  9. package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
  10. package/dist/cjs/engine/SaveSystemV2.js +494 -0
  11. package/dist/cjs/engine/SaveSystemV2.js.map +1 -0
  12. package/dist/cjs/i18n/useTranslation.js +11 -11
  13. package/dist/cjs/index.js +90 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/input/GamepadNavigation.js +21 -21
  16. package/dist/cjs/input/useGamepads.js +6 -6
  17. package/dist/cjs/integration/IconSprite.js +281 -0
  18. package/dist/cjs/integration/IconSprite.js.map +1 -0
  19. package/dist/cjs/inventory/InventorySystem.js +930 -0
  20. package/dist/cjs/inventory/InventorySystem.js.map +1 -0
  21. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -1
  22. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -1
  23. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -1
  24. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -1
  25. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -1
  26. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -1
  27. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -1
  28. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -1
  29. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -1
  30. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -1
  31. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -1
  32. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -1
  33. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -1
  34. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -1
  35. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -1
  36. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -1
  37. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -1
  38. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -1
  39. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -1
  40. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -1
  41. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -1
  42. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -1
  43. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -1
  44. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -1
  45. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -1
  46. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -1
  47. package/dist/cjs/quest/QuestSystem.js +924 -0
  48. package/dist/cjs/quest/QuestSystem.js.map +1 -0
  49. package/dist/cjs/rendering/WebGPURenderPipeline.js +658 -0
  50. package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -0
  51. package/dist/cjs/xr/ARVR.js.map +1 -1
  52. package/dist/esm/audio/AudioBridge.js +446 -0
  53. package/dist/esm/audio/AudioBridge.js.map +1 -0
  54. package/dist/esm/devtools/GameplayAnalytics.js +639 -0
  55. package/dist/esm/devtools/GameplayAnalytics.js.map +1 -0
  56. package/dist/esm/dialogue/DialogueSystem.js +1008 -0
  57. package/dist/esm/dialogue/DialogueSystem.js.map +1 -0
  58. package/dist/esm/editor/NiceGameEditor.js +556 -58
  59. package/dist/esm/editor/NiceGameEditor.js.map +1 -1
  60. package/dist/esm/engine/SaveSystemV2.js +487 -0
  61. package/dist/esm/engine/SaveSystemV2.js.map +1 -0
  62. package/dist/esm/index.js +11 -3
  63. package/dist/esm/index.js.map +1 -1
  64. package/dist/esm/integration/IconSprite.js +266 -0
  65. package/dist/esm/integration/IconSprite.js.map +1 -0
  66. package/dist/esm/inventory/InventorySystem.js +924 -0
  67. package/dist/esm/inventory/InventorySystem.js.map +1 -0
  68. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -1
  69. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -1
  70. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -1
  71. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -1
  72. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -1
  73. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -1
  74. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -1
  75. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -1
  76. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -1
  77. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -1
  78. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -1
  79. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -1
  80. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -1
  81. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -1
  82. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -1
  83. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -1
  84. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -1
  85. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -1
  86. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -1
  87. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -1
  88. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -1
  89. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -1
  90. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -1
  91. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -1
  92. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -1
  93. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -1
  94. package/dist/esm/quest/QuestSystem.js +916 -0
  95. package/dist/esm/quest/QuestSystem.js.map +1 -0
  96. package/dist/esm/rendering/WebGPURenderPipeline.js +642 -0
  97. package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -0
  98. package/dist/esm/xr/ARVR.js.map +1 -1
  99. package/dist/types/__tests__/setup.d.ts +1 -1
  100. package/dist/types/audio/AudioBridge.d.ts +199 -0
  101. package/dist/types/devtools/GameplayAnalytics.d.ts +279 -0
  102. package/dist/types/dialogue/DialogueSystem.d.ts +326 -0
  103. package/dist/types/dialogue/index.d.ts +2 -0
  104. package/dist/types/editor/NiceGameEditor.d.ts +12 -1
  105. package/dist/types/engine/SaveSystemV2.d.ts +155 -0
  106. package/dist/types/index.d.ts +19 -3
  107. package/dist/types/integration/IconSprite.d.ts +196 -0
  108. package/dist/types/inventory/InventorySystem.d.ts +336 -0
  109. package/dist/types/performance/WebGPUCompute.d.ts +0 -10
  110. package/dist/types/quest/QuestSystem.d.ts +287 -0
  111. package/dist/types/rendering/WebGPURenderPipeline.d.ts +255 -0
  112. package/package.json +7 -1
package/dist/cjs/index.js CHANGED
@@ -36,6 +36,7 @@ var SceneEditor3D = require('./runtime3d/SceneEditor3D.js');
36
36
  var ActionTemplates = require('./templates/ActionTemplates.js');
37
37
  var PuzzleTemplates = require('./templates/PuzzleTemplates.js');
38
38
  var RPGTemplates = require('./templates/RPGTemplates.js');
39
+ var InventorySystem = require('./inventory/InventorySystem.js');
39
40
  var SportsTemplates = require('./templates/SportsTemplates.js');
40
41
  var StrategyTemplates = require('./templates/StrategyTemplates.js');
41
42
  var PartyTemplates = require('./templates/PartyTemplates.js');
@@ -70,6 +71,13 @@ var TutorialBranching = require('./tutorials/TutorialBranching.js');
70
71
  var DevTools = require('./devtools/DevTools.js');
71
72
  var KidTools = require('./kids/KidTools.js');
72
73
  var BenchmarkSuite = require('./performance/BenchmarkSuite.js');
74
+ var IconSprite = require('./integration/IconSprite.js');
75
+ var WebGPURenderPipeline = require('./rendering/WebGPURenderPipeline.js');
76
+ var AudioBridge = require('./audio/AudioBridge.js');
77
+ var DialogueSystem = require('./dialogue/DialogueSystem.js');
78
+ var QuestSystem = require('./quest/QuestSystem.js');
79
+ var SaveSystemV2 = require('./engine/SaveSystemV2.js');
80
+ var GameplayAnalytics = require('./devtools/GameplayAnalytics.js');
73
81
 
74
82
 
75
83
 
@@ -88,6 +96,7 @@ exports.PRESET_PLATFORMER = InputManager.PRESET_PLATFORMER;
88
96
  exports.PRESET_TOPDOWN = InputManager.PRESET_TOPDOWN;
89
97
  exports.PRESET_TWIN_STICK = InputManager.PRESET_TWIN_STICK;
90
98
  exports.GamepadNavigationProvider = GamepadNavigation.GamepadNavigationProvider;
99
+ exports.NiceGamepadNavigationProvider = GamepadNavigation.GamepadNavigationProvider;
91
100
  exports.useGamepadNavigation = GamepadNavigation.useGamepadNavigation;
92
101
  exports.useGamepadEdges = useGamepads.useGamepadEdges;
93
102
  exports.useGamepads = useGamepads.useGamepads;
@@ -99,6 +108,7 @@ exports.PhysicsEngine2D = PhysicsEngine2D.PhysicsEngine2D;
99
108
  exports.PhysicsSystem = PhysicsEngine2D.PhysicsSystem;
100
109
  exports.SceneManager = SceneManager.SceneManager;
101
110
  exports.GameUI = GameUI.GameUI;
111
+ exports.NiceGameUI = GameUI.GameUI;
102
112
  exports.PLAYER_COLORS = LocalMultiplayer.PLAYER_COLORS;
103
113
  exports.PlayerManager = LocalMultiplayer.PlayerManager;
104
114
  exports.SplitScreenManager = LocalMultiplayer.SplitScreenManager;
@@ -111,8 +121,8 @@ exports.KEYBOARD_GROUPS = MiniGameTypes.KEYBOARD_GROUPS;
111
121
  exports.MINI_PLAYER_COLORS = MiniGameTypes.MINI_PLAYER_COLORS;
112
122
  exports.MINI_PLAYER_NAMES = MiniGameTypes.MINI_PLAYER_NAMES;
113
123
  exports.gameRegistry = MiniGameTypes.gameRegistry;
114
- exports.LootTable = Procedural.LootTable;
115
124
  exports.PerlinNoise = Procedural.PerlinNoise;
125
+ exports.ProceduralLootTable = Procedural.LootTable;
116
126
  exports.ProceduralSprite = Procedural.ProceduralSprite;
117
127
  exports.SeededRandom = Procedural.SeededRandom;
118
128
  exports.WaveGenerator = Procedural.WaveGenerator;
@@ -232,6 +242,11 @@ exports.createVNState = RPGTemplates.createVNState;
232
242
  exports.generateDungeon = RPGTemplates.generateDungeon;
233
243
  exports.parseVNLabels = RPGTemplates.parseVNLabels;
234
244
  exports.xpForLevel = RPGTemplates.xpForLevel;
245
+ exports.InventoryManager = InventorySystem.InventoryManager;
246
+ exports.InventoryProvider = InventorySystem.InventoryProvider;
247
+ exports.useContainer = InventorySystem.useContainer;
248
+ exports.useEquipment = InventorySystem.useEquipment;
249
+ exports.useInventoryManager = InventorySystem.useInventoryManager;
235
250
  exports.DEFAULT_BASKETBALL_CONFIG = SportsTemplates.DEFAULT_BASKETBALL_CONFIG;
236
251
  exports.DEFAULT_BILLIARDS_CONFIG = SportsTemplates.DEFAULT_BILLIARDS_CONFIG;
237
252
  exports.DEFAULT_GOLF_CONFIG = SportsTemplates.DEFAULT_GOLF_CONFIG;
@@ -523,4 +538,78 @@ exports.GuidedWizard = KidTools.GuidedWizard;
523
538
  exports.KID_BLOCK_PALETTES = KidTools.KID_BLOCK_PALETTES;
524
539
  exports.BUILTIN_BENCHMARKS = BenchmarkSuite.BUILTIN_BENCHMARKS;
525
540
  exports.BenchmarkRunner = BenchmarkSuite.BenchmarkRunner;
541
+ exports.CHARACTER_ANIMATION_STATES = IconSprite.CHARACTER_ANIMATION_STATES;
542
+ exports.OBJECT_ANIMATION_STATES = IconSprite.OBJECT_ANIMATION_STATES;
543
+ exports.createIconAnimationClip = IconSprite.createIconAnimationClip;
544
+ exports.createIconAnimator = IconSprite.createIconAnimator;
545
+ exports.createIconEntity = IconSprite.createIconEntity;
546
+ exports.getIconTextureId = IconSprite.getIconTextureId;
547
+ exports.iconToSvgString = IconSprite.iconToSvgString;
548
+ exports.loadSvgImage = IconSprite.loadSvgImage;
549
+ exports.rasterizeSvg = IconSprite.rasterizeSvg;
550
+ exports.registerIconAnimationSet = IconSprite.registerIconAnimationSet;
551
+ exports.registerIconCanvasTexture = IconSprite.registerIconCanvasTexture;
552
+ exports.registerIconCatalog = IconSprite.registerIconCatalog;
553
+ exports.registerIconTexture = IconSprite.registerIconTexture;
554
+ exports.svgToDataUrl = IconSprite.svgToDataUrl;
555
+ exports.BLOOM_DEFAULTS = WebGPURenderPipeline.BLOOM_DEFAULTS;
556
+ exports.COLOR_GRADING_DEFAULTS = WebGPURenderPipeline.COLOR_GRADING_DEFAULTS;
557
+ exports.DEFAULT_PBR = WebGPURenderPipeline.DEFAULT_PBR;
558
+ exports.DEFAULT_RENDER_CONFIG = WebGPURenderPipeline.DEFAULT_RENDER_CONFIG;
559
+ exports.DOF_DEFAULTS = WebGPURenderPipeline.DOF_DEFAULTS;
560
+ exports.FXAA_DEFAULTS = WebGPURenderPipeline.FXAA_DEFAULTS;
561
+ exports.GPUResourceTracker = WebGPURenderPipeline.GPUResourceTracker;
562
+ exports.INSTANCE_LAYOUT = WebGPURenderPipeline.INSTANCE_LAYOUT;
563
+ exports.PostProcessStack = WebGPURenderPipeline.PostProcessStack;
564
+ exports.QUALITY_PRESET_CONFIGS = WebGPURenderPipeline.QUALITY_PRESET_CONFIGS;
565
+ exports.RenderPipelineManager = WebGPURenderPipeline.RenderPipelineManager;
566
+ exports.SSAO_DEFAULTS = WebGPURenderPipeline.SSAO_DEFAULTS;
567
+ exports.STANDARD_VERTEX_LAYOUT = WebGPURenderPipeline.STANDARD_VERTEX_LAYOUT;
568
+ exports.WebGPURenderer = WebGPURenderPipeline.WebGPURenderer;
569
+ exports.applyQualityPreset = WebGPURenderPipeline.applyQualityPreset;
570
+ exports.AudioBusMixer = AudioBridge.AudioBusMixer;
571
+ exports.DEFAULT_SPATIAL = AudioBridge.DEFAULT_SPATIAL;
572
+ exports.GameAudioBridge = AudioBridge.GameAudioBridge;
573
+ exports.GameAudioSettings = AudioBridge.GameAudioSettings;
574
+ exports.MusicManager = AudioBridge.MusicManager;
575
+ exports.SFXPool = AudioBridge.SFXPool;
576
+ exports.useGameAudio = AudioBridge.useGameAudio;
577
+ exports.ChoiceList = DialogueSystem.ChoiceList;
578
+ exports.DEFAULT_TEXT_SPEED = DialogueSystem.DEFAULT_TEXT_SPEED;
579
+ exports.DialogueBox = DialogueSystem.DialogueBox;
580
+ exports.DialogueEngine = DialogueSystem.DialogueEngine;
581
+ exports.DialogueTreeBuilder = DialogueSystem.DialogueTreeBuilder;
582
+ exports.EMOTION_COLORS = DialogueSystem.EMOTION_COLORS;
583
+ exports.applyLocalization = DialogueSystem.applyLocalization;
584
+ exports.createEmptyDialogueTree = DialogueSystem.createEmptyDialogueTree;
585
+ exports.deserializeDialogueTree = DialogueSystem.deserializeDialogueTree;
586
+ exports.extractTranslatableStrings = DialogueSystem.extractTranslatableStrings;
587
+ exports.findUnreachableNodes = DialogueSystem.findUnreachableNodes;
588
+ exports.serializeDialogueTree = DialogueSystem.serializeDialogueTree;
589
+ exports.useTypewriter = DialogueSystem.useTypewriter;
590
+ exports.validateDialogueTree = DialogueSystem.validateDialogueTree;
591
+ exports.DIFFICULTY_COLORS = QuestSystem.DIFFICULTY_COLORS;
592
+ exports.DIFFICULTY_XP_MULTIPLIERS = QuestSystem.DIFFICULTY_XP_MULTIPLIERS;
593
+ exports.QuestBuilder = QuestSystem.QuestBuilder;
594
+ exports.QuestList = QuestSystem.QuestList;
595
+ exports.QuestManager = QuestSystem.QuestManager;
596
+ exports.QuestTracker = QuestSystem.QuestTracker;
597
+ exports.createEmptyQuest = QuestSystem.createEmptyQuest;
598
+ exports.DEFAULT_SAVE_CONFIG = SaveSystemV2.DEFAULT_SAVE_CONFIG;
599
+ exports.MigrationEngine = SaveSystemV2.MigrationEngine;
600
+ exports.SaveSystemV2 = SaveSystemV2.SaveSystemV2;
601
+ exports.compressSaveData = SaveSystemV2.compressSaveData;
602
+ exports.crc32 = SaveSystemV2.crc32;
603
+ exports.decompressSaveData = SaveSystemV2.decompressSaveData;
604
+ exports.AnalyticsDashboard = GameplayAnalytics.AnalyticsDashboard;
605
+ exports.DEFAULT_HEATMAP_CONFIG = GameplayAnalytics.DEFAULT_HEATMAP_CONFIG;
606
+ exports.DEFAULT_RECORDING_CONFIG = GameplayAnalytics.DEFAULT_RECORDING_CONFIG;
607
+ exports.DEFAULT_TELEMETRY_CONFIG = GameplayAnalytics.DEFAULT_TELEMETRY_CONFIG;
608
+ exports.FunnelTracker = GameplayAnalytics.FunnelTracker;
609
+ exports.GameplayAnalytics = GameplayAnalytics.GameplayAnalytics;
610
+ exports.HeatmapGenerator = GameplayAnalytics.HeatmapGenerator;
611
+ exports.SessionPlayer = GameplayAnalytics.SessionPlayer;
612
+ exports.SessionRecorder = GameplayAnalytics.SessionRecorder;
613
+ exports.TelemetryPipeline = GameplayAnalytics.TelemetryPipeline;
614
+ exports.useGameplayAnalytics = GameplayAnalytics.useGameplayAnalytics;
526
615
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,23 +1,23 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
4
+ var React = require('react');
5
5
 
6
- const Ctx = react.createContext(undefined);
6
+ const Ctx = React.createContext(undefined);
7
7
  /* ── Provider ──────────────────────────────────────────────────── */
8
8
  function GamepadNavigationProvider({ children }) {
9
- const [focusables, setFocusables] = react.useState([]);
10
- const [activeId, setActiveId] = react.useState(null);
11
- const focusablesRef = react.useRef([]);
12
- const activeIdRef = react.useRef(null);
13
- const focusTrapStackRef = react.useRef([]);
14
- const gameModeLockRef = react.useRef(0);
15
- const enterGameMode = react.useCallback(() => { gameModeLockRef.current += 1; }, []);
16
- const exitGameMode = react.useCallback(() => { gameModeLockRef.current = Math.max(0, gameModeLockRef.current - 1); }, []);
17
- const pushFocusTrap = react.useCallback((prefix, onDismiss) => {
9
+ const [focusables, setFocusables] = React.useState([]);
10
+ const [activeId, setActiveId] = React.useState(null);
11
+ const focusablesRef = React.useRef([]);
12
+ const activeIdRef = React.useRef(null);
13
+ const focusTrapStackRef = React.useRef([]);
14
+ const gameModeLockRef = React.useRef(0);
15
+ const enterGameMode = React.useCallback(() => { gameModeLockRef.current += 1; }, []);
16
+ const exitGameMode = React.useCallback(() => { gameModeLockRef.current = Math.max(0, gameModeLockRef.current - 1); }, []);
17
+ const pushFocusTrap = React.useCallback((prefix, onDismiss) => {
18
18
  focusTrapStackRef.current = [...focusTrapStackRef.current, { prefix, onDismiss }];
19
19
  }, []);
20
- const popFocusTrap = react.useCallback(() => {
20
+ const popFocusTrap = React.useCallback(() => {
21
21
  var _a;
22
22
  const stack = focusTrapStackRef.current;
23
23
  if (stack.length === 0)
@@ -26,16 +26,16 @@ function GamepadNavigationProvider({ children }) {
26
26
  focusTrapStackRef.current = stack.slice(0, -1);
27
27
  (_a = top.onDismiss) === null || _a === void 0 ? void 0 : _a.call(top);
28
28
  }, []);
29
- react.useEffect(() => { focusablesRef.current = focusables; }, [focusables]);
30
- react.useEffect(() => { activeIdRef.current = activeId; }, [activeId]);
31
- const register = react.useCallback((meta) => {
29
+ React.useEffect(() => { focusablesRef.current = focusables; }, [focusables]);
30
+ React.useEffect(() => { activeIdRef.current = activeId; }, [activeId]);
31
+ const register = React.useCallback((meta) => {
32
32
  setFocusables(prev => {
33
33
  if (prev.some(f => f.id === meta.id))
34
34
  return prev;
35
35
  return [...prev, meta];
36
36
  });
37
37
  }, []);
38
- const unregister = react.useCallback((id) => {
38
+ const unregister = React.useCallback((id) => {
39
39
  setFocusables(prev => {
40
40
  var _a, _b;
41
41
  const filtered = prev.filter(f => f.id !== id);
@@ -52,7 +52,7 @@ function GamepadNavigationProvider({ children }) {
52
52
  return filtered;
53
53
  });
54
54
  }, []);
55
- const moveFocus = react.useCallback((dx, dy) => {
55
+ const moveFocus = React.useCallback((dx, dy) => {
56
56
  var _a, _b;
57
57
  if (gameModeLockRef.current > 0)
58
58
  return;
@@ -96,12 +96,12 @@ function GamepadNavigationProvider({ children }) {
96
96
  activeIdRef.current = best.id;
97
97
  (_b = best.ref.current) === null || _b === void 0 ? void 0 : _b.focus();
98
98
  }, []);
99
- const setActiveById = react.useCallback((id) => {
99
+ const setActiveById = React.useCallback((id) => {
100
100
  setActiveId(id);
101
101
  activeIdRef.current = id;
102
102
  }, []);
103
103
  // Keyboard navigation (Arrow keys)
104
- react.useEffect(() => {
104
+ React.useEffect(() => {
105
105
  const handler = (e) => {
106
106
  if (gameModeLockRef.current > 0)
107
107
  return;
@@ -131,7 +131,7 @@ function GamepadNavigationProvider({ children }) {
131
131
  return () => window.removeEventListener("keydown", handler);
132
132
  }, [moveFocus, popFocusTrap]);
133
133
  // Gamepad polling
134
- react.useEffect(() => {
134
+ React.useEffect(() => {
135
135
  let raf = 0;
136
136
  let prevDx = 0, prevDy = 0;
137
137
  const poll = () => {
@@ -170,7 +170,7 @@ function GamepadNavigationProvider({ children }) {
170
170
  return jsxRuntime.jsx(Ctx.Provider, { value: value, children: children });
171
171
  }
172
172
  function useGamepadNavigation() {
173
- const ctx = react.useContext(Ctx);
173
+ const ctx = React.useContext(Ctx);
174
174
  if (!ctx)
175
175
  throw new Error("useGamepadNavigation must be inside GamepadNavigationProvider");
176
176
  return ctx;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var react = require('react');
3
+ var React = require('react');
4
4
 
5
5
  /**
6
6
  * useGamepads — polls connected gamepads every frame.
@@ -42,9 +42,9 @@ function snapshot(gp) {
42
42
  };
43
43
  }
44
44
  function useGamepads() {
45
- const [pads, setPads] = react.useState([]);
46
- const rafRef = react.useRef(0);
47
- react.useEffect(() => {
45
+ const [pads, setPads] = React.useState([]);
46
+ const rafRef = React.useRef(0);
47
+ React.useEffect(() => {
48
48
  const poll = () => {
49
49
  var _a, _b;
50
50
  const raw = (_b = (_a = navigator.getGamepads) === null || _a === void 0 ? void 0 : _a.call(navigator)) !== null && _b !== void 0 ? _b : [];
@@ -67,7 +67,7 @@ function useGamepads() {
67
67
  */
68
68
  function useGamepadEdges() {
69
69
  const pads = useGamepads();
70
- const prevRef = react.useRef([]);
70
+ const prevRef = React.useRef([]);
71
71
  const justPressed = (padIndex, button) => {
72
72
  const cur = pads.find(p => p.index === padIndex);
73
73
  const prev = prevRef.current.find(p => p.index === padIndex);
@@ -77,7 +77,7 @@ function useGamepadEdges() {
77
77
  const pv = prev === null || prev === void 0 ? void 0 : prev[button];
78
78
  return cv === true && pv !== true;
79
79
  };
80
- react.useEffect(() => { prevRef.current = pads; });
80
+ React.useEffect(() => { prevRef.current = pads; });
81
81
  return { pads, justPressed };
82
82
  }
83
83
 
@@ -0,0 +1,281 @@
1
+ 'use strict';
2
+
3
+ /* ────────────────────────────────────────────────────────────────
4
+ IconSprite — Bridge between @nice2dev/icons-gaming SVG icons
5
+ and the game-engine Canvas 2D renderer.
6
+
7
+ Converts React SVG icon components to rasterized textures that
8
+ can be used as Sprite assets, including multi-frame animation
9
+ sheets generated from different animation states.
10
+ ──────────────────────────────────────────────────────────────── */
11
+ /* ── SVG to Image conversion ──────────────────────────────────── */
12
+ /**
13
+ * Render an icon component to an SVG string using React's static markup API.
14
+ * This function must be called with the result of ReactDOMServer.renderToStaticMarkup().
15
+ */
16
+ function iconToSvgString(svgMarkup, size) {
17
+ // Ensure SVG has xmlns for standalone rendering
18
+ if (!svgMarkup.includes('xmlns=')) {
19
+ svgMarkup = svgMarkup.replace('<svg', '<svg xmlns="http://www.w3.org/2000/svg"');
20
+ }
21
+ // Ensure dimensions
22
+ if (!svgMarkup.includes('width=')) {
23
+ svgMarkup = svgMarkup.replace('<svg', `<svg width="${size}" height="${size}"`);
24
+ }
25
+ return svgMarkup;
26
+ }
27
+ /**
28
+ * Convert an SVG string to a data URL suitable for Image loading.
29
+ */
30
+ function svgToDataUrl(svgString) {
31
+ const encoded = encodeURIComponent(svgString)
32
+ .replace(/'/g, '%27')
33
+ .replace(/"/g, '%22');
34
+ return `data:image/svg+xml,${encoded}`;
35
+ }
36
+ /**
37
+ * Load an SVG data URL into an HTMLImageElement (async).
38
+ */
39
+ function loadSvgImage(dataUrl) {
40
+ return new Promise((resolve, reject) => {
41
+ const img = new Image();
42
+ img.onload = () => resolve(img);
43
+ img.onerror = () => reject(new Error('Failed to load SVG image'));
44
+ img.src = dataUrl;
45
+ });
46
+ }
47
+ /**
48
+ * Rasterize an SVG string to an OffscreenCanvas / HTMLCanvasElement.
49
+ */
50
+ async function rasterizeSvg(svgString, size) {
51
+ const dataUrl = svgToDataUrl(svgString);
52
+ const img = await loadSvgImage(dataUrl);
53
+ const canvas = document.createElement('canvas');
54
+ canvas.width = size;
55
+ canvas.height = size;
56
+ const ctx = canvas.getContext('2d');
57
+ if (!ctx)
58
+ throw new Error('Failed to get 2D context');
59
+ ctx.drawImage(img, 0, 0, size, size);
60
+ return canvas;
61
+ }
62
+ /* ── Texture registration ─────────────────────────────────────── */
63
+ /**
64
+ * Generate a deterministic texture ID for an icon + options combination.
65
+ */
66
+ function getIconTextureId(displayName, options) {
67
+ const parts = [`icon:${displayName}`];
68
+ if (options === null || options === void 0 ? void 0 : options.size)
69
+ parts.push(`s${options.size}`);
70
+ if (options === null || options === void 0 ? void 0 : options.color)
71
+ parts.push(`c${options.color}`);
72
+ if ((options === null || options === void 0 ? void 0 : options.animation) && options.animation !== 'none')
73
+ parts.push(`a${options.animation}`);
74
+ return parts.join(':');
75
+ }
76
+ /**
77
+ * Register an SVG icon as a texture in the game-engine renderer.
78
+ *
79
+ * @param renderer The Renderer2D instance
80
+ * @param textureId Unique texture identifier
81
+ * @param svgMarkup Static SVG markup from ReactDOMServer.renderToStaticMarkup(<Icon ... />)
82
+ * @param size Rasterization size in px
83
+ * @returns Promise that resolves when the texture is ready
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * import { renderToStaticMarkup } from 'react-dom/server';
88
+ * import { GiWarrior } from '@nice2dev/icons-gaming';
89
+ * import { registerIconTexture, getIconTextureId } from '@nice2dev/game-engine';
90
+ *
91
+ * const id = getIconTextureId('GiWarrior', { size: 64 });
92
+ * const svg = renderToStaticMarkup(<GiWarrior size={64} color="#e74c3c" />);
93
+ * await registerIconTexture(renderer, id, svg, 64);
94
+ * ```
95
+ */
96
+ async function registerIconTexture(renderer, textureId, svgMarkup, size) {
97
+ const existing = renderer.getTexture(textureId);
98
+ if (existing)
99
+ return; // already loaded
100
+ const prepared = iconToSvgString(svgMarkup, size);
101
+ const dataUrl = svgToDataUrl(prepared);
102
+ await renderer.loadTexture(textureId, dataUrl);
103
+ }
104
+ /**
105
+ * Register an SVG icon as a rasterized canvas texture (sync-safe after await).
106
+ * Useful when you need pixel-perfect rendering without scaling artifacts.
107
+ */
108
+ async function registerIconCanvasTexture(renderer, textureId, svgMarkup, size) {
109
+ const existing = renderer.getTexture(textureId);
110
+ if (existing)
111
+ return;
112
+ const prepared = iconToSvgString(svgMarkup, size);
113
+ const canvas = await rasterizeSvg(prepared, size);
114
+ renderer.setTexture(textureId, canvas);
115
+ }
116
+ /* ── Entity helpers ───────────────────────────────────────────── */
117
+ /**
118
+ * Create a game entity with Sprite component sourced from an icon texture.
119
+ *
120
+ * The texture must already be registered via `registerIconTexture()`.
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * const entityId = createIconEntity(world, 'GiWarrior', textureId, {
125
+ * x: 200, y: 150, displayWidth: 64, displayHeight: 64, layer: 1,
126
+ * });
127
+ * ```
128
+ */
129
+ function createIconEntity(world, name, textureId, options) {
130
+ var _a, _b, _c, _d, _e, _f;
131
+ const entity = world.createEntity((_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : name);
132
+ entity.tags.add('icon-sprite');
133
+ world.addComponent(entity.id, 'Transform', {
134
+ position: { x: (_b = options === null || options === void 0 ? void 0 : options.x) !== null && _b !== void 0 ? _b : 0, y: (_c = options === null || options === void 0 ? void 0 : options.y) !== null && _c !== void 0 ? _c : 0 },
135
+ scale: { x: 1, y: 1 },
136
+ });
137
+ const spriteOverrides = {
138
+ assetId: textureId,
139
+ width: (_d = options === null || options === void 0 ? void 0 : options.displayWidth) !== null && _d !== void 0 ? _d : 32,
140
+ height: (_e = options === null || options === void 0 ? void 0 : options.displayHeight) !== null && _e !== void 0 ? _e : 32,
141
+ layer: (_f = options === null || options === void 0 ? void 0 : options.layer) !== null && _f !== void 0 ? _f : 0,
142
+ visible: true,
143
+ };
144
+ if (options === null || options === void 0 ? void 0 : options.tint)
145
+ spriteOverrides.tint = options.tint;
146
+ if ((options === null || options === void 0 ? void 0 : options.opacity) !== undefined)
147
+ spriteOverrides.opacity = options.opacity;
148
+ world.addComponent(entity.id, 'Sprite', spriteOverrides);
149
+ return entity.id;
150
+ }
151
+ /* ── Animation sheet helpers ──────────────────────────────────── */
152
+ /**
153
+ * Create a SpriteAnimation clip from multiple icon animation frames.
154
+ *
155
+ * Each frame is a separate registered texture. The AnimatorComponent
156
+ * switches `assetId` each frame to show different icon states.
157
+ *
158
+ * @param frames Array of { assetId, duration } for each frame
159
+ * @param loop Whether animation loops
160
+ */
161
+ function createIconAnimationClip(frames, fps = 8, loop = true) {
162
+ return {
163
+ frames: frames.map(f => ({
164
+ assetId: f.assetId,
165
+ srcRect: null,
166
+ duration: f.duration,
167
+ })),
168
+ fps,
169
+ loop,
170
+ };
171
+ }
172
+ /**
173
+ * Predefined character animation state sequences.
174
+ * Maps game animation concepts to sets of icon animation states
175
+ * that can be baked into textures.
176
+ */
177
+ const CHARACTER_ANIMATION_STATES = [
178
+ 'idle', 'move', 'jump', 'attack-melee', 'attack-ranged', 'attack-magic', 'damage', 'death',
179
+ ];
180
+ const OBJECT_ANIMATION_STATES = [
181
+ 'idle', 'spin', 'float', 'shake', 'glow', 'bounce', 'flicker',
182
+ ];
183
+ /**
184
+ * Batch-register all animation states of an icon as separate textures.
185
+ *
186
+ * @returns Map of animation state → texture ID
187
+ *
188
+ * @example
189
+ * ```ts
190
+ * const textures = await registerIconAnimationSet(
191
+ * renderer,
192
+ * 'GiWarrior',
193
+ * (anim) => renderToStaticMarkup(<GiWarrior size={64} animation={anim} color="#e74c3c" />),
194
+ * CHARACTER_ANIMATION_STATES,
195
+ * 64,
196
+ * );
197
+ * // textures = { idle: 'icon:GiWarrior:s64:aidle', move: 'icon:GiWarrior:s64:amove', ... }
198
+ * ```
199
+ */
200
+ async function registerIconAnimationSet(renderer, displayName, renderFn, states, size) {
201
+ const result = {};
202
+ for (const state of states) {
203
+ const textureId = getIconTextureId(displayName, { size, animation: state });
204
+ const svgMarkup = renderFn(state);
205
+ await registerIconTexture(renderer, textureId, svgMarkup, size);
206
+ result[state] = textureId;
207
+ }
208
+ return result;
209
+ }
210
+ /**
211
+ * Create an Animator component configuration from a registered animation set.
212
+ *
213
+ * @param textureMap Result from `registerIconAnimationSet()`
214
+ * @param defaultState Initial animation state (default: 'idle')
215
+ * @param fps Frames per second for each clip
216
+ */
217
+ function createIconAnimator(textureMap, defaultState = 'idle', fps = 1) {
218
+ const animations = {};
219
+ for (const [state, assetId] of Object.entries(textureMap)) {
220
+ animations[state] = {
221
+ frames: [{ assetId, srcRect: null }],
222
+ fps,
223
+ loop: true,
224
+ };
225
+ }
226
+ return {
227
+ currentAnimation: defaultState,
228
+ animations,
229
+ frame: 0,
230
+ elapsed: 0,
231
+ playing: true,
232
+ loop: true,
233
+ };
234
+ }
235
+ /**
236
+ * Register an entire icon map (e.g. `characterIcons`, `weaponIcons`)
237
+ * and return a catalog array for the asset manager / picker.
238
+ *
239
+ * @param renderer Renderer2D
240
+ * @param iconMap Map of name→icon render functions (SVG markup generators)
241
+ * @param category Category label for the asset catalog
242
+ * @param size Texture size
243
+ *
244
+ * @example
245
+ * ```ts
246
+ * const catalog = await registerIconCatalog(
247
+ * renderer,
248
+ * {
249
+ * GiWarrior: () => renderToStaticMarkup(<GiWarrior size={64} color="#e74c3c" />),
250
+ * GiMage: () => renderToStaticMarkup(<GiMage size={64} color="#3498db" />),
251
+ * },
252
+ * 'characters',
253
+ * 64,
254
+ * );
255
+ * ```
256
+ */
257
+ async function registerIconCatalog(renderer, iconMap, category, size) {
258
+ const catalog = [];
259
+ for (const [name, renderFn] of Object.entries(iconMap)) {
260
+ const textureId = getIconTextureId(name, { size });
261
+ await registerIconTexture(renderer, textureId, renderFn(), size);
262
+ catalog.push({ name, textureId, category });
263
+ }
264
+ return catalog;
265
+ }
266
+
267
+ exports.CHARACTER_ANIMATION_STATES = CHARACTER_ANIMATION_STATES;
268
+ exports.OBJECT_ANIMATION_STATES = OBJECT_ANIMATION_STATES;
269
+ exports.createIconAnimationClip = createIconAnimationClip;
270
+ exports.createIconAnimator = createIconAnimator;
271
+ exports.createIconEntity = createIconEntity;
272
+ exports.getIconTextureId = getIconTextureId;
273
+ exports.iconToSvgString = iconToSvgString;
274
+ exports.loadSvgImage = loadSvgImage;
275
+ exports.rasterizeSvg = rasterizeSvg;
276
+ exports.registerIconAnimationSet = registerIconAnimationSet;
277
+ exports.registerIconCanvasTexture = registerIconCanvasTexture;
278
+ exports.registerIconCatalog = registerIconCatalog;
279
+ exports.registerIconTexture = registerIconTexture;
280
+ exports.svgToDataUrl = svgToDataUrl;
281
+ //# sourceMappingURL=IconSprite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconSprite.js","sources":["../../../src/integration/IconSprite.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}