create-pixifact 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +16 -1
  2. package/dist/createPixifactProject.d.ts +3 -2
  3. package/dist/index.js +34 -14
  4. package/dist/skills/pixifact/SKILL.md +27 -4
  5. package/dist/skills/pixifact/agents/openai.yaml +2 -2
  6. package/dist/skills/pixifact/references/scene-authoring-decisions.md +2 -0
  7. package/dist/skills/pixifact/references/scene-hierarchy-patterns.md +38 -0
  8. package/dist/skills/pixifact/references/scene-objects.md +40 -2
  9. package/package.json +5 -2
  10. package/templates/game/.env +1 -0
  11. package/templates/game/README.md +119 -0
  12. package/templates/game/assets/ui/button.png +0 -0
  13. package/templates/game/assets/ui/panel.png +0 -0
  14. package/templates/game/bunfig.toml +1 -0
  15. package/templates/game/index.html +12 -0
  16. package/templates/game/package.json +24 -0
  17. package/templates/game/pixifact.project.json +11 -0
  18. package/templates/game/src/GameApp.ts +118 -0
  19. package/templates/game/src/core/GameSession.ts +43 -0
  20. package/templates/game/src/core/ScreenManager.ts +26 -0
  21. package/templates/game/src/core/WebRecordStore.ts +14 -0
  22. package/templates/game/src/main.ts +64 -0
  23. package/templates/game/src/screens/MainMenu.scene +57 -0
  24. package/templates/game/src/screens/MainMenu.ts +101 -0
  25. package/templates/game/src/screens/PlayScreen.scene +13 -0
  26. package/templates/game/src/screens/PlayScreen.ts +31 -0
  27. package/templates/game/src/screens/ResultScreen.scene +13 -0
  28. package/templates/game/src/screens/ResultScreen.ts +25 -0
  29. package/templates/game/src/styles.css +21 -0
  30. package/templates/game/src/ui/Button.scene +10 -0
  31. package/templates/game/src/ui/Button.ts +84 -0
  32. package/templates/game/src/ui/Dialog.scene +10 -0
  33. package/templates/game/src/ui/Dialog.ts +31 -0
  34. package/templates/game/src/ui/Panel.scene +7 -0
  35. package/templates/game/src/ui/Panel.ts +11 -0
  36. package/templates/game/src/ui/ProgressBar.scene +4 -0
  37. package/templates/game/src/ui/ProgressBar.ts +25 -0
  38. package/templates/game/src/ui/nine/ButtonBackground.scene +3 -0
  39. package/templates/game/src/ui/nine/ButtonBackground.ts +5 -0
  40. package/templates/game/src/ui/nine/PanelBackground.scene +3 -0
  41. package/templates/game/src/ui/nine/PanelBackground.ts +5 -0
  42. package/templates/game/src/vite-env.d.ts +2 -0
  43. package/templates/game/tsconfig.json +15 -0
  44. package/templates/game/vite.config.ts +9 -0
  45. package/templates/minimal/package.json +2 -2
