@nice2dev/game-engine 1.1.7 → 1.1.10

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 (498) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/dist/cjs/ai/StateMachine.js +54 -0
  3. package/dist/cjs/devtools/DeveloperExperience.js +5 -5
  4. package/dist/cjs/dialogue/DialogueSystem.js +1 -1
  5. package/dist/cjs/editor/AnimationRetargeting.js +13 -0
  6. package/dist/cjs/editor/AssetBrowser.js +26 -25
  7. package/dist/cjs/editor/NiceGameEditor.js +66 -49
  8. package/dist/cjs/editor/TimelineEditor.js +12 -0
  9. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js +33 -32
  10. package/dist/cjs/i18n/I18n.js +305 -0
  11. package/dist/cjs/index.js +8 -0
  12. package/dist/cjs/kids/KidMode.js +36 -36
  13. package/dist/cjs/kids/KidTools.js +31 -31
  14. package/dist/cjs/native-engine/AnimationSystem.js +840 -0
  15. package/dist/cjs/native-engine/InputSystem.js +9 -2
  16. package/dist/cjs/plugins/PluginSDK.js +1 -1
  17. package/dist/cjs/plugins/PluginTestKit.js +1 -1
  18. package/dist/cjs/quest/QuestSystem.js +5 -1
  19. package/dist/cjs/tutorials/TutorialBranching.js +12 -12
  20. package/dist/cjs/tutorials/TutorialEngine.js +35 -35
  21. package/dist/cjs/tutorials/content/Tutorials_T05_T08.js +75 -75
  22. package/dist/cjs/tutorials/content/Tutorials_T09_T11.js +24 -24
  23. package/dist/cjs/tutorials/content/Tutorials_T12_T15.js +33 -33
  24. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js +25 -24
  25. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js +28 -27
  26. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js +31 -30
  27. package/dist/esm/ai/StateMachine.js +53 -1
  28. package/dist/esm/devtools/DeveloperExperience.js +5 -5
  29. package/dist/esm/dialogue/DialogueSystem.js +1 -1
  30. package/dist/esm/editor/AnimationRetargeting.js +13 -1
  31. package/dist/esm/editor/AssetBrowser.js +26 -25
  32. package/dist/esm/editor/NiceGameEditor.js +67 -50
  33. package/dist/esm/editor/TimelineEditor.js +12 -1
  34. package/dist/esm/godot-integration/components/GodotProjectBrowser.js +33 -32
  35. package/dist/esm/i18n/I18n.js +305 -0
  36. package/dist/esm/index.js +4 -3
  37. package/dist/esm/kids/KidMode.js +36 -36
  38. package/dist/esm/kids/KidTools.js +31 -31
  39. package/dist/esm/native-engine/AnimationSystem.js +835 -0
  40. package/dist/esm/native-engine/InputSystem.js +9 -2
  41. package/dist/esm/plugins/PluginSDK.js +1 -1
  42. package/dist/esm/plugins/PluginTestKit.js +1 -1
  43. package/dist/esm/quest/QuestSystem.js +5 -1
  44. package/dist/esm/tutorials/TutorialBranching.js +12 -12
  45. package/dist/esm/tutorials/TutorialEngine.js +35 -35
  46. package/dist/esm/tutorials/content/Tutorials_T05_T08.js +75 -75
  47. package/dist/esm/tutorials/content/Tutorials_T09_T11.js +24 -24
  48. package/dist/esm/tutorials/content/Tutorials_T12_T15.js +33 -33
  49. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js +25 -24
  50. package/dist/esm/unity-integration/components/UnityProjectBrowser.js +28 -27
  51. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js +31 -30
  52. package/dist/types/editor/AssetBrowser.d.ts +1 -0
  53. package/dist/types/editor/behavior-tree/BTEditorNode.d.ts +2 -1
  54. package/dist/types/editor/behavior-tree/BTEditorToolbar.d.ts +1 -0
  55. package/dist/types/index.d.ts +4 -0
  56. package/dist/types/kids/KidMode.d.ts +4 -2
  57. package/dist/types/kids/KidTools.d.ts +1 -1
  58. package/dist/types/tutorials/TutorialBranching.d.ts +1 -1
  59. package/package.json +4 -3
  60. package/dist/cjs/accessibility/Accessibility.js.map +0 -1
  61. package/dist/cjs/ai/AI.js.map +0 -1
  62. package/dist/cjs/ai/BehaviorTree.js.map +0 -1
  63. package/dist/cjs/ai/StateMachine.js.map +0 -1
  64. package/dist/cjs/animation/Animation.js.map +0 -1
  65. package/dist/cjs/audio/AudioAdvanced.js.map +0 -1
  66. package/dist/cjs/audio/AudioBridge.js.map +0 -1
  67. package/dist/cjs/audio/AudioManager.js.map +0 -1
  68. package/dist/cjs/build-cloud/BuildOrchestration.js.map +0 -1
  69. package/dist/cjs/build-cloud/GodotBuildCloud.js.map +0 -1
  70. package/dist/cjs/build-cloud/UnityBuildCloud.js.map +0 -1
  71. package/dist/cjs/build-cloud/UnrealBuildCloud.js.map +0 -1
  72. package/dist/cjs/core/EventBus.js.map +0 -1
  73. package/dist/cjs/core/GameClock.js.map +0 -1
  74. package/dist/cjs/core/GameConfig.js.map +0 -1
  75. package/dist/cjs/core/GameLoop.js.map +0 -1
  76. package/dist/cjs/core/ServiceLocator.js.map +0 -1
  77. package/dist/cjs/core/Validation.js.map +0 -1
  78. package/dist/cjs/core/math.js.map +0 -1
  79. package/dist/cjs/devtools/DevTools.js.map +0 -1
  80. package/dist/cjs/devtools/DeveloperExperience.js.map +0 -1
  81. package/dist/cjs/devtools/GameplayAnalytics.js.map +0 -1
  82. package/dist/cjs/dialogue/DialogueSystem.js.map +0 -1
  83. package/dist/cjs/docs/DocGenerator.js.map +0 -1
  84. package/dist/cjs/ecs/World.js.map +0 -1
  85. package/dist/cjs/editor/AchievementEditor.js.map +0 -1
  86. package/dist/cjs/editor/AdvancedEditor.js.map +0 -1
  87. package/dist/cjs/editor/AnimationRetargeting.js.map +0 -1
  88. package/dist/cjs/editor/AssetBrowser.js.map +0 -1
  89. package/dist/cjs/editor/AssetManager.js.map +0 -1
  90. package/dist/cjs/editor/ConsolePro.js.map +0 -1
  91. package/dist/cjs/editor/CraftingEditor.js.map +0 -1
  92. package/dist/cjs/editor/DebugTools.js.map +0 -1
  93. package/dist/cjs/editor/DialogueSystem.js.map +0 -1
  94. package/dist/cjs/editor/LeaderboardSystem.js.map +0 -1
  95. package/dist/cjs/editor/NiceGameEditor.js.map +0 -1
  96. package/dist/cjs/editor/PrefabSystem.js.map +0 -1
  97. package/dist/cjs/editor/ProfilerPanel.js.map +0 -1
  98. package/dist/cjs/editor/QuestEditor.js.map +0 -1
  99. package/dist/cjs/editor/ReplaySystem.js.map +0 -1
  100. package/dist/cjs/editor/SceneEditor.js.map +0 -1
  101. package/dist/cjs/editor/ScreenshotMode.js.map +0 -1
  102. package/dist/cjs/editor/ShaderGraph.js.map +0 -1
  103. package/dist/cjs/editor/TimelineEditor.js.map +0 -1
  104. package/dist/cjs/editor/UndoRedoPro.js.map +0 -1
  105. package/dist/cjs/editor/VRARMode.js.map +0 -1
  106. package/dist/cjs/engine/NiceGameEngine.js.map +0 -1
  107. package/dist/cjs/engine/SaveSystem.js.map +0 -1
  108. package/dist/cjs/engine/SaveSystemV2.js +0 -530
  109. package/dist/cjs/engine/SaveSystemV2.js.map +0 -1
  110. package/dist/cjs/enterprise/Enterprise.js.map +0 -1
  111. package/dist/cjs/export/BevyExporter.js.map +0 -1
  112. package/dist/cjs/export/CocosExporter.js.map +0 -1
  113. package/dist/cjs/export/Construct3Exporter.js.map +0 -1
  114. package/dist/cjs/export/DefoldExporter.js.map +0 -1
  115. package/dist/cjs/export/GDevelopExporter.js.map +0 -1
  116. package/dist/cjs/export/GameMakerExporter.js.map +0 -1
  117. package/dist/cjs/export/GodotExporter.js.map +0 -1
  118. package/dist/cjs/export/MinecraftBedrockExporter.js.map +0 -1
  119. package/dist/cjs/export/MonoGameExporter.js.map +0 -1
  120. package/dist/cjs/export/Pico8Exporter.js.map +0 -1
  121. package/dist/cjs/export/PlatformExporter.js.map +0 -1
  122. package/dist/cjs/export/RPGMakerExporter.js.map +0 -1
  123. package/dist/cjs/export/RobloxExporter.js.map +0 -1
  124. package/dist/cjs/export/Solar2DExporter.js.map +0 -1
  125. package/dist/cjs/export/ThreeJSExporter.js.map +0 -1
  126. package/dist/cjs/export/Tic80Exporter.js.map +0 -1
  127. package/dist/cjs/export/UnityExporter.js.map +0 -1
  128. package/dist/cjs/export/UnrealExporter.js.map +0 -1
  129. package/dist/cjs/export/WebExporter.js.map +0 -1
  130. package/dist/cjs/export/index.js.map +0 -1
  131. package/dist/cjs/godot-integration/GodotAssetLibrary.js.map +0 -1
  132. package/dist/cjs/godot-integration/GodotImport.js.map +0 -1
  133. package/dist/cjs/godot-integration/GodotLiveLink.js.map +0 -1
  134. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js.map +0 -1
  135. package/dist/cjs/i18n/I18n.js.map +0 -1
  136. package/dist/cjs/i18n/useTranslation.js.map +0 -1
  137. package/dist/cjs/import/AsepriteImporter.js.map +0 -1
  138. package/dist/cjs/import/DragonBonesImporter.js.map +0 -1
  139. package/dist/cjs/import/GameMakerImporter.js.map +0 -1
  140. package/dist/cjs/import/GodotSceneImporter.js.map +0 -1
  141. package/dist/cjs/import/LDtkImporter.js.map +0 -1
  142. package/dist/cjs/import/Live2DImporter.js.map +0 -1
  143. package/dist/cjs/import/NdgFormat.js.map +0 -1
  144. package/dist/cjs/import/OgmoImporter.js.map +0 -1
  145. package/dist/cjs/import/RPGMakerImporter.js.map +0 -1
  146. package/dist/cjs/import/SceneImporter.js.map +0 -1
  147. package/dist/cjs/import/SpineImporter.js.map +0 -1
  148. package/dist/cjs/import/SpriterImporter.js.map +0 -1
  149. package/dist/cjs/import/TiledMapImporter.js.map +0 -1
  150. package/dist/cjs/import/UnitySceneImporter.js.map +0 -1
  151. package/dist/cjs/import/index.js.map +0 -1
  152. package/dist/cjs/index.js.map +0 -1
  153. package/dist/cjs/input/GamepadNavigation.js.map +0 -1
  154. package/dist/cjs/input/InputManager.js.map +0 -1
  155. package/dist/cjs/input/useGamepads.js.map +0 -1
  156. package/dist/cjs/integration/IconSprite.js.map +0 -1
  157. package/dist/cjs/inventory/InventorySystem.js.map +0 -1
  158. package/dist/cjs/kids/KidMode.js.map +0 -1
  159. package/dist/cjs/kids/KidTools.js.map +0 -1
  160. package/dist/cjs/monetization/Monetization.js.map +0 -1
  161. package/dist/cjs/multiplayer/LocalMultiplayer.js.map +0 -1
  162. package/dist/cjs/multiplayer/MiniGameTypes.js.map +0 -1
  163. package/dist/cjs/native-engine/AssetPipeline.js.map +0 -1
  164. package/dist/cjs/native-engine/AudioEngine.js.map +0 -1
  165. package/dist/cjs/native-engine/InputSystem.js.map +0 -1
  166. package/dist/cjs/native-engine/NetworkingSystem.js.map +0 -1
  167. package/dist/cjs/native-engine/PhysicsEngine.js.map +0 -1
  168. package/dist/cjs/native-engine/RenderingEngine.js.map +0 -1
  169. package/dist/cjs/native-engine/SceneGraph.js.map +0 -1
  170. package/dist/cjs/network/MultiplayerTransport.js.map +0 -1
  171. package/dist/cjs/network/Networking.js.map +0 -1
  172. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +0 -1
  173. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +0 -1
  174. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +0 -1
  175. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +0 -1
  176. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +0 -1
  177. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +0 -1
  178. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +0 -1
  179. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +0 -1
  180. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +0 -1
  181. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +0 -1
  182. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +0 -1
  183. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +0 -1
  184. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +0 -1
  185. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +0 -1
  186. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +0 -1
  187. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +0 -1
  188. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +0 -1
  189. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +0 -1
  190. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +0 -1
  191. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +0 -1
  192. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +0 -1
  193. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +0 -1
  194. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +0 -1
  195. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +0 -1
  196. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +0 -1
  197. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js.map +0 -1
  198. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +0 -1
  199. package/dist/cjs/pathfinding/Pathfinding.js.map +0 -1
  200. package/dist/cjs/performance/AssetStreaming.js.map +0 -1
  201. package/dist/cjs/performance/BenchmarkSuite.js.map +0 -1
  202. package/dist/cjs/performance/DeltaCompression.js.map +0 -1
  203. package/dist/cjs/performance/DeterministicPhysics.js.map +0 -1
  204. package/dist/cjs/performance/ECSOptimization.js.map +0 -1
  205. package/dist/cjs/performance/GameSaveSystem.js.map +0 -1
  206. package/dist/cjs/performance/HotReload.js.map +0 -1
  207. package/dist/cjs/performance/InputRecording.js.map +0 -1
  208. package/dist/cjs/performance/InterestManagement.js.map +0 -1
  209. package/dist/cjs/performance/LocalizationRuntime.js.map +0 -1
  210. package/dist/cjs/performance/MemoryManagement.js.map +0 -1
  211. package/dist/cjs/performance/ModSupport.js.map +0 -1
  212. package/dist/cjs/performance/MultiThreadedPhysics.js.map +0 -1
  213. package/dist/cjs/performance/NetworkPrediction.js.map +0 -1
  214. package/dist/cjs/performance/ObjectPooling.js.map +0 -1
  215. package/dist/cjs/performance/Performance.js.map +0 -1
  216. package/dist/cjs/performance/PerformanceAdvanced.js.map +0 -1
  217. package/dist/cjs/performance/SaveSystem.js +0 -574
  218. package/dist/cjs/performance/SaveSystem.js.map +0 -1
  219. package/dist/cjs/performance/WebGPURenderer.js.map +0 -1
  220. package/dist/cjs/physics/PhysicsAdvanced.js.map +0 -1
  221. package/dist/cjs/physics/PhysicsEngine2D.js.map +0 -1
  222. package/dist/cjs/plugins/PluginSDK.js.map +0 -1
  223. package/dist/cjs/plugins/PluginTestKit.js.map +0 -1
  224. package/dist/cjs/procedural/Procedural.js.map +0 -1
  225. package/dist/cjs/procedural/WorldBuilding.js.map +0 -1
  226. package/dist/cjs/quest/QuestSystem.js.map +0 -1
  227. package/dist/cjs/release/MobileExport.js.map +0 -1
  228. package/dist/cjs/release/Release.js.map +0 -1
  229. package/dist/cjs/rendering/Camera2D.js.map +0 -1
  230. package/dist/cjs/rendering/Renderer2D.js.map +0 -1
  231. package/dist/cjs/rendering/WebGPURenderPipeline.js.map +0 -1
  232. package/dist/cjs/runtime3d/Runtime3D.js.map +0 -1
  233. package/dist/cjs/runtime3d/SceneEditor3D.js.map +0 -1
  234. package/dist/cjs/scene/SceneManager.js.map +0 -1
  235. package/dist/cjs/scripting/GraphToAST.js.map +0 -1
  236. package/dist/cjs/scripting/LanguageExporter.js.map +0 -1
  237. package/dist/cjs/scripting/NodeGraph.js.map +0 -1
  238. package/dist/cjs/scripting/ScriptAST.js.map +0 -1
  239. package/dist/cjs/scripting/VisualScripting2.js.map +0 -1
  240. package/dist/cjs/scripting/exporters/CSharpExporter.js.map +0 -1
  241. package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +0 -1
  242. package/dist/cjs/scripting/exporters/LuaExporter.js.map +0 -1
  243. package/dist/cjs/scripting/exporters/PythonExporter.js.map +0 -1
  244. package/dist/cjs/scripting/exporters/RustExporter.js.map +0 -1
  245. package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +0 -1
  246. package/dist/cjs/social/Social.js.map +0 -1
  247. package/dist/cjs/systems/LightingSystem.js.map +0 -1
  248. package/dist/cjs/systems/ParticleSystem2.js.map +0 -1
  249. package/dist/cjs/systems/PhysicsDebugSystem.js.map +0 -1
  250. package/dist/cjs/systems/TerrainSystem.js.map +0 -1
  251. package/dist/cjs/templates/ActionTemplates.js.map +0 -1
  252. package/dist/cjs/templates/FightingTemplate.js.map +0 -1
  253. package/dist/cjs/templates/MetroidvaniaTemplate.js.map +0 -1
  254. package/dist/cjs/templates/PartyTemplates.js.map +0 -1
  255. package/dist/cjs/templates/PuzzleTemplates.js.map +0 -1
  256. package/dist/cjs/templates/RPGTemplates.js.map +0 -1
  257. package/dist/cjs/templates/SportsTemplates.js.map +0 -1
  258. package/dist/cjs/templates/StrategyTemplates.js.map +0 -1
  259. package/dist/cjs/templates/SurvivalTemplate.js.map +0 -1
  260. package/dist/cjs/templates/WaveDefense.js.map +0 -1
  261. package/dist/cjs/tilemap/Tilemap.js.map +0 -1
  262. package/dist/cjs/tutorials/TutorialBranching.js.map +0 -1
  263. package/dist/cjs/tutorials/TutorialEngine.js.map +0 -1
  264. package/dist/cjs/tutorials/TutorialOverlay.js.map +0 -1
  265. package/dist/cjs/tutorials/content/Tutorials_T05_T08.js.map +0 -1
  266. package/dist/cjs/tutorials/content/Tutorials_T09_T11.js.map +0 -1
  267. package/dist/cjs/tutorials/content/Tutorials_T12_T15.js.map +0 -1
  268. package/dist/cjs/ui/GameUI.js.map +0 -1
  269. package/dist/cjs/unity-integration/UnityAssetStore.js.map +0 -1
  270. package/dist/cjs/unity-integration/UnityImport.js.map +0 -1
  271. package/dist/cjs/unity-integration/UnityLiveLink.js.map +0 -1
  272. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js.map +0 -1
  273. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js.map +0 -1
  274. package/dist/cjs/unreal-integration/UnrealImport.js.map +0 -1
  275. package/dist/cjs/unreal-integration/UnrealLiveLink.js.map +0 -1
  276. package/dist/cjs/unreal-integration/UnrealMarketplace.js.map +0 -1
  277. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js.map +0 -1
  278. package/dist/cjs/xr/ARVR.js.map +0 -1
  279. package/dist/esm/accessibility/Accessibility.js.map +0 -1
  280. package/dist/esm/ai/AI.js.map +0 -1
  281. package/dist/esm/ai/BehaviorTree.js.map +0 -1
  282. package/dist/esm/ai/StateMachine.js.map +0 -1
  283. package/dist/esm/animation/Animation.js.map +0 -1
  284. package/dist/esm/audio/AudioAdvanced.js.map +0 -1
  285. package/dist/esm/audio/AudioBridge.js.map +0 -1
  286. package/dist/esm/audio/AudioManager.js.map +0 -1
  287. package/dist/esm/build-cloud/BuildOrchestration.js.map +0 -1
  288. package/dist/esm/build-cloud/GodotBuildCloud.js.map +0 -1
  289. package/dist/esm/build-cloud/UnityBuildCloud.js.map +0 -1
  290. package/dist/esm/build-cloud/UnrealBuildCloud.js.map +0 -1
  291. package/dist/esm/core/EventBus.js.map +0 -1
  292. package/dist/esm/core/GameClock.js.map +0 -1
  293. package/dist/esm/core/GameConfig.js.map +0 -1
  294. package/dist/esm/core/GameLoop.js.map +0 -1
  295. package/dist/esm/core/ServiceLocator.js.map +0 -1
  296. package/dist/esm/core/Validation.js.map +0 -1
  297. package/dist/esm/core/math.js.map +0 -1
  298. package/dist/esm/devtools/DevTools.js.map +0 -1
  299. package/dist/esm/devtools/DeveloperExperience.js.map +0 -1
  300. package/dist/esm/devtools/GameplayAnalytics.js.map +0 -1
  301. package/dist/esm/dialogue/DialogueSystem.js.map +0 -1
  302. package/dist/esm/docs/DocGenerator.js.map +0 -1
  303. package/dist/esm/ecs/World.js.map +0 -1
  304. package/dist/esm/editor/AchievementEditor.js.map +0 -1
  305. package/dist/esm/editor/AdvancedEditor.js.map +0 -1
  306. package/dist/esm/editor/AnimationRetargeting.js.map +0 -1
  307. package/dist/esm/editor/AssetBrowser.js.map +0 -1
  308. package/dist/esm/editor/AssetManager.js.map +0 -1
  309. package/dist/esm/editor/ConsolePro.js.map +0 -1
  310. package/dist/esm/editor/CraftingEditor.js.map +0 -1
  311. package/dist/esm/editor/DebugTools.js.map +0 -1
  312. package/dist/esm/editor/DialogueSystem.js.map +0 -1
  313. package/dist/esm/editor/LeaderboardSystem.js.map +0 -1
  314. package/dist/esm/editor/NiceGameEditor.js.map +0 -1
  315. package/dist/esm/editor/PrefabSystem.js.map +0 -1
  316. package/dist/esm/editor/ProfilerPanel.js.map +0 -1
  317. package/dist/esm/editor/QuestEditor.js.map +0 -1
  318. package/dist/esm/editor/ReplaySystem.js.map +0 -1
  319. package/dist/esm/editor/SceneEditor.js.map +0 -1
  320. package/dist/esm/editor/ScreenshotMode.js.map +0 -1
  321. package/dist/esm/editor/ShaderGraph.js.map +0 -1
  322. package/dist/esm/editor/TimelineEditor.js.map +0 -1
  323. package/dist/esm/editor/UndoRedoPro.js.map +0 -1
  324. package/dist/esm/editor/VRARMode.js.map +0 -1
  325. package/dist/esm/engine/NiceGameEngine.js.map +0 -1
  326. package/dist/esm/engine/SaveSystem.js.map +0 -1
  327. package/dist/esm/engine/SaveSystemV2.js +0 -523
  328. package/dist/esm/engine/SaveSystemV2.js.map +0 -1
  329. package/dist/esm/enterprise/Enterprise.js.map +0 -1
  330. package/dist/esm/export/BevyExporter.js.map +0 -1
  331. package/dist/esm/export/CocosExporter.js.map +0 -1
  332. package/dist/esm/export/Construct3Exporter.js.map +0 -1
  333. package/dist/esm/export/DefoldExporter.js.map +0 -1
  334. package/dist/esm/export/GDevelopExporter.js.map +0 -1
  335. package/dist/esm/export/GameMakerExporter.js.map +0 -1
  336. package/dist/esm/export/GodotExporter.js.map +0 -1
  337. package/dist/esm/export/MinecraftBedrockExporter.js.map +0 -1
  338. package/dist/esm/export/MonoGameExporter.js.map +0 -1
  339. package/dist/esm/export/Pico8Exporter.js.map +0 -1
  340. package/dist/esm/export/PlatformExporter.js.map +0 -1
  341. package/dist/esm/export/RPGMakerExporter.js.map +0 -1
  342. package/dist/esm/export/RobloxExporter.js.map +0 -1
  343. package/dist/esm/export/Solar2DExporter.js.map +0 -1
  344. package/dist/esm/export/ThreeJSExporter.js.map +0 -1
  345. package/dist/esm/export/Tic80Exporter.js.map +0 -1
  346. package/dist/esm/export/UnityExporter.js.map +0 -1
  347. package/dist/esm/export/UnrealExporter.js.map +0 -1
  348. package/dist/esm/export/WebExporter.js.map +0 -1
  349. package/dist/esm/export/index.js.map +0 -1
  350. package/dist/esm/godot-integration/GodotAssetLibrary.js.map +0 -1
  351. package/dist/esm/godot-integration/GodotImport.js.map +0 -1
  352. package/dist/esm/godot-integration/GodotLiveLink.js.map +0 -1
  353. package/dist/esm/godot-integration/components/GodotProjectBrowser.js.map +0 -1
  354. package/dist/esm/i18n/I18n.js.map +0 -1
  355. package/dist/esm/i18n/useTranslation.js.map +0 -1
  356. package/dist/esm/import/AsepriteImporter.js.map +0 -1
  357. package/dist/esm/import/DragonBonesImporter.js.map +0 -1
  358. package/dist/esm/import/GameMakerImporter.js.map +0 -1
  359. package/dist/esm/import/GodotSceneImporter.js.map +0 -1
  360. package/dist/esm/import/LDtkImporter.js.map +0 -1
  361. package/dist/esm/import/Live2DImporter.js.map +0 -1
  362. package/dist/esm/import/NdgFormat.js.map +0 -1
  363. package/dist/esm/import/OgmoImporter.js.map +0 -1
  364. package/dist/esm/import/RPGMakerImporter.js.map +0 -1
  365. package/dist/esm/import/SceneImporter.js.map +0 -1
  366. package/dist/esm/import/SpineImporter.js.map +0 -1
  367. package/dist/esm/import/SpriterImporter.js.map +0 -1
  368. package/dist/esm/import/TiledMapImporter.js.map +0 -1
  369. package/dist/esm/import/UnitySceneImporter.js.map +0 -1
  370. package/dist/esm/import/index.js.map +0 -1
  371. package/dist/esm/index.js.map +0 -1
  372. package/dist/esm/input/GamepadNavigation.js.map +0 -1
  373. package/dist/esm/input/InputManager.js.map +0 -1
  374. package/dist/esm/input/useGamepads.js.map +0 -1
  375. package/dist/esm/integration/IconSprite.js.map +0 -1
  376. package/dist/esm/inventory/InventorySystem.js.map +0 -1
  377. package/dist/esm/kids/KidMode.js.map +0 -1
  378. package/dist/esm/kids/KidTools.js.map +0 -1
  379. package/dist/esm/monetization/Monetization.js.map +0 -1
  380. package/dist/esm/multiplayer/LocalMultiplayer.js.map +0 -1
  381. package/dist/esm/multiplayer/MiniGameTypes.js.map +0 -1
  382. package/dist/esm/native-engine/AssetPipeline.js.map +0 -1
  383. package/dist/esm/native-engine/AudioEngine.js.map +0 -1
  384. package/dist/esm/native-engine/InputSystem.js.map +0 -1
  385. package/dist/esm/native-engine/NetworkingSystem.js.map +0 -1
  386. package/dist/esm/native-engine/PhysicsEngine.js.map +0 -1
  387. package/dist/esm/native-engine/RenderingEngine.js.map +0 -1
  388. package/dist/esm/native-engine/SceneGraph.js.map +0 -1
  389. package/dist/esm/network/MultiplayerTransport.js.map +0 -1
  390. package/dist/esm/network/Networking.js.map +0 -1
  391. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +0 -1
  392. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +0 -1
  393. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +0 -1
  394. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +0 -1
  395. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +0 -1
  396. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +0 -1
  397. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +0 -1
  398. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +0 -1
  399. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +0 -1
  400. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +0 -1
  401. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +0 -1
  402. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +0 -1
  403. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +0 -1
  404. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +0 -1
  405. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +0 -1
  406. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +0 -1
  407. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +0 -1
  408. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +0 -1
  409. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +0 -1
  410. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +0 -1
  411. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +0 -1
  412. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +0 -1
  413. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +0 -1
  414. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +0 -1
  415. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +0 -1
  416. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js.map +0 -1
  417. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +0 -1
  418. package/dist/esm/pathfinding/Pathfinding.js.map +0 -1
  419. package/dist/esm/performance/AssetStreaming.js.map +0 -1
  420. package/dist/esm/performance/BenchmarkSuite.js.map +0 -1
  421. package/dist/esm/performance/DeltaCompression.js.map +0 -1
  422. package/dist/esm/performance/DeterministicPhysics.js.map +0 -1
  423. package/dist/esm/performance/ECSOptimization.js.map +0 -1
  424. package/dist/esm/performance/GameSaveSystem.js.map +0 -1
  425. package/dist/esm/performance/HotReload.js.map +0 -1
  426. package/dist/esm/performance/InputRecording.js.map +0 -1
  427. package/dist/esm/performance/InterestManagement.js.map +0 -1
  428. package/dist/esm/performance/LocalizationRuntime.js.map +0 -1
  429. package/dist/esm/performance/MemoryManagement.js.map +0 -1
  430. package/dist/esm/performance/ModSupport.js.map +0 -1
  431. package/dist/esm/performance/MultiThreadedPhysics.js.map +0 -1
  432. package/dist/esm/performance/NetworkPrediction.js.map +0 -1
  433. package/dist/esm/performance/ObjectPooling.js.map +0 -1
  434. package/dist/esm/performance/Performance.js.map +0 -1
  435. package/dist/esm/performance/PerformanceAdvanced.js.map +0 -1
  436. package/dist/esm/performance/SaveSystem.js +0 -567
  437. package/dist/esm/performance/SaveSystem.js.map +0 -1
  438. package/dist/esm/performance/WebGPURenderer.js.map +0 -1
  439. package/dist/esm/physics/PhysicsAdvanced.js.map +0 -1
  440. package/dist/esm/physics/PhysicsEngine2D.js.map +0 -1
  441. package/dist/esm/plugins/PluginSDK.js.map +0 -1
  442. package/dist/esm/plugins/PluginTestKit.js.map +0 -1
  443. package/dist/esm/procedural/Procedural.js.map +0 -1
  444. package/dist/esm/procedural/WorldBuilding.js.map +0 -1
  445. package/dist/esm/quest/QuestSystem.js.map +0 -1
  446. package/dist/esm/release/MobileExport.js.map +0 -1
  447. package/dist/esm/release/Release.js.map +0 -1
  448. package/dist/esm/rendering/Camera2D.js.map +0 -1
  449. package/dist/esm/rendering/Renderer2D.js.map +0 -1
  450. package/dist/esm/rendering/WebGPURenderPipeline.js.map +0 -1
  451. package/dist/esm/runtime3d/Runtime3D.js.map +0 -1
  452. package/dist/esm/runtime3d/SceneEditor3D.js.map +0 -1
  453. package/dist/esm/scene/SceneManager.js.map +0 -1
  454. package/dist/esm/scripting/GraphToAST.js.map +0 -1
  455. package/dist/esm/scripting/LanguageExporter.js.map +0 -1
  456. package/dist/esm/scripting/NodeGraph.js.map +0 -1
  457. package/dist/esm/scripting/ScriptAST.js.map +0 -1
  458. package/dist/esm/scripting/VisualScripting2.js.map +0 -1
  459. package/dist/esm/scripting/exporters/CSharpExporter.js.map +0 -1
  460. package/dist/esm/scripting/exporters/GDScriptExporter.js.map +0 -1
  461. package/dist/esm/scripting/exporters/LuaExporter.js.map +0 -1
  462. package/dist/esm/scripting/exporters/PythonExporter.js.map +0 -1
  463. package/dist/esm/scripting/exporters/RustExporter.js.map +0 -1
  464. package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +0 -1
  465. package/dist/esm/social/Social.js.map +0 -1
  466. package/dist/esm/systems/LightingSystem.js.map +0 -1
  467. package/dist/esm/systems/ParticleSystem2.js.map +0 -1
  468. package/dist/esm/systems/PhysicsDebugSystem.js.map +0 -1
  469. package/dist/esm/systems/TerrainSystem.js.map +0 -1
  470. package/dist/esm/templates/ActionTemplates.js.map +0 -1
  471. package/dist/esm/templates/FightingTemplate.js.map +0 -1
  472. package/dist/esm/templates/MetroidvaniaTemplate.js.map +0 -1
  473. package/dist/esm/templates/PartyTemplates.js.map +0 -1
  474. package/dist/esm/templates/PuzzleTemplates.js.map +0 -1
  475. package/dist/esm/templates/RPGTemplates.js.map +0 -1
  476. package/dist/esm/templates/SportsTemplates.js.map +0 -1
  477. package/dist/esm/templates/StrategyTemplates.js.map +0 -1
  478. package/dist/esm/templates/SurvivalTemplate.js.map +0 -1
  479. package/dist/esm/templates/WaveDefense.js.map +0 -1
  480. package/dist/esm/tilemap/Tilemap.js.map +0 -1
  481. package/dist/esm/tutorials/TutorialBranching.js.map +0 -1
  482. package/dist/esm/tutorials/TutorialEngine.js.map +0 -1
  483. package/dist/esm/tutorials/TutorialOverlay.js.map +0 -1
  484. package/dist/esm/tutorials/content/Tutorials_T05_T08.js.map +0 -1
  485. package/dist/esm/tutorials/content/Tutorials_T09_T11.js.map +0 -1
  486. package/dist/esm/tutorials/content/Tutorials_T12_T15.js.map +0 -1
  487. package/dist/esm/ui/GameUI.js.map +0 -1
  488. package/dist/esm/unity-integration/UnityAssetStore.js.map +0 -1
  489. package/dist/esm/unity-integration/UnityImport.js.map +0 -1
  490. package/dist/esm/unity-integration/UnityLiveLink.js.map +0 -1
  491. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js.map +0 -1
  492. package/dist/esm/unity-integration/components/UnityProjectBrowser.js.map +0 -1
  493. package/dist/esm/unreal-integration/UnrealImport.js.map +0 -1
  494. package/dist/esm/unreal-integration/UnrealLiveLink.js.map +0 -1
  495. package/dist/esm/unreal-integration/UnrealMarketplace.js.map +0 -1
  496. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js.map +0 -1
  497. package/dist/esm/xr/ARVR.js.map +0 -1
  498. package/dist/types/engine/SaveSystemV2.d.ts +0 -155
