@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
@@ -1000,8 +1000,15 @@ class UISystem {
1000
1000
  // Selected value
1001
1001
  this.ctx.fillStyle = this.style.textColor;
1002
1002
  this.ctx.fillText(options[selected] ?? '', x + this.style.padding, dropdownY + height / 2 + this.style.fontSize / 3);
1003
- // Arrow
1004
- this.ctx.fillText('▼', x + width - 20, dropdownY + height / 2 + this.style.fontSize / 3);
1003
+ // Arrow (drawn, not a font glyph)
1004
+ const arrowX = x + width - 16;
1005
+ const arrowY = dropdownY + height / 2;
1006
+ this.ctx.beginPath();
1007
+ this.ctx.moveTo(arrowX - 5, arrowY - 3);
1008
+ this.ctx.lineTo(arrowX + 5, arrowY - 3);
1009
+ this.ctx.lineTo(arrowX, arrowY + 3);
1010
+ this.ctx.closePath();
1011
+ this.ctx.fill();
1005
1012
  // Handle click - simplified, just cycle through options
1006
1013
  let newSelected = selected;
1007
1014
  if (hovered && this.mouseClicked) {
@@ -392,7 +392,7 @@ const plugin: PluginDefinition = {
392
392
  ctx.registerExtension('editor-panel', {
393
393
  id: 'perf-panel',
394
394
  title: 'Performance',
395
- icon: '📊',
395
+ icon: 'bar-chart',
396
396
  position: 'right',
397
397
  render: () => null, // React component
398
398
  });
@@ -340,7 +340,7 @@ async function testPluginLifecycle(plugin) {
340
340
  function formatTestResults(suite) {
341
341
  const lines = [`━━━ ${suite.suiteName} (${suite.pluginId}) ━━━`, ''];
342
342
  for (const r of suite.results) {
343
- const icon = r.status === 'passed' ? '✓' : r.status === 'failed' ? '✗' : '○';
343
+ const icon = r.status === 'passed' ? 'PASS' : r.status === 'failed' ? 'FAIL' : 'SKIP';
344
344
  const ms = r.duration.toFixed(1);
345
345
  lines.push(` ${icon} ${r.name} (${ms}ms)`);
346
346
  if (r.error) {
@@ -1,3 +1,4 @@
1
+ import { NiceIcon } from '@nice2dev/ui';
1
2
  import React from 'react';
2
3
  import { EventBus } from '../core/EventBus.js';
3
4
 
@@ -901,7 +902,10 @@ const QuestTracker = ({ state, quest, showOptional = false, className = '', styl
901
902
  React.createElement('span', {
902
903
  key: 'check',
903
904
  style: { color: obj.completed ? '#4caf50' : '#9e9e9e' },
904
- }, obj.completed ? '✓' : '○'),
905
+ }, React.createElement(NiceIcon, {
906
+ name: obj.completed ? 'check' : 'circle',
907
+ size: 12,
908
+ })),
905
909
  React.createElement('span', { key: 'desc' }, obj.description),
906
910
  obj.target > 1 &&
907
911
  React.createElement('span', {
@@ -302,7 +302,7 @@ const BUILT_IN_ACHIEVEMENTS = [
302
302
  pl: 'Ukończ swój pierwszy tutorial',
303
303
  de: 'Schließe dein erstes Tutorial ab',
304
304
  },
305
- icon: '🎉',
305
+ icon: 'star',
306
306
  tier: 'bronze',
307
307
  xp: 10,
308
308
  condition: { type: 'tutorials-count', count: 1 },
@@ -315,7 +315,7 @@ const BUILT_IN_ACHIEVEMENTS = [
315
315
  pl: 'Ukończ 5 tutoriali',
316
316
  de: 'Schließe 5 Tutorials ab',
317
317
  },
318
- icon: '📚',
318
+ icon: 'book',
319
319
  tier: 'silver',
320
320
  xp: 50,
321
321
  condition: { type: 'tutorials-count', count: 5 },
@@ -328,7 +328,7 @@ const BUILT_IN_ACHIEVEMENTS = [
328
328
  pl: 'Ukończ 10 tutoriali',
329
329
  de: 'Schließe 10 Tutorials ab',
330
330
  },
331
- icon: '🏅',
331
+ icon: 'medal',
332
332
  tier: 'gold',
333
333
  xp: 100,
334
334
  condition: { type: 'tutorials-count', count: 10 },
@@ -341,7 +341,7 @@ const BUILT_IN_ACHIEVEMENTS = [
341
341
  pl: 'Ukończ wszystkie 15 tutoriali game engine',
342
342
  de: 'Schließe alle 15 Game-Engine-Tutorials ab',
343
343
  },
344
- icon: '👑',
344
+ icon: 'medal',
345
345
  tier: 'diamond',
346
346
  xp: 500,
347
347
  condition: { type: 'tutorials-count', count: 15 },
@@ -354,7 +354,7 @@ const BUILT_IN_ACHIEVEMENTS = [
354
354
  pl: 'Ukończ tutorial "Zrób platformera"',
355
355
  de: 'Schließe das "Build a Platformer" Tutorial ab',
356
356
  },
357
- icon: '🎮',
357
+ icon: 'gamepad',
358
358
  tier: 'gold',
359
359
  xp: 75,
360
360
  condition: { type: 'tutorial-complete', tutorialId: 'build-a-platformer' },
@@ -367,7 +367,7 @@ const BUILT_IN_ACHIEVEMENTS = [
367
367
  pl: 'Ukończ tutorial "Zrób RPG"',
368
368
  de: 'Schließe das "Build an RPG" Tutorial ab',
369
369
  },
370
- icon: '⚔️',
370
+ icon: 'target',
371
371
  tier: 'gold',
372
372
  xp: 75,
373
373
  condition: { type: 'tutorial-complete', tutorialId: 'build-an-rpg' },
@@ -380,7 +380,7 @@ const BUILT_IN_ACHIEVEMENTS = [
380
380
  pl: 'Odpowiedz poprawnie na wszystkie quizy',
381
381
  de: 'Beantworte alle Quizfragen richtig',
382
382
  },
383
- icon: '🧠',
383
+ icon: 'lightbulb',
384
384
  tier: 'platinum',
385
385
  xp: 200,
386
386
  condition: { type: 'quiz-perfect' },
@@ -393,7 +393,7 @@ const BUILT_IN_ACHIEVEMENTS = [
393
393
  pl: 'Ukończ tutorial "Publikacja gry"',
394
394
  de: 'Schließe das "Publish Your Game" Tutorial ab',
395
395
  },
396
- icon: '🚀',
396
+ icon: 'rocket',
397
397
  tier: 'silver',
398
398
  xp: 50,
399
399
  condition: { type: 'tutorial-complete', tutorialId: 'publish-your-game' },
@@ -406,7 +406,7 @@ const BUILT_IN_ACHIEVEMENTS = [
406
406
  pl: 'Ucz się przez 7 kolejnych dni',
407
407
  de: 'Lerne 7 Tage am Stück',
408
408
  },
409
- icon: '🔥',
409
+ icon: 'zap',
410
410
  tier: 'silver',
411
411
  xp: 50,
412
412
  condition: { type: 'streak', streakDays: 7 },
@@ -419,7 +419,7 @@ const BUILT_IN_ACHIEVEMENTS = [
419
419
  pl: 'Ucz się przez 30 kolejnych dni',
420
420
  de: 'Lerne 30 Tage am Stück',
421
421
  },
422
- icon: '💎',
422
+ icon: 'diamond',
423
423
  tier: 'diamond',
424
424
  xp: 300,
425
425
  condition: { type: 'streak', streakDays: 30 },
@@ -433,7 +433,7 @@ const BUILT_IN_ACHIEVEMENTS = [
433
433
  pl: 'Ukończ tutorial "Zrób grę 3D"',
434
434
  de: 'Schließe das "3D-Spiel bauen" Tutorial ab',
435
435
  },
436
- icon: '🌐',
436
+ icon: 'globe',
437
437
  tier: 'gold',
438
438
  xp: 75,
439
439
  condition: { type: 'tutorial-complete', tutorialId: 'build-a-3d-game' },
@@ -446,7 +446,7 @@ const BUILT_IN_ACHIEVEMENTS = [
446
446
  pl: 'Ukończ tutorial multiplayer online',
447
447
  de: 'Schließe das Online-Multiplayer-Tutorial ab',
448
448
  },
449
- icon: '🌍',
449
+ icon: 'globe',
450
450
  tier: 'gold',
451
451
  xp: 75,
452
452
  condition: { type: 'tutorial-complete', tutorialId: 'multiplayer-online-webrtc' },
@@ -541,9 +541,9 @@ const TUTORIAL_FIRST_GAME = {
541
541
  de: 'Willkommen!',
542
542
  },
543
543
  content: {
544
- 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!",
545
- 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!',
546
- 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!",
544
+ 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!",
545
+ 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!',
546
+ 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!",
547
547
  },
548
548
  skippable: true,
549
549
  tooltipPosition: 'center',
@@ -624,9 +624,9 @@ const TUTORIAL_FIRST_GAME = {
624
624
  id: 'quiz-physics',
625
625
  type: 'quiz',
626
626
  title: {
627
- en: 'Quick Quiz! 🧠',
628
- pl: 'Szybki quiz! 🧠',
629
- de: 'Schnelles Quiz! 🧠',
627
+ en: 'Quick Quiz!',
628
+ pl: 'Szybki quiz!',
629
+ de: 'Schnelles Quiz!',
630
630
  },
631
631
  content: {
632
632
  en: 'What does the "restitution" value control?',
@@ -686,9 +686,9 @@ const TUTORIAL_FIRST_GAME = {
686
686
  id: 'start-game',
687
687
  type: 'code',
688
688
  title: {
689
- en: 'Start the Game! 🚀',
690
- pl: 'Uruchom grę! 🚀',
691
- de: 'Starte das Spiel! 🚀',
689
+ en: 'Start the Game!',
690
+ pl: 'Uruchom grę!',
691
+ de: 'Starte das Spiel!',
692
692
  },
693
693
  content: {
694
694
  en: 'Everything is ready! Start the game loop to see your bouncing ball in action!',
@@ -705,14 +705,14 @@ const TUTORIAL_FIRST_GAME = {
705
705
  id: 'congratulations',
706
706
  type: 'text',
707
707
  title: {
708
- en: 'Congratulations! 🎉',
709
- pl: 'Gratulacje! 🎉',
710
- de: 'Herzlichen Glückwunsch! 🎉',
708
+ en: 'Congratulations!',
709
+ pl: 'Gratulacje!',
710
+ de: 'Herzlichen Glückwunsch!',
711
711
  },
712
712
  content: {
713
- 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! 🚀',
714
- 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"! 🚀',
715
- 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! 🚀',
713
+ 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!',
714
+ 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"!',
715
+ 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!',
716
716
  },
717
717
  tooltipPosition: 'center',
718
718
  },
@@ -722,9 +722,9 @@ const TUTORIAL_FIRST_GAME = {
722
722
  const TUTORIAL_SPACE_SHOOTER = {
723
723
  id: 'space-shooter',
724
724
  title: {
725
- en: 'Space Shooter 🚀',
726
- pl: 'Kosmiczny Strzelec 🚀',
727
- de: 'Weltraum-Shooter 🚀',
725
+ en: 'Space Shooter',
726
+ pl: 'Kosmiczny Strzelec',
727
+ de: 'Weltraum-Shooter',
728
728
  },
729
729
  description: {
730
730
  en: 'Build a classic space shooter! Learn input handling, spawning enemies, and scoring.',
@@ -744,9 +744,9 @@ const TUTORIAL_SPACE_SHOOTER = {
744
744
  type: 'text',
745
745
  title: { en: 'Space Shooter', pl: 'Kosmiczny Strzelec', de: 'Weltraum-Shooter' },
746
746
  content: {
747
- 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"',
748
- 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"',
749
- 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"',
747
+ 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"',
748
+ 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"',
749
+ 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"',
750
750
  },
751
751
  tooltipPosition: 'center',
752
752
  },
@@ -784,7 +784,7 @@ const TUTORIAL_SPACE_SHOOTER = {
784
784
  {
785
785
  id: 'quiz-input',
786
786
  type: 'quiz',
787
- title: { en: 'Input Quiz 🧠', pl: 'Quiz o sterowaniu 🧠', de: 'Eingabe-Quiz 🧠' },
787
+ title: { en: 'Input Quiz', pl: 'Quiz o sterowaniu', de: 'Eingabe-Quiz' },
788
788
  content: {
789
789
  en: 'What is the difference between isKeyDown and isKeyPressed?',
790
790
  pl: 'Jaka jest różnica między isKeyDown i isKeyPressed?',
@@ -817,7 +817,7 @@ const TUTORIAL_SPACE_SHOOTER = {
817
817
  {
818
818
  id: 'shooting',
819
819
  type: 'code',
820
- title: { en: 'Shoot Bullets! 🔫', pl: 'Strzelaj pociskami! 🔫', de: 'Schieße Kugeln! 🔫' },
820
+ title: { en: 'Shoot Bullets!', pl: 'Strzelaj pociskami!', de: 'Schieße Kugeln!' },
821
821
  content: {
822
822
  en: 'Add shooting! When Space is pressed, create a bullet entity that moves upward.',
823
823
  pl: 'Dodaj strzelanie! Po naciśnięciu Spacji utwórz pocisk, który leci w górę.',
@@ -835,7 +835,7 @@ const TUTORIAL_SPACE_SHOOTER = {
835
835
  {
836
836
  id: 'checkpoint-halfway',
837
837
  type: 'checkpoint',
838
- title: { en: 'Halfway There! 🎯', pl: 'Połowa drogi! 🎯', de: 'Halb geschafft! 🎯' },
838
+ title: { en: 'Halfway There!', pl: 'Połowa drogi!', de: 'Halb geschafft!' },
839
839
  content: {
840
840
  en: "Great progress! You have a moving ship that can shoot. Let's add enemies next!",
841
841
  pl: 'Świetne postępy! Masz poruszający się statek, który potrafi strzelać. Dodajmy teraz wrogów!',
@@ -846,14 +846,14 @@ const TUTORIAL_SPACE_SHOOTER = {
846
846
  id: 'complete',
847
847
  type: 'text',
848
848
  title: {
849
- en: 'Mission Complete! 🏆',
850
- pl: 'Misja zakończona! 🏆',
851
- de: 'Mission abgeschlossen! 🏆',
849
+ en: 'Mission Complete!',
850
+ pl: 'Misja zakończona!',
851
+ de: 'Mission abgeschlossen!',
852
852
  },
853
853
  content: {
854
- 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!',
855
- 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!',
856
- 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!',
854
+ 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!',
855
+ 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!',
856
+ 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!',
857
857
  },
858
858
  tooltipPosition: 'center',
859
859
  },
@@ -921,7 +921,7 @@ const TUTORIAL_DATAGRID_BASICS = {
921
921
  {
922
922
  id: 'quiz-filtering',
923
923
  type: 'quiz',
924
- title: { en: 'Filtering Quiz 🧠', pl: 'Quiz o filtrowaniu 🧠', de: 'Filter-Quiz 🧠' },
924
+ title: { en: 'Filtering Quiz', pl: 'Quiz o filtrowaniu', de: 'Filter-Quiz' },
925
925
  content: {
926
926
  en: 'What is the difference between headerFilter and filterRow?',
927
927
  pl: 'Jaka jest różnica między headerFilter a filterRow?',
@@ -951,11 +951,11 @@ const TUTORIAL_DATAGRID_BASICS = {
951
951
  {
952
952
  id: 'complete',
953
953
  type: 'text',
954
- title: { en: 'Grid Master! 🏆', pl: 'Mistrz Siatki! 🏆', de: 'Grid-Meister! 🏆' },
954
+ title: { en: 'Grid Master!', pl: 'Mistrz Siatki!', de: 'Grid-Meister!' },
955
955
  content: {
956
- 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!',
957
- 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!',
958
- 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!',
956
+ 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!',
957
+ 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!',
958
+ 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!',
959
959
  },
960
960
  },
961
961
  ],
@@ -34,9 +34,9 @@ const TUTORIAL_ANIMATIONS = {
34
34
  id: 'anim-welcome',
35
35
  type: 'text',
36
36
  title: {
37
- en: 'Welcome to Animations! 🎬',
38
- pl: 'Witaj w świecie animacji! 🎬',
39
- de: 'Willkommen bei Animationen! 🎬',
37
+ en: 'Welcome to Animations!',
38
+ pl: 'Witaj w świecie animacji!',
39
+ de: 'Willkommen bei Animationen!',
40
40
  },
41
41
  content: {
42
42
  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!",
@@ -101,9 +101,9 @@ const TUTORIAL_ANIMATIONS = {
101
101
  id: 'quiz-animation',
102
102
  type: 'quiz',
103
103
  title: {
104
- en: 'Quick Quiz! 🧠',
105
- pl: 'Szybki quiz! 🧠',
106
- de: 'Schnelles Quiz! 🧠',
104
+ en: 'Quick Quiz!',
105
+ pl: 'Szybki quiz!',
106
+ de: 'Schnelles Quiz!',
107
107
  },
108
108
  content: {
109
109
  en: 'If an animation has 8 frames at 0.1s each, how long is one full cycle?',
@@ -148,14 +148,14 @@ const TUTORIAL_ANIMATIONS = {
148
148
  id: 'easing-functions',
149
149
  type: 'text',
150
150
  title: {
151
- en: 'Easing Functions Explained 📈',
152
- pl: 'Funkcje Easing wyjaśnione 📈',
153
- de: 'Easing-Funktionen erklärt 📈',
151
+ en: 'Easing Functions Explained',
152
+ pl: 'Funkcje Easing wyjaśnione',
153
+ de: 'Easing-Funktionen erklärt',
154
154
  },
155
155
  content: {
156
- 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!',
157
- 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!',
158
- 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!',
156
+ 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!',
157
+ 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!',
158
+ 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!',
159
159
  },
160
160
  },
161
161
  // --- S7: Animation State Machine ---
@@ -188,9 +188,9 @@ const TUTORIAL_ANIMATIONS = {
188
188
  id: 'anim-checkpoint',
189
189
  type: 'checkpoint',
190
190
  title: {
191
- en: 'Animation Checkpoint ✅',
192
- pl: 'Checkpoint animacji ✅',
193
- de: 'Animations-Checkpoint ✅',
191
+ en: 'Animation Checkpoint',
192
+ pl: 'Checkpoint animacji',
193
+ de: 'Animations-Checkpoint',
194
194
  },
195
195
  content: {
196
196
  en: "Great progress! You've learned the core animation APIs. Your progress is saved.",
@@ -203,14 +203,14 @@ const TUTORIAL_ANIMATIONS = {
203
203
  id: 'anim-congratulations',
204
204
  type: 'text',
205
205
  title: {
206
- en: 'Congratulations! 🎉',
207
- pl: 'Gratulacje! 🎉',
208
- de: 'Herzlichen Glückwunsch! 🎉',
206
+ en: 'Congratulations!',
207
+ pl: 'Gratulacje!',
208
+ de: 'Herzlichen Glückwunsch!',
209
209
  },
210
210
  content: {
211
- 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! 🗺️',
212
- 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"! 🗺️',
213
- 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! 🗺️',
211
+ 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!',
212
+ 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"!',
213
+ 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!',
214
214
  },
215
215
  tooltipPosition: 'center',
216
216
  },
@@ -244,14 +244,14 @@ const TUTORIAL_TILEMAPS = {
244
244
  id: 'tile-welcome',
245
245
  type: 'text',
246
246
  title: {
247
- en: 'Building Worlds with Tiles! 🗺️',
248
- pl: 'Budujemy światy z kafelków! 🗺️',
249
- de: 'Welten mit Kacheln bauen! 🗺️',
247
+ en: 'Building Worlds with Tiles!',
248
+ pl: 'Budujemy światy z kafelków!',
249
+ de: 'Welten mit Kacheln bauen!',
250
250
  },
251
251
  content: {
252
- 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! 🌍",
253
- 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! 🌍',
254
- 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! 🌍',
252
+ 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!",
253
+ 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!',
254
+ 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!',
255
255
  },
256
256
  skippable: true,
257
257
  tooltipPosition: 'center',
@@ -311,9 +311,9 @@ const TUTORIAL_TILEMAPS = {
311
311
  id: 'auto-tiling',
312
312
  type: 'code',
313
313
  title: {
314
- en: 'Auto-Tiling Magic ✨',
315
- pl: 'Magia auto-tilingu ✨',
316
- de: 'Auto-Tiling Magie ✨',
314
+ en: 'Auto-Tiling Magic',
315
+ pl: 'Magia auto-tilingu',
316
+ de: 'Auto-Tiling Magie',
317
317
  },
318
318
  content: {
319
319
  en: 'Use `computeAutoTileMask` to automatically determine which border tile variant to use.\nThe 4-bit bitmask checks top/right/bottom/left neighbors.',
@@ -336,9 +336,9 @@ const TUTORIAL_TILEMAPS = {
336
336
  id: 'quiz-tilemap',
337
337
  type: 'quiz',
338
338
  title: {
339
- en: 'Tilemap Quiz! 🧠',
340
- pl: 'Quiz tilemap! 🧠',
341
- de: 'Tilemap-Quiz! 🧠',
339
+ en: 'Tilemap Quiz!',
340
+ pl: 'Quiz tilemap!',
341
+ de: 'Tilemap-Quiz!',
342
342
  },
343
343
  content: {
344
344
  en: 'A tilemap is 20 tiles wide × 15 tiles tall with 32px tiles. What is the total pixel width?',
@@ -408,14 +408,14 @@ const TUTORIAL_TILEMAPS = {
408
408
  id: 'tile-congratulations',
409
409
  type: 'text',
410
410
  title: {
411
- en: 'Congratulations! 🎉',
412
- pl: 'Gratulacje! 🎉',
413
- de: 'Herzlichen Glückwunsch! 🎉',
411
+ en: 'Congratulations!',
412
+ pl: 'Gratulacje!',
413
+ de: 'Herzlichen Glückwunsch!',
414
414
  },
415
415
  content: {
416
- 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! 🧩',
417
- 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! 🧩',
418
- 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! 🧩',
416
+ 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!',
417
+ 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!',
418
+ 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!',
419
419
  },
420
420
  tooltipPosition: 'center',
421
421
  },
@@ -448,14 +448,14 @@ const TUTORIAL_VISUAL_SCRIPTING = {
448
448
  id: 'vs-welcome',
449
449
  type: 'text',
450
450
  title: {
451
- en: 'Program Without Code! 🧩',
452
- pl: 'Programuj bez kodu! 🧩',
453
- de: 'Programmieren ohne Code! 🧩',
451
+ en: 'Program Without Code!',
452
+ pl: 'Programuj bez kodu!',
453
+ de: 'Programmieren ohne Code!',
454
454
  },
455
455
  content: {
456
- 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! 🎮',
457
- 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! 🎮',
458
- 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! 🎮',
456
+ 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!',
457
+ 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!',
458
+ 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!',
459
459
  },
460
460
  skippable: true,
461
461
  tooltipPosition: 'center',
@@ -515,9 +515,9 @@ const TUTORIAL_VISUAL_SCRIPTING = {
515
515
  id: 'quiz-nodes',
516
516
  type: 'quiz',
517
517
  title: {
518
- en: 'Node Quiz! 🧠',
519
- pl: 'Quiz o węzłach! 🧠',
520
- de: 'Knoten-Quiz! 🧠',
518
+ en: 'Node Quiz!',
519
+ pl: 'Quiz o węzłach!',
520
+ de: 'Knoten-Quiz!',
521
521
  },
522
522
  content: {
523
523
  en: 'What does a "flow" port type control in visual scripting?',
@@ -554,9 +554,9 @@ const TUTORIAL_VISUAL_SCRIPTING = {
554
554
  id: 'run-graph',
555
555
  type: 'code',
556
556
  title: {
557
- en: 'Run the Graph! 🚀',
558
- pl: 'Uruchom graf! 🚀',
559
- de: 'Starte den Graphen! 🚀',
557
+ en: 'Run the Graph!',
558
+ pl: 'Uruchom graf!',
559
+ de: 'Starte den Graphen!',
560
560
  },
561
561
  content: {
562
562
  en: "The `GraphExecutor` takes a node library and a script graph, then executes it each frame.\nConnect it to the engine's update loop.",
@@ -595,14 +595,14 @@ const TUTORIAL_VISUAL_SCRIPTING = {
595
595
  id: 'vs-congratulations',
596
596
  type: 'text',
597
597
  title: {
598
- en: 'Congratulations! 🎉',
599
- pl: 'Gratulacje! 🎉',
600
- de: 'Herzlichen Glückwunsch! 🎉',
598
+ en: 'Congratulations!',
599
+ pl: 'Gratulacje!',
600
+ de: 'Herzlichen Glückwunsch!',
601
601
  },
602
602
  content: {
603
- 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! 🎮🎮',
604
- 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! 🎮🎮',
605
- 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! 🎮🎮',
603
+ 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!',
604
+ 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!',
605
+ 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!',
606
606
  },
607
607
  tooltipPosition: 'center',
608
608
  },
@@ -636,14 +636,14 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
636
636
  id: 'mp-welcome',
637
637
  type: 'text',
638
638
  title: {
639
- en: 'Play Together! 🎮🎮',
640
- pl: 'Grajcie razem! 🎮🎮',
641
- de: 'Zusammen spielen! 🎮🎮',
639
+ en: 'Play Together!',
640
+ pl: 'Grajcie razem!',
641
+ de: 'Zusammen spielen!',
642
642
  },
643
643
  content: {
644
- 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! 🕹️",
645
- 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! 🕹️',
646
- 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! 🕹️',
644
+ 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!",
645
+ 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!',
646
+ 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!',
647
647
  },
648
648
  skippable: true,
649
649
  tooltipPosition: 'center',
@@ -728,9 +728,9 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
728
728
  id: 'quiz-multiplayer',
729
729
  type: 'quiz',
730
730
  title: {
731
- en: 'Multiplayer Quiz! 🧠',
732
- pl: 'Quiz multiplayer! 🧠',
733
- de: 'Multiplayer-Quiz! 🧠',
731
+ en: 'Multiplayer Quiz!',
732
+ pl: 'Quiz multiplayer!',
733
+ de: 'Multiplayer-Quiz!',
734
734
  },
735
735
  content: {
736
736
  en: 'How many players does the engine support simultaneously?',
@@ -775,9 +775,9 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
775
775
  id: 'gamepad-vibration',
776
776
  type: 'code',
777
777
  title: {
778
- en: 'Gamepad Vibration 🎮💥',
779
- pl: 'Wibracja gamepada 🎮💥',
780
- de: 'Gamepad-Vibration 🎮💥',
778
+ en: 'Gamepad Vibration',
779
+ pl: 'Wibracja gamepada',
780
+ de: 'Gamepad-Vibration',
781
781
  },
782
782
  content: {
783
783
  en: 'Make gamepads rumble on events like damage or explosions using the `vibrate` method.',
@@ -800,14 +800,14 @@ const TUTORIAL_LOCAL_MULTIPLAYER = {
800
800
  id: 'mp-congratulations',
801
801
  type: 'text',
802
802
  title: {
803
- en: 'Congratulations! 🎉',
804
- pl: 'Gratulacje! 🎉',
805
- de: 'Herzlichen Glückwunsch! 🎉',
803
+ en: 'Congratulations!',
804
+ pl: 'Gratulacje!',
805
+ de: 'Herzlichen Glückwunsch!',
806
806
  },
807
807
  content: {
808
- 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! 🎮🎮🎮🎮',
809
- 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! 🎮🎮🎮🎮',
810
- 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! 🎮🎮🎮🎮',
808
+ 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!',
809
+ 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!',
810
+ 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!',
811
811
  },
812
812
  tooltipPosition: 'center',
813
813
  },