@@ -0,0 +1,31 @@
1
+ import { Group } from 'pixifact/runtime';
2
+ import { createEvent, event, prop, scene } from 'pixifact/scene';
3
+
4
+ @scene()
5
+ export class Dialog extends Group {
6
+ @prop({ default: '确认操作' })
7
+ declare title: string;
8
+
9
+ @prop({ default: '是否继续?' })
10
+ declare message: string;
11
+
12
+ @prop({ default: '确定' })
13
+ declare confirmText: string;
14
+
15
+ @prop({ default: '取消' })
16
+ declare cancelText: string;
17
+
18
+ @event()
19
+ readonly confirmed = createEvent();
20
+
21
+ @event()
22
+ readonly cancelled = createEvent();
23
+
24
+ confirm() {
25
+ this.confirmed.emit();
26
+ }
27
+
28
+ cancel() {
29
+ this.cancelled.emit();
30
+ }
31
+ }
@@ -0,0 +1,7 @@
1
+ <Scene name="Panel" width="620" height="400">
2
+ <PanelBackground id="background" scene="./nine/PanelBackground.scene" left="0" right="0" top="0" bottom="0" />
3
+ <Label id="titleLabel" text="{title}" left="32" right="32" top="24" height="48" fontSize="36" fontFamily="sans-serif" fontWeight="700" fill="#25322d" alignY="center" eventMode="none" />
4
+ <Group id="contentHost" left="32" right="32" top="96" bottom="32">
5
+ <slot name="content" />
6
+ </Group>
7
+ </Scene>
@@ -0,0 +1,11 @@
1
+ import { Group } from 'pixifact/runtime';
2
+ import { prop, scene, slot } from 'pixifact/scene';
3
+
4
+ @scene()
5
+ export class Panel extends Group {
6
+ @prop({ default: '面板' })
7
+ declare title: string;
8
+
9
+ @slot()
10
+ declare readonly content: Group;
11
+ }
@@ -0,0 +1,4 @@
1
+ <Scene name="ProgressBar" width="420" height="24" eventMode="none">
2
+ <Rect id="track" left="0" right="0" top="0" bottom="0" fillColor="#e8e0d0" radius="12" />
3
+ <Rect id="fill" width="0" height="24" fillColor="#c8a464" radius="12" />
4
+ </Scene>
@@ -0,0 +1,25 @@
1
+ import { Group, type Rect } from 'pixifact/runtime';
2
+ import { part, scene } from 'pixifact/scene';
3
+
4
+ @scene()
5
+ export class ProgressBar extends Group {
6
+ @part()
7
+ protected declare fill: Rect;
8
+
9
+ private fraction = 0;
10
+
11
+ onMounted() {
12
+ this.layout();
13
+ }
14
+
15
+ setProgress(value: number, max: number) {
16
+ this.fraction = Math.max(0, Math.min(1, value / max));
17
+ this.layout();
18
+ }
19
+
20
+ override layout() {
21
+ super.layout();
22
+ // Group 在 Scene 挂载完成前也会布局;@part 在挂载后注入。
23
+ if (this.fill) this.fill.setSize(this.width * this.fraction, this.height);
24
+ }
25
+ }
@@ -0,0 +1,3 @@
1
+ <Scene name="ButtonBackground" width="96" height="96" eventMode="none">
2
+ <NineImage id="image" texture="assets/ui/button.png" left="0" right="0" top="0" bottom="0" leftWidth="24" rightWidth="24" topHeight="24" bottomHeight="24" eventMode="none" />
3
+ </Scene>
@@ -0,0 +1,5 @@
1
+ import { Group } from 'pixifact/runtime';
2
+ import { scene } from 'pixifact/scene';
3
+
4
+ @scene()
5
+ export class ButtonBackground extends Group {}
@@ -0,0 +1,3 @@
1
+ <Scene name="PanelBackground" width="96" height="96" eventMode="none">
2
+ <NineImage id="image" texture="assets/ui/panel.png" left="0" right="0" top="0" bottom="0" leftWidth="24" rightWidth="24" topHeight="24" bottomHeight="24" eventMode="none" />
3
+ </Scene>
@@ -0,0 +1,5 @@
1
+ import { Group } from 'pixifact/runtime';
2
+ import { scene } from 'pixifact/scene';
3
+
4
+ @scene()
5
+ export class PanelBackground extends Group {}
@@ -0,0 +1,2 @@
1
+ /// <reference types="vite/client" />
2
+ /// <reference types="pixifact/client" />
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "strict": true,
7
+ "experimentalDecorators": true,
8
+ "useDefineForClassFields": true,
9
+ "resolveJsonModule": true,
10
+ "allowSyntheticDefaultImports": true,
11
+ "lib": ["ESNext", "DOM"],
12
+ "skipLibCheck": true
13
+ },
14
+ "include": ["src/**/*.ts"]
15
+ }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from 'vite';
2
+ import { pixifact, pixifactRuntimePlugin } from 'pixifact/compiler-node';
3
+
4
+ export default defineConfig({
5
+ plugins: [
6
+ pixifact(),
7
+ pixifactRuntimePlugin(),
8
+ ],
9
+ });
@@ -12,10 +12,10 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "pixi.js": "8.18.1",
15
- "pixifact": "^0.17.0"
15
+ "pixifact": "^0.19.0"
16
16
  },
17
17
  "devDependencies": {
18
- "pixifact-cli": "^0.17.0",
18
+ "pixifact-cli": "^0.19.0",
19
19
  "typescript": "^5.3.3",
20
20
  "vite": "^8.0.10"
21
21
  }