@playcraft/skills 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +333 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/skills.loader.d.ts +31 -0
- package/dist/src/skills.loader.d.ts.map +1 -0
- package/dist/src/skills.loader.js +200 -0
- package/dist/src/skills.loader.js.map +1 -0
- package/dist/src/skills.types.d.ts +44 -0
- package/dist/src/skills.types.d.ts.map +1 -0
- package/dist/src/skills.types.js +9 -0
- package/dist/src/skills.types.js.map +1 -0
- package/package.json +35 -0
- package/skills/2048_core.aigameplay/SKILL.md +123 -0
- package/skills/2048_core.aigameplay/manifest.json +159 -0
- package/skills/2048_core.aigameplay/ref/pgs-schema.json +194 -0
- package/skills/2048_core.aigameplay/ref/reducer.template.ts +189 -0
- package/skills/SKILL.md +46 -0
- package/skills/ad_compliance_rules.aiconfig/SKILL.md +85 -0
- package/skills/ad_compliance_rules.aiconfig/manifest.json +60 -0
- package/skills/agent_remix_orchestrator.aicomponent/SKILL.md +257 -0
- package/skills/agent_remix_orchestrator.aicomponent/manifest.json +12 -0
- package/skills/app_metadata.aiconfig/SKILL.md +53 -0
- package/skills/app_metadata.aiconfig/manifest.json +32 -0
- package/skills/appear_sfx.aiaudio/SKILL.md +59 -0
- package/skills/appear_sfx.aiaudio/manifest.json +45 -0
- package/skills/appear_sfx.aiaudio/ref/appear.mp3 +0 -0
- package/skills/arrow_move_error_sfx.aiaudio/SKILL.md +59 -0
- package/skills/arrow_move_error_sfx.aiaudio/manifest.json +45 -0
- package/skills/arrow_move_error_sfx.aiaudio/ref/arrow_move_error.mp3 +0 -0
- package/skills/arrow_path_data_format.aicomponent/SKILL.md +152 -0
- package/skills/arrow_path_data_format.aicomponent/manifest.json +57 -0
- package/skills/arrow_path_data_format.aicomponent/ref/LevelParser.ts +188 -0
- package/skills/arrow_path_data_format.aicomponent/ref/LevelTypes.ts +131 -0
- package/skills/arrow_pick_match_rules.aigameplay/SKILL.md +117 -0
- package/skills/arrow_pick_match_rules.aigameplay/manifest.json +105 -0
- package/skills/arrow_pick_match_rules.aigameplay/ref/pgs-schema.json +180 -0
- package/skills/asset_pipeline_scripts.aicomponent/SKILL.md +117 -0
- package/skills/asset_pipeline_scripts.aicomponent/manifest.json +17 -0
- package/skills/asset_pipeline_scripts.aicomponent/ref/gen-sprite.sh +105 -0
- package/skills/ball_sort.aigameplay/SKILL.md +109 -0
- package/skills/ball_sort.aigameplay/manifest.json +155 -0
- package/skills/ball_sort.aigameplay/ref/pgs-schema.json +192 -0
- package/skills/ball_sort.aigameplay/ref/reducer.template.ts +156 -0
- package/skills/basketball_shot.aigameplay/SKILL.md +94 -0
- package/skills/basketball_shot.aigameplay/manifest.json +150 -0
- package/skills/basketball_shot.aigameplay/ref/pgs-schema.json +229 -0
- package/skills/basketball_shot.aigameplay/ref/reducer.template.ts +189 -0
- package/skills/bg_music.aiaudio/SKILL.md +61 -0
- package/skills/bg_music.aiaudio/manifest.json +48 -0
- package/skills/bg_music.aiaudio/ref/bg.mp3 +0 -0
- package/skills/big_watermelon.aigameplay/SKILL.md +94 -0
- package/skills/big_watermelon.aigameplay/manifest.json +155 -0
- package/skills/big_watermelon.aigameplay/ref/pgs-schema.json +191 -0
- package/skills/big_watermelon.aigameplay/ref/reducer.template.ts +202 -0
- package/skills/block_puzzle.aigameplay/SKILL.md +121 -0
- package/skills/block_puzzle.aigameplay/manifest.json +154 -0
- package/skills/block_puzzle.aigameplay/ref/pgs-schema.json +170 -0
- package/skills/block_puzzle.aigameplay/ref/reducer.template.ts +182 -0
- package/skills/board_entity_sprite.aiimage/SKILL.md +255 -0
- package/skills/board_entity_sprite.aiimage/manifest.json +153 -0
- package/skills/board_entity_sprite.aiimage/ref/ProceduralCar.ts +357 -0
- package/skills/board_entity_sprite.aiimage/ref/car.png +0 -0
- package/skills/board_entity_sprite.aiimage/ref/car.webp +0 -0
- package/skills/bottom_ui_bar.aicomponent/SKILL.md +50 -0
- package/skills/bottom_ui_bar.aicomponent/manifest.json +31 -0
- package/skills/bottom_ui_bar.aicomponent/ref/GameBottomUI.ts +27 -0
- package/skills/bubble_shooter.aigameplay/SKILL.md +129 -0
- package/skills/bubble_shooter.aigameplay/manifest.json +181 -0
- package/skills/bubble_shooter.aigameplay/ref/pgs-schema.json +226 -0
- package/skills/bubble_shooter.aigameplay/ref/reducer.template.ts +228 -0
- package/skills/button_click_sfx.aiaudio/SKILL.md +59 -0
- package/skills/button_click_sfx.aiaudio/manifest.json +45 -0
- package/skills/button_click_sfx.aiaudio/ref/button_click.mp3 +0 -0
- package/skills/calm_piano.aiaudio/SKILL.md +68 -0
- package/skills/calm_piano.aiaudio/manifest.json +50 -0
- package/skills/camera_controller_3d.aicomponent/SKILL.md +100 -0
- package/skills/camera_controller_3d.aicomponent/manifest.json +52 -0
- package/skills/camera_controller_3d.aicomponent/ref/CameraController.ts +199 -0
- package/skills/camera_controller_3d.aicomponent/ref/OrbitControlsAdapter.ts +152 -0
- package/skills/candy_tile.aiimage/SKILL.md +62 -0
- package/skills/candy_tile.aiimage/manifest.json +49 -0
- package/skills/car_parking.aigameplay/SKILL.md +105 -0
- package/skills/car_parking.aigameplay/manifest.json +164 -0
- package/skills/car_parking.aigameplay/ref/pgs-schema.json +163 -0
- package/skills/car_parking.aigameplay/ref/reducer.template.ts +166 -0
- package/skills/castle.aiimage/SKILL.md +64 -0
- package/skills/castle.aiimage/manifest.json +48 -0
- package/skills/cheerful_ukulele.aiaudio/SKILL.md +72 -0
- package/skills/cheerful_ukulele.aiaudio/manifest.json +50 -0
- package/skills/click_sfx.aiaudio/SKILL.md +59 -0
- package/skills/click_sfx.aiaudio/manifest.json +45 -0
- package/skills/click_sfx.aiaudio/ref/click.mp3 +0 -0
- package/skills/combo_display.aicomponent/SKILL.md +45 -0
- package/skills/combo_display.aicomponent/manifest.json +31 -0
- package/skills/combo_display.aicomponent/ref/ComboManager.ts +362 -0
- package/skills/combo_display.aicomponent/ref/ComboSmallUI.ts +232 -0
- package/skills/combo_praise_text.aicomponent/SKILL.md +56 -0
- package/skills/combo_praise_text.aicomponent/manifest.json +34 -0
- package/skills/combo_praise_text.aicomponent/ref/ComboManager.ts +362 -0
- package/skills/countdown_timer.aicomponent/SKILL.md +44 -0
- package/skills/countdown_timer.aicomponent/manifest.json +35 -0
- package/skills/countdown_timer.aicomponent/ref/CountdownDisplay.ts +213 -0
- package/skills/cta_platform_config.aiconfig/SKILL.md +72 -0
- package/skills/cta_platform_config.aiconfig/manifest.json +56 -0
- package/skills/debug_overlay.aicomponent/SKILL.md +75 -0
- package/skills/debug_overlay.aicomponent/manifest.json +17 -0
- package/skills/debug_overlay.aicomponent/ref/DebugOverlay.ts +144 -0
- package/skills/desert.aiimage/SKILL.md +63 -0
- package/skills/desert.aiimage/manifest.json +49 -0
- package/skills/difficulty_curve_designer.aiconfig/SKILL.md +68 -0
- package/skills/difficulty_curve_designer.aiconfig/manifest.json +36 -0
- package/skills/digit_renderer.aicomponent/SKILL.md +43 -0
- package/skills/digit_renderer.aicomponent/manifest.json +25 -0
- package/skills/digit_renderer.aicomponent/ref/DigitRenderer.ts +237 -0
- package/skills/download_button.aicomponent/SKILL.md +44 -0
- package/skills/download_button.aicomponent/manifest.json +25 -0
- package/skills/download_button.aicomponent/ref/DownloadButton.ts +137 -0
- package/skills/draw_line_puzzle.aigameplay/SKILL.md +84 -0
- package/skills/draw_line_puzzle.aigameplay/manifest.json +152 -0
- package/skills/draw_line_puzzle.aigameplay/ref/pgs-schema.json +189 -0
- package/skills/draw_line_puzzle.aigameplay/ref/reducer.template.ts +194 -0
- package/skills/easy_to_hard.aiconfig/SKILL.md +52 -0
- package/skills/easy_to_hard.aiconfig/manifest.json +33 -0
- package/skills/eight_ball_pool.aigameplay/SKILL.md +104 -0
- package/skills/eight_ball_pool.aigameplay/manifest.json +152 -0
- package/skills/eight_ball_pool.aigameplay/ref/pgs-schema.json +205 -0
- package/skills/eight_ball_pool.aigameplay/ref/reducer.template.ts +198 -0
- package/skills/energetic_electronic.aiaudio/SKILL.md +69 -0
- package/skills/energetic_electronic.aiaudio/manifest.json +51 -0
- package/skills/fail_sfx.aiaudio/SKILL.md +59 -0
- package/skills/fail_sfx.aiaudio/manifest.json +44 -0
- package/skills/fail_sfx.aiaudio/ref/fail.mp3 +0 -0
- package/skills/figer_icon.aiimage/SKILL.md +58 -0
- package/skills/figer_icon.aiimage/manifest.json +48 -0
- package/skills/figer_icon.aiimage/ref/figer.png +0 -0
- package/skills/figer_icon.aiimage/ref/figer.webp +0 -0
- package/skills/forest.aiimage/SKILL.md +74 -0
- package/skills/forest.aiimage/manifest.json +48 -0
- package/skills/fruit_tile.aiimage/SKILL.md +68 -0
- package/skills/fruit_tile.aiimage/manifest.json +48 -0
- package/skills/game_over_panel.aicomponent/SKILL.md +47 -0
- package/skills/game_over_panel.aicomponent/manifest.json +61 -0
- package/skills/game_over_panel.aicomponent/ref/GameOverPanel.ts +74 -0
- package/skills/game_scene.aicomponent/SKILL.md +57 -0
- package/skills/game_scene.aicomponent/manifest.json +36 -0
- package/skills/game_scene.aicomponent/ref/Game.ts +748 -0
- package/skills/gameplay_balance_check.aivalidator/SKILL.md +69 -0
- package/skills/gameplay_balance_check.aivalidator/manifest.json +21 -0
- package/skills/gameplay_unit_test.aivalidator/SKILL.md +89 -0
- package/skills/gameplay_unit_test.aivalidator/manifest.json +17 -0
- package/skills/gameplay_unit_test.aivalidator/ref/gameplay.test.ts +202 -0
- package/skills/gameplay_unit_test.aivalidator/ref/vitest.config.ts +13 -0
- package/skills/grid_board_layout.aicomponent/SKILL.md +85 -0
- package/skills/grid_board_layout.aicomponent/manifest.json +69 -0
- package/skills/grid_board_layout.aicomponent/ref/BoardLayout.ts +416 -0
- package/skills/grid_board_layout.aicomponent/ref/BoardLayout3D.ts +125 -0
- package/skills/grid_board_layout.aicomponent/ref/BoardLayoutMath.ts +85 -0
- package/skills/grid_board_layout.aicomponent/ref/BoardRenderer3D.ts +298 -0
- package/skills/heart_lives.aicomponent/SKILL.md +42 -0
- package/skills/heart_lives.aicomponent/manifest.json +25 -0
- package/skills/heart_lives.aicomponent/ref/HeartDisplay.ts +96 -0
- package/skills/idle-breathe.aicomponent/SKILL.md +27 -0
- package/skills/idle-breathe.aicomponent/manifest.json +20 -0
- package/skills/idle-breathe.aicomponent/ref/phaser.js +25 -0
- package/skills/idle-breathe.aicomponent/ref/playcanvas.js +29 -0
- package/skills/jewel_tile.aiimage/SKILL.md +63 -0
- package/skills/jewel_tile.aiimage/manifest.json +49 -0
- package/skills/knife_hit.aigameplay/SKILL.md +103 -0
- package/skills/knife_hit.aigameplay/manifest.json +151 -0
- package/skills/knife_hit.aigameplay/ref/pgs-schema.json +202 -0
- package/skills/knife_hit.aigameplay/ref/reducer.template.ts +196 -0
- package/skills/left_right_parkour.aigameplay/SKILL.md +120 -0
- package/skills/left_right_parkour.aigameplay/manifest.json +165 -0
- package/skills/left_right_parkour.aigameplay/ref/pgs-schema.json +200 -0
- package/skills/left_right_parkour.aigameplay/ref/reducer.template.ts +194 -0
- package/skills/level_data_pack.aiconfig/SKILL.md +64 -0
- package/skills/level_data_pack.aiconfig/manifest.json +37 -0
- package/skills/level_data_validator.aivalidator/SKILL.md +85 -0
- package/skills/level_data_validator.aivalidator/manifest.json +17 -0
- package/skills/level_data_validator.aivalidator/ref/LevelValidator.ts +113 -0
- package/skills/level_lifecycle.aicomponent/SKILL.md +81 -0
- package/skills/level_lifecycle.aicomponent/manifest.json +87 -0
- package/skills/level_lifecycle.aicomponent/ref/LevelLifecycle.ts +235 -0
- package/skills/level_solvability_validator.aivalidator/SKILL.md +74 -0
- package/skills/level_solvability_validator.aivalidator/manifest.json +23 -0
- package/skills/level_solvability_validator.aivalidator/ref/LevelValidator.ts +186 -0
- package/skills/level_state.aicomponent/SKILL.md +55 -0
- package/skills/level_state.aicomponent/manifest.json +34 -0
- package/skills/level_state.aicomponent/ref/LevelDataManager.ts +26 -0
- package/skills/level_state.aicomponent/ref/LevelManager.ts +26 -0
- package/skills/loading_screen.aicomponent/SKILL.md +57 -0
- package/skills/loading_screen.aicomponent/manifest.json +43 -0
- package/skills/loading_screen.aicomponent/ref/LoadingUI.ts +339 -0
- package/skills/lose_result_panel.aiimage/SKILL.md +58 -0
- package/skills/lose_result_panel.aiimage/manifest.json +47 -0
- package/skills/lose_result_panel.aiimage/ref/lose.png +0 -0
- package/skills/lose_result_panel.aiimage/ref/lose.webp +0 -0
- package/skills/lose_sfx.aiaudio/SKILL.md +59 -0
- package/skills/lose_sfx.aiaudio/manifest.json +45 -0
- package/skills/lose_sfx.aiaudio/ref/lose.mp3 +0 -0
- package/skills/match-pop.aicomponent/SKILL.md +29 -0
- package/skills/match-pop.aicomponent/manifest.json +19 -0
- package/skills/match-pop.aicomponent/ref/phaser.js +30 -0
- package/skills/match-pop.aicomponent/ref/playcanvas.js +22 -0
- package/skills/match3_core.aigameplay/SKILL.md +125 -0
- package/skills/match3_core.aigameplay/manifest.json +107 -0
- package/skills/match3_core.aigameplay/ref/pgs-schema.json +154 -0
- package/skills/match3_core.aigameplay/ref/reducer.template.ts +191 -0
- package/skills/match_engine.aicomponent/SKILL.md +84 -0
- package/skills/match_engine.aicomponent/manifest.json +23 -0
- package/skills/match_engine.aicomponent/ref/MatchEngine.ts +75 -0
- package/skills/memory_match.aigameplay/SKILL.md +111 -0
- package/skills/memory_match.aigameplay/manifest.json +164 -0
- package/skills/memory_match.aigameplay/ref/pgs-schema.json +190 -0
- package/skills/memory_match.aigameplay/ref/reducer.template.ts +162 -0
- package/skills/merge_core.aigameplay/SKILL.md +112 -0
- package/skills/merge_core.aigameplay/manifest.json +154 -0
- package/skills/merge_core.aigameplay/ref/pgs-schema.json +202 -0
- package/skills/merge_core.aigameplay/ref/reducer.template.ts +179 -0
- package/skills/mistake_sfx.aiaudio/SKILL.md +59 -0
- package/skills/mistake_sfx.aiaudio/manifest.json +45 -0
- package/skills/mistake_sfx.aiaudio/ref/mistake.mp3 +0 -0
- package/skills/nomove_hint_overlay.aiimage/SKILL.md +58 -0
- package/skills/nomove_hint_overlay.aiimage/manifest.json +48 -0
- package/skills/nomove_hint_overlay.aiimage/ref/nomove_hint.png +0 -0
- package/skills/nomove_hint_overlay.aiimage/ref/nomove_hint.webp +0 -0
- package/skills/normal_dot.aiimage/SKILL.md +58 -0
- package/skills/normal_dot.aiimage/manifest.json +46 -0
- package/skills/normal_dot.aiimage/ref/normal_dot.png +0 -0
- package/skills/normal_dot.aiimage/ref/normal_dot.webp +0 -0
- package/skills/ocean.aiimage/SKILL.md +71 -0
- package/skills/ocean.aiimage/manifest.json +49 -0
- package/skills/particle-confetti.aicomponent/SKILL.md +32 -0
- package/skills/particle-confetti.aicomponent/manifest.json +21 -0
- package/skills/particle-confetti.aicomponent/ref/html5-spritesheet.js +17 -0
- package/skills/particle-confetti.aicomponent/ref/phaser.js +38 -0
- package/skills/particle-explosion.aicomponent/SKILL.md +37 -0
- package/skills/particle-explosion.aicomponent/manifest.json +24 -0
- package/skills/particle-explosion.aicomponent/ref/html5-spritesheet.js +40 -0
- package/skills/particle-explosion.aicomponent/ref/phaser.js +46 -0
- package/skills/particle-explosion.aicomponent/ref/playcanvas.js +33 -0
- package/skills/particle-trail.aicomponent/SKILL.md +25 -0
- package/skills/particle-trail.aicomponent/manifest.json +22 -0
- package/skills/particle-trail.aicomponent/ref/phaser.js +31 -0
- package/skills/path_animation.aicomponent/SKILL.md +82 -0
- package/skills/path_animation.aicomponent/manifest.json +77 -0
- package/skills/path_animation.aicomponent/ref/AnimationManager.ts +694 -0
- package/skills/path_animation.aicomponent/ref/AnimationManager3D.ts +317 -0
- package/skills/path_elimination_rules.aigameplay/SKILL.md +88 -0
- package/skills/path_elimination_rules.aigameplay/manifest.json +119 -0
- package/skills/path_elimination_rules.aigameplay/ref/pgs-schema.json +227 -0
- package/skills/path_input_handler.aicomponent/SKILL.md +87 -0
- package/skills/path_input_handler.aicomponent/manifest.json +97 -0
- package/skills/path_input_handler.aicomponent/ref/InputHandler.ts +714 -0
- package/skills/path_input_handler.aicomponent/ref/InputHandler3D.ts +204 -0
- package/skills/path_renderer.aicomponent/SKILL.md +101 -0
- package/skills/path_renderer.aicomponent/manifest.json +69 -0
- package/skills/path_renderer.aicomponent/ref/PathRenderer.ts +509 -0
- package/skills/path_renderer.aicomponent/ref/PathRenderer3D.ts +176 -0
- package/skills/path_renderer.aicomponent/ref/PathRenderers.ts +640 -0
- package/skills/phaser.aicomponent/SKILL.md +315 -0
- package/skills/phaser.aicomponent/manifest.json +156 -0
- package/skills/phaser.aicomponent/ref/BootScene.ts +29 -0
- package/skills/phaser.aicomponent/ref/GameConfig.ts +29 -0
- package/skills/phaser.aicomponent/ref/GameScene.ts +88 -0
- package/skills/phaser.aicomponent/ref/PreloaderScene.ts +78 -0
- package/skills/phaser.aicomponent/ref/SceneKeys.ts +7 -0
- package/skills/phaser.aicomponent/ref/SoundUtils.ts +21 -0
- package/skills/phaser.aicomponent/ref/UiLayout.ts +74 -0
- package/skills/phaser.aicomponent/ref/globals.d.ts +52 -0
- package/skills/phaser.aicomponent/ref/index.css +40 -0
- package/skills/phaser.aicomponent/ref/index.html +14 -0
- package/skills/phaser.aicomponent/ref/index.ts +48 -0
- package/skills/phaser.aicomponent/ref/main.ts +16 -0
- package/skills/phaser.aicomponent/ref/package.json +22 -0
- package/skills/phaser.aicomponent/ref/tsconfig.json +25 -0
- package/skills/phaser.aicomponent/ref/webpack.config.js +57 -0
- package/skills/phaser_scene_lifecycle.aicomponent/SKILL.md +63 -0
- package/skills/phaser_scene_lifecycle.aicomponent/manifest.json +33 -0
- package/skills/pick_and_match_rules.aigameplay/SKILL.md +113 -0
- package/skills/pick_and_match_rules.aigameplay/manifest.json +121 -0
- package/skills/pick_and_match_rules.aigameplay/ref/pgs-schema.json +354 -0
- package/skills/pin_pull.aigameplay/SKILL.md +110 -0
- package/skills/pin_pull.aigameplay/manifest.json +164 -0
- package/skills/pin_pull.aigameplay/ref/pgs-schema.json +201 -0
- package/skills/pin_pull.aigameplay/ref/reducer.template.ts +216 -0
- package/skills/playable_app_logo.aiimage/SKILL.md +58 -0
- package/skills/playable_app_logo.aiimage/manifest.json +47 -0
- package/skills/playable_app_logo.aiimage/ref/logo.png +0 -0
- package/skills/playable_app_logo.aiimage/ref/logo.webp +0 -0
- package/skills/playable_end_screen_layout.aicomponent/SKILL.md +75 -0
- package/skills/playable_end_screen_layout.aicomponent/manifest.json +24 -0
- package/skills/playable_guidance_layer.aicomponent/SKILL.md +89 -0
- package/skills/playable_guidance_layer.aicomponent/manifest.json +24 -0
- package/skills/playable_hud_layout.aicomponent/SKILL.md +96 -0
- package/skills/playable_hud_layout.aicomponent/manifest.json +24 -0
- package/skills/playable_scripts_build.aicomponent/SKILL.md +69 -0
- package/skills/playable_scripts_build.aicomponent/manifest.json +53 -0
- package/skills/playable_scripts_build.aicomponent/ref/builds.config.js +257 -0
- package/skills/playcraft-3d-flip-sprite/SKILL.md +336 -0
- package/skills/playcraft-3d-flip-sprite/renderer/flatten_glb.mjs +62 -0
- package/skills/playcraft-3d-flip-sprite/renderer/render.mjs +325 -0
- package/skills/playcraft-3d-flip-sprite/renderer/render_single.mjs +138 -0
- package/skills/playcraft-asset-management/SKILL.md +73 -0
- package/skills/playcraft-audio-generation/SKILL.md +126 -0
- package/skills/playcraft-build/SKILL.md +44 -0
- package/skills/playcraft-code-editor/SKILL.md +71 -0
- package/skills/playcraft-create-remix/SKILL.md +62 -0
- package/skills/playcraft-deploy/SKILL.md +59 -0
- package/skills/playcraft-image-generation/SKILL.md +148 -0
- package/skills/playcraft-image-processing/SKILL.md +216 -0
- package/skills/playcraft-platform-intro/SKILL.md +41 -0
- package/skills/playcraft-prefab/SKILL.md +98 -0
- package/skills/playcraft-project-management/SKILL.md +57 -0
- package/skills/playcraft-remix-workflow/SKILL.md +119 -0
- package/skills/playcraft-remix-workflow/references/xplatform.schema.json5 +31 -0
- package/skills/playcraft-save/SKILL.md +46 -0
- package/skills/playcraft-skill-recommender/SKILL.md +152 -0
- package/skills/playcraft-sprite-generation/SKILL.md +534 -0
- package/skills/playcraft-sprite-remix/SKILL.md +155 -0
- package/skills/playcraft-sprite-sheet/SKILL.md +97 -0
- package/skills/playtest_report.aivalidator/SKILL.md +103 -0
- package/skills/playtest_report.aivalidator/manifest.json +21 -0
- package/skills/preloader_scene.aicomponent/SKILL.md +58 -0
- package/skills/preloader_scene.aicomponent/manifest.json +43 -0
- package/skills/preloader_scene.aicomponent/ref/Preloader.ts +339 -0
- package/skills/progress_bar.aicomponent/SKILL.md +38 -0
- package/skills/progress_bar.aicomponent/manifest.json +25 -0
- package/skills/progress_bar.aicomponent/ref/ProgressDisplay.ts +140 -0
- package/skills/references/xplatform.schema.json5 +31 -0
- package/skills/responsive_2d_layout.aicomponent/SKILL.md +161 -0
- package/skills/responsive_2d_layout.aicomponent/manifest.json +43 -0
- package/skills/responsive_2d_layout.aicomponent/ref/UiLayout.ts +56 -0
- package/skills/run_context_state.aicomponent/SKILL.md +54 -0
- package/skills/run_context_state.aicomponent/manifest.json +40 -0
- package/skills/run_context_state.aicomponent/ref/RunContextRuntime.ts +30 -0
- package/skills/score-fly.aicomponent/SKILL.md +31 -0
- package/skills/score-fly.aicomponent/manifest.json +21 -0
- package/skills/score-fly.aicomponent/ref/phaser.js +26 -0
- package/skills/score-fly.aicomponent/ref/playcanvas.js +28 -0
- package/skills/score_goal.aiconfig/SKILL.md +46 -0
- package/skills/score_goal.aiconfig/manifest.json +33 -0
- package/skills/screen-flash.aicomponent/SKILL.md +30 -0
- package/skills/screen-flash.aicomponent/manifest.json +20 -0
- package/skills/screen-flash.aicomponent/ref/phaser.js +48 -0
- package/skills/screen-shake.aicomponent/SKILL.md +30 -0
- package/skills/screen-shake.aicomponent/manifest.json +19 -0
- package/skills/screen-shake.aicomponent/ref/phaser.js +23 -0
- package/skills/screen-shake.aicomponent/ref/playcanvas.js +44 -0
- package/skills/screw_puzzle.aigameplay/SKILL.md +116 -0
- package/skills/screw_puzzle.aigameplay/manifest.json +164 -0
- package/skills/screw_puzzle.aigameplay/ref/pgs-schema.json +235 -0
- package/skills/screw_puzzle.aigameplay/ref/reducer.template.ts +213 -0
- package/skills/settings_state.aicomponent/SKILL.md +61 -0
- package/skills/settings_state.aicomponent/manifest.json +33 -0
- package/skills/settings_state.aicomponent/ref/SettingsManager.ts +130 -0
- package/skills/slide_out_to_tray_animation.aicomponent/SKILL.md +64 -0
- package/skills/slide_out_to_tray_animation.aicomponent/manifest.json +58 -0
- package/skills/slide_out_to_tray_animation.aicomponent/ref/AnimationManager.ts +164 -0
- package/skills/slide_out_to_tray_animation.aicomponent/ref/AnimationManager3D.ts +198 -0
- package/skills/slide_out_to_tray_animation.aicomponent/ref/BezierUtils.ts +59 -0
- package/skills/slot_machine.aigameplay/SKILL.md +119 -0
- package/skills/slot_machine.aigameplay/manifest.json +166 -0
- package/skills/slot_machine.aigameplay/ref/pgs-schema.json +212 -0
- package/skills/slot_machine.aigameplay/ref/reducer.template.ts +212 -0
- package/skills/sniper_shot.aigameplay/SKILL.md +84 -0
- package/skills/sniper_shot.aigameplay/manifest.json +153 -0
- package/skills/sniper_shot.aigameplay/ref/pgs-schema.json +211 -0
- package/skills/sniper_shot.aigameplay/ref/reducer.template.ts +211 -0
- package/skills/solitaire.aigameplay/SKILL.md +101 -0
- package/skills/solitaire.aigameplay/manifest.json +151 -0
- package/skills/solitaire.aigameplay/ref/pgs-schema.json +200 -0
- package/skills/solitaire.aigameplay/ref/reducer.template.ts +176 -0
- package/skills/sound-effects/SKILL.md +46 -0
- package/skills/sound_utils.aicomponent/SKILL.md +52 -0
- package/skills/sound_utils.aicomponent/manifest.json +30 -0
- package/skills/sound_utils.aicomponent/ref/SoundUtils.ts +29 -0
- package/skills/sprite-animation-2d.aicomponent/SKILL.md +45 -0
- package/skills/sprite-animation-2d.aicomponent/manifest.json +28 -0
- package/skills/sprite-animation-2d.aicomponent/ref/html5.js +83 -0
- package/skills/sprite-animation-2d.aicomponent/ref/phaser.js +38 -0
- package/skills/sprite-animation-2d.aicomponent/ref/playcanvas.js +67 -0
- package/skills/sprite_entity_renderer.aicomponent/SKILL.md +148 -0
- package/skills/sprite_entity_renderer.aicomponent/manifest.json +17 -0
- package/skills/sprite_entity_renderer.aicomponent/ref/SpriteEntityRenderer.ts +126 -0
- package/skills/success_sfx.aiaudio/SKILL.md +59 -0
- package/skills/success_sfx.aiaudio/manifest.json +45 -0
- package/skills/success_sfx.aiaudio/ref/success.mp3 +0 -0
- package/skills/tap_blast.aigameplay/SKILL.md +116 -0
- package/skills/tap_blast.aigameplay/manifest.json +153 -0
- package/skills/tap_blast.aigameplay/ref/pgs-schema.json +208 -0
- package/skills/tap_blast.aigameplay/ref/reducer.template.ts +202 -0
- package/skills/theme_state.aicomponent/SKILL.md +53 -0
- package/skills/theme_state.aicomponent/manifest.json +33 -0
- package/skills/theme_state.aicomponent/ref/ThemeManager.ts +174 -0
- package/skills/theme_switcher_build.aicomponent/SKILL.md +62 -0
- package/skills/theme_switcher_build.aicomponent/manifest.json +38 -0
- package/skills/theme_switcher_build.aicomponent/ref/theme-index.ts +8 -0
- package/skills/theme_variant.aiconfig/SKILL.md +78 -0
- package/skills/theme_variant.aiconfig/manifest.json +39 -0
- package/skills/theme_variant.aiconfig/ref/ExampleTheme/index.ts +16 -0
- package/skills/theme_variant.aiconfig/ref/ExampleTheme/levelEasy.json +141 -0
- package/skills/threejs.aicomponent/SKILL.md +422 -0
- package/skills/threejs.aicomponent/manifest.json +166 -0
- package/skills/threejs.aicomponent/ref/AssetLoader.ts +158 -0
- package/skills/threejs.aicomponent/ref/BaseScene.ts +88 -0
- package/skills/threejs.aicomponent/ref/GameConfig.ts +47 -0
- package/skills/threejs.aicomponent/ref/MainScene.ts +170 -0
- package/skills/threejs.aicomponent/ref/PreloaderScene.ts +93 -0
- package/skills/threejs.aicomponent/ref/SceneKeys.ts +6 -0
- package/skills/threejs.aicomponent/ref/SceneManager.ts +69 -0
- package/skills/threejs.aicomponent/ref/ViewportManager.ts +62 -0
- package/skills/threejs.aicomponent/ref/globals.d.ts +74 -0
- package/skills/threejs.aicomponent/ref/index.css +80 -0
- package/skills/threejs.aicomponent/ref/index.html +20 -0
- package/skills/threejs.aicomponent/ref/index.ts +117 -0
- package/skills/threejs.aicomponent/ref/main.ts +10 -0
- package/skills/threejs.aicomponent/ref/package.json +23 -0
- package/skills/threejs.aicomponent/ref/tsconfig.json +24 -0
- package/skills/threejs.aicomponent/ref/webpack.config.js +61 -0
- package/skills/time_clear_goal.aiconfig/SKILL.md +46 -0
- package/skills/time_clear_goal.aiconfig/manifest.json +32 -0
- package/skills/time_icon.aiimage/SKILL.md +58 -0
- package/skills/time_icon.aiimage/manifest.json +47 -0
- package/skills/time_icon.aiimage/ref/time.png +0 -0
- package/skills/time_icon.aiimage/ref/time.webp +0 -0
- package/skills/top_ui_bar.aicomponent/SKILL.md +45 -0
- package/skills/top_ui_bar.aicomponent/manifest.json +27 -0
- package/skills/top_ui_bar.aicomponent/ref/GameTopUI.ts +229 -0
- package/skills/tower_defence.aigameplay/SKILL.md +117 -0
- package/skills/tower_defence.aigameplay/manifest.json +175 -0
- package/skills/tower_defence.aigameplay/ref/pgs-schema.json +247 -0
- package/skills/tower_defence.aigameplay/ref/reducer.template.ts +239 -0
- package/skills/tray_container.aicomponent/SKILL.md +143 -0
- package/skills/tray_container.aicomponent/manifest.json +58 -0
- package/skills/tray_container.aicomponent/ref/TrayRenderer.ts +155 -0
- package/skills/tray_container.aicomponent/ref/TrayRenderer3D.ts +281 -0
- package/skills/tray_container.aicomponent/ref/TrayRendererHtmlOverlay.ts +228 -0
- package/skills/tutorial_overlay.aicomponent/SKILL.md +46 -0
- package/skills/tutorial_overlay.aicomponent/manifest.json +34 -0
- package/skills/tutorial_overlay.aicomponent/ref/TutorialManager.ts +367 -0
- package/skills/tween-animation-2d.aicomponent/SKILL.md +35 -0
- package/skills/tween-animation-2d.aicomponent/manifest.json +28 -0
- package/skills/tween-animation-2d.aicomponent/ref/phaser.js +49 -0
- package/skills/tween-animation-2d.aicomponent/ref/playcanvas.js +36 -0
- package/skills/typescript_module_patterns.aicomponent/SKILL.md +209 -0
- package/skills/typescript_module_patterns.aicomponent/manifest.json +28 -0
- package/skills/typescript_module_patterns.aicomponent/ref/globals.d.ts +31 -0
- package/skills/ui-transition.aicomponent/SKILL.md +33 -0
- package/skills/ui-transition.aicomponent/manifest.json +19 -0
- package/skills/ui-transition.aicomponent/ref/phaser.js +45 -0
- package/skills/ux_flow_spec.aiconfig/SKILL.md +82 -0
- package/skills/ux_flow_spec.aiconfig/manifest.json +39 -0
- package/skills/wave_difficulty.aiconfig/SKILL.md +46 -0
- package/skills/wave_difficulty.aiconfig/manifest.json +33 -0
- package/skills/webpack_build.aicomponent/SKILL.md +204 -0
- package/skills/webpack_build.aicomponent/manifest.json +29 -0
- package/skills/webpack_build.aicomponent/ref/package.json +16 -0
- package/skills/webpack_build.aicomponent/ref/webpack.config.js +53 -0
- package/skills/win_anim_sfx.aiaudio/SKILL.md +59 -0
- package/skills/win_anim_sfx.aiaudio/manifest.json +46 -0
- package/skills/win_anim_sfx.aiaudio/ref/win_anim.mp3 +0 -0
- package/skills/win_dot.aiimage/SKILL.md +58 -0
- package/skills/win_dot.aiimage/manifest.json +47 -0
- package/skills/win_dot.aiimage/ref/win_dot.png +0 -0
- package/skills/win_dot.aiimage/ref/win_dot.webp +0 -0
- package/skills/win_result_panel.aiimage/SKILL.md +58 -0
- package/skills/win_result_panel.aiimage/manifest.json +47 -0
- package/skills/win_result_panel.aiimage/ref/win.png +0 -0
- package/skills/win_result_panel.aiimage/ref/win.webp +0 -0
- package/skills/word_connect.aigameplay/SKILL.md +86 -0
- package/skills/word_connect.aigameplay/manifest.json +154 -0
- package/skills/word_connect.aigameplay/ref/pgs-schema.json +212 -0
- package/skills/word_connect.aigameplay/ref/reducer.template.ts +186 -0
- package/src/index.ts +10 -0
- package/src/skills.loader.ts +225 -0
- package/src/skills.types.ts +42 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cta_platform_config.aiconfig
|
|
3
|
+
description: CTA 按钮的多平台适配配置 - 支持 Facebook、Google、TikTok、Unity Ads 等平台的 CTA SDK 差异化接入
|
|
4
|
+
triggers: CTA,call to action,下载按钮,install button,平台适配,platform,facebook,google,tiktok,unity ads
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# cta_platform_config.aiconfig
|
|
8
|
+
|
|
9
|
+
CTA(Call-to-Action)按钮的多平台适配配置。不同广告平台对 CTA 的实现方式有显著差异:
|
|
10
|
+
|
|
11
|
+
| 平台 | SDK | 调用方式 |
|
|
12
|
+
|------|-----|---------|
|
|
13
|
+
| Facebook | `FbPlayableAd` | `FbPlayableAd.onCTAClick()` |
|
|
14
|
+
| Google | `ExitApi` | `ExitApi.exit()` |
|
|
15
|
+
| TikTok | `window.playableSDK` | `window.playableSDK.openAppStore()` |
|
|
16
|
+
| Unity Ads | `mraid` | `mraid.open(storeUrl)` |
|
|
17
|
+
|
|
18
|
+
本配置统一管理 CTA 按钮的文案、位置、显示时机和平台 SDK 调用方式。
|
|
19
|
+
|
|
20
|
+
## Recipe
|
|
21
|
+
|
|
22
|
+
- **配置方式**:参数化(parametric)
|
|
23
|
+
- **核心参数**:
|
|
24
|
+
- `defaultPlatform`: `"facebook"` — 默认目标平台
|
|
25
|
+
- `ctaText`: `{ "zh": "立即下载", "en": "Install Now" }` — CTA 文案(多语言)
|
|
26
|
+
- `ctaPosition`: `"bottom-center"` — CTA 按钮位置
|
|
27
|
+
- `ctaShowAfterLevel`: `1` — 第几关后显示 CTA
|
|
28
|
+
- `ctaAlwaysVisible`: `false` — 是否始终显示
|
|
29
|
+
- `platforms`: 各平台 SDK 和方法的映射表
|
|
30
|
+
- **可 fork 变体**:
|
|
31
|
+
- 激进型:`ctaAlwaysVisible: true`,始终显示 CTA
|
|
32
|
+
- Google 优先:`defaultPlatform: "google"`, `ctaShowAfterLevel: 0`
|
|
33
|
+
- TikTok 全屏点击:追加 `ctaFullScreenTap: true`
|
|
34
|
+
|
|
35
|
+
**配置步骤:**
|
|
36
|
+
1. 读取项目的 `game/config.json`
|
|
37
|
+
2. 写入 `cta` 配置块,包含默认平台、文案、位置
|
|
38
|
+
3. 写入 `cta.platforms` 子对象,包含各平台的 SDK 和调用方法
|
|
39
|
+
4. 确保 `cta.showAfterLevel` 与难度曲线的 `ctaTriggerAfterLevel` 一致
|
|
40
|
+
|
|
41
|
+
## Result
|
|
42
|
+
|
|
43
|
+
- **产物**:修改 `game/config.json` 的 CTA 配置块
|
|
44
|
+
- **格式**:JSON patch
|
|
45
|
+
- **目标键**:`cta`
|
|
46
|
+
- **包含子键**:`defaultPlatform`, `ctaText`, `ctaPosition`, `ctaShowAfterLevel`, `ctaAlwaysVisible`, `platforms`
|
|
47
|
+
|
|
48
|
+
## Binding
|
|
49
|
+
|
|
50
|
+
- **Binding Role**:`gameConfig`
|
|
51
|
+
- **挂载目标**:`game/config.json`
|
|
52
|
+
- **引用类型**:`config-key-value`
|
|
53
|
+
- **与其他 Skill 的关系**:
|
|
54
|
+
- 与 `difficulty_curve_designer.aiconfig` 联动:CTA 触发时机应在峰值体验之后
|
|
55
|
+
- 与 `ad_compliance_rules.aiconfig` 联动:CTA 实现必须符合各平台合规要求
|
|
56
|
+
|
|
57
|
+
## Skill Definition
|
|
58
|
+
|
|
59
|
+
tools:
|
|
60
|
+
- read
|
|
61
|
+
- write
|
|
62
|
+
prompt_extension: |
|
|
63
|
+
You are configuring CTA (Call-to-Action) behavior for a playable ad.
|
|
64
|
+
Each ad platform has its own SDK for triggering the app store redirect:
|
|
65
|
+
- Facebook: FbPlayableAd.onCTAClick()
|
|
66
|
+
- Google: ExitApi.exit()
|
|
67
|
+
- TikTok: window.playableSDK.openAppStore()
|
|
68
|
+
- Unity Ads: mraid.open(storeUrl)
|
|
69
|
+
Read game/config.json and write the cta config block.
|
|
70
|
+
The CTA button implementation in code should detect the platform at runtime
|
|
71
|
+
and call the appropriate SDK method. Write a platform-agnostic wrapper function.
|
|
72
|
+
Ensure ctaShowAfterLevel aligns with the difficulty curve's peak level.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"atomId": "cta_platform_config.aiconfig",
|
|
4
|
+
"bundleType": "aiconfig",
|
|
5
|
+
"category": "config",
|
|
6
|
+
"mode": "parametric",
|
|
7
|
+
"label": {
|
|
8
|
+
"zh": "CTA 多平台适配配置",
|
|
9
|
+
"en": "CTA platform adaptation config"
|
|
10
|
+
},
|
|
11
|
+
"tags": ["config", "cta", "platform", "facebook", "google", "tiktok", "unity-ads", "playable-ads", "download", "install"],
|
|
12
|
+
"bindingRoles": ["gameConfig"],
|
|
13
|
+
"generation": {
|
|
14
|
+
"kind": "config-patch",
|
|
15
|
+
"params": {
|
|
16
|
+
"defaultPlatform": "facebook",
|
|
17
|
+
"ctaText": {
|
|
18
|
+
"zh": "立即下载",
|
|
19
|
+
"en": "Install Now"
|
|
20
|
+
},
|
|
21
|
+
"ctaPosition": "bottom-center",
|
|
22
|
+
"ctaShowAfterLevel": 1,
|
|
23
|
+
"ctaAlwaysVisible": false,
|
|
24
|
+
"platforms": {
|
|
25
|
+
"facebook": {
|
|
26
|
+
"sdk": "FbPlayableAd",
|
|
27
|
+
"method": "FbPlayableAd.onCTAClick()"
|
|
28
|
+
},
|
|
29
|
+
"google": {
|
|
30
|
+
"sdk": "ExitApi",
|
|
31
|
+
"method": "ExitApi.exit()"
|
|
32
|
+
},
|
|
33
|
+
"tiktok": {
|
|
34
|
+
"sdk": "window.playableSDK",
|
|
35
|
+
"method": "window.playableSDK.openAppStore()"
|
|
36
|
+
},
|
|
37
|
+
"unity": {
|
|
38
|
+
"sdk": "mraid",
|
|
39
|
+
"method": "mraid.open(storeUrl)"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"result": {
|
|
45
|
+
"configKey": "cta",
|
|
46
|
+
"format": "json-patch"
|
|
47
|
+
},
|
|
48
|
+
"binding": {
|
|
49
|
+
"role": "gameConfig",
|
|
50
|
+
"target": "game/config.json",
|
|
51
|
+
"type": "config-key-value"
|
|
52
|
+
},
|
|
53
|
+
"files": {
|
|
54
|
+
"skill": "SKILL.md"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debug_overlay.aicomponent
|
|
3
|
+
description: 开发调试覆盖层。在游戏画面上叠加可视化调试信息:格子坐标、碰撞区域、命中范围、方向向量、FPS、关卡切换控制。通过 DebugConfig 开关控制。
|
|
4
|
+
triggers: 调试,debug,overlay,格子坐标,碰撞可视化,FPS,开发工具,dev tools
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 开发调试覆盖层(Debug Overlay)
|
|
8
|
+
|
|
9
|
+
## 说明
|
|
10
|
+
|
|
11
|
+
在 Game 场景上叠加半透明调试信息层,帮助开发者快速定位问题:
|
|
12
|
+
|
|
13
|
+
- **格子坐标网格** — 每个格子中心显示 `(col,row)` 文字
|
|
14
|
+
- **碰撞区域高亮** — 被路径占据的格子用半透明色块标记
|
|
15
|
+
- **点击命中范围** — 显示每个箭头头部的点击判定圆形
|
|
16
|
+
- **方向向量** — 从箭头头部画出方向辅助线到棋盘边界
|
|
17
|
+
- **路径索引** — 每条路径显示 `#0` `#1` 编号
|
|
18
|
+
- **FPS / 内存** — 左上角实时帧率
|
|
19
|
+
- **关卡切换** — 底部 ← → 按钮快速切换关卡
|
|
20
|
+
|
|
21
|
+
## Scaffold
|
|
22
|
+
|
|
23
|
+
| 目标路径 | 来源 | 说明 |
|
|
24
|
+
|---------|-----|------|
|
|
25
|
+
| `src/game/scenes/GameUI/DebugOverlay.ts` | `ref/DebugOverlay.ts` | 完整调试覆盖层 |
|
|
26
|
+
|
|
27
|
+
## 开关控制
|
|
28
|
+
|
|
29
|
+
在 `DebugConfig.ts` 中添加:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
/** 是否显示调试覆盖层 */
|
|
33
|
+
export const SHOW_DEBUG_OVERLAY = true; // 发布前改为 false
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
在 `Game.ts` 的 `create()` 末尾:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
if (SHOW_DEBUG_OVERLAY) {
|
|
40
|
+
new DebugOverlay(this);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Recipe
|
|
45
|
+
|
|
46
|
+
| 决策 | 原因 |
|
|
47
|
+
|------|------|
|
|
48
|
+
| **独立组件,条件加载** | 调试渲染在发布版本中必须零开销;独立 class + 单一开关标志(`SHOW_DEBUG_OVERLAY`)保证发布时完整移除,不影响游戏逻辑 |
|
|
49
|
+
| **Graphics 叠加而非精灵** | 调试信息(坐标网格、碰撞区域)是动态内容,用 Phaser Graphics API 绘制无需额外资产文件 |
|
|
50
|
+
| **可视化命中范围** | 箭头头部的点击判定圆是最常见的调试需求(用户反馈"点不到"),优先可视化 |
|
|
51
|
+
|
|
52
|
+
## Adapter
|
|
53
|
+
|
|
54
|
+
- **Role**: `debugOverlay` — 开发期可视化调试层(生产构建中条件禁用)
|
|
55
|
+
- **Provides**: `DebugOverlay` 类(格子坐标、碰撞区域、FPS、关卡切换 UI)
|
|
56
|
+
- **Requires**: `phaser.aicomponent`、`grid_board_layout.aicomponent`(格子坐标计算)
|
|
57
|
+
- **Consumed by**: `game_scene.aicomponent`(在 `Game.create()` 末尾条件实例化)
|
|
58
|
+
- **Integration point**: `src/game/scenes/Game.ts` → `if (SHOW_DEBUG_OVERLAY) new DebugOverlay(this)`
|
|
59
|
+
|
|
60
|
+
## Imports
|
|
61
|
+
|
|
62
|
+
- `phaser.aicomponent`(硬依赖)
|
|
63
|
+
- `grid_board_layout.aicomponent`(硬依赖:格子坐标计算)
|
|
64
|
+
|
|
65
|
+
## Skill Definition
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
tools:
|
|
69
|
+
- read_file
|
|
70
|
+
- write_file
|
|
71
|
+
inputs:
|
|
72
|
+
- source: ref/DebugOverlay.ts
|
|
73
|
+
outputs:
|
|
74
|
+
- debugOverlay: DebugOverlay class
|
|
75
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"atomId": "debug_overlay.aicomponent",
|
|
4
|
+
"bundleType": "aicomponent",
|
|
5
|
+
"category": "tool",
|
|
6
|
+
"mode": "fixed",
|
|
7
|
+
"label": {
|
|
8
|
+
"zh": "开发调试覆盖层",
|
|
9
|
+
"en": "Debug overlay for development"
|
|
10
|
+
},
|
|
11
|
+
"tags": ["debug", "overlay", "grid", "collision", "fps", "development"],
|
|
12
|
+
"bindingRoles": ["debugTool"],
|
|
13
|
+
"files": {
|
|
14
|
+
"skill": "SKILL.md",
|
|
15
|
+
"ref": ["ref/DebugOverlay.ts"]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import * as Phaser from "phaser";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 开发调试覆盖层
|
|
5
|
+
* 在游戏场景上叠加可视化调试信息
|
|
6
|
+
*/
|
|
7
|
+
export class DebugOverlay {
|
|
8
|
+
private scene: any;
|
|
9
|
+
private graphics!: Phaser.GameObjects.Graphics;
|
|
10
|
+
private texts: Phaser.GameObjects.Text[] = [];
|
|
11
|
+
private fpsText!: Phaser.GameObjects.Text;
|
|
12
|
+
private visible = true;
|
|
13
|
+
|
|
14
|
+
constructor(scene: any) {
|
|
15
|
+
this.scene = scene;
|
|
16
|
+
this.create();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private create(): void {
|
|
20
|
+
const scene = this.scene;
|
|
21
|
+
|
|
22
|
+
// FPS 文本
|
|
23
|
+
this.fpsText = scene.add
|
|
24
|
+
.text(10, 10, "FPS: 0", {
|
|
25
|
+
fontSize: "14px",
|
|
26
|
+
color: "#00ff00",
|
|
27
|
+
backgroundColor: "#00000088",
|
|
28
|
+
padding: { x: 4, y: 2 },
|
|
29
|
+
})
|
|
30
|
+
.setScrollFactor(0)
|
|
31
|
+
.setDepth(9000);
|
|
32
|
+
|
|
33
|
+
// 调试图形层
|
|
34
|
+
this.graphics = scene.add.graphics();
|
|
35
|
+
this.graphics.setDepth(8999);
|
|
36
|
+
scene.boardContainer.add(this.graphics);
|
|
37
|
+
|
|
38
|
+
// 绘制初始调试信息
|
|
39
|
+
this.drawDebugInfo();
|
|
40
|
+
|
|
41
|
+
// 每帧更新 FPS
|
|
42
|
+
scene.events.on("update", () => {
|
|
43
|
+
this.fpsText.setText(`FPS: ${scene.game.loop.actualFps.toFixed(0)}`);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// 按 D 键切换显示/隐藏
|
|
47
|
+
scene.input.keyboard?.on("keydown-D", () => {
|
|
48
|
+
this.visible = !this.visible;
|
|
49
|
+
this.graphics.setVisible(this.visible);
|
|
50
|
+
this.texts.forEach(t => t.setVisible(this.visible));
|
|
51
|
+
this.fpsText.setVisible(this.visible);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private drawDebugInfo(): void {
|
|
56
|
+
const scene = this.scene;
|
|
57
|
+
const level = scene.level;
|
|
58
|
+
if (!level) return;
|
|
59
|
+
|
|
60
|
+
const g = this.graphics;
|
|
61
|
+
g.clear();
|
|
62
|
+
|
|
63
|
+
// 1. 格子网格线
|
|
64
|
+
g.lineStyle(1, 0x444444, 0.3);
|
|
65
|
+
for (let row = 0; row <= level.rows; row++) {
|
|
66
|
+
const y = row * scene.cellHeight;
|
|
67
|
+
g.lineBetween(0, y, level.cols * scene.cellWidth, y);
|
|
68
|
+
}
|
|
69
|
+
for (let col = 0; col <= level.cols; col++) {
|
|
70
|
+
const x = col * scene.cellWidth;
|
|
71
|
+
g.lineBetween(x, 0, x, level.rows * scene.cellHeight);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 2. 格子坐标文字 + 碰撞区域
|
|
75
|
+
for (let row = 0; row < level.rows; row++) {
|
|
76
|
+
for (let col = 0; col < level.cols; col++) {
|
|
77
|
+
const cx = col * scene.cellWidth + scene.cellWidth / 2;
|
|
78
|
+
const cy = row * scene.cellHeight + scene.cellHeight / 2;
|
|
79
|
+
|
|
80
|
+
// 坐标文字
|
|
81
|
+
const coordText = scene.add
|
|
82
|
+
.text(cx, cy, `${col},${row}`, {
|
|
83
|
+
fontSize: "10px",
|
|
84
|
+
color: "#888888",
|
|
85
|
+
})
|
|
86
|
+
.setOrigin(0.5)
|
|
87
|
+
.setDepth(8998);
|
|
88
|
+
scene.boardContainer.add(coordText);
|
|
89
|
+
this.texts.push(coordText);
|
|
90
|
+
|
|
91
|
+
// 碰撞区域高亮
|
|
92
|
+
const idx = row * level.cols + col;
|
|
93
|
+
const occupied = level.paths.some((p: any, i: number) => {
|
|
94
|
+
if (scene.removedPaths.has(i)) return false;
|
|
95
|
+
return p.indices.includes(idx);
|
|
96
|
+
});
|
|
97
|
+
if (occupied) {
|
|
98
|
+
g.fillStyle(0xff0000, 0.1);
|
|
99
|
+
g.fillRect(
|
|
100
|
+
col * scene.cellWidth + 2,
|
|
101
|
+
row * scene.cellHeight + 2,
|
|
102
|
+
scene.cellWidth - 4,
|
|
103
|
+
scene.cellHeight - 4,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 3. 路径索引 + 命中范围 + 方向向量
|
|
110
|
+
for (let i = 0; i < level.paths.length; i++) {
|
|
111
|
+
if (scene.removedPaths.has(i)) continue;
|
|
112
|
+
|
|
113
|
+
const path = level.paths[i];
|
|
114
|
+
const hx = path.head.x * scene.cellWidth + scene.cellWidth / 2;
|
|
115
|
+
const hy = path.head.y * scene.cellHeight + scene.cellHeight / 2;
|
|
116
|
+
|
|
117
|
+
// 路径编号
|
|
118
|
+
const idxText = scene.add
|
|
119
|
+
.text(hx, hy - scene.cellHeight * 0.4, `#${i}`, {
|
|
120
|
+
fontSize: "12px",
|
|
121
|
+
color: "#ffff00",
|
|
122
|
+
fontStyle: "bold",
|
|
123
|
+
backgroundColor: "#00000088",
|
|
124
|
+
padding: { x: 2, y: 1 },
|
|
125
|
+
})
|
|
126
|
+
.setOrigin(0.5)
|
|
127
|
+
.setDepth(9001);
|
|
128
|
+
scene.boardContainer.add(idxText);
|
|
129
|
+
this.texts.push(idxText);
|
|
130
|
+
|
|
131
|
+
// 命中判定圆
|
|
132
|
+
const hitRadius = scene.cellSize * 0.6;
|
|
133
|
+
g.lineStyle(1, 0x00ff00, 0.5);
|
|
134
|
+
g.strokeCircle(hx, hy, hitRadius);
|
|
135
|
+
|
|
136
|
+
// 方向辅助线
|
|
137
|
+
const dx = path.direction === "right" ? 1 : path.direction === "left" ? -1 : 0;
|
|
138
|
+
const dy = path.direction === "down" ? 1 : path.direction === "up" ? -1 : 0;
|
|
139
|
+
const lineLen = Math.max(level.cols, level.rows) * scene.cellSize;
|
|
140
|
+
g.lineStyle(1, 0x00ffff, 0.4);
|
|
141
|
+
g.lineBetween(hx, hy, hx + dx * lineLen, hy + dy * lineLen);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: desert.aiimage
|
|
3
|
+
description: 沙漠背景图封包 - 金色沙丘/干旱场景,适合停车逃脱、箭头逃脱类游戏的暖色背景
|
|
4
|
+
triggers: 沙漠,desert,沙丘,sand,背景,background,黄色,yellow,暖色,warm,干旱
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# desert.aiimage
|
|
8
|
+
|
|
9
|
+
沙漠主题背景图封包。适合逃脱益智类游戏,营造紧张干旱的视觉氛围。
|
|
10
|
+
|
|
11
|
+
## Recipe
|
|
12
|
+
|
|
13
|
+
- **基础 prompt**:`vast desert landscape, golden sand dunes, clear blue sky, casual mobile game style, flat design, warm colors`
|
|
14
|
+
- **宽高比**:9:16
|
|
15
|
+
- **风格**:cartoon / flat design
|
|
16
|
+
- **可 fork 变体**:
|
|
17
|
+
- 夜间沙漠:`desert at night, starry sky, moonlit sand dunes, cool blue tones`
|
|
18
|
+
- 绿洲:`desert oasis, palm trees, turquoise water, lush contrast`
|
|
19
|
+
- 沙暴:`sandstorm, orange sky, dramatic visibility, tension`
|
|
20
|
+
|
|
21
|
+
**生成步骤:**
|
|
22
|
+
1. 确认尺寸约束(1080×1920 PNG)
|
|
23
|
+
2. 调用图像生成 API
|
|
24
|
+
3. 验证并写入 `background.png`,更新 manifest
|
|
25
|
+
|
|
26
|
+
## Result
|
|
27
|
+
|
|
28
|
+
- **产物文件**:`background.png`
|
|
29
|
+
- **格式**:PNG,最小 1080×1920
|
|
30
|
+
|
|
31
|
+
## Binding
|
|
32
|
+
|
|
33
|
+
- **Binding Role**:`backgroundTexture`
|
|
34
|
+
- **挂载目标**:`scene://entities/Background/element/textureAsset`
|
|
35
|
+
- **引用类型**:`texture-asset-reference`
|
|
36
|
+
|
|
37
|
+
## 生成方式
|
|
38
|
+
|
|
39
|
+
Platform Skill: `playcraft-image-generation`
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# 1. 生成图片(参考 ref/ 中的参考图)
|
|
43
|
+
playcraft tools generate-image \
|
|
44
|
+
--prompt "vast desert landscape, golden sand dunes, clear blue sky, casual mobile game style, flat design, warm colors" \
|
|
45
|
+
--aspect-ratio 9:16 \
|
|
46
|
+
--image-model google/imagen-3.0-generate-002 \
|
|
47
|
+
--output ta-workspace/raw.png
|
|
48
|
+
|
|
49
|
+
# 2. 后处理(去白底 + 格式转换)
|
|
50
|
+
playcraft image remove-background --input ta-workspace/raw.png --output ta-workspace/trimmed.png
|
|
51
|
+
playcraft image convert --input ta-workspace/trimmed.png --output ta-workspace/background.webp --quality 85
|
|
52
|
+
|
|
53
|
+
# 3. 将产物写入 sandbox 对应路径(见 binding.target)
|
|
54
|
+
```
|
|
55
|
+
## Skill Definition
|
|
56
|
+
|
|
57
|
+
tools:
|
|
58
|
+
- bash
|
|
59
|
+
- write
|
|
60
|
+
- read
|
|
61
|
+
prompt_extension: |
|
|
62
|
+
You are generating a desert background image for a mobile game.
|
|
63
|
+
Follow the Recipe to generate the image. Verify output constraints, then apply Binding.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"atomId": "desert.aiimage",
|
|
4
|
+
"bundleType": "aiimage",
|
|
5
|
+
"category": "visual",
|
|
6
|
+
"mode": "generative",
|
|
7
|
+
"label": {
|
|
8
|
+
"zh": "沙漠背景",
|
|
9
|
+
"en": "Desert background"
|
|
10
|
+
},
|
|
11
|
+
"tags": [
|
|
12
|
+
"background",
|
|
13
|
+
"visual",
|
|
14
|
+
"desert",
|
|
15
|
+
"sand",
|
|
16
|
+
"hot",
|
|
17
|
+
"arid",
|
|
18
|
+
"casual"
|
|
19
|
+
],
|
|
20
|
+
"bindingRoles": ["backgroundTexture"],
|
|
21
|
+
"generation": {
|
|
22
|
+
"kind": "image",
|
|
23
|
+
"prompt": "vast desert landscape, golden sand dunes, clear blue sky, casual mobile game style, flat design, warm colors",
|
|
24
|
+
"aspectRatio": "9:16",
|
|
25
|
+
"model": "google/imagen-3.0-generate-002",
|
|
26
|
+
"style": "cartoon",
|
|
27
|
+
"platformSkill": "playcraft-image-generation"
|
|
28
|
+
},
|
|
29
|
+
"result": {
|
|
30
|
+
"outputFile": "background.png",
|
|
31
|
+
"format": "png",
|
|
32
|
+
"constraints": {
|
|
33
|
+
"minWidth": 1080,
|
|
34
|
+
"minHeight": 1920
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"binding": {
|
|
38
|
+
"role": "backgroundTexture",
|
|
39
|
+
"target": "scene://entities/Background/element/textureAsset",
|
|
40
|
+
"type": "texture-asset-reference",
|
|
41
|
+
"constraints": {
|
|
42
|
+
"format": "png",
|
|
43
|
+
"minWidth": 1080
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"files": {
|
|
47
|
+
"skill": "SKILL.md"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: difficulty_curve_designer.aiconfig
|
|
3
|
+
description: 试玩广告全局难度曲线设计配置 - 定义关卡难度递进策略,包括首关保胜、峰值关卡、CTA 触发时机
|
|
4
|
+
triggers: 难度曲线,difficulty curve,关卡难度,level difficulty,曲线设计,progression,试玩广告难度,playable-ads difficulty
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# difficulty_curve_designer.aiconfig
|
|
8
|
+
|
|
9
|
+
试玩广告全局难度曲线设计配置。定义关卡难度递进策略,包括:
|
|
10
|
+
|
|
11
|
+
- **首关保胜**:第一关必须保证玩家成功,建立正反馈
|
|
12
|
+
- **峰值体验**:在第 3 关左右制造峰值难度,让玩家感受到挑战
|
|
13
|
+
- **CTA 触发时机**:峰值体验后触发 CTA,利用玩家的高参与度
|
|
14
|
+
- **难度回落**:峰值后适当降低难度,给予"差一点就赢"的体验,驱动下载
|
|
15
|
+
|
|
16
|
+
## Recipe
|
|
17
|
+
|
|
18
|
+
- **配置方式**:参数化(parametric)
|
|
19
|
+
- **核心参数**:
|
|
20
|
+
- `curveType`: `"playable-ads-standard"` — 试玩广告标准曲线
|
|
21
|
+
- `firstLevelGuaranteeWin`: `true` — 首关保胜
|
|
22
|
+
- `peakDifficultyLevel`: `3` — 峰值难度在第几关
|
|
23
|
+
- `ctaTriggerAfterLevel`: `3` — CTA 在第几关后触发
|
|
24
|
+
- `totalLevels`: `5` — 总关卡数
|
|
25
|
+
- `difficultyScale`: `[0.2, 0.4, 0.8, 0.6, 0.5]` — 每关难度系数(0-1)
|
|
26
|
+
- **可 fork 变体**:
|
|
27
|
+
- 急速体验:`totalLevels: 3`, `difficultyScale: [0.2, 0.7, 0.5]`
|
|
28
|
+
- 平缓入门:`difficultyScale: [0.1, 0.2, 0.5, 0.8, 0.4]`
|
|
29
|
+
- 持续攀升(失败驱动下载):`difficultyScale: [0.2, 0.4, 0.6, 0.8, 1.0]`
|
|
30
|
+
|
|
31
|
+
**配置步骤:**
|
|
32
|
+
1. 读取项目的 `game/config.json`
|
|
33
|
+
2. 写入 `difficulty.curve` 配置块,包含曲线类型和关卡参数
|
|
34
|
+
3. 写入 `difficulty.scale` 数组,定义每关的难度系数
|
|
35
|
+
4. 设置 `difficulty.firstLevelGuaranteeWin` 标志
|
|
36
|
+
5. 关联 CTA 触发时机 `cta.triggerAfterLevel`
|
|
37
|
+
|
|
38
|
+
## Result
|
|
39
|
+
|
|
40
|
+
- **产物**:修改 `game/config.json` 的难度曲线配置块
|
|
41
|
+
- **格式**:JSON patch
|
|
42
|
+
- **目标键**:`difficulty.curve`
|
|
43
|
+
- **包含子键**:`curveType`, `firstLevelGuaranteeWin`, `peakDifficultyLevel`, `totalLevels`, `difficultyScale`
|
|
44
|
+
|
|
45
|
+
## Binding
|
|
46
|
+
|
|
47
|
+
- **Binding Role**:`gameConfig`
|
|
48
|
+
- **挂载目标**:`game/config.json`
|
|
49
|
+
- **引用类型**:`config-key-value`
|
|
50
|
+
- **与其他 Skill 的关系**:
|
|
51
|
+
- 与 `ux_flow_spec.aiconfig` 联动:`totalLevels` 应与 UX 流程的 gameplay 阶段一致
|
|
52
|
+
- 与 `gameplay_balance_check.aivalidator` 联动:校验器会读取此配置检查平衡性
|
|
53
|
+
|
|
54
|
+
## Skill Definition
|
|
55
|
+
|
|
56
|
+
tools:
|
|
57
|
+
- read
|
|
58
|
+
- write
|
|
59
|
+
prompt_extension: |
|
|
60
|
+
You are designing the difficulty curve for a playable ad (试玩广告).
|
|
61
|
+
The curve must follow the "hook → challenge → CTA" pattern:
|
|
62
|
+
1. Level 1 MUST guarantee player success (firstLevelGuaranteeWin: true)
|
|
63
|
+
2. Difficulty ramps up to a peak around level 3 (peakDifficultyLevel)
|
|
64
|
+
3. After the peak, trigger CTA while engagement is highest
|
|
65
|
+
4. Post-peak levels should feel "almost winnable" to drive downloads
|
|
66
|
+
Read game/config.json, apply the difficulty.curve config patch, and save.
|
|
67
|
+
The difficultyScale array values range from 0.0 (trivial) to 1.0 (impossible).
|
|
68
|
+
Total playable ad duration should stay within 30-60 seconds across all levels.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"atomId": "difficulty_curve_designer.aiconfig",
|
|
4
|
+
"bundleType": "aiconfig",
|
|
5
|
+
"category": "config",
|
|
6
|
+
"mode": "parametric",
|
|
7
|
+
"label": {
|
|
8
|
+
"zh": "试玩广告难度曲线设计",
|
|
9
|
+
"en": "Playable ads difficulty curve designer"
|
|
10
|
+
},
|
|
11
|
+
"tags": ["config", "difficulty", "curve", "design", "progression", "cta", "playable-ads"],
|
|
12
|
+
"bindingRoles": ["gameConfig"],
|
|
13
|
+
"generation": {
|
|
14
|
+
"kind": "config-patch",
|
|
15
|
+
"params": {
|
|
16
|
+
"curveType": "playable-ads-standard",
|
|
17
|
+
"firstLevelGuaranteeWin": true,
|
|
18
|
+
"peakDifficultyLevel": 3,
|
|
19
|
+
"ctaTriggerAfterLevel": 3,
|
|
20
|
+
"totalLevels": 5,
|
|
21
|
+
"difficultyScale": [0.2, 0.4, 0.8, 0.6, 0.5]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"result": {
|
|
25
|
+
"configKey": "difficulty.curve",
|
|
26
|
+
"format": "json-patch"
|
|
27
|
+
},
|
|
28
|
+
"binding": {
|
|
29
|
+
"role": "gameConfig",
|
|
30
|
+
"target": "game/config.json",
|
|
31
|
+
"type": "config-key-value"
|
|
32
|
+
},
|
|
33
|
+
"files": {
|
|
34
|
+
"skill": "SKILL.md"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: digit_renderer.aicomponent
|
|
3
|
+
description: 七段数码管风格数字渲染器。用 Phaser Graphics API 绘制倒计时数字和冒号分隔符,模拟 LED 七段显示效果。
|
|
4
|
+
triggers: 需要绘制七段数码管风格数字显示时触发。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 七段数码管渲染器(Seven-Segment Digit Renderer)
|
|
8
|
+
|
|
9
|
+
## Scaffold
|
|
10
|
+
|
|
11
|
+
`src/game/scenes/GameUI/DigitRenderer.ts`
|
|
12
|
+
|
|
13
|
+
## Recipe
|
|
14
|
+
|
|
15
|
+
| 决策 | 原因 |
|
|
16
|
+
|------|------|
|
|
17
|
+
| **七段数码管风格** | 倒计时数字用 LED 风格,视觉上比普通字体更紧凑、更"游戏感";且无字体资产依赖 |
|
|
18
|
+
| **纯 Graphics API 实现** | 不依赖字体文件或图片资产;七段数字用矩形拼接,跨平台渲染一致 |
|
|
19
|
+
| **抽取为独立 skill** | `countdown_timer.aicomponent` 复用本渲染器,不同场景(倒计时、得分)可组合使用而不重复实现绘制逻辑 |
|
|
20
|
+
|
|
21
|
+
## Adapter
|
|
22
|
+
|
|
23
|
+
- **Role**: `digitRenderer` — 七段数码管风格数字 Graphics 渲染器
|
|
24
|
+
- **Provides**: `DigitRenderer` 类(绘制数字、冒号分隔符)
|
|
25
|
+
- **Requires**: `phaser.aicomponent`(硬依赖:Graphics API)
|
|
26
|
+
- **Consumed by**: `countdown_timer.aicomponent`(倒计时显示)
|
|
27
|
+
- **Integration point**: `src/game/scenes/GameUI/DigitRenderer.ts` → CountdownDisplay 持有实例
|
|
28
|
+
|
|
29
|
+
## Imports
|
|
30
|
+
|
|
31
|
+
- `phaser.aicomponent`(硬依赖)
|
|
32
|
+
|
|
33
|
+
## Skill Definition
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
tools:
|
|
37
|
+
- read_file
|
|
38
|
+
- write_file
|
|
39
|
+
inputs:
|
|
40
|
+
- source: src/game/scenes/GameUI/DigitRenderer.ts
|
|
41
|
+
outputs:
|
|
42
|
+
- digitRenderer: DigitRenderer class
|
|
43
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"atomId": "digit_renderer.aicomponent",
|
|
4
|
+
"bundleType": "aicomponent",
|
|
5
|
+
"category": "component",
|
|
6
|
+
"mode": "fixed",
|
|
7
|
+
"label": { "zh": "七段数码管渲染器", "en": "Seven-segment digit renderer" },
|
|
8
|
+
"tags": ["ui", "digit", "seven-segment", "number-display", "graphics", "phaser"],
|
|
9
|
+
"bindingRoles": ["digitGlyphRenderer"],
|
|
10
|
+
"scaffold": {
|
|
11
|
+
"files": {
|
|
12
|
+
"src/game/scenes/GameUI/DigitRenderer.ts": { "source": "ref/DigitRenderer.ts", "mode": "full", "weight": 10 }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"imports": [
|
|
16
|
+
{ "slot": "engine", "pinAtomId": "phaser.aicomponent", "edgeKind": "requires", "bindAs": "engine" }
|
|
17
|
+
],
|
|
18
|
+
"exports": [
|
|
19
|
+
{ "name": "DigitRenderer", "kind": "class", "location": "src/game/scenes/GameUI/DigitRenderer.ts" }
|
|
20
|
+
],
|
|
21
|
+
"neutralDescriptor": {
|
|
22
|
+
"geometry": "seven-segment LED digit renderer drawing numbers and colon separators using Phaser Graphics primitives"
|
|
23
|
+
},
|
|
24
|
+
"files": { "skill": "SKILL.md", "digitRenderer": "ref/DigitRenderer.ts" }
|
|
25
|
+
}
|