@@ -1002,8 +1002,15 @@ class UISystem {
1002
1002
  // Selected value
1003
1003
  this.ctx.fillStyle = this.style.textColor;
1004
1004
  this.ctx.fillText(options[selected] ?? '', x + this.style.padding, dropdownY + height / 2 + this.style.fontSize / 3);
1005
- // Arrow
1006
- this.ctx.fillText('▼', x + width - 20, dropdownY + height / 2 + this.style.fontSize / 3);
1005
+ // Arrow (drawn, not a font glyph)
1006
+ const arrowX = x + width - 16;
1007
+ const arrowY = dropdownY + height / 2;
1008
+ this.ctx.beginPath();
1009
+ this.ctx.moveTo(arrowX - 5, arrowY - 3);
1010
+ this.ctx.lineTo(arrowX + 5, arrowY - 3);
1011
+ this.ctx.lineTo(arrowX, arrowY + 3);
1012
+ this.ctx.closePath();
1013
+ this.ctx.fill();
1007
1014
  // Handle click - simplified, just cycle through options
1008
1015
  let newSelected = selected;
1009
1016
  if (hovered && this.mouseClicked) {
@@ -394,7 +394,7 @@ const plugin: PluginDefinition = {
394
394
  ctx.registerExtension('editor-panel', {
395
395
  id: 'perf-panel',
396
396
  title: 'Performance',
397
- icon: '📊',
397
+ icon: 'bar-chart',
398
398
  position: 'right',
399
399
  render: () => null, // React component
400
400
  });
@@ -342,7 +342,7 @@ async function testPluginLifecycle(plugin) {
342
342
  function formatTestResults(suite) {
343
343
  const lines = [`━━━ ${suite.suiteName} (${suite.pluginId}) ━━━`, ''];
344
344
  for (const r of suite.results) {
345
- const icon = r.status === 'passed' ? '✓' : r.status === 'failed' ? '✗' : '○';
345
+ const icon = r.status === 'passed' ? 'PASS' : r.status === 'failed' ? 'FAIL' : 'SKIP';
346
346
  const ms = r.duration.toFixed(1);
347
347
  lines.push(` ${icon} ${r.name} (${ms}ms)`);
348
348
  if (r.error) {
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var ui = require('@nice2dev/ui');
3
4
  var React = require('react');
4
5
  var EventBus = require('../core/EventBus.js');
5
6
 
@@ -903,7 +904,10 @@ const QuestTracker = ({ state, quest, showOptional = false, className = '', styl
903
904
  React.createElement('span', {
904
905
  key: 'check',
905
906
  style: { color: obj.completed ? '#4caf50' : '#9e9e9e' },
906
- }, obj.completed ? '✓' : '○'),
907
+ }, React.createElement(ui.NiceIcon, {
908
+ name: obj.completed ? 'check' : 'circle',
909
+ size: 12,
910
+ })),
907
911
  React.createElement('span', { key: 'desc' }, obj.description),
908
912
  obj.target > 1 &&
909
913
  React.createElement('span', {
@@ -304,7 +304,7 @@ const BUILT_IN_ACHIEVEMENTS = [
304
304
  pl: 'Ukończ swój pierwszy tutorial',
305
305
  de: 'Schließe dein erstes Tutorial ab',
306
306
  },
307
- icon: '🎉',
307
+ icon: 'star',
308
308
  tier: 'bronze',
309
309
  xp: 10,
310
310
  condition: { type: 'tutorials-count', count: 1 },
@@ -317,7 +317,7 @@ const BUILT_IN_ACHIEVEMENTS = [
317
317
  pl: 'Ukończ 5 tutoriali',
318
318
  de: 'Schließe 5 Tutorials ab',
319
319
  },
320
- icon: '📚',
320
+ icon: 'book',
321
321
  tier: 'silver',
322
322
  xp: 50,
323
323
  condition: { type: 'tutorials-count', count: 5 },
@@ -330,7 +330,7 @@ const BUILT_IN_ACHIEVEMENTS = [
330
330
  pl: 'Ukończ 10 tutoriali',
331
331
  de: 'Schließe 10 Tutorials ab',
332
332
  },
333
- icon: '🏅',
333
+ icon: 'medal',
334
334
  tier: 'gold',
335
335
  xp: 100,
336
336
  condition: { type: 'tutorials-count', count: 10 },
@@ -343,7 +343,7 @@ const BUILT_IN_ACHIEVEMENTS = [
343
343
  pl: 'Ukończ wszystkie 15 tutoriali game engine',
344
344
  de: 'Schließe alle 15 Game-Engine-Tutorials ab',
345
345
  },
346
- icon: '👑',
346
+ icon: 'medal',
347
347
  tier: 'diamond',
348
348
  xp: 500,
349
349
  condition: { type: 'tutorials-count', count: 15 },
@@ -356,7 +356,7 @@ const BUILT_IN_ACHIEVEMENTS = [
356
356
  pl: 'Ukończ tutorial "Zrób platformera"',
357
357
  de: 'Schließe das "Build a Platformer" Tutorial ab',
358
358
  },
359
- icon: '🎮',
359
+ icon: 'gamepad',
360
360
  tier: 'gold',
361
361
  xp: 75,
362
362
  condition: { type: 'tutorial-complete', tutorialId: 'build-a-platformer' },
@@ -369,7 +369,7 @@ const BUILT_IN_ACHIEVEMENTS = [
369
369
  pl: 'Ukończ tutorial "Zrób RPG"',
370
370
  de: 'Schließe das "Build an RPG" Tutorial ab',
371
371
  },
372
- icon: '⚔️',
372
+ icon: 'target',
373
373
  tier: 'gold',
374
374
  xp: 75,
375
375
  condition: { type: 'tutorial-complete', tutorialId: 'build-an-rpg' },
@@ -382,7 +382,7 @@ const BUILT_IN_ACHIEVEMENTS = [
382
382
  pl: 'Odpowiedz poprawnie na wszystkie quizy',
383
383
  de: 'Beantworte alle Quizfragen richtig',
384
384
  },
385
- icon: '🧠',
385
+ icon: 'lightbulb',
386
386
  tier: 'platinum',
387
387
  xp: 200,
388
388
  condition: { type: 'quiz-perfect' },
@@ -395,7 +395,7 @@ const BUILT_IN_ACHIEVEMENTS = [
395
395
  pl: 'Ukończ tutorial "Publikacja gry"',
396
396
  de: 'Schließe das "Publish Your Game" Tutorial ab',
397
397
  },
398
- icon: '🚀',
398
+ icon: 'rocket',
399
399
  tier: 'silver',
400
400
  xp: 50,
401
401
  condition: { type: 'tutorial-complete', tutorialId: 'publish-your-game' },
@@ -408,7 +408,7 @@ const BUILT_IN_ACHIEVEMENTS = [
408
408
  pl: 'Ucz się przez 7 kolejnych dni',
409
409
  de: 'Lerne 7 Tage am Stück',
410
410
  },
411
- icon: '🔥',
411
+ icon: 'zap',
412
412
  tier: 'silver',
413
413
  xp: 50,
414
414
  condition: { type: 'streak', streakDays: 7 },
@@ -421,7 +421,7 @@ const BUILT_IN_ACHIEVEMENTS = [
421
421
  pl: 'Ucz się przez 30 kolejnych dni',
422
422
  de: 'Lerne 30 Tage am Stück',
423
423
  },
424
- icon: '💎',
424
+ icon: 'diamond',
425
425
  tier: 'diamond',
426
426
  xp: 300,
427
427
  condition: { type: 'streak', streakDays: 30 },
@@ -435,7 +435,7 @@ const BUILT_IN_ACHIEVEMENTS = [
435
435
  pl: 'Ukończ tutorial "Zrób grę 3D"',
436
436
  de: 'Schließe das "3D-Spiel bauen" Tutorial ab',
437
437
  },
438
- icon: '🌐',
438
+ icon: 'globe',
439
439
  tier: 'gold',
440
440
  xp: 75,
441
441
  condition: { type: 'tutorial-complete', tutorialId: 'build-a-3d-game' },
@@ -448,7 +448,7 @@ const BUILT_IN_ACHIEVEMENTS = [
448
448
  pl: 'Ukończ tutorial multiplayer online',
449
449
  de: 'Schließe das Online-Multiplayer-Tutorial ab',
450
450
  },
451
- icon: '🌍',
451
+ icon: 'globe',
452
452
  tier: 'gold',
453
453
  xp: 75,
454
454
  condition: { type: 'tutorial-complete', tutorialId: 'multiplayer-online-webrtc' },
@@ -543,9 +543,9 @@ const TUTORIAL_FIRST_GAME = {
543
543
  de: 'Willkommen!',
544
544
  },
545
545
  content: {
546
- en: "In this tutorial, you will create a bouncing ball game! 🎮\n\nYou will learn:\n• How to create entities\n• How to add physics\n• How to handle collisions\n\nLet's get started!",
547
- pl: 'W tym samouczku stworzysz grę z odbijającą się piłką! 🎮\n\nNauczysz się:\n• Jak tworzyć obiekty\n• Jak dodawać fizykę\n• Jak obsługiwać kolizje\n\nZaczynajmy!',
548
- de: "In diesem Tutorial erstellst du ein Hüpfball-Spiel! 🎮\n\nDu lernst:\n• Wie man Entities erstellt\n• Wie man Physik hinzufügt\n• Wie man Kollisionen behandelt\n\nLos geht's!",
546
+ en: "In this tutorial, you will create a bouncing ball game!\n\nYou will learn:\n• How to create entities\n• How to add physics\n• How to handle collisions\n\nLet's get started!",
547
+ pl: 'W tym samouczku stworzysz grę z odbijającą się piłką!\n\nNauczysz się:\n• Jak tworzyć obiekty\n• Jak dodawać fizykę\n• Jak obsługiwać kolizje\n\nZaczynajmy!',
548
+ de: "In diesem Tutorial erstellst du ein Hüpfball-Spiel!\n\nDu lernst:\n• Wie man Entities erstellt\n• Wie man Physik hinzufügt\n• Wie man Kollisionen behandelt\n\nLos geht's!",
549
549
  },
550
550
  skippable: true,
551
551
  tooltipPosition: 'center',
@@ -626,9 +626,9 @@ const TUTORIAL_FIRST_GAME = {
626
626
  id: 'quiz-physics',
627
627
  type: 'quiz',
628
628
  title: {
629
- en: 'Quick Quiz! 🧠',
630
- pl: 'Szybki quiz! 🧠',
631
- de: 'Schnelles Quiz! 🧠',
629
+ en: 'Quick Quiz!',
630
+ pl: 'Szybki quiz!',
631
+ de: 'Schnelles Quiz!',
632
632
  },
633
633
  content: {
634
634
  en: 'What does the "restitution" value control?',
@@ -688,9 +688,9 @@ const TUTORIAL_FIRST_GAME = {
688
688
  id: 'start-game',
689
689
  type: 'code',
690
690
  title: {
691
- en: 'Start the Game! 🚀',
692
- pl: 'Uruchom grę! 🚀',
693
- de: 'Starte das Spiel! 🚀',
691
+ en: 'Start the Game!',
692
+ pl: 'Uruchom grę!',
693
+ de: 'Starte das Spiel!',
694
694
  },
695
695
  content: {
696
696
  en: 'Everything is ready! Start the game loop to see your bouncing ball in action!',
@@ -707,14 +707,14 @@ const TUTORIAL_FIRST_GAME = {
707
707
  id: 'congratulations',
708
708
  type: 'text',
709
709
  title: {
710
- en: 'Congratulations! 🎉',
711
- pl: 'Gratulacje! 🎉',
712
- de: 'Herzlichen Glückwunsch! 🎉',
710
+ en: 'Congratulations!',
711
+ pl: 'Gratulacje!',
712
+ de: 'Herzlichen Glückwunsch!',
713
713
  },
714
714
  content: {
715
- en: 'You just created your first game with Nice2Dev Game Engine!\n\n🏆 You learned:\n• Creating entities\n• Adding components (Transform, Sprite, RigidBody2D, Collider2D)\n• Physics simulation with restitution\n• Starting the game loop\n\nNext up: Try the "Space Shooter" tutorial! 🚀',
716
- pl: 'Właśnie stworzyłeś swoją pierwszą grę z Nice2Dev Game Engine!\n\n🏆 Nauczyłeś się:\n• Tworzenia obiektów\n• Dodawania komponentów (Transform, Sprite, RigidBody2D, Collider2D)\n• Symulacji fizyki z restitution\n• Uruchamiania pętli gry\n\nNastępnie: Spróbuj samouczka "Kosmiczny Strzelec"! 🚀',
717
- de: 'Du hast gerade dein erstes Spiel mit Nice2Dev Game Engine erstellt!\n\n🏆 Du hast gelernt:\n• Entities erstellen\n• Komponenten hinzufügen (Transform, Sprite, RigidBody2D, Collider2D)\n• Physiksimulation mit Restitution\n• Game-Loop starten\n\nAls nächstes: Probiere das "Space Shooter"-Tutorial! 🚀',
715
+ en: 'You just created your first game with Nice2Dev Game Engine!\n\nYou learned:\n• Creating entities\n• Adding components (Transform, Sprite, RigidBody2D, Collider2D)\n• Physics simulation with restitution\n• Starting the game loop\n\nNext up: Try the "Space Shooter" tutorial!',
716
+ pl: 'Właśnie stworzyłeś swoją pierwszą grę z Nice2Dev Game Engine!\n\nNauczyłeś się:\n• Tworzenia obiektów\n• Dodawania komponentów (Transform, Sprite, RigidBody2D, Collider2D)\n• Symulacji fizyki z restitution\n• Uruchamiania pętli gry\n\nNastępnie: Spróbuj samouczka "Kosmiczny Strzelec"!',
717
+ de: 'Du hast gerade dein erstes Spiel mit Nice2Dev Game Engine erstellt!\n\nDu hast gelernt:\n• Entities erstellen\n• Komponenten hinzufügen (Transform, Sprite, RigidBody2D, Collider2D)\n• Physiksimulation mit Restitution\n• Game-Loop starten\n\nAls nächstes: Probiere das "Space Shooter"-Tutorial!',
718
718
  },
719
719
  tooltipPosition: 'center',
720
720
  },
@@ -724,9 +724,9 @@ const TUTORIAL_FIRST_GAME = {
724
724
  const TUTORIAL_SPACE_SHOOTER = {
725
725
  id: 'space-shooter',
726
726
  title: {
727
- en: 'Space Shooter 🚀',
728
- pl: 'Kosmiczny Strzelec 🚀',
729
- de: 'Weltraum-Shooter 🚀',
727
+ en: 'Space Shooter',
728
+ pl: 'Kosmiczny Strzelec',
729
+ de: 'Weltraum-Shooter',
730
730
  },
731
731
  description: {
732
732
  en: 'Build a classic space shooter! Learn input handling, spawning enemies, and scoring.',
@@ -746,9 +746,9 @@ const TUTORIAL_SPACE_SHOOTER = {
746
746
  type: 'text',
747
747
  title: { en: 'Space Shooter', pl: 'Kosmiczny Strzelec', de: 'Weltraum-Shooter' },
748
748
  content: {
749
- en: 'Welcome to the Space Shooter tutorial! 🚀\n\nYou will learn:\n• Keyboard input handling\n• Spawning entities dynamically\n• Collision-based scoring\n• Game over logic\n\nPrerequisite: "Your First Game: Bouncing Ball"',
750
- pl: 'Witaj w samouczku Kosmiczny Strzelec! 🚀\n\nNauczysz się:\n• Obsługi sterowania z klawiatury\n• Dynamicznego tworzenia obiektów\n• Punktacji na podstawie kolizji\n• Logiki końca gry\n\nWymagany: "Twoja pierwsza gra: Odbijająca się piłka"',
751
- de: 'Willkommen beim Weltraum-Shooter Tutorial! 🚀\n\nDu lernst:\n• Tastatureingabe-Verarbeitung\n• Dynamisches Entity-Spawning\n• Kollisionsbasiertes Scoring\n• Game-Over-Logik\n\nVoraussetzung: "Dein erstes Spiel: Hüpfender Ball"',
749
+ en: 'Welcome to the Space Shooter tutorial!\n\nYou will learn:\n• Keyboard input handling\n• Spawning entities dynamically\n• Collision-based scoring\n• Game over logic\n\nPrerequisite: "Your First Game: Bouncing Ball"',
750
+ pl: 'Witaj w samouczku Kosmiczny Strzelec!\n\nNauczysz się:\n• Obsługi sterowania z klawiatury\n• Dynamicznego tworzenia obiektów\n• Punktacji na podstawie kolizji\n• Logiki końca gry\n\nWymagany: "Twoja pierwsza gra: Odbijająca się piłka"',
751
+ de: 'Willkommen beim Weltraum-Shooter Tutorial!\n\nDu lernst:\n• Tastatureingabe-Verarbeitung\n• Dynamisches Entity-Spawning\n• Kollisionsbasiertes Scoring\n• Game-Over-Logik\n\nVoraussetzung: "Dein erstes Spiel: Hüpfender Ball"',
752
752
  },
753
753
  tooltipPosition: 'center',
754
754
  },
@@ -786,7 +786,7 @@ const TUTORIAL_SPACE_SHOOTER = {
786
786
  {
787
787
  id: 'quiz-input',
788
788
  type: 'quiz',
789
- title: { en: 'Input Quiz 🧠', pl: 'Quiz o sterowaniu 🧠', de: 'Eingabe-Quiz 🧠' },
789
+ title: { en: 'Input Quiz', pl: 'Quiz o sterowaniu', de: 'Eingabe-Quiz' },
790
790
  content: {
791
791
  en: 'What is the difference between isKeyDown and isKeyPressed?',
792
792
  pl: 'Jaka jest różnica między isKeyDown i isKeyPressed?',
@@ -819,7 +819,7 @@ const TUTORIAL_SPACE_SHOOTER = {
819
819
  {
820
820
  id: 'shooting',
821
821
  type: 'code',
822
- title: { en: 'Shoot Bullets! 🔫', pl: 'Strzelaj pociskami! 🔫', de: 'Schieße Kugeln! 🔫' },
822
+ title: { en: 'Shoot Bullets!', pl: 'Strzelaj pociskami!', de: 'Schieße Kugeln!' },
823
823
  content: {
824
824
  en: 'Add shooting! When Space is pressed, create a bullet entity that moves upward.',
825
825
  pl: 'Dodaj strzelanie! Po naciśnięciu Spacji utwórz pocisk, który leci w górę.',
@@ -837,7 +837,7 @@ const TUTORIAL_SPACE_SHOOTER = {
837
837
  {
838
838
  id: 'checkpoint-halfway',
839
839
  type: 'checkpoint',
840
- title: { en: 'Halfway There! 🎯', pl: 'Połowa drogi! 🎯', de: 'Halb geschafft! 🎯' },
840
+ title: { en: 'Halfway There!', pl: 'Połowa drogi!', de: 'Halb geschafft!' },
841
841
  content: {
842
842
  en: "Great progress! You have a moving ship that can shoot. Let's add enemies next!",
843
843
  pl: 'Świetne postępy! Masz poruszający się statek, który potrafi strzelać. Dodajmy teraz wrogów!',
@@ -848,14 +848,14 @@ const TUTORIAL_SPACE_SHOOTER = {
848
848
  id: 'complete',
849
849
  type: 'text',
850
850
  title: {
851
- en: 'Mission Complete! 🏆',
852
- pl: 'Misja zakończona! 🏆',
853
- de: 'Mission abgeschlossen! 🏆',
851
+ en: 'Mission Complete!',
852
+ pl: 'Misja zakończona!',
853
+ de: 'Mission abgeschlossen!',
854
854
  },
855
855
  content: {
856
- en: 'You built a Space Shooter! 🚀\n\nSkills mastered:\n• Input handling (keyboard)\n• Dynamic entity spawning\n• Entity removal\n• Systems architecture\n\nChallenge: Add a scoring system and display it on screen!',
857
- pl: 'Zbudowałeś Kosmicznego Strzelca! 🚀\n\nOpanowane umiejętności:\n• Obsługa sterowania (klawiatura)\n• Dynamiczne tworzenie obiektów\n• Usuwanie obiektów\n• Architektura systemów\n\nWyzwanie: Dodaj system punktacji i wyświetl go na ekranie!',
858
- de: 'Du hast einen Weltraum-Shooter gebaut! 🚀\n\nGelernte Fähigkeiten:\n• Eingabeverarbeitung (Tastatur)\n• Dynamisches Entity-Spawning\n• Entity-Entfernung\n• System-Architektur\n\nHerausforderung: Füge ein Punktesystem hinzu und zeige es auf dem Bildschirm an!',
856
+ en: 'You built a Space Shooter!\n\nSkills mastered:\n• Input handling (keyboard)\n• Dynamic entity spawning\n• Entity removal\n• Systems architecture\n\nChallenge: Add a scoring system and display it on screen!',
857
+ pl: 'Zbudowałeś Kosmicznego Strzelca!\n\nOpanowane umiejętności:\n• Obsługa sterowania (klawiatura)\n• Dynamiczne tworzenie obiektów\n• Usuwanie obiektów\n• Architektura systemów\n\nWyzwanie: Dodaj system punktacji i wyświetl go na ekranie!',
858
+ de: 'Du hast einen Weltraum-Shooter gebaut!\n\nGelernte Fähigkeiten:\n• Eingabeverarbeitung (Tastatur)\n• Dynamisches Entity-Spawning\n• Entity-Entfernung\n• System-Architektur\n\nHerausforderung: Füge ein Punktesystem hinzu und zeige es auf dem Bildschirm an!',
859
859
  },
860
860
  tooltipPosition: 'center',
861
861
  },
@@ -923,7 +923,7 @@ const TUTORIAL_DATAGRID_BASICS = {
923
923
  {
924
924
  id: 'quiz-filtering',
925
925
  type: 'quiz',
926
- title: { en: 'Filtering Quiz 🧠', pl: 'Quiz o filtrowaniu 🧠', de: 'Filter-Quiz 🧠' },
926
+ title: { en: 'Filtering Quiz', pl: 'Quiz o filtrowaniu', de: 'Filter-Quiz' },
927
927
  content: {
928
928
  en: 'What is the difference between headerFilter and filterRow?',
929
929
  pl: 'Jaka jest różnica między headerFilter a filterRow?',
@@ -953,11 +953,11 @@ const TUTORIAL_DATAGRID_BASICS = {
953
953
  {
954
954
  id: 'complete',
955
955
  type: 'text',
956
- title: { en: 'Grid Master! 🏆', pl: 'Mistrz Siatki! 🏆', de: 'Grid-Meister! 🏆' },
956
+ title: { en: 'Grid Master!', pl: 'Mistrz Siatki!', de: 'Grid-Meister!' },
957
957
  content: {
958
- en: 'You now know the basics of NiceDataGrid!\n\n🏆 Skills:\n• Data binding\n• Column configuration\n• Sorting & filtering\n\nNext: Try grouping, editing, and custom cell templates!',
959
- pl: 'Znasz już podstawy NiceDataGrid!\n\n🏆 Umiejętności:\n• Wiązanie danych\n• Konfiguracja kolumn\n• Sortowanie i filtrowanie\n\nDalej: Spróbuj grupowania, edycji i własnych szablonów komórek!',
960
- de: 'Du kennst jetzt die Grundlagen von NiceDataGrid!\n\n🏆 Fähigkeiten:\n• Datenbindung\n• Spaltenkonfiguration\n• Sortieren & Filtern\n\nWeiter: Probiere Gruppieren, Bearbeiten und benutzerdefinierte Zellenvorlagen!',
958
+ en: 'You now know the basics of NiceDataGrid!\n\nSkills:\n• Data binding\n• Column configuration\n• Sorting & filtering\n\nNext: Try grouping, editing, and custom cell templates!',
959
+ pl: 'Znasz już podstawy NiceDataGrid!\n\nUmiejętności:\n• Wiązanie danych\n• Konfiguracja kolumn\n• Sortowanie i filtrowanie\n\nDalej: Spróbuj grupowania, edycji i własnych szablonów komórek!',
960
+ de: 'Du kennst jetzt die Grundlagen von NiceDataGrid!\n\nFähigkeiten:\n• Datenbindung\n• Spaltenkonfiguration\n• Sortieren & Filtern\n\nWeiter: Probiere Gruppieren, Bearbeiten und benutzerdefinierte Zellenvorlagen!',
961
961
  },
962
962
  },
963
963
  ],
@@ -36,9 +36,9 @@ const TUTORIAL_ANIMATIONS = {
36
36
  id: 'anim-welcome',
37
37
  type: 'text',
38
38
  title: {
39
- en: 'Welcome to Animations! 🎬',
40
- pl: 'Witaj w świecie animacji! 🎬',
41
- de: 'Willkommen bei Animationen! 🎬',
39
+ en: 'Welcome to Animations!',
40
+ pl: 'Witaj w świecie animacji!',
41
+ de: 'Willkommen bei Animationen!',
42
42
  },
43
43
  content: {
44
44
  en: "In this tutorial you will learn:\n• Creating animation clips from sprite sheets\n• Using tweens for smooth movement\n• Easing functions (bounce, elastic, cubic)\n• Animation state machines\n\nLet's bring your game to life!",
@@ -103,9 +103,9 @@ const TUTORIAL_ANIMATIONS = {
103
103
  id: 'quiz-animation',
104
104
  type: 'quiz',
105
105
  title: {
106
- en: 'Quick Quiz! 🧠',
107
- pl: 'Szybki quiz! 🧠',
108
- de: 'Schnelles Quiz! 🧠',
106
+ en: 'Quick Quiz!',
107
+ pl: 'Szybki quiz!',
108
+ de: 'Schnelles Quiz!',
109
109
  },
110
110
  content: {
111
111
  en: 'If an animation has 8 frames at 0.1s each, how long is one full cycle?',
@@ -150,14 +150,14 @@ const TUTORIAL_ANIMATIONS = {
150
150
  id: 'easing-functions',
151
151
  type: 'text',
152
152
  title: {
153
- en: 'Easing Functions Explained 📈',
154
- pl: 'Funkcje Easing wyjaśnione 📈',
155
- de: 'Easing-Funktionen erklärt 📈',
153
+ en: 'Easing Functions Explained',
154
+ pl: 'Funkcje Easing wyjaśnione',
155
+ de: 'Easing-Funktionen erklärt',
156
156
  },
157
157
  content: {
158
- en: 'Available easing functions:\n\n• `Easing.linear` — constant speed\n• `Easing.easeInQuad` — starts slow, accelerates\n• `Easing.easeOutQuad` — starts fast, decelerates\n• `Easing.easeInOutQuad` — slow start & end\n• `Easing.easeInCubic` — stronger acceleration\n• `Easing.easeOutCubic` — stronger deceleration\n• `Easing.easeOutBounce` — bounce effect at the end 🏀\n• `Easing.easeOutElastic` — spring/elastic effect 🔧\n\nExperiment with different easings to find the right feel for your game!',
159
- pl: 'Dostępne funkcje easing:\n\n• `Easing.linear` — stała prędkość\n• `Easing.easeInQuad` — zaczyna wolno, przyspiesza\n• `Easing.easeOutQuad` — zaczyna szybko, zwalnia\n• `Easing.easeInOutQuad` — wolny start i koniec\n• `Easing.easeInCubic` — silniejsze przyspieszenie\n• `Easing.easeOutCubic` — silniejsze hamowanie\n• `Easing.easeOutBounce` — efekt odbicia 🏀\n• `Easing.easeOutElastic` — efekt sprężyny 🔧\n\nEksperymentuj z różnymi easingami, aby znaleźć odpowiedni feeling!',
160
- de: 'Verfügbare Easing-Funktionen:\n\n• `Easing.linear` — konstante Geschwindigkeit\n• `Easing.easeInQuad` — langsamer Start, beschleunigt\n• `Easing.easeOutQuad` — schneller Start, bremst ab\n• `Easing.easeInOutQuad` — langsamer Start & Ende\n• `Easing.easeInCubic` — stärkere Beschleunigung\n• `Easing.easeOutCubic` — stärkere Verlangsamung\n• `Easing.easeOutBounce` — Bounce-Effekt 🏀\n• `Easing.easeOutElastic` — Feder/Elastik-Effekt 🔧\n\nExperimentiere mit verschiedenen Easings!',
158
+ en: 'Available easing functions:\n\n• `Easing.linear` — constant speed\n• `Easing.easeInQuad` — starts slow, accelerates\n• `Easing.easeOutQuad` — starts fast, decelerates\n• `Easing.easeInOutQuad` — slow start & end\n• `Easing.easeInCubic` — stronger acceleration\n• `Easing.easeOutCubic` — stronger deceleration\n• `Easing.easeOutBounce` — bounce effect at the end\n• `Easing.easeOutElastic` — spring/elastic effect\n\nExperiment with different easings to find the right feel for your game!',
159
+ pl: 'Dostępne funkcje easing:\n\n• `Easing.linear` — stała prędkość\n• `Easing.easeInQuad` — zaczyna wolno, przyspiesza\n• `Easing.easeOutQuad` — zaczyna szybko, zwalnia\n• `Easing.easeInOutQuad` — wolny start i koniec\n• `Easing.easeInCubic` — silniejsze przyspieszenie\n• `Easing.easeOutCubic` — silniejsze hamowanie\n• `Easing.easeOutBounce` — efekt odbicia\n• `Easing.easeOutElastic` — efekt sprężyny\n\nEksperymentuj z różnymi easingami, aby znaleźć odpowiedni feeling!',
160
+ de: 'Verfügbare Easing-Funktionen:\n\n• `Easing.linear` — konstante Geschwindigkeit\n• `Easing.easeInQuad` — langsamer Start, beschleunigt\n• `Easing.easeOutQuad` — schneller Start, bremst ab\n• `Easing.easeInOutQuad` — langsamer Start & Ende\n• `Easing.easeInCubic` — stärkere Beschleunigung\n• `Easing.easeOutCubic` — stärkere Verlangsamung\n• `Easing.easeOutBounce` — Bounce-Effekt\n• `Easing.easeOutElastic` — Feder/Elastik-Effekt\n\nExperimentiere mit verschiedenen Easings!',
161
161
  },
162
162
  },
163
163
  // --- S7: Animation State Machine ---
@@ -190,9 +190,9 @@ const TUTORIAL_ANIMATIONS = {
190
190
  id: 'anim-checkpoint',
191
191
  type: 'checkpoint',
192
192
  title: {
193
- en: 'Animation Checkpoint ✅',
194
- pl: 'Checkpoint animacji ✅',
195
- de: 'Animations-Checkpoint ✅',
193
+ en: 'Animation Checkpoint',
194
+ pl: 'Checkpoint animacji',
195
+ de: 'Animations-Checkpoint',
196
196
  },
197
197
  content: {
198
198
  en: "Great progress! You've learned the core animation APIs. Your progress is saved.",
@@ -205,14 +205,14 @@ const TUTORIAL_ANIMATIONS = {
205
205
  id: 'anim-congratulations',
206
206
  type: 'text',
207
207
  title: {
208
- en: 'Congratulations! 🎉',
209
- pl: 'Gratulacje! 🎉',
210
- de: 'Herzlichen Glückwunsch! 🎉',
208
+ en: 'Congratulations!',
209
+ pl: 'Gratulacje!',
210
+ de: 'Herzlichen Glückwunsch!',
211
211
  },
212
212
  content: {
213
- en: '🏆 You learned:\n• Creating animation clips with `createClipFromSheet`\n• `SpriteAnimator` for frame-by-frame animation\n• `TweenManager` for smooth interpolation\n• Easing functions (bounce, elastic, cubic)\n• `AnimationStateMachine` for automatic transitions\n\nNext: Try the "Tilemaps & Worlds" tutorial! 🗺️',
214
- pl: '🏆 Nauczyłeś się:\n• Tworzenia klipów animacji z `createClipFromSheet`\n• `SpriteAnimator` do animacji klatka po klatce\n• `TweenManager` do płynnej interpolacji\n• Funkcji easing (bounce, elastic, cubic)\n• `AnimationStateMachine` do automatycznych przejść\n\nDalej: Spróbuj tutoriala "Tilemapy i światy"! 🗺️',
215
- de: '🏆 Du hast gelernt:\n• Animationsclips mit `createClipFromSheet` erstellen\n• `SpriteAnimator` für Frame-by-Frame-Animation\n• `TweenManager` für flüssige Interpolation\n• Easing-Funktionen (Bounce, Elastic, Cubic)\n• `AnimationStateMachine` für automatische Übergänge\n\nWeiter: Probiere das "Tilemaps & Welten"-Tutorial! 🗺️',
213
+ en: 'You learned:\n• Creating animation clips with `createClipFromSheet`\n• `SpriteAnimator` for frame-by-frame animation\n• `TweenManager` for smooth interpolation\n• Easing functions (bounce, elastic, cubic)\n• `AnimationStateMachine` for automatic transitions\n\nNext: Try the "Tilemaps & Worlds" tutorial!',
214
+ pl: 'Nauczyłeś się:\n• Tworzenia klipów animacji z `createClipFromSheet`\n• `SpriteAnimator` do animacji klatka po klatce\n• `TweenManager` do płynnej interpolacji\n• Funkcji easing (bounce, elastic, cubic)\n• `AnimationStateMachine` do automatycznych przejść\n\nDalej: Spróbuj tutoriala "Tilemapy i światy"!',
215
+ de: 'Du hast gelernt:\n• Animationsclips mit `createClipFromSheet` erstellen\n• `SpriteAnimator` für Frame-by-Frame-Animation\n• `TweenManager` für flüssige Interpolation\n• Easing-Funktionen (Bounce, Elastic, Cubic)\n• `AnimationStateMachine` für automatische Übergänge\n\nWeiter: Probiere das "Tilemaps & Welten"-Tutorial!',
216
216
  },
217
217
  tooltipPosition: 'center',
218
218
  },
@@ -246,14 +246,14 @@ const TUTORIAL_TILEMAPS = {
246
246
  id: 'tile-welcome',
247
247
  type: 'text',
248
248
  title: {
249
- en: 'Building Worlds with Tiles! 🗺️',
250
- pl: 'Budujemy światy z kafelków! 🗺️',
251
- de: 'Welten mit Kacheln bauen! 🗺️',
249
+ en: 'Building Worlds with Tiles!',
250
+ pl: 'Budujemy światy z kafelków!',
251
+ de: 'Welten mit Kacheln bauen!',
252
252
  },
253
253
  content: {
254
- en: "Tilemaps are the foundation of 2D game worlds — platformers, RPGs, strategy games.\n\nYou will learn:\n• Creating a tilemap with layers\n• Placing and filling tiles\n• Auto-tiling (smart borders)\n• Collision detection with tiles\n• Serializing tilemaps (save/load)\n\nLet's build a world! 🌍",
255
- pl: 'Tilemapy to fundament świata gier 2D — platformówek, RPG, strategii.\n\nNauczysz się:\n• Tworzenia tilemapy z warstwami\n• Umieszczania i wypełniania kafelków\n• Auto-tilingu (inteligentne krawędzie)\n• Detekcji kolizji z kafelkami\n• Serializacji tilemap (zapis/odczyt)\n\nZbudujmy świat! 🌍',
256
- de: 'Tilemaps sind das Fundament von 2D-Spielwelten — Platformer, RPGs, Strategiespiele.\n\nDu lernst:\n• Erstellen einer Tilemap mit Ebenen\n• Kacheln platzieren und füllen\n• Auto-Tiling (intelligente Ränder)\n• Kollisionserkennung mit Kacheln\n• Tilemaps serialisieren (Speichern/Laden)\n\nBauen wir eine Welt! 🌍',
254
+ en: "Tilemaps are the foundation of 2D game worlds — platformers, RPGs, strategy games.\n\nYou will learn:\n• Creating a tilemap with layers\n• Placing and filling tiles\n• Auto-tiling (smart borders)\n• Collision detection with tiles\n• Serializing tilemaps (save/load)\n\nLet's build a world!",
255
+ pl: 'Tilemapy to fundament świata gier 2D — platformówek, RPG, strategii.\n\nNauczysz się:\n• Tworzenia tilemapy z warstwami\n• Umieszczania i wypełniania kafelków\n• Auto-tilingu (inteligentne krawędzie)\n• Detekcji kolizji z kafelkami\n• Serializacji tilemap (zapis/odczyt)\n\nZbudujmy świat!',
256
+ de: 'Tilemaps sind das Fundament von 2D-Spielwelten — Platformer, RPGs, Strategiespiele.\n\nDu lernst:\n• Erstellen einer Tilemap mit Ebenen\n• Kacheln platzieren und füllen\n• Auto-Tiling (intelligente Ränder)\n• Kollisionserkennung mit Kacheln\n• Tilemaps serialisieren (Speichern/Laden)\n\nBauen wir eine Welt!',
257
257
  },
258
258
  skippable: true,
259
259
  tooltipPosition: 'center',
@@ -313,9 +313,9 @@ const TUTORIAL_TILEMAPS = {
313
313
  id: 'auto-tiling',
314
314
  type: 'code',
315
315
  title: {
316
- en: 'Auto-Tiling Magic ✨',
317
- pl: 'Magia auto-tilingu ✨',
318
- de: 'Auto-Tiling Magie ✨',
316
+ en: 'Auto-Tiling Magic',
317
+ pl: 'Magia auto-tilingu',
318
+ de: 'Auto-Tiling Magie',
319
319
  },
320
320
  content: {
321
321
  en: 'Use `computeAutoTileMask` to automatically determine which border tile variant to use.\nThe 4-bit bitmask checks top/right/bottom/left neighbors.',
@@ -338,9 +338,9 @@ const TUTORIAL_TILEMAPS = {
338
338
  id: 'quiz-tilemap',
339
339
  type: 'quiz',
340
340
  title: {
341
- en: 'Tilemap Quiz! 🧠',
342
- pl: 'Quiz tilemap! 🧠',
343
- de: 'Tilemap-Quiz! 🧠',
341
+ en: 'Tilemap Quiz!',
342
+ pl: 'Quiz tilemap!',
343
+ de: 'Tilemap-Quiz!',
344
344
  },
345
345
  content: {
346
346
  en: 'A tilemap is 20 tiles wide × 15 tiles tall with 32px tiles. What is the total pixel width?',
@@ -410,14 +410,14 @@ const TUTORIAL_TILEMAPS = {
410
410
  id: 'tile-congratulations',
411
411
  type: 'text',
412
412
  title: {
413
- en: 'Congratulations! 🎉',
414
- pl: 'Gratulacje! 🎉',
415
- de: 'Herzlichen Glückwunsch! 🎉',
413
+ en: 'Congratulations!',
414
+ pl: 'Gratulacje!',
415
+ de: 'Herzlichen Glückwunsch!',
416
416
  },
417
417
  content: {
418
- en: '🏆 You learned:\n• `Tilemap` creation with layers\n• `setTile`, `fillRect`, `floodFill`\n• `computeAutoTileMask` for smart borders\n• `worldToTile` / `tileToWorld` conversion\n• `isSolid` / `getSolidTilesInRect` for collision\n• `toJSON` / `fromJSON` for save/load\n\nNext: Try "Visual Scripting" to program without code! 🧩',
419
- pl: '🏆 Nauczyłeś się:\n• Tworzenia `Tilemap` z warstwami\n• `setTile`, `fillRect`, `floodFill`\n• `computeAutoTileMask` do inteligentnych krawędzi\n• `worldToTile` / `tileToWorld` konwersji\n• `isSolid` / `getSolidTilesInRect` do kolizji\n• `toJSON` / `fromJSON` do zapisu/odczytu\n\nDalej: Spróbuj "Visual Scripting" — programowanie bez kodu! 🧩',
420
- de: '🏆 Du hast gelernt:\n• `Tilemap`-Erstellung mit Ebenen\n• `setTile`, `fillRect`, `floodFill`\n• `computeAutoTileMask` für intelligente Ränder\n• `worldToTile` / `tileToWorld` Konvertierung\n• `isSolid` / `getSolidTilesInRect` für Kollision\n• `toJSON` / `fromJSON` zum Speichern/Laden\n\nWeiter: Probiere "Visual Scripting" — Programmieren ohne Code! 🧩',
418
+ en: 'You learned:\n• `Tilemap` creation with layers\n• `setTile`, `fillRect`, `floodFill`\n• `computeAutoTileMask` for smart borders\n• `worldToTile` / `tileToWorld` conversion\n• `isSolid` / `getSolidTilesInRect` for collision\n• `toJSON` / `fromJSON` for save/load\n\nNext: Try "Visual Scripting" to program without code!',
419
+ pl: 'Nauczyłeś się:\n• Tworzenia `Tilemap` z warstwami\n• `setTile`, `fillRect`, `floodFill`\n• `computeAutoTileMask` do inteligentnych krawędzi\n• `worldToTile` / `tileToWorld` konwersji\n• `isSolid` / `getSolidTilesInRect` do kolizji\n• `toJSON` / `fromJSON` do zapisu/odczytu\n\nDalej: Spróbuj "Visual Scripting" — programowanie bez kodu!',
420
+ de: 'Du hast gelernt:\n• `Tilemap`-Erstellung mit Ebenen\n• `setTile`, `fillRect`, `floodFill`\n• `computeAutoTileMask` für intelligente Ränder\n• `worldToTile` / `tileToWorld` Konvertierung\n• `isSolid` / `getSolidTilesInRect` für Kollision\n• `toJSON` / `fromJSON` zum Speichern/Laden\n\nWeiter: Probiere "Visual Scripting" — Programmieren ohne Code!',
421
421
  },
422
422
  tooltipPosition: 'center',
423
423
  },
@@ -450,14 +450,14 @@ const TUTORIAL_VISUAL_SCRIPTING = {
450
450
  id: 'vs-welcome',
451
451
  type: 'text',
452
452
  title: {
453
- en: 'Program Without Code! 🧩',
454
- pl: 'Programuj bez kodu! 🧩',
455
- de: 'Programmieren ohne Code! 🧩',
453
+ en: 'Program Without Code!',
454
+ pl: 'Programuj bez kodu!',
455
+ de: 'Programmieren ohne Code!',
456
456
  },
457
457
  content: {
458
- en: 'Visual Scripting lets you create game behaviors by connecting nodes in a graph.\nNo typing required — just drag, connect, and play!\n\nYou will learn:\n• Creating a node library\n• Building a script graph\n• Connecting nodes with ports\n• Running the graph\n\nPerfect for beginners and kids! 🎮',
459
- pl: 'Visual Scripting pozwala tworzyć zachowania gry przez łączenie węzłów w grafie.\nBez pisania — po prostu przeciągaj, łącz i graj!\n\nNauczysz się:\n• Tworzenia biblioteki węzłów\n• Budowania grafu skryptowego\n• Łączenia węzłów portami\n• Uruchamiania grafu\n\nIdealne dla początkujących i dzieci! 🎮',
460
- de: 'Visual Scripting lässt dich Spielverhalten durch Verbinden von Knoten erstellen.\nKein Tippen nötig — einfach ziehen, verbinden und spielen!\n\nDu lernst:\n• Eine Knoten-Bibliothek erstellen\n• Einen Script-Graph bauen\n• Knoten mit Ports verbinden\n• Den Graphen ausführen\n\nPerfekt für Anfänger und Kinder! 🎮',
458
+ en: 'Visual Scripting lets you create game behaviors by connecting nodes in a graph.\nNo typing required — just drag, connect, and play!\n\nYou will learn:\n• Creating a node library\n• Building a script graph\n• Connecting nodes with ports\n• Running the graph\n\nPerfect for beginners and kids!',
459
+ pl: 'Visual Scripting pozwala tworzyć zachowania gry przez łączenie węzłów w grafie.\nBez pisania — po prostu przeciągaj, łącz i graj!\n\nNauczysz się:\n• Tworzenia biblioteki węzłów\n• Budowania grafu skryptowego\n• Łączenia węzłów portami\n• Uruchamiania grafu\n\nIdealne dla początkujących i dzieci!',
460
+ de: 'Visual Scripting lässt dich Spielverhalten durch Verbinden von Knoten erstellen.\nKein Tippen nötig — einfach ziehen, verbinden und spielen!\n\nDu lernst:\n• Eine Knoten-Bibliothek erstellen\n• Einen Script-Graph bauen\n• Knoten mit Ports verbinden\n• Den Graphen ausführen\n\nPerfekt für Anfänger und Kinder!',
461
461
  },
462
462
  skippable: true,
463
463
  tooltipPosition: 'center',
@@ -517,9 +517,9 @@ const TUTORIAL_VISUAL_SCRIPTING = {
517
517
  id: 'quiz-nodes',
518
518
  type: 'quiz',
519
519
  title: {
520
- en: 'Node Quiz! 🧠',
521
- pl: 'Quiz o węzłach! 🧠',
522
- de: 'Knoten-Quiz! 🧠',
520
+ en: 'Node Quiz!',
521
+ pl: 'Quiz o węzłach!',
522
+ de: 'Knoten-Quiz!',
523
523
  },
524
524
  content: {
525
525
  en: 'What does a "flow" port type control in visual scripting?',
@@ -556,9 +556,9 @@ const TUTORIAL_VISUAL_SCRIPTING = {
556
556
  id: 'run-graph',
557
557
  type: 'code',
558
558
  title: {
559
- en: 'Run the Graph! 🚀',
560
- pl: 'Uruchom graf! 🚀',
561
- de: 'Starte den Graphen! 🚀',
559
+ en: 'Run the Graph!',
560
+ pl: 'Uruchom graf!',
561
+ de: 'Starte den Graphen!',
562
562
  },
563
563
  content: {
564
564
  en: "The `GraphExecutor` takes a node library and a script graph, then executes it each frame.\nConnect it to the engine's update loop.",
@@ -597,14 +597,14 @@ const TUTORIAL_VISUAL_SCRIPTING = {
597
597
  id: 'vs-congratulations',
598
598
  type: 'text',
599
599
  title: {
600
- en: 'Congratulations! 🎉',
601
- pl: 'Gratulacje! 🎉',
602
- de: 'Herzlichen Glückwunsch! 🎉',
600
+ en: 'Congratulations!',
601
+ pl: 'Gratulacje!',
602
+ de: 'Herzlichen Glückwunsch!',
603
603
  },
604
604
  content: {
605
- en: '🏆 You learned:\n• `NodeLibrary` with built-in node types\n• Port types: flow, number, string, boolean, vec2, entity\n• `ScriptGraph` structure (nodes + connections)\n• `GraphExecutor` to run graphs each frame\n• Node categories: flow, math, logic, entity, input, physics, game\n\nVisual Scripting makes game development accessible to everyone! 🌟\n\nNext: Try "Local Multiplayer" for co-op gaming! 🎮🎮',
606
- pl: '🏆 Nauczyłeś się:\n• `NodeLibrary` z wbudowanymi typami węzłów\n• Typy portów: flow, number, string, boolean, vec2, entity\n• Struktury `ScriptGraph` (nodes + connections)\n• `GraphExecutor` do uruchamiania grafów co klatkę\n• Kategorie węzłów: flow, math, logic, entity, input, physics, game\n\nVisual Scripting sprawia, że tworzenie gier jest dostępne dla każdego! 🌟\n\nDalej: Spróbuj "Multiplayer lokalny" do gry w co-op! 🎮🎮',
607
- de: '🏆 Du hast gelernt:\n• `NodeLibrary` mit eingebauten Knotentypen\n• Port-Typen: flow, number, string, boolean, vec2, entity\n• `ScriptGraph`-Struktur (Knoten + Verbindungen)\n• `GraphExecutor` zum Ausführen von Graphen\n• Knoten-Kategorien: flow, math, logic, entity, input, physics, game\n\nVisual Scripting macht Spieleentwicklung für alle zugänglich! 🌟\n\nWeiter: Probiere "Lokaler Multiplayer" für Co-op! 🎮🎮',
605
+ en: 'You learned:\n• `NodeLibrary` with built-in node types\n• Port types: flow, number, string, boolean, vec2, entity\n• `ScriptGraph` structure (nodes + connections)\n• `GraphExecutor` to run graphs each frame\n• Node categories: flow, math, logic, entity, input, physics, game\n\nVisual Scripting makes game development accessible to everyone!\n\nNext: Try "Local Multiplayer" for co-op gaming!',
606
+ pl: 'Nauczyłeś się:\n• `NodeLibrary` z wbudowanymi typami węzłów\n• Typy portów: flow, number, string, boolean, vec2, entity\n• Struktury `ScriptGraph` (nodes + connections)\n• `GraphExecutor` do uruchamiania grafów co klatkę\n• Kategorie węzłów: flow, math, logic, entity, input, physics, game\n\nVisual Scripting sprawia, że tworzenie gier jest dostępne dla każdego!\n\nDalej: Spróbuj "Multiplayer lokalny" do gry w co-op!',
607
+ de: 'Du hast gelernt:\n• `NodeLibrary` mit eingebauten Knotentypen\n• Port-Typen: flow, number, string, boolean, vec2, entity\n• `ScriptGraph`-Struktur (Knoten + Verbindungen)\n• `GraphExecutor` zum Ausführen von Graphen\n• Knoten-Kategorien: flow, math, logic, entity, input, physics, game\n\nVisual Scripting macht Spieleentwicklung für alle zugänglich!\n\nWeiter: Probiere "Lokaler Multiplayer" für Co-op!',
608
608
  },
609
609
  tooltipPosition: 'center',
610
610
  },
@@ -638,14 +638,14 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
638
638
  id: 'mp-welcome',
639
639
  type: 'text',
640
640
  title: {
641
- en: 'Play Together! 🎮🎮',
642
- pl: 'Grajcie razem! 🎮🎮',
643
- de: 'Zusammen spielen! 🎮🎮',
641
+ en: 'Play Together!',
642
+ pl: 'Grajcie razem!',
643
+ de: 'Zusammen spielen!',
644
644
  },
645
645
  content: {
646
- en: "Local multiplayer lets friends play together on the same screen!\n\nYou will learn:\n• `PlayerManager` — managing up to 12 players\n• Gamepad input for each player\n• Split-screen viewports\n• Drop-in / drop-out\n\nGrab some controllers and let's go! 🕹️",
647
- pl: 'Multiplayer lokalny pozwala znajomym grać razem na jednym ekranie!\n\nNauczysz się:\n• `PlayerManager` — zarządzanie do 12 graczy\n• Wejście z gamepada dla każdego gracza\n• Podzielony ekran (split-screen)\n• Dynamiczne dołączanie/odłączanie graczy\n\nWeź kontrolery i zaczynamy! 🕹️',
648
- de: 'Lokaler Multiplayer lässt Freunde zusammen auf einem Bildschirm spielen!\n\nDu lernst:\n• `PlayerManager` — bis zu 12 Spieler verwalten\n• Gamepad-Eingabe für jeden Spieler\n• Splitscreen-Ansichten\n• Drop-in / Drop-out\n\nSchnappt euch Controller und los! 🕹️',
646
+ en: "Local multiplayer lets friends play together on the same screen!\n\nYou will learn:\n• `PlayerManager` — managing up to 12 players\n• Gamepad input for each player\n• Split-screen viewports\n• Drop-in / drop-out\n\nGrab some controllers and let's go!",
647
+ pl: 'Multiplayer lokalny pozwala znajomym grać razem na jednym ekranie!\n\nNauczysz się:\n• `PlayerManager` — zarządzanie do 12 graczy\n• Wejście z gamepada dla każdego gracza\n• Podzielony ekran (split-screen)\n• Dynamiczne dołączanie/odłączanie graczy\n\nWeź kontrolery i zaczynamy!',
648
+ de: 'Lokaler Multiplayer lässt Freunde zusammen auf einem Bildschirm spielen!\n\nDu lernst:\n• `PlayerManager` — bis zu 12 Spieler verwalten\n• Gamepad-Eingabe für jeden Spieler\n• Splitscreen-Ansichten\n• Drop-in / Drop-out\n\nSchnappt euch Controller und los!',
649
649
  },
650
650
  skippable: true,
651
651
  tooltipPosition: 'center',
@@ -730,9 +730,9 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
730
730
  id: 'quiz-multiplayer',
731
731
  type: 'quiz',
732
732
  title: {
733
- en: 'Multiplayer Quiz! 🧠',
734
- pl: 'Quiz multiplayer! 🧠',
735
- de: 'Multiplayer-Quiz! 🧠',
733
+ en: 'Multiplayer Quiz!',
734
+ pl: 'Quiz multiplayer!',
735
+ de: 'Multiplayer-Quiz!',
736
736
  },
737
737
  content: {
738
738
  en: 'How many players does the engine support simultaneously?',
@@ -777,9 +777,9 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
777
777
  id: 'gamepad-vibration',
778
778
  type: 'code',
779
779
  title: {
780
- en: 'Gamepad Vibration 🎮💥',
781
- pl: 'Wibracja gamepada 🎮💥',
782
- de: 'Gamepad-Vibration 🎮💥',
780
+ en: 'Gamepad Vibration',
781
+ pl: 'Wibracja gamepada',
782
+ de: 'Gamepad-Vibration',
783
783
  },
784
784
  content: {
785
785
  en: 'Make gamepads rumble on events like damage or explosions using the `vibrate` method.',
@@ -802,14 +802,14 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
802
802
  id: 'mp-congratulations',
803
803
  type: 'text',
804
804
  title: {
805
- en: 'Congratulations! 🎉',
806
- pl: 'Gratulacje! 🎉',
807
- de: 'Herzlichen Glückwunsch! 🎉',
805
+ en: 'Congratulations!',
806
+ pl: 'Gratulacje!',
807
+ de: 'Herzlichen Glückwunsch!',
808
808
  },
809
809
  content: {
810
- en: '🏆 You learned:\n• `PlayerManager` for up to 12 players\n• `setupLocal(count)` for quick setup\n• Per-player `getAction(name, playerIndex)`\n• Action bindings for keyboard + gamepad\n• `SplitScreenManager` with 7 screen modes\n• Drop-in / drop-out with events\n• Gamepad vibration for tactile feedback\n\nYour games are now multiplayer-ready! 🎮🎮🎮🎮',
811
- pl: '🏆 Nauczyłeś się:\n• `PlayerManager` do 12 graczy\n• `setupLocal(count)` do szybkiej konfiguracji\n• Per-gracz `getAction(name, playerIndex)`\n• Bindowanie akcji dla klawiatury + gamepada\n• `SplitScreenManager` z 7 trybami ekranu\n• Dynamiczne dołączanie/odłączanie ze zdarzeniami\n• Wibracja gamepada dla taktylnego feedbacku\n\nTwoje gry są teraz gotowe na multiplayer! 🎮🎮🎮🎮',
812
- de: '🏆 Du hast gelernt:\n• `PlayerManager` für bis zu 12 Spieler\n• `setupLocal(count)` für schnelles Setup\n• Pro-Spieler `getAction(name, spielerIndex)`\n• Aktionsbindungen für Tastatur + Gamepad\n• `SplitScreenManager` mit 7 Bildschirmmodi\n• Drop-in / Drop-out mit Events\n• Gamepad-Vibration für taktiles Feedback\n\nDeine Spiele sind jetzt Multiplayer-bereit! 🎮🎮🎮🎮',
810
+ en: 'You learned:\n• `PlayerManager` for up to 12 players\n• `setupLocal(count)` for quick setup\n• Per-player `getAction(name, playerIndex)`\n• Action bindings for keyboard + gamepad\n• `SplitScreenManager` with 7 screen modes\n• Drop-in / drop-out with events\n• Gamepad vibration for tactile feedback\n\nYour games are now multiplayer-ready!',
811
+ pl: 'Nauczyłeś się:\n• `PlayerManager` do 12 graczy\n• `setupLocal(count)` do szybkiej konfiguracji\n• Per-gracz `getAction(name, playerIndex)`\n• Bindowanie akcji dla klawiatury + gamepada\n• `SplitScreenManager` z 7 trybami ekranu\n• Dynamiczne dołączanie/odłączanie ze zdarzeniami\n• Wibracja gamepada dla taktylnego feedbacku\n\nTwoje gry są teraz gotowe na multiplayer!',
812
+ de: 'Du hast gelernt:\n• `PlayerManager` für bis zu 12 Spieler\n• `setupLocal(count)` für schnelles Setup\n• Pro-Spieler `getAction(name, spielerIndex)`\n• Aktionsbindungen für Tastatur + Gamepad\n• `SplitScreenManager` mit 7 Bildschirmmodi\n• Drop-in / Drop-out mit Events\n• Gamepad-Vibration für taktiles Feedback\n\nDeine Spiele sind jetzt Multiplayer-bereit!',
813
813
  },
814
814
  tooltipPosition: 'center',
815
815
  },