@nice2dev/game-engine 0.1.0
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/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/cjs/accessibility/Accessibility.js +162 -0
- package/dist/cjs/accessibility/Accessibility.js.map +1 -0
- package/dist/cjs/ai/AI.js +321 -0
- package/dist/cjs/ai/AI.js.map +1 -0
- package/dist/cjs/animation/Animation.js +233 -0
- package/dist/cjs/animation/Animation.js.map +1 -0
- package/dist/cjs/audio/AudioAdvanced.js +262 -0
- package/dist/cjs/audio/AudioAdvanced.js.map +1 -0
- package/dist/cjs/audio/AudioManager.js +248 -0
- package/dist/cjs/audio/AudioManager.js.map +1 -0
- package/dist/cjs/core/EventBus.js +63 -0
- package/dist/cjs/core/EventBus.js.map +1 -0
- package/dist/cjs/core/GameClock.js +70 -0
- package/dist/cjs/core/GameClock.js.map +1 -0
- package/dist/cjs/core/GameConfig.js +86 -0
- package/dist/cjs/core/GameConfig.js.map +1 -0
- package/dist/cjs/core/GameLoop.js +93 -0
- package/dist/cjs/core/GameLoop.js.map +1 -0
- package/dist/cjs/core/ServiceLocator.js +73 -0
- package/dist/cjs/core/ServiceLocator.js.map +1 -0
- package/dist/cjs/core/Validation.js +119 -0
- package/dist/cjs/core/Validation.js.map +1 -0
- package/dist/cjs/core/math.js +116 -0
- package/dist/cjs/core/math.js.map +1 -0
- package/dist/cjs/devtools/DevTools.js +560 -0
- package/dist/cjs/devtools/DevTools.js.map +1 -0
- package/dist/cjs/devtools/DeveloperExperience.js +562 -0
- package/dist/cjs/devtools/DeveloperExperience.js.map +1 -0
- package/dist/cjs/docs/DocGenerator.js +357 -0
- package/dist/cjs/docs/DocGenerator.js.map +1 -0
- package/dist/cjs/ecs/World.js +280 -0
- package/dist/cjs/ecs/World.js.map +1 -0
- package/dist/cjs/editor/AdvancedEditor.js +149 -0
- package/dist/cjs/editor/AdvancedEditor.js.map +1 -0
- package/dist/cjs/editor/AssetManager.js +190 -0
- package/dist/cjs/editor/AssetManager.js.map +1 -0
- package/dist/cjs/editor/DebugTools.js +187 -0
- package/dist/cjs/editor/DebugTools.js.map +1 -0
- package/dist/cjs/editor/NiceGameEditor.js +361 -0
- package/dist/cjs/editor/NiceGameEditor.js.map +1 -0
- package/dist/cjs/editor/SceneEditor.js +223 -0
- package/dist/cjs/editor/SceneEditor.js.map +1 -0
- package/dist/cjs/engine/NiceGameEngine.js +172 -0
- package/dist/cjs/engine/NiceGameEngine.js.map +1 -0
- package/dist/cjs/enterprise/Enterprise.js +258 -0
- package/dist/cjs/enterprise/Enterprise.js.map +1 -0
- package/dist/cjs/i18n/I18n.js +634 -0
- package/dist/cjs/i18n/I18n.js.map +1 -0
- package/dist/cjs/i18n/useTranslation.js +100 -0
- package/dist/cjs/i18n/useTranslation.js.map +1 -0
- package/dist/cjs/index.js +526 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/input/GamepadNavigation.js +181 -0
- package/dist/cjs/input/GamepadNavigation.js.map +1 -0
- package/dist/cjs/input/InputManager.js +404 -0
- package/dist/cjs/input/InputManager.js.map +1 -0
- package/dist/cjs/input/useGamepads.js +86 -0
- package/dist/cjs/input/useGamepads.js.map +1 -0
- package/dist/cjs/kids/KidMode.js +670 -0
- package/dist/cjs/kids/KidMode.js.map +1 -0
- package/dist/cjs/kids/KidTools.js +533 -0
- package/dist/cjs/kids/KidTools.js.map +1 -0
- package/dist/cjs/monetization/Monetization.js +197 -0
- package/dist/cjs/monetization/Monetization.js.map +1 -0
- package/dist/cjs/multiplayer/LocalMultiplayer.js +288 -0
- package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -0
- package/dist/cjs/multiplayer/MiniGameTypes.js +70 -0
- package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -0
- package/dist/cjs/network/MultiplayerTransport.js +109 -0
- package/dist/cjs/network/MultiplayerTransport.js.map +1 -0
- package/dist/cjs/network/Networking.js +569 -0
- package/dist/cjs/network/Networking.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js +32 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +51 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +46 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +18 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js +145 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +161 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +56 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +11 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +52 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +576 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +956 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +149 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +124 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js +17 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +188 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +199 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +108 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js +38 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +24 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js +264 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +160 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +88 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js +50 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +6 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
- package/dist/cjs/pathfinding/Pathfinding.js +255 -0
- package/dist/cjs/pathfinding/Pathfinding.js.map +1 -0
- package/dist/cjs/performance/BenchmarkSuite.js +318 -0
- package/dist/cjs/performance/BenchmarkSuite.js.map +1 -0
- package/dist/cjs/performance/Performance.js +180 -0
- package/dist/cjs/performance/Performance.js.map +1 -0
- package/dist/cjs/performance/PerformanceAdvanced.js +628 -0
- package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -0
- package/dist/cjs/physics/PhysicsAdvanced.js +432 -0
- package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -0
- package/dist/cjs/physics/PhysicsEngine2D.js +445 -0
- package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -0
- package/dist/cjs/plugins/PluginSDK.js +488 -0
- package/dist/cjs/plugins/PluginSDK.js.map +1 -0
- package/dist/cjs/plugins/PluginTestKit.js +368 -0
- package/dist/cjs/plugins/PluginTestKit.js.map +1 -0
- package/dist/cjs/procedural/Procedural.js +288 -0
- package/dist/cjs/procedural/Procedural.js.map +1 -0
- package/dist/cjs/procedural/WorldBuilding.js +246 -0
- package/dist/cjs/procedural/WorldBuilding.js.map +1 -0
- package/dist/cjs/release/MobileExport.js +149 -0
- package/dist/cjs/release/MobileExport.js.map +1 -0
- package/dist/cjs/release/Release.js +151 -0
- package/dist/cjs/release/Release.js.map +1 -0
- package/dist/cjs/rendering/Camera2D.js +129 -0
- package/dist/cjs/rendering/Camera2D.js.map +1 -0
- package/dist/cjs/rendering/Renderer2D.js +337 -0
- package/dist/cjs/rendering/Renderer2D.js.map +1 -0
- package/dist/cjs/runtime3d/Runtime3D.js +381 -0
- package/dist/cjs/runtime3d/Runtime3D.js.map +1 -0
- package/dist/cjs/runtime3d/SceneEditor3D.js +316 -0
- package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -0
- package/dist/cjs/scene/SceneManager.js +186 -0
- package/dist/cjs/scene/SceneManager.js.map +1 -0
- package/dist/cjs/scripting/NodeGraph.js +573 -0
- package/dist/cjs/scripting/NodeGraph.js.map +1 -0
- package/dist/cjs/social/Social.js +91 -0
- package/dist/cjs/social/Social.js.map +1 -0
- package/dist/cjs/templates/ActionTemplates.js +229 -0
- package/dist/cjs/templates/ActionTemplates.js.map +1 -0
- package/dist/cjs/templates/PartyTemplates.js +221 -0
- package/dist/cjs/templates/PartyTemplates.js.map +1 -0
- package/dist/cjs/templates/PuzzleTemplates.js +283 -0
- package/dist/cjs/templates/PuzzleTemplates.js.map +1 -0
- package/dist/cjs/templates/RPGTemplates.js +209 -0
- package/dist/cjs/templates/RPGTemplates.js.map +1 -0
- package/dist/cjs/templates/SportsTemplates.js +272 -0
- package/dist/cjs/templates/SportsTemplates.js.map +1 -0
- package/dist/cjs/templates/StrategyTemplates.js +173 -0
- package/dist/cjs/templates/StrategyTemplates.js.map +1 -0
- package/dist/cjs/templates/WaveDefense.js +470 -0
- package/dist/cjs/templates/WaveDefense.js.map +1 -0
- package/dist/cjs/tilemap/Tilemap.js +208 -0
- package/dist/cjs/tilemap/Tilemap.js.map +1 -0
- package/dist/cjs/tutorials/TutorialBranching.js +392 -0
- package/dist/cjs/tutorials/TutorialBranching.js.map +1 -0
- package/dist/cjs/tutorials/TutorialEngine.js +903 -0
- package/dist/cjs/tutorials/TutorialEngine.js.map +1 -0
- package/dist/cjs/tutorials/TutorialOverlay.js +602 -0
- package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -0
- package/dist/cjs/tutorials/content/Tutorials_T05_T08.js +816 -0
- package/dist/cjs/tutorials/content/Tutorials_T05_T08.js.map +1 -0
- package/dist/cjs/tutorials/content/Tutorials_T09_T11.js +741 -0
- package/dist/cjs/tutorials/content/Tutorials_T09_T11.js.map +1 -0
- package/dist/cjs/tutorials/content/Tutorials_T12_T15.js +786 -0
- package/dist/cjs/tutorials/content/Tutorials_T12_T15.js.map +1 -0
- package/dist/cjs/ui/GameUI.js +312 -0
- package/dist/cjs/ui/GameUI.js.map +1 -0
- package/dist/cjs/xr/ARVR.js +197 -0
- package/dist/cjs/xr/ARVR.js.map +1 -0
- package/dist/esm/accessibility/Accessibility.js +153 -0
- package/dist/esm/accessibility/Accessibility.js.map +1 -0
- package/dist/esm/ai/AI.js +302 -0
- package/dist/esm/ai/AI.js.map +1 -0
- package/dist/esm/animation/Animation.js +227 -0
- package/dist/esm/animation/Animation.js.map +1 -0
- package/dist/esm/audio/AudioAdvanced.js +243 -0
- package/dist/esm/audio/AudioAdvanced.js.map +1 -0
- package/dist/esm/audio/AudioManager.js +246 -0
- package/dist/esm/audio/AudioManager.js.map +1 -0
- package/dist/esm/core/EventBus.js +61 -0
- package/dist/esm/core/EventBus.js.map +1 -0
- package/dist/esm/core/GameClock.js +68 -0
- package/dist/esm/core/GameClock.js.map +1 -0
- package/dist/esm/core/GameConfig.js +80 -0
- package/dist/esm/core/GameConfig.js.map +1 -0
- package/dist/esm/core/GameLoop.js +91 -0
- package/dist/esm/core/GameLoop.js.map +1 -0
- package/dist/esm/core/ServiceLocator.js +70 -0
- package/dist/esm/core/ServiceLocator.js.map +1 -0
- package/dist/esm/core/Validation.js +108 -0
- package/dist/esm/core/Validation.js.map +1 -0
- package/dist/esm/core/math.js +114 -0
- package/dist/esm/core/math.js.map +1 -0
- package/dist/esm/devtools/DevTools.js +555 -0
- package/dist/esm/devtools/DevTools.js.map +1 -0
- package/dist/esm/devtools/DeveloperExperience.js +547 -0
- package/dist/esm/devtools/DeveloperExperience.js.map +1 -0
- package/dist/esm/docs/DocGenerator.js +353 -0
- package/dist/esm/docs/DocGenerator.js.map +1 -0
- package/dist/esm/ecs/World.js +276 -0
- package/dist/esm/ecs/World.js.map +1 -0
- package/dist/esm/editor/AdvancedEditor.js +141 -0
- package/dist/esm/editor/AdvancedEditor.js.map +1 -0
- package/dist/esm/editor/AssetManager.js +188 -0
- package/dist/esm/editor/AssetManager.js.map +1 -0
- package/dist/esm/editor/DebugTools.js +179 -0
- package/dist/esm/editor/DebugTools.js.map +1 -0
- package/dist/esm/editor/NiceGameEditor.js +355 -0
- package/dist/esm/editor/NiceGameEditor.js.map +1 -0
- package/dist/esm/editor/SceneEditor.js +209 -0
- package/dist/esm/editor/SceneEditor.js.map +1 -0
- package/dist/esm/engine/NiceGameEngine.js +170 -0
- package/dist/esm/engine/NiceGameEngine.js.map +1 -0
- package/dist/esm/enterprise/Enterprise.js +246 -0
- package/dist/esm/enterprise/Enterprise.js.map +1 -0
- package/dist/esm/i18n/I18n.js +622 -0
- package/dist/esm/i18n/I18n.js.map +1 -0
- package/dist/esm/i18n/useTranslation.js +95 -0
- package/dist/esm/i18n/useTranslation.js.map +1 -0
- package/dist/esm/index.js +71 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/input/GamepadNavigation.js +178 -0
- package/dist/esm/input/GamepadNavigation.js.map +1 -0
- package/dist/esm/input/InputManager.js +399 -0
- package/dist/esm/input/InputManager.js.map +1 -0
- package/dist/esm/input/useGamepads.js +83 -0
- package/dist/esm/input/useGamepads.js.map +1 -0
- package/dist/esm/kids/KidMode.js +663 -0
- package/dist/esm/kids/KidMode.js.map +1 -0
- package/dist/esm/kids/KidTools.js +529 -0
- package/dist/esm/kids/KidTools.js.map +1 -0
- package/dist/esm/monetization/Monetization.js +186 -0
- package/dist/esm/monetization/Monetization.js.map +1 -0
- package/dist/esm/multiplayer/LocalMultiplayer.js +284 -0
- package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -0
- package/dist/esm/multiplayer/MiniGameTypes.js +60 -0
- package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -0
- package/dist/esm/network/MultiplayerTransport.js +106 -0
- package/dist/esm/network/MultiplayerTransport.js.map +1 -0
- package/dist/esm/network/Networking.js +561 -0
- package/dist/esm/network/Networking.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js +30 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +49 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +44 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +16 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js +136 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +159 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +54 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +9 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +49 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +573 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +954 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +147 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +122 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js +15 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +186 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +197 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +106 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js +36 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +22 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js +249 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +158 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +86 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js +13 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +4 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
- package/dist/esm/pathfinding/Pathfinding.js +250 -0
- package/dist/esm/pathfinding/Pathfinding.js.map +1 -0
- package/dist/esm/performance/BenchmarkSuite.js +315 -0
- package/dist/esm/performance/BenchmarkSuite.js.map +1 -0
- package/dist/esm/performance/Performance.js +171 -0
- package/dist/esm/performance/Performance.js.map +1 -0
- package/dist/esm/performance/PerformanceAdvanced.js +620 -0
- package/dist/esm/performance/PerformanceAdvanced.js.map +1 -0
- package/dist/esm/physics/PhysicsAdvanced.js +417 -0
- package/dist/esm/physics/PhysicsAdvanced.js.map +1 -0
- package/dist/esm/physics/PhysicsEngine2D.js +442 -0
- package/dist/esm/physics/PhysicsEngine2D.js.map +1 -0
- package/dist/esm/plugins/PluginSDK.js +484 -0
- package/dist/esm/plugins/PluginSDK.js.map +1 -0
- package/dist/esm/plugins/PluginTestKit.js +359 -0
- package/dist/esm/plugins/PluginTestKit.js.map +1 -0
- package/dist/esm/procedural/Procedural.js +282 -0
- package/dist/esm/procedural/Procedural.js.map +1 -0
- package/dist/esm/procedural/WorldBuilding.js +225 -0
- package/dist/esm/procedural/WorldBuilding.js.map +1 -0
- package/dist/esm/release/MobileExport.js +142 -0
- package/dist/esm/release/MobileExport.js.map +1 -0
- package/dist/esm/release/Release.js +141 -0
- package/dist/esm/release/Release.js.map +1 -0
- package/dist/esm/rendering/Camera2D.js +127 -0
- package/dist/esm/rendering/Camera2D.js.map +1 -0
- package/dist/esm/rendering/Renderer2D.js +334 -0
- package/dist/esm/rendering/Renderer2D.js.map +1 -0
- package/dist/esm/runtime3d/Runtime3D.js +371 -0
- package/dist/esm/runtime3d/Runtime3D.js.map +1 -0
- package/dist/esm/runtime3d/SceneEditor3D.js +299 -0
- package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -0
- package/dist/esm/scene/SceneManager.js +184 -0
- package/dist/esm/scene/SceneManager.js.map +1 -0
- package/dist/esm/scripting/NodeGraph.js +568 -0
- package/dist/esm/scripting/NodeGraph.js.map +1 -0
- package/dist/esm/social/Social.js +85 -0
- package/dist/esm/social/Social.js.map +1 -0
- package/dist/esm/templates/ActionTemplates.js +217 -0
- package/dist/esm/templates/ActionTemplates.js.map +1 -0
- package/dist/esm/templates/PartyTemplates.js +204 -0
- package/dist/esm/templates/PartyTemplates.js.map +1 -0
- package/dist/esm/templates/PuzzleTemplates.js +267 -0
- package/dist/esm/templates/PuzzleTemplates.js.map +1 -0
- package/dist/esm/templates/RPGTemplates.js +196 -0
- package/dist/esm/templates/RPGTemplates.js.map +1 -0
- package/dist/esm/templates/SportsTemplates.js +257 -0
- package/dist/esm/templates/SportsTemplates.js.map +1 -0
- package/dist/esm/templates/StrategyTemplates.js +157 -0
- package/dist/esm/templates/StrategyTemplates.js.map +1 -0
- package/dist/esm/templates/WaveDefense.js +467 -0
- package/dist/esm/templates/WaveDefense.js.map +1 -0
- package/dist/esm/tilemap/Tilemap.js +205 -0
- package/dist/esm/tilemap/Tilemap.js.map +1 -0
- package/dist/esm/tutorials/TutorialBranching.js +388 -0
- package/dist/esm/tutorials/TutorialBranching.js.map +1 -0
- package/dist/esm/tutorials/TutorialEngine.js +897 -0
- package/dist/esm/tutorials/TutorialEngine.js.map +1 -0
- package/dist/esm/tutorials/TutorialOverlay.js +600 -0
- package/dist/esm/tutorials/TutorialOverlay.js.map +1 -0
- package/dist/esm/tutorials/content/Tutorials_T05_T08.js +810 -0
- package/dist/esm/tutorials/content/Tutorials_T05_T08.js.map +1 -0
- package/dist/esm/tutorials/content/Tutorials_T09_T11.js +736 -0
- package/dist/esm/tutorials/content/Tutorials_T09_T11.js.map +1 -0
- package/dist/esm/tutorials/content/Tutorials_T12_T15.js +780 -0
- package/dist/esm/tutorials/content/Tutorials_T12_T15.js.map +1 -0
- package/dist/esm/ui/GameUI.js +310 -0
- package/dist/esm/ui/GameUI.js.map +1 -0
- package/dist/esm/xr/ARVR.js +182 -0
- package/dist/esm/xr/ARVR.js.map +1 -0
- package/dist/types/__tests__/setup.d.ts +1 -0
- package/dist/types/accessibility/Accessibility.d.ts +82 -0
- package/dist/types/accessibility/index.d.ts +1 -0
- package/dist/types/ai/AI.d.ts +140 -0
- package/dist/types/ai/index.d.ts +1 -0
- package/dist/types/animation/Animation.d.ts +90 -0
- package/dist/types/animation/index.d.ts +1 -0
- package/dist/types/audio/AudioAdvanced.d.ts +190 -0
- package/dist/types/audio/AudioManager.d.ts +55 -0
- package/dist/types/audio/index.d.ts +1 -0
- package/dist/types/community/Community.d.ts +112 -0
- package/dist/types/community/index.d.ts +1 -0
- package/dist/types/core/EventBus.d.ts +16 -0
- package/dist/types/core/GameClock.d.ts +29 -0
- package/dist/types/core/GameConfig.d.ts +20 -0
- package/dist/types/core/GameLoop.d.ts +32 -0
- package/dist/types/core/ServiceLocator.d.ts +36 -0
- package/dist/types/core/TypeSafety.d.ts +190 -0
- package/dist/types/core/Validation.d.ts +24 -0
- package/dist/types/core/index.d.ts +7 -0
- package/dist/types/core/math.d.ts +32 -0
- package/dist/types/core/types.d.ts +130 -0
- package/dist/types/devtools/AssetStore.d.ts +133 -0
- package/dist/types/devtools/DevTools.d.ts +217 -0
- package/dist/types/devtools/DeveloperExperience.d.ts +123 -0
- package/dist/types/devtools/index.d.ts +3 -0
- package/dist/types/docs/APIPlayground.d.ts +26 -0
- package/dist/types/docs/Cookbook.d.ts +18 -0
- package/dist/types/docs/DocGenerator.d.ts +83 -0
- package/dist/types/docs/Guides.d.ts +18 -0
- package/dist/types/docs/index.d.ts +4 -0
- package/dist/types/ecs/World.d.ts +219 -0
- package/dist/types/ecs/index.d.ts +1 -0
- package/dist/types/editor/AdvancedEditor.d.ts +267 -0
- package/dist/types/editor/AssetManager.d.ts +45 -0
- package/dist/types/editor/DebugTools.d.ts +74 -0
- package/dist/types/editor/NiceGameEditor.d.ts +115 -0
- package/dist/types/editor/SceneEditor.d.ts +37 -0
- package/dist/types/editor/index.d.ts +8 -0
- package/dist/types/engine/NiceGameEngine.d.ts +53 -0
- package/dist/types/engine/index.d.ts +2 -0
- package/dist/types/enterprise/Enterprise.d.ts +217 -0
- package/dist/types/enterprise/index.d.ts +1 -0
- package/dist/types/epic/index.d.ts +10 -0
- package/dist/types/i18n/I18n.d.ts +107 -0
- package/dist/types/i18n/index.d.ts +2 -0
- package/dist/types/i18n/useTranslation.d.ts +74 -0
- package/dist/types/index.d.ts +127 -0
- package/dist/types/input/GamepadNavigation.d.ts +34 -0
- package/dist/types/input/InputManager.d.ts +77 -0
- package/dist/types/input/index.d.ts +3 -0
- package/dist/types/input/useGamepads.d.ts +39 -0
- package/dist/types/kids/KidMode.d.ts +207 -0
- package/dist/types/kids/KidTools.d.ts +135 -0
- package/dist/types/kids/index.d.ts +2 -0
- package/dist/types/legendary/index.d.ts +57 -0
- package/dist/types/monetization/Monetization.d.ts +224 -0
- package/dist/types/monetization/index.d.ts +1 -0
- package/dist/types/multiplayer/LocalMultiplayer.d.ts +61 -0
- package/dist/types/multiplayer/MiniGameTypes.d.ts +70 -0
- package/dist/types/multiplayer/index.d.ts +3 -0
- package/dist/types/network/MultiplayerTransport.d.ts +71 -0
- package/dist/types/network/Networking.d.ts +199 -0
- package/dist/types/network/index.d.ts +2 -0
- package/dist/types/pathfinding/Pathfinding.d.ts +42 -0
- package/dist/types/pathfinding/index.d.ts +1 -0
- package/dist/types/performance/AssetCompression.d.ts +137 -0
- package/dist/types/performance/BenchmarkSuite.d.ts +99 -0
- package/dist/types/performance/Performance.d.ts +87 -0
- package/dist/types/performance/PerformanceAdvanced.d.ts +220 -0
- package/dist/types/performance/WASMModules.d.ts +65 -0
- package/dist/types/performance/WebGPUCompute.d.ts +164 -0
- package/dist/types/performance/index.d.ts +1 -0
- package/dist/types/physics/PhysicsAdvanced.d.ts +148 -0
- package/dist/types/physics/PhysicsEngine2D.d.ts +66 -0
- package/dist/types/physics/index.d.ts +1 -0
- package/dist/types/plugins/PluginSDK.d.ts +134 -0
- package/dist/types/plugins/PluginTestKit.d.ts +107 -0
- package/dist/types/plugins/index.d.ts +2 -0
- package/dist/types/procedural/Procedural.d.ts +90 -0
- package/dist/types/procedural/WorldBuilding.d.ts +200 -0
- package/dist/types/procedural/index.d.ts +2 -0
- package/dist/types/release/MobileExport.d.ts +218 -0
- package/dist/types/release/Release.d.ts +81 -0
- package/dist/types/release/index.d.ts +1 -0
- package/dist/types/rendering/Camera2D.d.ts +39 -0
- package/dist/types/rendering/Renderer2D.d.ts +41 -0
- package/dist/types/rendering/index.d.ts +2 -0
- package/dist/types/runtime3d/Runtime3D.d.ts +259 -0
- package/dist/types/runtime3d/SceneEditor3D.d.ts +186 -0
- package/dist/types/runtime3d/index.d.ts +2 -0
- package/dist/types/scene/SceneManager.d.ts +59 -0
- package/dist/types/scene/index.d.ts +2 -0
- package/dist/types/scripting/NodeGraph.d.ts +84 -0
- package/dist/types/scripting/index.d.ts +2 -0
- package/dist/types/social/Social.d.ts +245 -0
- package/dist/types/social/index.d.ts +1 -0
- package/dist/types/templates/ActionTemplates.d.ts +173 -0
- package/dist/types/templates/PartyTemplates.d.ts +195 -0
- package/dist/types/templates/PuzzleTemplates.d.ts +127 -0
- package/dist/types/templates/RPGTemplates.d.ts +210 -0
- package/dist/types/templates/SportsTemplates.d.ts +162 -0
- package/dist/types/templates/StrategyTemplates.d.ts +264 -0
- package/dist/types/templates/WaveDefense.d.ts +92 -0
- package/dist/types/templates/index.d.ts +2 -0
- package/dist/types/tilemap/Tilemap.d.ts +66 -0
- package/dist/types/tilemap/index.d.ts +1 -0
- package/dist/types/tutorials/TutorialBranching.d.ts +132 -0
- package/dist/types/tutorials/TutorialEditor.d.ts +43 -0
- package/dist/types/tutorials/TutorialEngine.d.ts +237 -0
- package/dist/types/tutorials/TutorialOverlay.d.ts +79 -0
- package/dist/types/tutorials/VoiceNarration.d.ts +75 -0
- package/dist/types/tutorials/content/Tutorials_T04.d.ts +3 -0
- package/dist/types/tutorials/content/Tutorials_T05_T08.d.ts +6 -0
- package/dist/types/tutorials/content/Tutorials_T09_T11.d.ts +5 -0
- package/dist/types/tutorials/content/Tutorials_T12_T15.d.ts +6 -0
- package/dist/types/tutorials/content/UITutorials.d.ts +14 -0
- package/dist/types/tutorials/content/index.d.ts +5 -0
- package/dist/types/tutorials/index.d.ts +6 -0
- package/dist/types/ui/GameUI.d.ts +97 -0
- package/dist/types/ui/index.d.ts +2 -0
- package/dist/types/xr/ARVR.d.ts +252 -0
- package/dist/types/xr/index.d.ts +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { EventBus } from '../core/EventBus.js';
|
|
2
|
+
|
|
3
|
+
/* ────────────────────────────────────────────────────────────────
|
|
4
|
+
Plugin Test Kit — Testing framework for 3rd party plugins
|
|
5
|
+
|
|
6
|
+
Sprint L9: Automated plugin testing with sandboxed context,
|
|
7
|
+
lifecycle assertions, extension point verification, and
|
|
8
|
+
snapshot testing for plugin storage.
|
|
9
|
+
──────────────────────────────────────────────────────────────── */
|
|
10
|
+
/* ══════════════════════════════════════════════════════════════
|
|
11
|
+
In-Memory Test Storage
|
|
12
|
+
══════════════════════════════════════════════════════════════ */
|
|
13
|
+
class TestPluginStorage {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.data = new Map();
|
|
16
|
+
}
|
|
17
|
+
get(key) {
|
|
18
|
+
return this.data.get(key);
|
|
19
|
+
}
|
|
20
|
+
set(key, value) {
|
|
21
|
+
this.data.set(key, value);
|
|
22
|
+
}
|
|
23
|
+
remove(key) {
|
|
24
|
+
this.data.delete(key);
|
|
25
|
+
}
|
|
26
|
+
clear() {
|
|
27
|
+
this.data.clear();
|
|
28
|
+
}
|
|
29
|
+
keys() {
|
|
30
|
+
return Array.from(this.data.keys());
|
|
31
|
+
}
|
|
32
|
+
/** Snapshot current storage state for assertions. */
|
|
33
|
+
snapshot() {
|
|
34
|
+
const result = {};
|
|
35
|
+
for (const [k, v] of this.data) {
|
|
36
|
+
result[k] = v;
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
get size() {
|
|
41
|
+
return this.data.size;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/* ══════════════════════════════════════════════════════════════
|
|
45
|
+
Test Plugin Context — sandboxed context for testing
|
|
46
|
+
══════════════════════════════════════════════════════════════ */
|
|
47
|
+
class TestPluginContext {
|
|
48
|
+
constructor(manifest) {
|
|
49
|
+
this.logs = [];
|
|
50
|
+
this.warnings = [];
|
|
51
|
+
this.registeredExtensions = new Map();
|
|
52
|
+
this.log = (message) => {
|
|
53
|
+
this.logs.push(message);
|
|
54
|
+
};
|
|
55
|
+
this.warn = (message) => {
|
|
56
|
+
this.warnings.push(message);
|
|
57
|
+
};
|
|
58
|
+
this.registerExtension = (point, entry) => {
|
|
59
|
+
let list = this.registeredExtensions.get(point);
|
|
60
|
+
if (!list) {
|
|
61
|
+
list = [];
|
|
62
|
+
this.registeredExtensions.set(point, list);
|
|
63
|
+
}
|
|
64
|
+
list.push(entry);
|
|
65
|
+
};
|
|
66
|
+
this.unregisterExtension = (point, entry) => {
|
|
67
|
+
const list = this.registeredExtensions.get(point);
|
|
68
|
+
if (list) {
|
|
69
|
+
const idx = list.indexOf(entry);
|
|
70
|
+
if (idx >= 0)
|
|
71
|
+
list.splice(idx, 1);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
this.manifest = manifest;
|
|
75
|
+
this.events = new EventBus();
|
|
76
|
+
this.storage = new TestPluginStorage();
|
|
77
|
+
}
|
|
78
|
+
/* ── Assertion helpers ─────────────────────────────────────── */
|
|
79
|
+
/** Get all extensions registered for a given point. */
|
|
80
|
+
getExtensions(point) {
|
|
81
|
+
var _a;
|
|
82
|
+
return ((_a = this.registeredExtensions.get(point)) !== null && _a !== void 0 ? _a : []);
|
|
83
|
+
}
|
|
84
|
+
/** Count extensions for a given point. */
|
|
85
|
+
extensionCount(point) {
|
|
86
|
+
var _a;
|
|
87
|
+
return ((_a = this.registeredExtensions.get(point)) !== null && _a !== void 0 ? _a : []).length;
|
|
88
|
+
}
|
|
89
|
+
/** Check if any extension was registered for a given point. */
|
|
90
|
+
hasExtension(point) {
|
|
91
|
+
return this.extensionCount(point) > 0;
|
|
92
|
+
}
|
|
93
|
+
/** Get storage snapshot for assertion/comparison. */
|
|
94
|
+
storageSnapshot() {
|
|
95
|
+
return this.storage.snapshot();
|
|
96
|
+
}
|
|
97
|
+
/** Reset context to fresh state (between tests). */
|
|
98
|
+
reset() {
|
|
99
|
+
this.logs.length = 0;
|
|
100
|
+
this.warnings.length = 0;
|
|
101
|
+
this.registeredExtensions.clear();
|
|
102
|
+
this.storage.clear();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/* ══════════════════════════════════════════════════════════════
|
|
106
|
+
Assertion Utilities
|
|
107
|
+
══════════════════════════════════════════════════════════════ */
|
|
108
|
+
class PluginAssertionError extends Error {
|
|
109
|
+
constructor(message) {
|
|
110
|
+
super(message);
|
|
111
|
+
this.name = 'PluginAssertionError';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const pluginAssert = {
|
|
115
|
+
/** Assert value is truthy. */
|
|
116
|
+
ok(value, message) {
|
|
117
|
+
if (!value) {
|
|
118
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected truthy, got ${String(value)}`);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
/** Assert strict equality. */
|
|
122
|
+
equal(actual, expected, message) {
|
|
123
|
+
if (actual !== expected) {
|
|
124
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected ${String(expected)}, got ${String(actual)}`);
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
/** Assert not equal. */
|
|
128
|
+
notEqual(actual, notExpected, message) {
|
|
129
|
+
if (actual === notExpected) {
|
|
130
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected not ${String(notExpected)}`);
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
/** Assert deep equality (JSON comparison). */
|
|
134
|
+
deepEqual(actual, expected, message) {
|
|
135
|
+
const a = JSON.stringify(actual);
|
|
136
|
+
const b = JSON.stringify(expected);
|
|
137
|
+
if (a !== b) {
|
|
138
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Deep equality failed.\nActual: ${a}\nExpected: ${b}`);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
/** Assert that a function throws. */
|
|
142
|
+
throws(fn, message) {
|
|
143
|
+
let threw = false;
|
|
144
|
+
try {
|
|
145
|
+
fn();
|
|
146
|
+
}
|
|
147
|
+
catch (_a) {
|
|
148
|
+
threw = true;
|
|
149
|
+
}
|
|
150
|
+
if (!threw) {
|
|
151
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : 'Expected function to throw');
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
/** Assert async function throws. */
|
|
155
|
+
async throwsAsync(fn, message) {
|
|
156
|
+
let threw = false;
|
|
157
|
+
try {
|
|
158
|
+
await fn();
|
|
159
|
+
}
|
|
160
|
+
catch (_a) {
|
|
161
|
+
threw = true;
|
|
162
|
+
}
|
|
163
|
+
if (!threw) {
|
|
164
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : 'Expected async function to throw');
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
/** Assert array contains element. */
|
|
168
|
+
contains(arr, item, message) {
|
|
169
|
+
if (arr.indexOf(item) < 0) {
|
|
170
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Array does not contain ${String(item)}`);
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
/** Assert string includes substring. */
|
|
174
|
+
includes(str, substr, message) {
|
|
175
|
+
if (!str.includes(substr)) {
|
|
176
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `"${str}" does not include "${substr}"`);
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
/** Assert extension was registered. */
|
|
180
|
+
hasExtension(ctx, point, message) {
|
|
181
|
+
if (!ctx.hasExtension(point)) {
|
|
182
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No extension registered for "${point}"`);
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
/** Assert extension count. */
|
|
186
|
+
extensionCount(ctx, point, expected, message) {
|
|
187
|
+
const actual = ctx.extensionCount(point);
|
|
188
|
+
if (actual !== expected) {
|
|
189
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected ${expected} extensions for "${point}", got ${actual}`);
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
/** Assert log message was emitted. */
|
|
193
|
+
logged(ctx, substr, message) {
|
|
194
|
+
const found = ctx.logs.some(l => l.includes(substr));
|
|
195
|
+
if (!found) {
|
|
196
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No log message containing "${substr}". Logs: [${ctx.logs.join(', ')}]`);
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
/** Assert warning was emitted. */
|
|
200
|
+
warned(ctx, substr, message) {
|
|
201
|
+
const found = ctx.warnings.some(w => w.includes(substr));
|
|
202
|
+
if (!found) {
|
|
203
|
+
throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No warning containing "${substr}". Warnings: [${ctx.warnings.join(', ')}]`);
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
/* ══════════════════════════════════════════════════════════════
|
|
208
|
+
Plugin Test Runner
|
|
209
|
+
══════════════════════════════════════════════════════════════ */
|
|
210
|
+
class PluginTestRunner {
|
|
211
|
+
constructor() {
|
|
212
|
+
this.tests = [];
|
|
213
|
+
this._beforeEach = null;
|
|
214
|
+
this._afterEach = null;
|
|
215
|
+
}
|
|
216
|
+
/** Add a test case. */
|
|
217
|
+
test(name, fn) {
|
|
218
|
+
this.tests.push({ name, fn });
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
221
|
+
/** Add a skipped test case. */
|
|
222
|
+
skip(name, fn) {
|
|
223
|
+
this.tests.push({ name, fn, skip: true });
|
|
224
|
+
return this;
|
|
225
|
+
}
|
|
226
|
+
/** Run something before each test. */
|
|
227
|
+
beforeEach(fn) {
|
|
228
|
+
this._beforeEach = fn;
|
|
229
|
+
return this;
|
|
230
|
+
}
|
|
231
|
+
/** Run something after each test. */
|
|
232
|
+
afterEach(fn) {
|
|
233
|
+
this._afterEach = fn;
|
|
234
|
+
return this;
|
|
235
|
+
}
|
|
236
|
+
/** Run all tests against a plugin. */
|
|
237
|
+
async run(plugin, suiteName) {
|
|
238
|
+
const manifest = plugin.manifest;
|
|
239
|
+
const ctx = new TestPluginContext(manifest);
|
|
240
|
+
const results = [];
|
|
241
|
+
let passed = 0;
|
|
242
|
+
let failed = 0;
|
|
243
|
+
let skipped = 0;
|
|
244
|
+
const suiteStart = performance.now();
|
|
245
|
+
for (const tc of this.tests) {
|
|
246
|
+
if (tc.skip) {
|
|
247
|
+
results.push({ name: tc.name, status: 'skipped', duration: 0 });
|
|
248
|
+
skipped++;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
ctx.reset();
|
|
252
|
+
const start = performance.now();
|
|
253
|
+
try {
|
|
254
|
+
if (this._beforeEach)
|
|
255
|
+
await this._beforeEach(ctx);
|
|
256
|
+
await tc.fn(ctx);
|
|
257
|
+
if (this._afterEach)
|
|
258
|
+
await this._afterEach(ctx);
|
|
259
|
+
results.push({
|
|
260
|
+
name: tc.name,
|
|
261
|
+
status: 'passed',
|
|
262
|
+
duration: performance.now() - start,
|
|
263
|
+
});
|
|
264
|
+
passed++;
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
results.push({
|
|
268
|
+
name: tc.name,
|
|
269
|
+
status: 'failed',
|
|
270
|
+
duration: performance.now() - start,
|
|
271
|
+
error: err instanceof Error ? err.message : String(err),
|
|
272
|
+
});
|
|
273
|
+
failed++;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
pluginId: manifest.id,
|
|
278
|
+
suiteName: suiteName !== null && suiteName !== void 0 ? suiteName : `${manifest.name} tests`,
|
|
279
|
+
results,
|
|
280
|
+
passed,
|
|
281
|
+
failed,
|
|
282
|
+
skipped,
|
|
283
|
+
totalDuration: performance.now() - suiteStart,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/* ══════════════════════════════════════════════════════════════
|
|
288
|
+
Convenience: Quick Plugin Test
|
|
289
|
+
══════════════════════════════════════════════════════════════ */
|
|
290
|
+
/** Create a default manifest for testing. */
|
|
291
|
+
function createTestManifest(overrides) {
|
|
292
|
+
return {
|
|
293
|
+
id: 'com.test.plugin',
|
|
294
|
+
name: 'Test Plugin',
|
|
295
|
+
version: '1.0.0',
|
|
296
|
+
description: 'A plugin for testing',
|
|
297
|
+
author: 'Test',
|
|
298
|
+
types: ['component'],
|
|
299
|
+
engineVersion: '>=0.1.0',
|
|
300
|
+
...overrides,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
/** Quick lifecycle test — activate, verify, deactivate. */
|
|
304
|
+
async function testPluginLifecycle(plugin) {
|
|
305
|
+
const runner = new PluginTestRunner();
|
|
306
|
+
runner
|
|
307
|
+
.test('should activate without errors', async (ctx) => {
|
|
308
|
+
await plugin.activate(ctx);
|
|
309
|
+
})
|
|
310
|
+
.test('should register at least one extension', async (ctx) => {
|
|
311
|
+
await plugin.activate(ctx);
|
|
312
|
+
let total = 0;
|
|
313
|
+
for (const [, entries] of ctx.registeredExtensions) {
|
|
314
|
+
total += entries.length;
|
|
315
|
+
}
|
|
316
|
+
pluginAssert.ok(total > 0, 'Plugin should register at least one extension');
|
|
317
|
+
})
|
|
318
|
+
.test('should deactivate without errors', async (ctx) => {
|
|
319
|
+
await plugin.activate(ctx);
|
|
320
|
+
if (plugin.deactivate) {
|
|
321
|
+
await plugin.deactivate(ctx);
|
|
322
|
+
}
|
|
323
|
+
})
|
|
324
|
+
.test('should survive activate → deactivate → activate cycle', async (ctx) => {
|
|
325
|
+
await plugin.activate(ctx);
|
|
326
|
+
if (plugin.deactivate)
|
|
327
|
+
await plugin.deactivate(ctx);
|
|
328
|
+
ctx.reset();
|
|
329
|
+
await plugin.activate(ctx);
|
|
330
|
+
})
|
|
331
|
+
.test('should produce log output', async (ctx) => {
|
|
332
|
+
await plugin.activate(ctx);
|
|
333
|
+
pluginAssert.ok(ctx.logs.length > 0, 'Plugin should log something on activation');
|
|
334
|
+
});
|
|
335
|
+
return runner.run(plugin, `${plugin.manifest.name} lifecycle`);
|
|
336
|
+
}
|
|
337
|
+
/** Format test results as a readable string. */
|
|
338
|
+
function formatTestResults(suite) {
|
|
339
|
+
const lines = [
|
|
340
|
+
`━━━ ${suite.suiteName} (${suite.pluginId}) ━━━`,
|
|
341
|
+
'',
|
|
342
|
+
];
|
|
343
|
+
for (const r of suite.results) {
|
|
344
|
+
const icon = r.status === 'passed' ? '✓' : r.status === 'failed' ? '✗' : '○';
|
|
345
|
+
const ms = r.duration.toFixed(1);
|
|
346
|
+
lines.push(` ${icon} ${r.name} (${ms}ms)`);
|
|
347
|
+
if (r.error) {
|
|
348
|
+
lines.push(` → ${r.error}`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
lines.push('');
|
|
352
|
+
lines.push(` ${suite.passed} passed, ${suite.failed} failed, ${suite.skipped} skipped`);
|
|
353
|
+
lines.push(` Total: ${suite.totalDuration.toFixed(1)}ms`);
|
|
354
|
+
lines.push('');
|
|
355
|
+
return lines.join('\n');
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
export { PluginAssertionError, PluginTestRunner, TestPluginContext, TestPluginStorage, createTestManifest, formatTestResults, pluginAssert, testPluginLifecycle };
|
|
359
|
+
//# sourceMappingURL=PluginTestKit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginTestKit.js","sources":["../../../src/plugins/PluginTestKit.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/* ────────────────────────────────────────────────────────────────
|
|
2
|
+
Procedural Generation — Random, Noise, Wave, LootTable
|
|
3
|
+
──────────────────────────────────────────────────────────────── */
|
|
4
|
+
/* ────────────────────────────────────────────────────────────────
|
|
5
|
+
SEEDED RANDOM (xoshiro128**)
|
|
6
|
+
──────────────────────────────────────────────────────────────── */
|
|
7
|
+
class SeededRandom {
|
|
8
|
+
constructor(seed = Date.now()) {
|
|
9
|
+
this.s = new Uint32Array(4);
|
|
10
|
+
// SplitMix32 seed expansion
|
|
11
|
+
let z = seed >>> 0;
|
|
12
|
+
for (let i = 0; i < 4; i++) {
|
|
13
|
+
z = (z + 0x9e3779b9) >>> 0;
|
|
14
|
+
let t = z ^ (z >>> 16);
|
|
15
|
+
t = Math.imul(t, 0x21f0aaad);
|
|
16
|
+
t = t ^ (t >>> 15);
|
|
17
|
+
t = Math.imul(t, 0x735a2d97);
|
|
18
|
+
t = t ^ (t >>> 15);
|
|
19
|
+
this.s[i] = t >>> 0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Returns [0, 1). */
|
|
23
|
+
next() {
|
|
24
|
+
const s = this.s;
|
|
25
|
+
const result = Math.imul(rotl(Math.imul(s[1], 5), 7), 9) >>> 0;
|
|
26
|
+
const t = s[1] << 9;
|
|
27
|
+
s[2] ^= s[0];
|
|
28
|
+
s[3] ^= s[1];
|
|
29
|
+
s[1] ^= s[2];
|
|
30
|
+
s[0] ^= s[3];
|
|
31
|
+
s[2] ^= t;
|
|
32
|
+
s[3] = rotl(s[3], 11);
|
|
33
|
+
return (result >>> 0) / 0x100000000;
|
|
34
|
+
}
|
|
35
|
+
/** Returns integer in [min, max] (inclusive). */
|
|
36
|
+
int(min, max) {
|
|
37
|
+
return min + Math.floor(this.next() * (max - min + 1));
|
|
38
|
+
}
|
|
39
|
+
/** Returns float in [min, max). */
|
|
40
|
+
float(min, max) {
|
|
41
|
+
return min + this.next() * (max - min);
|
|
42
|
+
}
|
|
43
|
+
/** Returns true with given probability (0-1). */
|
|
44
|
+
chance(probability) {
|
|
45
|
+
return this.next() < probability;
|
|
46
|
+
}
|
|
47
|
+
/** Pick a random element from an array. */
|
|
48
|
+
pick(arr) {
|
|
49
|
+
return arr[Math.floor(this.next() * arr.length)];
|
|
50
|
+
}
|
|
51
|
+
/** Shuffle array in-place (Fisher-Yates). */
|
|
52
|
+
shuffle(arr) {
|
|
53
|
+
for (let i = arr.length - 1; i > 0; i--) {
|
|
54
|
+
const j = Math.floor(this.next() * (i + 1));
|
|
55
|
+
const tmp = arr[i];
|
|
56
|
+
arr[i] = arr[j];
|
|
57
|
+
arr[j] = tmp;
|
|
58
|
+
}
|
|
59
|
+
return arr;
|
|
60
|
+
}
|
|
61
|
+
/** Weighted random pick. Returns index. */
|
|
62
|
+
weighted(weights) {
|
|
63
|
+
let total = 0;
|
|
64
|
+
for (const w of weights)
|
|
65
|
+
total += w;
|
|
66
|
+
let r = this.next() * total;
|
|
67
|
+
for (let i = 0; i < weights.length; i++) {
|
|
68
|
+
r -= weights[i];
|
|
69
|
+
if (r <= 0)
|
|
70
|
+
return i;
|
|
71
|
+
}
|
|
72
|
+
return weights.length - 1;
|
|
73
|
+
}
|
|
74
|
+
/** Random color. */
|
|
75
|
+
color(alpha = 1) {
|
|
76
|
+
return { r: this.next(), g: this.next(), b: this.next(), a: alpha };
|
|
77
|
+
}
|
|
78
|
+
/** Random unit vector. */
|
|
79
|
+
unitVec2() {
|
|
80
|
+
const angle = this.next() * Math.PI * 2;
|
|
81
|
+
return { x: Math.cos(angle), y: Math.sin(angle) };
|
|
82
|
+
}
|
|
83
|
+
/** Random point inside a circle. */
|
|
84
|
+
insideCircle(radius) {
|
|
85
|
+
const a = this.next() * Math.PI * 2;
|
|
86
|
+
const r = Math.sqrt(this.next()) * radius;
|
|
87
|
+
return { x: Math.cos(a) * r, y: Math.sin(a) * r };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function rotl(x, k) {
|
|
91
|
+
return ((x << k) | (x >>> (32 - k))) >>> 0;
|
|
92
|
+
}
|
|
93
|
+
/* ────────────────────────────────────────────────────────────────
|
|
94
|
+
PERLIN NOISE (2D, improved)
|
|
95
|
+
──────────────────────────────────────────────────────────────── */
|
|
96
|
+
class PerlinNoise {
|
|
97
|
+
constructor(seed = 0) {
|
|
98
|
+
this.perm = new Uint8Array(512);
|
|
99
|
+
const rng = new SeededRandom(seed);
|
|
100
|
+
const p = new Uint8Array(256);
|
|
101
|
+
for (let i = 0; i < 256; i++)
|
|
102
|
+
p[i] = i;
|
|
103
|
+
// Shuffle
|
|
104
|
+
for (let i = 255; i > 0; i--) {
|
|
105
|
+
const j = rng.int(0, i);
|
|
106
|
+
const tmp = p[i];
|
|
107
|
+
p[i] = p[j];
|
|
108
|
+
p[j] = tmp;
|
|
109
|
+
}
|
|
110
|
+
for (let i = 0; i < 512; i++)
|
|
111
|
+
this.perm[i] = p[i & 255];
|
|
112
|
+
}
|
|
113
|
+
/** Get noise value at (x, y) → [-1, 1]. */
|
|
114
|
+
noise2D(x, y) {
|
|
115
|
+
const X = Math.floor(x) & 255;
|
|
116
|
+
const Y = Math.floor(y) & 255;
|
|
117
|
+
const xf = x - Math.floor(x);
|
|
118
|
+
const yf = y - Math.floor(y);
|
|
119
|
+
const u = fade(xf);
|
|
120
|
+
const v = fade(yf);
|
|
121
|
+
const p = this.perm;
|
|
122
|
+
const A = p[X] + Y;
|
|
123
|
+
const B = p[X + 1] + Y;
|
|
124
|
+
return lerp(lerp(grad(p[A], xf, yf), grad(p[B], xf - 1, yf), u), lerp(grad(p[A + 1], xf, yf - 1), grad(p[B + 1], xf - 1, yf - 1), u), v);
|
|
125
|
+
}
|
|
126
|
+
/** Fractal Brownian Motion (layered noise). */
|
|
127
|
+
fbm(x, y, octaves = 4, lacunarity = 2, gain = 0.5) {
|
|
128
|
+
let value = 0;
|
|
129
|
+
let amplitude = 1;
|
|
130
|
+
let frequency = 1;
|
|
131
|
+
let maxValue = 0;
|
|
132
|
+
for (let i = 0; i < octaves; i++) {
|
|
133
|
+
value += this.noise2D(x * frequency, y * frequency) * amplitude;
|
|
134
|
+
maxValue += amplitude;
|
|
135
|
+
amplitude *= gain;
|
|
136
|
+
frequency *= lacunarity;
|
|
137
|
+
}
|
|
138
|
+
return value / maxValue;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function fade(t) {
|
|
142
|
+
return t * t * t * (t * (t * 6 - 15) + 10);
|
|
143
|
+
}
|
|
144
|
+
function lerp(a, b, t) {
|
|
145
|
+
return a + t * (b - a);
|
|
146
|
+
}
|
|
147
|
+
function grad(hash, x, y) {
|
|
148
|
+
const h = hash & 3;
|
|
149
|
+
const u = h < 2 ? x : y;
|
|
150
|
+
const v = h < 2 ? y : x;
|
|
151
|
+
return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);
|
|
152
|
+
}
|
|
153
|
+
class WaveGenerator {
|
|
154
|
+
constructor(seed) {
|
|
155
|
+
this.rng = new SeededRandom(seed);
|
|
156
|
+
}
|
|
157
|
+
generateWave(waveNumber, config) {
|
|
158
|
+
const totalEnemies = Math.floor(config.baseEnemyCount * Math.pow(config.countGrowth, waveNumber - 1));
|
|
159
|
+
// Filter types available at this wave
|
|
160
|
+
const available = config.typeProbabilities.filter(tp => waveNumber >= tp.minWave);
|
|
161
|
+
if (available.length === 0)
|
|
162
|
+
return [];
|
|
163
|
+
const weights = available.map(a => a.weight);
|
|
164
|
+
const entries = [];
|
|
165
|
+
let remaining = totalEnemies;
|
|
166
|
+
let cumulativeDelay = 0;
|
|
167
|
+
while (remaining > 0) {
|
|
168
|
+
const groupCount = Math.min(remaining, this.rng.int(config.groupSize[0], config.groupSize[1]));
|
|
169
|
+
const typeIdx = this.rng.weighted(weights);
|
|
170
|
+
entries.push({
|
|
171
|
+
type: available[typeIdx].type,
|
|
172
|
+
count: groupCount,
|
|
173
|
+
delay: cumulativeDelay,
|
|
174
|
+
spawnInterval: this.rng.float(config.spawnInterval[0], config.spawnInterval[1]),
|
|
175
|
+
});
|
|
176
|
+
remaining -= groupCount;
|
|
177
|
+
cumulativeDelay += this.rng.float(config.groupDelay[0], config.groupDelay[1]);
|
|
178
|
+
}
|
|
179
|
+
return entries;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
class LootTable {
|
|
183
|
+
constructor(drops, seed) {
|
|
184
|
+
this.drops = drops;
|
|
185
|
+
this.rng = new SeededRandom(seed);
|
|
186
|
+
}
|
|
187
|
+
/** Roll N items from the table. */
|
|
188
|
+
roll(count, level = 1) {
|
|
189
|
+
var _a;
|
|
190
|
+
const eligible = this.drops.filter(d => !d.minLevel || level >= d.minLevel);
|
|
191
|
+
if (eligible.length === 0)
|
|
192
|
+
return [];
|
|
193
|
+
const weights = eligible.map(d => d.weight);
|
|
194
|
+
const results = [];
|
|
195
|
+
const rollCounts = new Map();
|
|
196
|
+
for (let i = 0; i < count; i++) {
|
|
197
|
+
// rebuild weights excluding maxed-out items
|
|
198
|
+
const currentWeights = eligible.map((d, idx) => {
|
|
199
|
+
var _a;
|
|
200
|
+
if (d.maxPerRoll != null) {
|
|
201
|
+
const used = (_a = rollCounts.get(d.id)) !== null && _a !== void 0 ? _a : 0;
|
|
202
|
+
if (used >= d.maxPerRoll)
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
return weights[idx];
|
|
206
|
+
});
|
|
207
|
+
if (currentWeights.every(w => w === 0))
|
|
208
|
+
break;
|
|
209
|
+
const idx = this.rng.weighted(currentWeights);
|
|
210
|
+
const drop = eligible[idx];
|
|
211
|
+
const qty = this.rng.int(drop.quantity[0], drop.quantity[1]);
|
|
212
|
+
results.push({ id: drop.id, quantity: qty });
|
|
213
|
+
rollCounts.set(drop.id, ((_a = rollCounts.get(drop.id)) !== null && _a !== void 0 ? _a : 0) + 1);
|
|
214
|
+
}
|
|
215
|
+
return results;
|
|
216
|
+
}
|
|
217
|
+
/** Simple yes/no chance to drop each item independently. */
|
|
218
|
+
rollEach(level = 1) {
|
|
219
|
+
const results = [];
|
|
220
|
+
for (const drop of this.drops) {
|
|
221
|
+
if (drop.minLevel != null && level < drop.minLevel)
|
|
222
|
+
continue;
|
|
223
|
+
// Normalize weight as probability (assume max total = 100)
|
|
224
|
+
if (this.rng.chance(drop.weight / 100)) {
|
|
225
|
+
results.push({ id: drop.id, quantity: this.rng.int(drop.quantity[0], drop.quantity[1]) });
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return results;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/* ────────────────────────────────────────────────────────────────
|
|
232
|
+
PROCEDURAL SPRITE — Generate simple procedural sprites
|
|
233
|
+
──────────────────────────────────────────────────────────────── */
|
|
234
|
+
class ProceduralSprite {
|
|
235
|
+
constructor(seed) {
|
|
236
|
+
this.rng = new SeededRandom(seed);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Generate a symmetrical pixel art sprite as ImageData.
|
|
240
|
+
* Good for enemies, ships, items.
|
|
241
|
+
*/
|
|
242
|
+
generate(width, height, palette, symmetry = 'horizontal') {
|
|
243
|
+
const data = new ImageData(width, height);
|
|
244
|
+
const halfW = symmetry === 'horizontal' || symmetry === 'both' ? Math.ceil(width / 2) : width;
|
|
245
|
+
const halfH = symmetry === 'vertical' || symmetry === 'both' ? Math.ceil(height / 2) : height;
|
|
246
|
+
// Generate half, then mirror
|
|
247
|
+
const grid = new Array(halfW * halfH).fill(false);
|
|
248
|
+
const colors = new Array(halfW * halfH).fill(0);
|
|
249
|
+
for (let i = 0; i < grid.length; i++) {
|
|
250
|
+
if (this.rng.chance(0.45)) {
|
|
251
|
+
grid[i] = true;
|
|
252
|
+
colors[i] = this.rng.int(0, palette.length - 1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Write to ImageData
|
|
256
|
+
for (let y = 0; y < height; y++) {
|
|
257
|
+
for (let x = 0; x < width; x++) {
|
|
258
|
+
let sx = x;
|
|
259
|
+
let sy = y;
|
|
260
|
+
if ((symmetry === 'horizontal' || symmetry === 'both') && x >= halfW) {
|
|
261
|
+
sx = width - 1 - x;
|
|
262
|
+
}
|
|
263
|
+
if ((symmetry === 'vertical' || symmetry === 'both') && y >= halfH) {
|
|
264
|
+
sy = height - 1 - y;
|
|
265
|
+
}
|
|
266
|
+
const idx = sy * halfW + sx;
|
|
267
|
+
if (grid[idx]) {
|
|
268
|
+
const c = palette[colors[idx]];
|
|
269
|
+
const px = (y * width + x) * 4;
|
|
270
|
+
data.data[px] = (c.r * 255) | 0;
|
|
271
|
+
data.data[px + 1] = (c.g * 255) | 0;
|
|
272
|
+
data.data[px + 2] = (c.b * 255) | 0;
|
|
273
|
+
data.data[px + 3] = (c.a * 255) | 0;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return data;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export { LootTable, PerlinNoise, ProceduralSprite, SeededRandom, WaveGenerator };
|
|
282
|
+
//# sourceMappingURL=Procedural.js.map
|