sa2kit 2.0.1 → 2.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.
Files changed (264) hide show
  1. package/README.md +1 -1
  2. package/dist/CollisionBalls-BpHufX3H.d.mts +41 -0
  3. package/dist/CollisionBalls-BpHufX3H.d.ts +41 -0
  4. package/dist/ConfigService-BxK06xP6.d.mts +262 -0
  5. package/dist/ConfigService-BxK06xP6.d.ts +262 -0
  6. package/dist/UniversalFileService-BpvbZitV.d.mts +139 -0
  7. package/dist/UniversalFileService-GsP6D3Rc.d.ts +139 -0
  8. package/dist/audioDetection/index.d.mts +449 -0
  9. package/dist/audioDetection/index.d.ts +449 -0
  10. package/dist/audioDetection/index.js +1244 -0
  11. package/dist/audioDetection/index.js.map +1 -0
  12. package/dist/audioDetection/index.mjs +1227 -0
  13. package/dist/audioDetection/index.mjs.map +1 -0
  14. package/dist/auth/legacy/core/index.d.mts +42 -0
  15. package/dist/auth/legacy/core/index.d.ts +42 -0
  16. package/dist/auth/legacy/core/index.js +242 -0
  17. package/dist/auth/legacy/core/index.js.map +1 -0
  18. package/dist/auth/legacy/core/index.mjs +226 -0
  19. package/dist/auth/legacy/core/index.mjs.map +1 -0
  20. package/dist/auth/legacy/db/index.d.mts +5 -0
  21. package/dist/auth/legacy/db/index.d.ts +5 -0
  22. package/dist/auth/legacy/db/index.js +261 -0
  23. package/dist/auth/legacy/db/index.js.map +1 -0
  24. package/dist/auth/legacy/db/index.mjs +250 -0
  25. package/dist/auth/legacy/db/index.mjs.map +1 -0
  26. package/dist/auth/legacy/index.d.mts +5 -0
  27. package/dist/auth/legacy/index.d.ts +5 -0
  28. package/dist/auth/legacy/index.js +1107 -0
  29. package/dist/auth/legacy/index.js.map +1 -0
  30. package/dist/auth/legacy/index.mjs +1086 -0
  31. package/dist/auth/legacy/index.mjs.map +1 -0
  32. package/dist/auth/legacy/logic/index.d.mts +9 -0
  33. package/dist/auth/legacy/logic/index.d.ts +9 -0
  34. package/dist/auth/legacy/logic/index.js +194 -0
  35. package/dist/auth/legacy/logic/index.js.map +1 -0
  36. package/dist/auth/legacy/logic/index.mjs +187 -0
  37. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  38. package/dist/auth/legacy/miniapp/index.d.mts +5 -0
  39. package/dist/auth/legacy/miniapp/index.d.ts +5 -0
  40. package/dist/auth/legacy/miniapp/index.js +506 -0
  41. package/dist/auth/legacy/miniapp/index.js.map +1 -0
  42. package/dist/auth/legacy/miniapp/index.mjs +487 -0
  43. package/dist/auth/legacy/miniapp/index.mjs.map +1 -0
  44. package/dist/auth/legacy/routes/index.d.mts +53 -0
  45. package/dist/auth/legacy/routes/index.d.ts +53 -0
  46. package/dist/auth/legacy/routes/index.js +278 -0
  47. package/dist/auth/legacy/routes/index.js.map +1 -0
  48. package/dist/auth/legacy/routes/index.mjs +271 -0
  49. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  50. package/dist/auth/legacy/schema/index.d.mts +401 -0
  51. package/dist/auth/legacy/schema/index.d.ts +401 -0
  52. package/dist/auth/legacy/schema/index.js +50 -0
  53. package/dist/auth/legacy/schema/index.js.map +1 -0
  54. package/dist/auth/legacy/schema/index.mjs +44 -0
  55. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  56. package/dist/auth/legacy/server/index.d.mts +13 -0
  57. package/dist/auth/legacy/server/index.d.ts +13 -0
  58. package/dist/auth/legacy/server/index.js +21 -0
  59. package/dist/auth/legacy/server/index.js.map +1 -0
  60. package/dist/auth/legacy/server/index.mjs +19 -0
  61. package/dist/auth/legacy/server/index.mjs.map +1 -0
  62. package/dist/auth/legacy/services/index.d.mts +40 -0
  63. package/dist/auth/legacy/services/index.d.ts +40 -0
  64. package/dist/auth/legacy/services/index.js +258 -0
  65. package/dist/auth/legacy/services/index.js.map +1 -0
  66. package/dist/auth/legacy/services/index.mjs +252 -0
  67. package/dist/auth/legacy/services/index.mjs.map +1 -0
  68. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  69. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  70. package/dist/auth/legacy/ui/miniapp/index.js +298 -0
  71. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  72. package/dist/auth/legacy/ui/miniapp/index.mjs +290 -0
  73. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  74. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  75. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  76. package/dist/auth/legacy/ui/web/index.js +899 -0
  77. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  78. package/dist/auth/legacy/ui/web/index.mjs +889 -0
  79. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  80. package/dist/auth/legacy/web/index.d.mts +5 -0
  81. package/dist/auth/legacy/web/index.d.ts +5 -0
  82. package/dist/auth/legacy/web/index.js +1107 -0
  83. package/dist/auth/legacy/web/index.js.map +1 -0
  84. package/dist/auth/legacy/web/index.mjs +1086 -0
  85. package/dist/auth/legacy/web/index.mjs.map +1 -0
  86. package/dist/auth/rn/index.d.mts +64 -0
  87. package/dist/auth/rn/index.d.ts +64 -0
  88. package/dist/auth/rn/index.js +765 -0
  89. package/dist/auth/rn/index.js.map +1 -0
  90. package/dist/auth/rn/index.mjs +754 -0
  91. package/dist/auth/rn/index.mjs.map +1 -0
  92. package/dist/base-api-client-ACKKt13v.d.mts +277 -0
  93. package/dist/base-api-client-ACKKt13v.d.ts +277 -0
  94. package/dist/boothVaultService-Cn4WPhjg.d.mts +83 -0
  95. package/dist/boothVaultService-Cn4WPhjg.d.ts +83 -0
  96. package/dist/business/index.d.mts +6 -0
  97. package/dist/business/index.d.ts +6 -0
  98. package/dist/business/index.js +1682 -0
  99. package/dist/business/index.js.map +1 -0
  100. package/dist/business/index.mjs +1675 -0
  101. package/dist/business/index.mjs.map +1 -0
  102. package/dist/calendar/index.d.mts +1325 -0
  103. package/dist/calendar/index.d.ts +1325 -0
  104. package/dist/calendar/index.js +5964 -0
  105. package/dist/calendar/index.js.map +1 -0
  106. package/dist/calendar/index.mjs +5878 -0
  107. package/dist/calendar/index.mjs.map +1 -0
  108. package/dist/components/index.d.mts +405 -0
  109. package/dist/components/index.d.ts +405 -0
  110. package/dist/components/index.js +2516 -0
  111. package/dist/components/index.js.map +1 -0
  112. package/dist/components/index.mjs +2396 -0
  113. package/dist/components/index.mjs.map +1 -0
  114. package/dist/drizzle-schema-BNhqj2AZ.d.mts +1114 -0
  115. package/dist/drizzle-schema-BNhqj2AZ.d.ts +1114 -0
  116. package/dist/festivalCard/index.d.mts +75 -0
  117. package/dist/festivalCard/index.d.ts +75 -0
  118. package/dist/festivalCard/index.js +1492 -0
  119. package/dist/festivalCard/index.js.map +1 -0
  120. package/dist/festivalCard/index.mjs +1475 -0
  121. package/dist/festivalCard/index.mjs.map +1 -0
  122. package/dist/festivalCard/server/index.d.mts +120 -0
  123. package/dist/festivalCard/server/index.d.ts +120 -0
  124. package/dist/festivalCard/server/index.js +272 -0
  125. package/dist/festivalCard/server/index.js.map +1 -0
  126. package/dist/festivalCard/server/index.mjs +265 -0
  127. package/dist/festivalCard/server/index.mjs.map +1 -0
  128. package/dist/festivalCardService-CZomuQ4E.d.mts +80 -0
  129. package/dist/festivalCardService-CZomuQ4E.d.ts +80 -0
  130. package/dist/index-1Ag7IBXN.d.ts +144 -0
  131. package/dist/index-DNKZ7-R_.d.mts +184 -0
  132. package/dist/index-DNKZ7-R_.d.ts +184 -0
  133. package/dist/index-DSel44Ke.d.mts +93 -0
  134. package/dist/index-DSel44Ke.d.ts +93 -0
  135. package/dist/index-DdeZSeTJ.d.mts +144 -0
  136. package/dist/index-DrPcMJPc.d.mts +250 -0
  137. package/dist/index-DrPcMJPc.d.ts +250 -0
  138. package/dist/index.d.mts +5333 -0
  139. package/dist/index.d.ts +5333 -0
  140. package/dist/index.js +18809 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/index.mjs +18533 -0
  143. package/dist/index.mjs.map +1 -0
  144. package/dist/mikuContest/ui/web/index.d.mts +2 -0
  145. package/dist/mikuContest/ui/web/index.d.ts +2 -0
  146. package/dist/mikuContest/ui/web/index.js +353 -0
  147. package/dist/mikuContest/ui/web/index.js.map +1 -0
  148. package/dist/mikuContest/ui/web/index.mjs +343 -0
  149. package/dist/mikuContest/ui/web/index.mjs.map +1 -0
  150. package/dist/mikuFireworks3D/index.d.mts +268 -0
  151. package/dist/mikuFireworks3D/index.d.ts +268 -0
  152. package/dist/mikuFireworks3D/index.js +1267 -0
  153. package/dist/mikuFireworks3D/index.js.map +1 -0
  154. package/dist/mikuFireworks3D/index.mjs +1228 -0
  155. package/dist/mikuFireworks3D/index.mjs.map +1 -0
  156. package/dist/mikuFusionGame/index.d.mts +117 -0
  157. package/dist/mikuFusionGame/index.d.ts +117 -0
  158. package/dist/mikuFusionGame/index.js +1208 -0
  159. package/dist/mikuFusionGame/index.js.map +1 -0
  160. package/dist/mikuFusionGame/index.mjs +1195 -0
  161. package/dist/mikuFusionGame/index.mjs.map +1 -0
  162. package/dist/mmd/admin/index.d.mts +487 -0
  163. package/dist/mmd/admin/index.d.ts +487 -0
  164. package/dist/mmd/admin/index.js +1058 -0
  165. package/dist/mmd/admin/index.js.map +1 -0
  166. package/dist/mmd/admin/index.mjs +1027 -0
  167. package/dist/mmd/admin/index.mjs.map +1 -0
  168. package/dist/mmd/index.d.mts +2467 -0
  169. package/dist/mmd/index.d.ts +2467 -0
  170. package/dist/mmd/index.js +10119 -0
  171. package/dist/mmd/index.js.map +1 -0
  172. package/dist/mmd/index.mjs +10028 -0
  173. package/dist/mmd/index.mjs.map +1 -0
  174. package/dist/mmd/server/index.d.mts +139 -0
  175. package/dist/mmd/server/index.d.ts +139 -0
  176. package/dist/mmd/server/index.js +424 -0
  177. package/dist/mmd/server/index.js.map +1 -0
  178. package/dist/mmd/server/index.mjs +404 -0
  179. package/dist/mmd/server/index.mjs.map +1 -0
  180. package/dist/music/index.d.mts +74 -0
  181. package/dist/music/index.d.ts +74 -0
  182. package/dist/music/index.js +830 -0
  183. package/dist/music/index.js.map +1 -0
  184. package/dist/music/index.mjs +809 -0
  185. package/dist/music/index.mjs.map +1 -0
  186. package/dist/music/server/index.d.mts +1 -0
  187. package/dist/music/server/index.d.ts +1 -0
  188. package/dist/music/server/index.js +194 -0
  189. package/dist/music/server/index.js.map +1 -0
  190. package/dist/music/server/index.mjs +182 -0
  191. package/dist/music/server/index.mjs.map +1 -0
  192. package/dist/navigation/index.d.mts +93 -0
  193. package/dist/navigation/index.d.ts +93 -0
  194. package/dist/navigation/index.js +453 -0
  195. package/dist/navigation/index.js.map +1 -0
  196. package/dist/navigation/index.mjs +443 -0
  197. package/dist/navigation/index.mjs.map +1 -0
  198. package/dist/portfolio/index.d.mts +66 -0
  199. package/dist/portfolio/index.d.ts +66 -0
  200. package/dist/portfolio/index.js +736 -0
  201. package/dist/portfolio/index.js.map +1 -0
  202. package/dist/portfolio/index.mjs +724 -0
  203. package/dist/portfolio/index.mjs.map +1 -0
  204. package/dist/qqbot/server/index.d.mts +216 -0
  205. package/dist/qqbot/server/index.d.ts +216 -0
  206. package/dist/qqbot/server/index.js +394 -0
  207. package/dist/qqbot/server/index.js.map +1 -0
  208. package/dist/qqbot/server/index.mjs +385 -0
  209. package/dist/qqbot/server/index.mjs.map +1 -0
  210. package/dist/qqbot/ui/web/index.d.mts +10 -0
  211. package/dist/qqbot/ui/web/index.d.ts +10 -0
  212. package/dist/qqbot/ui/web/index.js +105 -0
  213. package/dist/qqbot/ui/web/index.js.map +1 -0
  214. package/dist/qqbot/ui/web/index.mjs +99 -0
  215. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  216. package/dist/screenReceiver/index.d.mts +86 -0
  217. package/dist/screenReceiver/index.d.ts +86 -0
  218. package/dist/screenReceiver/index.js +281 -0
  219. package/dist/screenReceiver/index.js.map +1 -0
  220. package/dist/screenReceiver/index.mjs +273 -0
  221. package/dist/screenReceiver/index.mjs.map +1 -0
  222. package/dist/testYourself/admin/index.d.mts +58 -0
  223. package/dist/testYourself/admin/index.d.ts +58 -0
  224. package/dist/testYourself/admin/index.js +1009 -0
  225. package/dist/testYourself/admin/index.js.map +1 -0
  226. package/dist/testYourself/admin/index.mjs +1002 -0
  227. package/dist/testYourself/admin/index.mjs.map +1 -0
  228. package/dist/testYourself/index.d.mts +53 -0
  229. package/dist/testYourself/index.d.ts +53 -0
  230. package/dist/testYourself/index.js +2551 -0
  231. package/dist/testYourself/index.js.map +1 -0
  232. package/dist/testYourself/index.mjs +2531 -0
  233. package/dist/testYourself/index.mjs.map +1 -0
  234. package/dist/testYourself/server/index.d.mts +1029 -0
  235. package/dist/testYourself/server/index.d.ts +1029 -0
  236. package/dist/testYourself/server/index.js +825 -0
  237. package/dist/testYourself/server/index.js.map +1 -0
  238. package/dist/testYourself/server/index.mjs +816 -0
  239. package/dist/testYourself/server/index.mjs.map +1 -0
  240. package/dist/types-BTiaMsBz.d.mts +292 -0
  241. package/dist/types-DyG3ZV9V.d.mts +270 -0
  242. package/dist/types-DyG3ZV9V.d.ts +270 -0
  243. package/dist/types-ERmJyjx8.d.ts +292 -0
  244. package/dist/types-HorDyIRv.d.mts +303 -0
  245. package/dist/types-HorDyIRv.d.ts +303 -0
  246. package/dist/vocaloidBooth/index.d.mts +64 -0
  247. package/dist/vocaloidBooth/index.d.ts +64 -0
  248. package/dist/vocaloidBooth/index.js +376 -0
  249. package/dist/vocaloidBooth/index.js.map +1 -0
  250. package/dist/vocaloidBooth/index.mjs +362 -0
  251. package/dist/vocaloidBooth/index.mjs.map +1 -0
  252. package/dist/vocaloidBooth/server/index.d.mts +111 -0
  253. package/dist/vocaloidBooth/server/index.d.ts +111 -0
  254. package/dist/vocaloidBooth/server/index.js +247 -0
  255. package/dist/vocaloidBooth/server/index.js.map +1 -0
  256. package/dist/vocaloidBooth/server/index.mjs +237 -0
  257. package/dist/vocaloidBooth/server/index.mjs.map +1 -0
  258. package/dist/vocaloidBooth/web/index.d.mts +3 -0
  259. package/dist/vocaloidBooth/web/index.d.ts +3 -0
  260. package/dist/vocaloidBooth/web/index.js +376 -0
  261. package/dist/vocaloidBooth/web/index.js.map +1 -0
  262. package/dist/vocaloidBooth/web/index.mjs +362 -0
  263. package/dist/vocaloidBooth/web/index.mjs.map +1 -0
  264. package/package.json +1 -1
@@ -0,0 +1,2467 @@
1
+ import { e as MMDPlayerBaseProps, f as MMDPlayerBaseRef, g as MMDPlayerEnhancedProps, h as MMDPlaylistProps, b as MMDPlaylistNode, d as MMDResources, i as MMDStage, j as MobileOptimization } from '../types-HorDyIRv.mjs';
2
+ export { M as MMDPlaylistConfig, a as MMDResourceItem, c as MMDResourceOptions, O as OutlineOptions, R as ResourceOption } from '../types-HorDyIRv.mjs';
3
+ import * as React$1 from 'react';
4
+ import React__default, { CSSProperties } from 'react';
5
+ import * as THREE from 'three';
6
+ import { a as UploadFileInfo, c as UploadProgress, F as FileMetadata, A as AccessPermission } from '../types-DyG3ZV9V.mjs';
7
+
8
+ /**
9
+ * PMX模型解析器类型定义
10
+ */
11
+ /**
12
+ * PMX文件头信息
13
+ */
14
+ interface PMXHeader {
15
+ /** 文件签名 "PMX " */
16
+ signature: string;
17
+ /** PMX版本号 */
18
+ version: number;
19
+ /** 全局设置 */
20
+ globals: {
21
+ /** 文本编码 (0=UTF16LE, 1=UTF8) */
22
+ encoding: number;
23
+ /** 追加UV数 */
24
+ additionalVec4Count: number;
25
+ /** 顶点索引大小 */
26
+ vertexIndexSize: number;
27
+ /** 纹理索引大小 */
28
+ textureIndexSize: number;
29
+ /** 材质索引大小 */
30
+ materialIndexSize: number;
31
+ /** 骨骼索引大小 */
32
+ boneIndexSize: number;
33
+ /** Morph索引大小 */
34
+ morphIndexSize: number;
35
+ /** 刚体索引大小 */
36
+ rigidBodyIndexSize: number;
37
+ };
38
+ }
39
+ /**
40
+ * PMX模型信息
41
+ */
42
+ interface PMXModelInfo {
43
+ /** 模型名称 (本地) */
44
+ modelName: string;
45
+ /** 模型名称 (英文) */
46
+ modelNameEnglish: string;
47
+ /** 注释 (本地) */
48
+ comment: string;
49
+ /** 注释 (英文) */
50
+ commentEnglish: string;
51
+ }
52
+ /**
53
+ * PMX顶点信息
54
+ */
55
+ interface PMXVertex {
56
+ /** 位置 */
57
+ position: [number, number, number];
58
+ /** 法线 */
59
+ normal: [number, number, number];
60
+ /** UV坐标 */
61
+ uv: [number, number];
62
+ /** 追加UV */
63
+ additionalVec4?: number[][];
64
+ /** 权重类型 */
65
+ weightType: number;
66
+ /** 骨骼索引 */
67
+ boneIndices: number[];
68
+ /** 骨骼权重 */
69
+ boneWeights: number[];
70
+ /** 边缘倍率 */
71
+ edgeScale: number;
72
+ }
73
+ /**
74
+ * PMX材质信息
75
+ */
76
+ interface PMXMaterial {
77
+ /** 材质名称 (本地) */
78
+ name: string;
79
+ /** 材质名称 (英文) */
80
+ nameEnglish: string;
81
+ /** 漫反射颜色 (RGBA) */
82
+ diffuse: [number, number, number, number];
83
+ /** 镜面反射颜色 (RGB) */
84
+ specular: [number, number, number];
85
+ /** 镜面反射强度 */
86
+ specularStrength: number;
87
+ /** 环境光颜色 (RGB) */
88
+ ambient: [number, number, number];
89
+ /** 绘制标志 */
90
+ drawingFlags: number;
91
+ /** 边缘颜色 (RGBA) */
92
+ edgeColor: [number, number, number, number];
93
+ /** 边缘大小 */
94
+ edgeSize: number;
95
+ /** 纹理索引 */
96
+ textureIndex: number;
97
+ /** Sphere纹理索引 */
98
+ sphereTextureIndex: number;
99
+ /** Sphere模式 (0=无, 1=乘, 2=加, 3=副纹理) */
100
+ sphereMode: number;
101
+ /** 是否使用共享Toon */
102
+ isSharedToon: boolean;
103
+ /** Toon纹理索引/共享Toon索引 */
104
+ toonTextureIndex: number;
105
+ /** 备注 */
106
+ memo: string;
107
+ /** 面数 */
108
+ surfaceCount: number;
109
+ }
110
+ /**
111
+ * PMX纹理信息
112
+ */
113
+ interface PMXTexture {
114
+ /** 纹理路径 */
115
+ path: string;
116
+ /** 纹理索引 */
117
+ index: number;
118
+ }
119
+ /**
120
+ * 材质与纹理的映射关系
121
+ */
122
+ interface MaterialTextureMapping {
123
+ /** 材质索引 */
124
+ materialIndex: number;
125
+ /** 材质名称 */
126
+ materialName: string;
127
+ /** 材质名称(英文) */
128
+ materialNameEnglish: string;
129
+ /** 主纹理 */
130
+ mainTexture?: {
131
+ index: number;
132
+ path: string;
133
+ };
134
+ /** Sphere纹理 */
135
+ sphereTexture?: {
136
+ index: number;
137
+ path: string;
138
+ mode: 'multiply' | 'add' | 'subTexture';
139
+ };
140
+ /** Toon纹理 */
141
+ toonTexture?: {
142
+ index: number;
143
+ path: string;
144
+ isShared: boolean;
145
+ };
146
+ /** 面数 */
147
+ surfaceCount: number;
148
+ }
149
+ /**
150
+ * PMX解析结果
151
+ */
152
+ interface PMXParseResult {
153
+ /** 头信息 */
154
+ header: PMXHeader;
155
+ /** 模型信息 */
156
+ modelInfo: PMXModelInfo;
157
+ /** 纹理列表 */
158
+ textures: PMXTexture[];
159
+ /** 材质列表 */
160
+ materials: PMXMaterial[];
161
+ /** 材质纹理映射 */
162
+ materialTextureMappings: MaterialTextureMapping[];
163
+ /** 顶点数量 */
164
+ vertexCount: number;
165
+ /** 面数量 */
166
+ faceCount: number;
167
+ }
168
+
169
+ /**
170
+ * PMX模型文件解析器
171
+ * 用于解析PMX格式的MMD模型文件,提取纹理映射关系
172
+ */
173
+
174
+ declare class PMXParser {
175
+ private view;
176
+ private offset;
177
+ private textEncoding;
178
+ private textureIndexSize;
179
+ private additionalVec4Count;
180
+ private vertexIndexSize;
181
+ private boneIndexSize;
182
+ /**
183
+ * 从URL加载并解析PMX文件
184
+ */
185
+ loadAndParse(url: string): Promise<PMXParseResult>;
186
+ /**
187
+ * 解析PMX文件
188
+ */
189
+ parse(buffer: ArrayBuffer): PMXParseResult;
190
+ /**
191
+ * 解析文件头
192
+ */
193
+ private parseHeader;
194
+ /**
195
+ * 解析模型信息
196
+ */
197
+ private parseModelInfo;
198
+ /**
199
+ * 跳过顶点数据(只返回数量)
200
+ */
201
+ private skipVertices;
202
+ /**
203
+ * 跳过顶点权重数据
204
+ */
205
+ private skipVertexWeight;
206
+ /**
207
+ * 跳过面数据(只返回数量)
208
+ */
209
+ private skipFaces;
210
+ /**
211
+ * 解析纹理列表
212
+ */
213
+ private parseTextures;
214
+ /**
215
+ * 解析材质列表
216
+ */
217
+ private parseMaterials;
218
+ /**
219
+ * 生成材质纹理映射
220
+ */
221
+ private generateMaterialTextureMappings;
222
+ /**
223
+ * 读取文本缓冲区
224
+ */
225
+ private readTextBuffer;
226
+ /**
227
+ * 读取固定长度字符串
228
+ */
229
+ private readString;
230
+ /**
231
+ * 读取索引
232
+ */
233
+ private readIndex;
234
+ }
235
+
236
+ /**
237
+ * PMX模型编辑器
238
+ * 支持修改材质、纹理绑定等
239
+ */
240
+
241
+ interface PMXEditOperation {
242
+ type: 'material' | 'texture' | 'binding';
243
+ action: 'add' | 'update' | 'delete';
244
+ target: number;
245
+ data?: any;
246
+ }
247
+ interface PMXEditHistory {
248
+ operation: PMXEditOperation;
249
+ timestamp: number;
250
+ description: string;
251
+ }
252
+ declare class PMXEditor$1 {
253
+ private data;
254
+ private history;
255
+ private historyIndex;
256
+ private maxHistory;
257
+ constructor(parseResult: PMXParseResult);
258
+ /**
259
+ * 获取当前数据
260
+ */
261
+ getData(): PMXParseResult;
262
+ /**
263
+ * 获取编辑历史
264
+ */
265
+ getHistory(): PMXEditHistory[];
266
+ /**
267
+ * 是否可以撤销
268
+ */
269
+ canUndo(): boolean;
270
+ /**
271
+ * 是否可以重做
272
+ */
273
+ canRedo(): boolean;
274
+ /**
275
+ * 撤销
276
+ */
277
+ undo(): boolean;
278
+ /**
279
+ * 重做
280
+ */
281
+ redo(): boolean;
282
+ /**
283
+ * 添加纹理
284
+ */
285
+ addTexture(path: string): number;
286
+ /**
287
+ * 更新纹理路径
288
+ */
289
+ updateTexture(index: number, newPath: string): boolean;
290
+ /**
291
+ * 删除纹理
292
+ */
293
+ deleteTexture(index: number): boolean;
294
+ /**
295
+ * 更新材质的主纹理绑定
296
+ */
297
+ setMaterialMainTexture(materialIndex: number, textureIndex: number): boolean;
298
+ /**
299
+ * 更新材质的Sphere纹理绑定
300
+ */
301
+ setMaterialSphereTexture(materialIndex: number, textureIndex: number, mode?: number): boolean;
302
+ /**
303
+ * 更新材质的Toon纹理绑定
304
+ */
305
+ setMaterialToonTexture(materialIndex: number, textureIndex: number, isShared?: boolean): boolean;
306
+ /**
307
+ * 更新材质属性
308
+ */
309
+ updateMaterial(materialIndex: number, updates: Partial<PMXMaterial>): boolean;
310
+ /**
311
+ * 重新生成材质纹理映射
312
+ */
313
+ private regenerateMappings;
314
+ /**
315
+ * 记录历史
316
+ */
317
+ private recordHistory;
318
+ /**
319
+ * 获取统计信息
320
+ */
321
+ getStats(): {
322
+ textures: number;
323
+ materials: number;
324
+ vertices: number;
325
+ faces: number;
326
+ unusedTextures: number;
327
+ editHistory: number;
328
+ };
329
+ /**
330
+ * 获取未使用的纹理
331
+ */
332
+ getUnusedTextures(): PMXTexture[];
333
+ }
334
+
335
+ /**
336
+ * PMX模型导出器
337
+ * 将编辑后的PMX数据导出为二进制文件
338
+ */
339
+
340
+ declare class PMXExporter {
341
+ private data;
342
+ private buffer;
343
+ private view;
344
+ private offset;
345
+ constructor(data: PMXParseResult);
346
+ /**
347
+ * 导出为ArrayBuffer
348
+ */
349
+ export(): ArrayBuffer;
350
+ /**
351
+ * 导出为Blob
352
+ */
353
+ exportAsBlob(): Blob;
354
+ /**
355
+ * 导出并下载
356
+ */
357
+ exportAndDownload(filename?: string): void;
358
+ /**
359
+ * 估算文件大小
360
+ */
361
+ private estimateSize;
362
+ /**
363
+ * 写入头部
364
+ */
365
+ private writeHeader;
366
+ /**
367
+ * 写入模型信息
368
+ */
369
+ private writeModelInfo;
370
+ /**
371
+ * 写入顶点占位符
372
+ */
373
+ private writeVertexPlaceholder;
374
+ /**
375
+ * 写入面占位符
376
+ */
377
+ private writeFacePlaceholder;
378
+ /**
379
+ * 写入纹理列表
380
+ */
381
+ private writeTextures;
382
+ /**
383
+ * 写入材质
384
+ */
385
+ private writeMaterials;
386
+ /**
387
+ * 写入文本缓冲区
388
+ */
389
+ private writeTextBuffer;
390
+ /**
391
+ * 写入固定长度字符串
392
+ */
393
+ private writeString;
394
+ /**
395
+ * 写入索引
396
+ */
397
+ private writeIndex;
398
+ }
399
+
400
+ /**
401
+ * PMX模型编辑器组件
402
+ * 提供可视化的材质纹理绑定编辑功能
403
+ */
404
+
405
+ interface PMXEditorProps {
406
+ /** PMX模型文件URL */
407
+ modelUrl: string;
408
+ /** 基础路径(用于拼接纹理URL) */
409
+ basePath?: string;
410
+ /** 自定义样式类名 */
411
+ className?: string;
412
+ /** 解析完成回调 */
413
+ onParsed?: (result: PMXParseResult) => void;
414
+ /** 错误回调 */
415
+ onError?: (error: Error) => void;
416
+ }
417
+ declare const PMXEditor: React__default.FC<PMXEditorProps>;
418
+
419
+ /**
420
+ * PMX模型信息查看器组件
421
+ * 用于可视化展示PMX模型的纹理映射关系
422
+ */
423
+
424
+ interface PMXViewerProps {
425
+ /** PMX模型文件URL */
426
+ modelUrl: string;
427
+ /** 基础路径(用于拼接纹理URL) */
428
+ basePath?: string;
429
+ /** 自定义样式类名 */
430
+ className?: string;
431
+ /** 解析完成回调 */
432
+ onParsed?: (result: PMXParseResult) => void;
433
+ /** 错误回调 */
434
+ onError?: (error: Error) => void;
435
+ }
436
+ declare const PMXViewer: React__default.FC<PMXViewerProps>;
437
+
438
+ declare const MMDPlayerBase: React__default.ForwardRefExoticComponent<MMDPlayerBaseProps & React__default.RefAttributes<MMDPlayerBaseRef>>;
439
+
440
+ declare const MMDPlayerEnhanced: React__default.FC<MMDPlayerEnhancedProps>;
441
+
442
+ /**
443
+ * MMDPlaylist - 播放列表管理器
444
+ *
445
+ * 核心功能:
446
+ * - 管理多个播放节点
447
+ * - 实现无缝切换(通过 key 变化触发组件重新挂载)
448
+ * - 预加载策略 (none / next / all)
449
+ * - 智能内存回收
450
+ * - 播放列表 UI
451
+ */
452
+ declare const MMDPlaylist: React__default.FC<MMDPlaylistProps>;
453
+
454
+ interface MMDPlayerEnhancedDebugInfoProps {
455
+ isPlaying: boolean;
456
+ isLooping: boolean;
457
+ isFullscreen: boolean;
458
+ showAxes: boolean;
459
+ isLoading: boolean;
460
+ currentResourceId?: string;
461
+ currentResourceName?: string;
462
+ mode: 'single' | 'list' | 'options';
463
+ totalResources: number;
464
+ }
465
+ declare const MMDPlayerEnhancedDebugInfo: React__default.FC<MMDPlayerEnhancedDebugInfoProps>;
466
+
467
+ interface MMDPlaylistDebugInfoProps {
468
+ playlistName: string;
469
+ currentIndex: number;
470
+ currentNode: MMDPlaylistNode;
471
+ totalNodes: number;
472
+ isPlaying: boolean;
473
+ isListLooping: boolean;
474
+ isNodeLooping: boolean;
475
+ preloadStrategy: 'none' | 'next' | 'all';
476
+ isLoading: boolean;
477
+ isFullscreen: boolean;
478
+ showAxes: boolean;
479
+ preloadedNodes: number[];
480
+ }
481
+ declare const MMDPlaylistDebugInfo: React__default.FC<MMDPlaylistDebugInfoProps>;
482
+
483
+ /**
484
+ * MMD光照调试面板
485
+ * 实时调整渲染器、光源、材质参数
486
+ */
487
+
488
+ /**
489
+ * 光照参数接口
490
+ */
491
+ interface MMDLightingParams {
492
+ /** 色调映射类型 (0=None, 1=Linear, 2=Reinhard, 3=Cineon, 4=ACESFilmic) */
493
+ toneMapping: number;
494
+ /** 色调映射曝光值 */
495
+ toneMappingExposure: number;
496
+ /** 环境光强度 */
497
+ ambientIntensity: number;
498
+ /** 主方向光强度 */
499
+ directionalIntensity: number;
500
+ /** 主方向光X轴位置 */
501
+ directionalX: number;
502
+ /** 主方向光Y轴位置 */
503
+ directionalY: number;
504
+ /** 主方向光Z轴位置 */
505
+ directionalZ: number;
506
+ /** 侧面补光强度 */
507
+ sideIntensity: number;
508
+ /** 半球光强度 */
509
+ hemisphereIntensity: number;
510
+ /** 材质自发光强度 */
511
+ emissiveIntensity: number;
512
+ /** 颜色亮度系数 */
513
+ colorBrightness: number;
514
+ /** 颜色饱和度系数 */
515
+ colorSaturation: number;
516
+ /** 是否启用阴影 */
517
+ enableShadows: boolean;
518
+ /** 模型是否接收阴影 */
519
+ receiveShadow: boolean;
520
+ /** 阴影偏移 */
521
+ shadowBias: number;
522
+ /** 高光强度(Shininess) */
523
+ shininess: number;
524
+ /** 高光颜色亮度 */
525
+ specularIntensity: number;
526
+ /** 反射率 */
527
+ reflectivity: number;
528
+ /** 金属度 */
529
+ metalness: number;
530
+ /** 粗糙度 */
531
+ roughness: number;
532
+ /** 环境光遮蔽强度 */
533
+ aoMapIntensity: number;
534
+ /** 边缘光强度 */
535
+ rimLightIntensity: number;
536
+ /** 边缘光颜色 */
537
+ rimLightColor: string;
538
+ }
539
+ /**
540
+ * 场景引用接口
541
+ */
542
+ interface MMDSceneRefs {
543
+ /** 渲染器 */
544
+ renderer: THREE.WebGLRenderer | null;
545
+ /** 环境光 */
546
+ ambientLight: THREE.AmbientLight | null;
547
+ /** 主方向光 */
548
+ directionalLight: THREE.DirectionalLight | null;
549
+ /** 侧面补光 */
550
+ sideLight: THREE.DirectionalLight | null;
551
+ /** 半球光 */
552
+ hemisphereLight: THREE.HemisphereLight | null;
553
+ /** MMD模型网格 */
554
+ mmdMesh: THREE.SkinnedMesh | null;
555
+ }
556
+ /**
557
+ * 组件Props
558
+ */
559
+ interface MMDLightingDebugPanelProps {
560
+ /** 场景引用(包含渲染器、光源、模型等) */
561
+ sceneRefs: React__default.MutableRefObject<MMDSceneRefs>;
562
+ /** 初始参数(可选) */
563
+ initialParams?: Partial<MMDLightingParams>;
564
+ /** 参数变化回调(可选) */
565
+ onParamsChange?: (params: MMDLightingParams) => void;
566
+ /** 是否默认显示(默认true) */
567
+ defaultVisible?: boolean;
568
+ /** 面板位置(默认'right') */
569
+ position?: 'left' | 'right';
570
+ /** 自定义类名 */
571
+ className?: string;
572
+ }
573
+ /**
574
+ * MMD光照调试面板组件
575
+ */
576
+ declare const MMDLightingDebugPanel: React__default.FC<MMDLightingDebugPanelProps>;
577
+
578
+ type MMDUploadResourceType = 'model' | 'motion' | 'camera' | 'audio' | 'stage' | 'thumbnail';
579
+ interface MMDUploadConfig {
580
+ moduleId: string;
581
+ acceptedTypes: string[];
582
+ maxFileSize: number;
583
+ description: string;
584
+ hint?: string;
585
+ }
586
+ declare const MMD_UPLOAD_CONFIGS: Record<MMDUploadResourceType, MMDUploadConfig>;
587
+ interface MMDUploadPanelProps {
588
+ resourceType: MMDUploadResourceType;
589
+ fileService: {
590
+ uploadFile: (fileInfo: UploadFileInfo, onProgress?: (progress: UploadProgress) => void) => Promise<FileMetadata>;
591
+ getFileUrl?: (fileId: string, expiresIn?: number) => Promise<string>;
592
+ };
593
+ userId?: string;
594
+ permission?: AccessPermission;
595
+ label?: string;
596
+ description?: string;
597
+ hint?: string;
598
+ acceptedTypes?: string[];
599
+ maxFileSizeMB?: number;
600
+ validateZip?: boolean;
601
+ disabled?: boolean;
602
+ className?: string;
603
+ style?: React__default.CSSProperties;
604
+ onUploaded?: (payload: {
605
+ file: FileMetadata;
606
+ url?: string;
607
+ }) => void;
608
+ onError?: (error: Error) => void;
609
+ onProgress?: (progress: UploadProgress) => void;
610
+ }
611
+ declare const MMDUploadPanel: React__default.FC<MMDUploadPanelProps>;
612
+
613
+ /**
614
+ * Ammo.js 加载器
615
+ * 用于异步加载 Ammo.js 物理引擎 (WASM 版本)
616
+ */
617
+ declare global {
618
+ interface Window {
619
+ Ammo: any;
620
+ }
621
+ }
622
+ /**
623
+ * 加载 Ammo.js
624
+ * @param path Ammo.js (WASM wrapper) 的路径,默认为 '/libs/ammo.wasm.js'
625
+ */
626
+ declare const loadAmmo: (path?: string) => Promise<any>;
627
+
628
+ /**
629
+ * MMD加载器优化配置
630
+ * 用于获得接近MMD软件的渲染效果
631
+ */
632
+
633
+ interface MMDLoaderConfig {
634
+ /** Toon纹理路径 */
635
+ toonPath?: string;
636
+ /** 资源基础路径 */
637
+ resourcePath?: string;
638
+ /** 启用渐变贴图(用于Toon材质) */
639
+ enableGradientMap?: boolean;
640
+ /** 高光强度 */
641
+ shininess?: number;
642
+ /** 高光颜色 */
643
+ specularColor?: THREE.ColorRepresentation;
644
+ }
645
+ /**
646
+ * 配置MMD材质以获得最佳渲染效果
647
+ *
648
+ * 主要优化点:
649
+ * 1. 为MeshToonMaterial添加渐变贴图(实现阶梯式明暗过渡)
650
+ * 2. 调整高光参数(shininess, specular)
651
+ * 3. 确保纹理使用正确的颜色空间
652
+ * 4. 优化环境贴图(sphere texture)设置
653
+ *
654
+ * @param mesh - MMD模型网格
655
+ * @param config - 配置选项
656
+ */
657
+ declare function configureMaterialsForMMD(mesh: THREE.SkinnedMesh, config?: MMDLoaderConfig): void;
658
+ /**
659
+ * 创建MMD风格的光照设置
660
+ *
661
+ * MMD默认使用3点光照:
662
+ * 1. 主光源(Key Light):从左前上方照射,强度最高
663
+ * 2. 补光(Fill Light):从右侧照射,减少阴影过暗
664
+ * 3. 环境光(Ambient Light):提供基础亮度
665
+ *
666
+ * @param scene - Three.js场景
667
+ * @param options - 光照选项
668
+ * @returns 光源对象
669
+ */
670
+ declare function createMMDLights(scene: THREE.Scene, options?: {
671
+ ambientIntensity?: number;
672
+ mainIntensity?: number;
673
+ fillIntensity?: number;
674
+ enableShadow?: boolean;
675
+ }): {
676
+ ambientLight: THREE.AmbientLight;
677
+ mainLight: THREE.DirectionalLight;
678
+ fillLight: THREE.DirectionalLight;
679
+ };
680
+ /**
681
+ * 配置渲染器以获得MMD风格的渲染效果
682
+ *
683
+ * 主要配置:
684
+ * 1. 色调映射:使用线性或无色调映射(避免过度曝光)
685
+ * 2. 颜色空间:sRGB(与MMD一致)
686
+ * 3. 阴影:PCF软阴影
687
+ *
688
+ * @param renderer - Three.js渲染器
689
+ * @param options - 渲染器选项
690
+ * @returns 配置后的渲染器
691
+ */
692
+ declare function configureRendererForMMD(renderer: THREE.WebGLRenderer, options?: {
693
+ toneMapping?: THREE.ToneMapping;
694
+ toneMappingExposure?: number;
695
+ enableShadow?: boolean;
696
+ }): THREE.WebGLRenderer;
697
+ /**
698
+ * 生成Toon纹理(用于测试,如果没有原版toon01-10.bmp)
699
+ *
700
+ * @param index - Toon纹理索引 (1-10)
701
+ * @returns Canvas元素
702
+ */
703
+ declare function generateToonTexture(index: number): HTMLCanvasElement;
704
+ /**
705
+ * 批量生成所有Toon纹理(1-10)
706
+ *
707
+ * @returns Toon纹理数组
708
+ */
709
+ declare function generateAllToonTextures(): THREE.CanvasTexture[];
710
+
711
+ /**
712
+ * MMD渲染诊断工具
713
+ * 用于检测模型渲染问题
714
+ */
715
+
716
+ interface MMDDiagnosticReport {
717
+ /** 材质总数 */
718
+ totalMaterials: number;
719
+ /** 有Toon纹理的材质数 */
720
+ materialsWithToon: number;
721
+ /** 有Sphere纹理的材质数 */
722
+ materialsWithSphere: number;
723
+ /** 有主纹理的材质数 */
724
+ materialsWithMainTexture: number;
725
+ /** MeshToonMaterial数量 */
726
+ toonMaterialCount: number;
727
+ /** MeshPhongMaterial数量 */
728
+ phongMaterialCount: number;
729
+ /** MeshStandardMaterial数量 */
730
+ standardMaterialCount: number;
731
+ /** 问题列表 */
732
+ issues: string[];
733
+ /** 建议列表 */
734
+ suggestions: string[];
735
+ }
736
+ /**
737
+ * 诊断MMD场景渲染问题
738
+ *
739
+ * @param scene - Three.js场景
740
+ * @param renderer - 渲染器(可选)
741
+ * @returns 诊断报告
742
+ */
743
+ declare function diagnoseMaterialsMMD(scene: THREE.Scene, renderer?: THREE.WebGLRenderer): MMDDiagnosticReport;
744
+ /**
745
+ * 打印诊断报告到控制台
746
+ *
747
+ * @param report - 诊断报告
748
+ */
749
+ declare function printDiagnosticReport(report: MMDDiagnosticReport): void;
750
+ /**
751
+ * 快速诊断(浏览器控制台友好版本)
752
+ *
753
+ * 使用方法:
754
+ * 1. 在浏览器控制台运行
755
+ * 2. 将scene对象传入
756
+ *
757
+ * @param scene - Three.js场景
758
+ * @param renderer - 渲染器(可选)
759
+ */
760
+ declare function quickDiagnose(scene: THREE.Scene, renderer?: THREE.WebGLRenderer): void;
761
+ /**
762
+ * 检查特定材质的详细信息
763
+ *
764
+ * @param material - Three.js材质
765
+ * @returns 材质信息字符串
766
+ */
767
+ declare function inspectMaterial(material: THREE.Material): Record<string, any>;
768
+ /**
769
+ * 列出所有材质的详细信息
770
+ *
771
+ * @param scene - Three.js场景
772
+ */
773
+ declare function listAllMaterials(scene: THREE.Scene): void;
774
+
775
+ /**
776
+ * Sphere纹理辅助工具
777
+ * 用于检查、诊断和修复MMD模型的sphere纹理问题
778
+ */
779
+
780
+ /**
781
+ * Sphere纹理诊断结果
782
+ */
783
+ interface SphereTextureDiagnostic {
784
+ /** 检查的材质总数 */
785
+ totalMaterials: number;
786
+ /** 应该有sphere纹理的材质数(根据命名推测) */
787
+ expectedSphere: number;
788
+ /** 实际有sphere纹理的材质数 */
789
+ actualSphere: number;
790
+ /** 缺少sphere纹理的材质列表 */
791
+ missingSphere: Array<{
792
+ index: number;
793
+ name: string;
794
+ objectName: string;
795
+ }>;
796
+ /** 可能的sphere纹理文件列表 */
797
+ possibleSphereFiles: string[];
798
+ }
799
+ /**
800
+ * 检查模型是否缺少sphere纹理
801
+ *
802
+ * @param mesh - MMD模型网格
803
+ * @returns 诊断结果
804
+ */
805
+ declare function checkSphereTextures(mesh: THREE.SkinnedMesh): SphereTextureDiagnostic;
806
+ /**
807
+ * 打印sphere纹理诊断报告
808
+ *
809
+ * @param diagnostic - 诊断结果
810
+ */
811
+ declare function printSphereDiagnostic(diagnostic: SphereTextureDiagnostic): void;
812
+ /**
813
+ * 为材质添加默认的sphere纹理(临时方案)
814
+ *
815
+ * 注意:这只是临时方案,最好的方法是使用模型自带的sphere纹理文件
816
+ *
817
+ * @param mesh - MMD模型网格
818
+ * @param sphereTextureUrl - Sphere纹理URL(可选)
819
+ */
820
+ declare function addDefaultSphereTextures(mesh: THREE.SkinnedMesh, sphereTextureUrl?: string): void;
821
+ /**
822
+ * 使用PMXParser检查模型定义的sphere纹理
823
+ *
824
+ * @param modelUrl - 模型URL
825
+ * @returns Sphere纹理信息
826
+ */
827
+ declare function checkModelSphereDefinition(modelUrl: string): Promise<{
828
+ hasSphere: boolean;
829
+ sphereTextures: Array<{
830
+ materialName: string;
831
+ texturePath: string;
832
+ mode: string;
833
+ }>;
834
+ }>;
835
+ /**
836
+ * 打印模型的sphere纹理定义
837
+ *
838
+ * @param modelUrl - 模型URL
839
+ */
840
+ declare function printModelSphereInfo(modelUrl: string): Promise<void>;
841
+ /**
842
+ * 全面诊断sphere纹理问题
843
+ *
844
+ * @param mesh - 已加载的模型网格
845
+ * @param modelUrl - 模型URL
846
+ */
847
+ declare function fullSphereDiagnostic(mesh: THREE.SkinnedMesh, modelUrl: string): Promise<void>;
848
+
849
+ /**
850
+ * MMD Visual Novel (Galgame 风格) 类型定义
851
+ */
852
+
853
+ /** 单条对话/文案 */
854
+ interface DialogueLine {
855
+ /** 唯一标识 */
856
+ id: string;
857
+ /** 说话者名称(可选,不填则不显示名称栏) */
858
+ speaker?: string;
859
+ /** 说话者名称颜色 */
860
+ speakerColor?: string;
861
+ /** 对话文本内容 */
862
+ text: string;
863
+ /** 文字显示速度(毫秒/字符),默认 50 */
864
+ typeSpeed?: number;
865
+ /** 是否等待用户点击才显示下一条(默认 true) */
866
+ waitForClick?: boolean;
867
+ /** 自动等待时间(毫秒),仅在 waitForClick 为 false 时生效 */
868
+ autoDelay?: number;
869
+ /** 对话时的表情/动作切换(可选) */
870
+ expression?: string;
871
+ /** 对话时播放的音效(可选) */
872
+ voicePath?: string;
873
+ /** 对话中插入的分支选项(可选,若有则显示选项) */
874
+ choices?: DialogueChoice[];
875
+ /** 视觉特效(可选) */
876
+ effect?: VisualEffect;
877
+ }
878
+ /** 视觉特效配置 */
879
+ interface VisualEffect {
880
+ /** 特效类型 */
881
+ type: 'flash' | 'gif' | 'shake';
882
+ /** 闪屏颜色,如 'white', 'red' */
883
+ color?: string;
884
+ /** 持续时间(毫秒) */
885
+ duration?: number;
886
+ /** GIF 动画地址 */
887
+ url?: string;
888
+ /** GIF 显示位置 */
889
+ position?: 'center' | 'full';
890
+ }
891
+ /** 分支判定逻辑 */
892
+ interface BranchCondition {
893
+ /** 变量名 */
894
+ key: string;
895
+ /** 变量值与节点索引的映射 */
896
+ map: Record<string | number, number>;
897
+ /** 默认跳转的节点索引 */
898
+ defaultIndex: number;
899
+ }
900
+ /** 对话分支选项 */
901
+ interface DialogueChoice {
902
+ /** 选项文字 */
903
+ text: string;
904
+ /** 跳转到的节点索引(可选,若不填则继续当前剧情) */
905
+ nextNodeIndex?: number;
906
+ /** 跳转到的对话索引(可选,默认 0) */
907
+ nextDialogueIndex?: number;
908
+ /** 设置变量(可选,用于后续剧情判定) */
909
+ setVariable?: {
910
+ key: string;
911
+ value: string | number | boolean;
912
+ };
913
+ /** 选项点击后的回调(可选) */
914
+ onSelect?: () => void;
915
+ /** 点击选项后触发的特效(可选) */
916
+ effect?: VisualEffect;
917
+ }
918
+ /** 视觉小说播放节点 */
919
+ interface VisualNovelNode {
920
+ /** 唯一标识 */
921
+ id: string;
922
+ /** 节点名称(用于调试) */
923
+ name?: string;
924
+ /** MMD 资源配置(模型、动作等) */
925
+ resources: MMDResources;
926
+ /** 该节点的对话数组(按顺序播放) */
927
+ dialogues: DialogueLine[];
928
+ /** 节点特定的舞台配置(可选,覆盖全局配置) */
929
+ stage?: MMDStage;
930
+ /** 节点结束时的分支选项(可选,已废弃,建议使用 DialogueLine.choices) */
931
+ choices?: DialogueChoice[];
932
+ /** 节点结束时的分支判定逻辑(可选,根据变量跳转不同节点) */
933
+ nextCondition?: BranchCondition;
934
+ /** 节点开始时播放的背景音乐(可选) */
935
+ bgmPath?: string;
936
+ /** 背景音乐音量 0-1(默认 0.5) */
937
+ bgmVolume?: number;
938
+ /** 节点是否循环 MMD 动画(对话期间循环,默认 true) */
939
+ loopAnimation?: boolean;
940
+ /** 是否支持应援功能(默认 false) */
941
+ supportCheer?: boolean;
942
+ }
943
+ /** 视觉小说剧本配置 */
944
+ interface VisualNovelScript {
945
+ /** 剧本唯一标识 */
946
+ id: string;
947
+ /** 剧本名称 */
948
+ name: string;
949
+ /** 播放节点列表 */
950
+ nodes: VisualNovelNode[];
951
+ /** 是否在剧本结束后循环(默认 false) */
952
+ loop?: boolean;
953
+ }
954
+ /** 对话框主题配置 */
955
+ interface DialogueBoxTheme {
956
+ /** 对话框背景颜色 */
957
+ backgroundColor?: string;
958
+ /** 对话框边框颜色 */
959
+ borderColor?: string;
960
+ /** 对话框文字颜色 */
961
+ textColor?: string;
962
+ /** 说话者名称背景颜色 */
963
+ speakerBgColor?: string;
964
+ /** 说话者名称文字颜色 */
965
+ speakerTextColor?: string;
966
+ /** 对话框透明度 0-1(默认 0.85) */
967
+ opacity?: number;
968
+ /** 对话框模糊度(backdrop-blur,默认 8px) */
969
+ blur?: string;
970
+ /** 点击继续提示文字 */
971
+ continueHint?: string;
972
+ /** 是否显示点击继续提示(默认 true) */
973
+ showContinueHint?: boolean;
974
+ }
975
+ type VisualNovelTransitionState = 'idle' | 'loading' | 'transitioning' | 'ready';
976
+ /** 视觉小说组件属性 */
977
+ interface MMDVisualNovelProps {
978
+ /** 剧本配置 */
979
+ script: VisualNovelScript;
980
+ /** 舞台配置 */
981
+ stage?: MMDStage;
982
+ /** 移动端优化配置 */
983
+ mobileOptimization?: MobileOptimization;
984
+ /** 对话框主题 */
985
+ dialogueTheme?: DialogueBoxTheme;
986
+ /** 是否自动开始(默认 true) */
987
+ autoStart?: boolean;
988
+ /** 开始按钮文本 */
989
+ startText?: string;
990
+ /** 设置按钮文本 */
991
+ settingsText?: string;
992
+ /** 关于按钮文本 */
993
+ aboutText?: string;
994
+ /** 初始节点索引(默认 0) */
995
+ initialNodeIndex?: number;
996
+ /** 初始对话索引(默认 0) */
997
+ initialDialogueIndex?: number;
998
+ /** 事件回调 */
999
+ onNodeChange?: (node: VisualNovelNode, index: number) => void;
1000
+ onDialogueChange?: (dialogue: DialogueLine, index: number, nodeIndex: number) => void;
1001
+ onScriptComplete?: () => void;
1002
+ onError?: (error: Error) => void;
1003
+ /** 是否显示调试信息 */
1004
+ showDebugInfo?: boolean;
1005
+ /** 是否启用组件内部调试日志,默认 false */
1006
+ debug?: boolean;
1007
+ /** 切换状态变更回调 */
1008
+ onTransitionStateChange?: (state: VisualNovelTransitionState) => void;
1009
+ /** 是否显示光照调试面板(默认false) */
1010
+ showLightingDebugPanel?: boolean;
1011
+ /** 光照调试面板初始参数 */
1012
+ lightingDebugInitialParams?: any;
1013
+ /** 是否显示快进按钮 */
1014
+ showSkipButton?: boolean;
1015
+ /** 是否显示自动播放按钮 */
1016
+ showAutoButton?: boolean;
1017
+ /** 是否显示历史记录按钮 */
1018
+ showHistoryButton?: boolean;
1019
+ /** 自定义设置面板内容 */
1020
+ customSettingsContent?: React.ReactNode;
1021
+ /** 自定义关于面板内容 */
1022
+ customAboutContent?: React.ReactNode;
1023
+ /** 样式 */
1024
+ className?: string;
1025
+ style?: React.CSSProperties;
1026
+ }
1027
+ /** 对话框组件属性 */
1028
+ interface DialogueBoxProps {
1029
+ /** 当前对话 */
1030
+ dialogue: DialogueLine | null;
1031
+ /** 主题配置 */
1032
+ theme?: DialogueBoxTheme;
1033
+ /** 是否正在打字中 */
1034
+ isTyping?: boolean;
1035
+ /** 是否自动播放模式 */
1036
+ isAutoMode?: boolean;
1037
+ /** 点击事件 */
1038
+ onClick?: () => void;
1039
+ /** 跳过打字动画 */
1040
+ onSkipTyping?: () => void;
1041
+ /** 切换自动模式 */
1042
+ onToggleAuto?: () => void;
1043
+ /** 打开历史记录 */
1044
+ onOpenHistory?: () => void;
1045
+ /** 快进 */
1046
+ onSkip?: () => void;
1047
+ /** 重置相机 */
1048
+ onResetCamera?: () => void;
1049
+ /** 相机是否处于手动调整状态 */
1050
+ isCameraManual?: boolean;
1051
+ /** 是否显示控制按钮 */
1052
+ showControls?: boolean;
1053
+ /** 是否显示快进按钮 */
1054
+ showSkipButton?: boolean;
1055
+ /** 是否显示自动按钮 */
1056
+ showAutoButton?: boolean;
1057
+ /** 是否显示历史按钮 */
1058
+ showHistoryButton?: boolean;
1059
+ /** 样式 */
1060
+ className?: string;
1061
+ }
1062
+ /** 历史记录项 */
1063
+ interface DialogueHistoryItem {
1064
+ nodeIndex: number;
1065
+ dialogueIndex: number;
1066
+ speaker?: string;
1067
+ text: string;
1068
+ timestamp: number;
1069
+ }
1070
+ /** 视觉小说组件 Ref 接口 */
1071
+ interface MMDVisualNovelRef {
1072
+ /** 跳转到指定节点 */
1073
+ goToNode: (nodeIndex: number, force?: boolean) => void;
1074
+ /** 跳转到指定对话 */
1075
+ goToDialogue: (dialogueIndex: number) => void;
1076
+ /** 获取当前节点索引 */
1077
+ getCurrentNodeIndex: () => number;
1078
+ /** 获取当前对话索引 */
1079
+ getCurrentDialogueIndex: () => number;
1080
+ /** 获取对话历史 */
1081
+ getHistory: () => DialogueHistoryItem[];
1082
+ /** 获取当前剧情变量 */
1083
+ getVariables: () => Record<string, string | number | boolean>;
1084
+ /** 设置剧情变量 */
1085
+ setVariable: (key: string, value: string | number | boolean) => void;
1086
+ /** 设置自动播放模式 */
1087
+ setAutoMode: (enabled: boolean) => void;
1088
+ /** 跳过当前打字动画 */
1089
+ skipTyping: () => void;
1090
+ /** 触发视觉特效 */
1091
+ triggerEffect?: (effect: VisualEffect) => void;
1092
+ }
1093
+
1094
+ /**
1095
+ * MMDVisualNovel - Galgame 风格视觉小说组件
1096
+ *
1097
+ * 核心功能:
1098
+ * - 将 MMDPlaylist 封装为 Galgame 风格
1099
+ * - 每个节点包含:模型、动作、对话数组
1100
+ * - 用户阅读完对话后自动切换节点
1101
+ * - 打字机效果显示文本
1102
+ * - 支持自动播放、快进、历史记录
1103
+ */
1104
+ declare const MMDVisualNovel: React__default.ForwardRefExoticComponent<MMDVisualNovelProps & React__default.RefAttributes<MMDVisualNovelRef>>;
1105
+
1106
+ /** 模型选项 */
1107
+ interface ModelOption {
1108
+ /** 唯一标识 */
1109
+ id: string;
1110
+ /** 显示名称 */
1111
+ name: string;
1112
+ /** 模型路径 */
1113
+ path: string | string[];
1114
+ /** 缩略图(可选) */
1115
+ thumbnail?: string;
1116
+ }
1117
+ /** 模型选择器设置属性 */
1118
+ interface ModelSelectorSettingsProps {
1119
+ /** 人物模型选项列表 */
1120
+ characterModels: ModelOption[];
1121
+ /** 场景模型选项列表 */
1122
+ stageModels: ModelOption[];
1123
+ /** 当前选中的人物模型 ID */
1124
+ selectedCharacterId: string;
1125
+ /** 当前选中的场景模型 ID */
1126
+ selectedStageId: string;
1127
+ /** 人物模型选择变化回调 */
1128
+ onCharacterChange: (id: string) => void;
1129
+ /** 场景模型选择变化回调 */
1130
+ onStageChange: (id: string) => void;
1131
+ /** 人物模型标签文字 */
1132
+ characterLabel?: string;
1133
+ /** 场景模型标签文字 */
1134
+ stageLabel?: string;
1135
+ }
1136
+ /**
1137
+ * ModelSelectorSettings - 模型选择器设置组件
1138
+ *
1139
+ * 用于在设置界面中选择人物模型和场景模型
1140
+ */
1141
+ declare const ModelSelectorSettings: React__default.FC<ModelSelectorSettingsProps>;
1142
+
1143
+ /** 模型选择器配置 */
1144
+ interface ModelSelectorConfig {
1145
+ /** 人物模型选项列表 */
1146
+ characterModels: ModelOption[];
1147
+ /** 场景模型选项列表 */
1148
+ stageModels: ModelOption[];
1149
+ /** 默认选中的人物模型 ID(不提供则使用第一个) */
1150
+ defaultCharacterId?: string;
1151
+ /** 默认选中的场景模型 ID(不提供则使用第一个) */
1152
+ defaultStageId?: string;
1153
+ /** 人物模型标签文字 */
1154
+ characterLabel?: string;
1155
+ /** 场景模型标签文字 */
1156
+ stageLabel?: string;
1157
+ }
1158
+ type ResourceMappingMode = 'full-clone' | 'resource-map';
1159
+ /** 带模型选择器的视觉小说组件属性 */
1160
+ interface MMDVisualNovelWithSelectorProps extends Omit<MMDVisualNovelProps, 'script'> {
1161
+ /** 基础剧本配置(模型路径会被选择器覆盖) */
1162
+ script: VisualNovelScript;
1163
+ /** 模型选择器配置 */
1164
+ modelSelector: ModelSelectorConfig;
1165
+ /** 模型选择变化回调 */
1166
+ onModelSelectionChange?: (characterId: string, stageId: string) => void;
1167
+ /** 资源映射模式,默认 resource-map(轻量) */
1168
+ resourceMappingMode?: ResourceMappingMode;
1169
+ }
1170
+ /** 带模型选择器的视觉小说组件 Ref 接口 */
1171
+ interface MMDVisualNovelWithSelectorRef extends MMDVisualNovelRef {
1172
+ /** 获取当前选中的人物模型 ID */
1173
+ getSelectedCharacterId: () => string;
1174
+ /** 获取当前选中的场景模型 ID */
1175
+ getSelectedStageId: () => string;
1176
+ /** 设置人物模型 */
1177
+ setCharacterModel: (id: string) => void;
1178
+ /** 设置场景模型 */
1179
+ setStageModel: (id: string) => void;
1180
+ }
1181
+ /**
1182
+ * MMDVisualNovelWithSelector - 带模型选择器的视觉小说组件
1183
+ *
1184
+ * 功能特性:
1185
+ * - 在设置界面中提供人物模型和场景模型的下拉选择器
1186
+ * - 选择的模型会应用到剧本中的所有节点
1187
+ * - 完全兼容 MMDVisualNovel 的所有功能
1188
+ *
1189
+ * 使用示例:
1190
+ * ```tsx
1191
+ * <MMDVisualNovelWithSelector
1192
+ * script={myScript}
1193
+ * modelSelector={{
1194
+ * characterModels: [
1195
+ * { id: 'miku', name: '初音未来', path: '/models/miku.pmx' },
1196
+ * { id: 'luka', name: '巡音流歌', path: '/models/luka.pmx' },
1197
+ * ],
1198
+ * stageModels: [
1199
+ * { id: 'stage1', name: '教室', path: '/stages/classroom.pmx' },
1200
+ * { id: 'stage2', name: '公园', path: '/stages/park.pmx' },
1201
+ * ],
1202
+ * }}
1203
+ * />
1204
+ * ```
1205
+ */
1206
+ declare const MMDVisualNovelWithSelector: React__default.ForwardRefExoticComponent<MMDVisualNovelWithSelectorProps & React__default.RefAttributes<MMDVisualNovelWithSelectorRef>>;
1207
+
1208
+ /**
1209
+ * DialogueBox - Galgame 风格对话框组件
1210
+ *
1211
+ * 功能:
1212
+ * - 打字机效果显示文本
1213
+ * - 说话者名称栏
1214
+ * - 点击继续提示
1215
+ * - 控制按钮(自动、快进、历史)
1216
+ */
1217
+ declare const DialogueBox: React__default.FC<DialogueBoxProps>;
1218
+
1219
+ interface HistoryPanelProps {
1220
+ /** 历史记录列表 */
1221
+ history: DialogueHistoryItem[];
1222
+ /** 主题配置 */
1223
+ theme?: DialogueBoxTheme;
1224
+ /** 关闭面板 */
1225
+ onClose: () => void;
1226
+ /** 样式 */
1227
+ className?: string;
1228
+ }
1229
+ /**
1230
+ * HistoryPanel - 对话历史记录面板
1231
+ *
1232
+ * 显示玩家已经阅读过的所有对话
1233
+ */
1234
+ declare const HistoryPanel: React__default.FC<HistoryPanelProps>;
1235
+
1236
+ interface LoadingOverlayProps {
1237
+ /** 是否显示加载状态 */
1238
+ isLoading?: boolean;
1239
+ /** 是否显示开始界面 */
1240
+ showStartScreen?: boolean;
1241
+ /** 脚本名称(用于开始界面) */
1242
+ scriptName?: string;
1243
+ /** 加载文本 */
1244
+ loadingText?: string;
1245
+ /** 开始按钮文本 */
1246
+ startText?: string;
1247
+ /** 设置按钮文本 */
1248
+ settingsText?: string;
1249
+ /** 关于按钮文本 */
1250
+ aboutText?: string;
1251
+ /** 点击开始回调 */
1252
+ onStart?: () => void;
1253
+ /** 自定义类名 */
1254
+ className?: string;
1255
+ /** 自定义设置面板内容 */
1256
+ customSettingsContent?: React__default.ReactNode;
1257
+ /** 自定义关于面板内容 */
1258
+ customAboutContent?: React__default.ReactNode;
1259
+ }
1260
+ /**
1261
+ * LoadingOverlay - 加载遮罩和开始界面组件容器
1262
+ *
1263
+ * 用于 MMD Visual Novel 的加载状态和开始界面显示
1264
+ * 组合了 LoadingScreen 和 StartScreen 两个独立组件
1265
+ */
1266
+ declare const LoadingOverlay: React__default.FC<LoadingOverlayProps>;
1267
+
1268
+ interface LoadingScreenProps {
1269
+ /** 是否显示加载状态 */
1270
+ isLoading?: boolean;
1271
+ /** 加载文本 */
1272
+ loadingText?: string;
1273
+ /** 自定义类名 */
1274
+ className?: string;
1275
+ }
1276
+ /**
1277
+ * LoadingScreen - 加载界面组件
1278
+ *
1279
+ * 用于 MMD Visual Novel 的加载状态显示
1280
+ */
1281
+ declare const LoadingScreen: React__default.FC<LoadingScreenProps>;
1282
+
1283
+ interface StartScreenProps {
1284
+ /** 是否显示开始界面 */
1285
+ showStartScreen?: boolean;
1286
+ /** 脚本名称 */
1287
+ scriptName?: string;
1288
+ /** 开始按钮文本 */
1289
+ startText?: string;
1290
+ /** 设置按钮文本 */
1291
+ settingsText?: string;
1292
+ /** 关于按钮文本 */
1293
+ aboutText?: string;
1294
+ /** 点击开始回调 */
1295
+ onStart?: () => void;
1296
+ /** 自定义类名 */
1297
+ className?: string;
1298
+ /** 自定义设置面板内容 */
1299
+ customSettingsContent?: React__default.ReactNode;
1300
+ /** 自定义关于面板内容 */
1301
+ customAboutContent?: React__default.ReactNode;
1302
+ }
1303
+ /**
1304
+ * StartScreen - 开始界面组件
1305
+ *
1306
+ * 用于 MMD Visual Novel 的开始界面显示
1307
+ */
1308
+ declare const StartScreen: React__default.FC<StartScreenProps>;
1309
+
1310
+ interface ChoiceMenuProps {
1311
+ choices: DialogueChoice[];
1312
+ onSelect: (choice: DialogueChoice) => void;
1313
+ theme?: DialogueBoxTheme;
1314
+ }
1315
+ declare const ChoiceMenu: React__default.FC<ChoiceMenuProps>;
1316
+
1317
+ interface LoopConfirmDialogProps {
1318
+ onRestart: () => void;
1319
+ onBackToStart: () => void;
1320
+ onCancel?: () => void;
1321
+ }
1322
+ /**
1323
+ * 循环确认对话框
1324
+ * 在剧本播放到最后一个节点时,询问用户是否继续循环
1325
+ */
1326
+ declare const LoopConfirmDialog: React__default.FC<LoopConfirmDialogProps>;
1327
+
1328
+ /**
1329
+ * 应援按钮组件
1330
+ */
1331
+ interface CheerButtonProps {
1332
+ /** 点击回调 */
1333
+ onClick: () => void;
1334
+ /** 按钮文字 */
1335
+ text?: string;
1336
+ /** 是否显示 */
1337
+ show: boolean;
1338
+ /** 样式类名 */
1339
+ className?: string;
1340
+ }
1341
+ declare const CheerButton: React__default.FC<CheerButtonProps>;
1342
+
1343
+ /**
1344
+ * 3D粒子彩花效果组件
1345
+ *
1346
+ * 功能:
1347
+ * - 点击应援按钮触发粒子爆炸效果
1348
+ * - 彩色粒子从中心向外扩散
1349
+ * - 粒子受重力影响下落
1350
+ * - 自动清理完成的粒子
1351
+ */
1352
+ interface CheerParticlesRef {
1353
+ /** 触发一次粒子效果 */
1354
+ trigger: () => void;
1355
+ /** 清理所有粒子 */
1356
+ clear: () => void;
1357
+ }
1358
+ interface CheerParticlesProps {
1359
+ /** 容器样式类名 */
1360
+ className?: string;
1361
+ }
1362
+ declare const CheerParticles: React__default.ForwardRefExoticComponent<CheerParticlesProps & React__default.RefAttributes<CheerParticlesRef>>;
1363
+
1364
+ /** 音乐曲目配置 */
1365
+ interface MusicTrack {
1366
+ /** 唯一标识 */
1367
+ id: string;
1368
+ /** 歌曲名称 */
1369
+ title: string;
1370
+ /** 艺术家/歌手 */
1371
+ artist?: string;
1372
+ /** 封面图 URL */
1373
+ coverUrl?: string;
1374
+ /** MMD 资源(模型、动作、音频等) */
1375
+ resources: MMDResources;
1376
+ /** 曲目特定的舞台配置(可选,覆盖全局配置) */
1377
+ stage?: MMDStage;
1378
+ /** 预计时长(秒) */
1379
+ duration?: number;
1380
+ }
1381
+ /** 音乐播放器配置 */
1382
+ interface MMDMusicPlayerConfig {
1383
+ /** 播放列表名称 */
1384
+ name: string;
1385
+ /** 曲目列表 */
1386
+ tracks: MusicTrack[];
1387
+ /** 是否自动播放 */
1388
+ autoPlay?: boolean;
1389
+ /** 默认循环模式 */
1390
+ defaultLoopMode?: 'list' | 'single' | 'shuffle';
1391
+ }
1392
+ /** 音乐播放器组件属性 */
1393
+ interface MMDMusicPlayerProps {
1394
+ /** 播放配置 */
1395
+ config: MMDMusicPlayerConfig;
1396
+ /** 舞台配置 */
1397
+ stage?: MMDStage;
1398
+ /** 移动端优化配置 */
1399
+ mobileOptimization?: MobileOptimization;
1400
+ /** 初始曲目索引 */
1401
+ initialTrackIndex?: number;
1402
+ /**
1403
+ * 固定资源配置
1404
+ * 如果提供,所有曲目将使用这些指定的模型和动作,仅切换音频
1405
+ */
1406
+ fixedResources?: {
1407
+ modelPath: string;
1408
+ motionPath?: string;
1409
+ stageModelPath?: string | string[];
1410
+ cameraPath?: string;
1411
+ };
1412
+ /** 是否开启 Miku 搜索模式 */
1413
+ mikuMode?: boolean;
1414
+ /** 事件回调 */
1415
+ onTrackChange?: (track: MusicTrack, index: number) => void;
1416
+ onPlayPause?: (isPlaying: boolean) => void;
1417
+ onProgress?: (currentTime: number, duration: number) => void;
1418
+ onError?: (error: Error) => void;
1419
+ /** 样式 */
1420
+ className?: string;
1421
+ style?: React.CSSProperties;
1422
+ }
1423
+ /** 音乐播放器 Ref 接口 */
1424
+ interface MMDMusicPlayerRef {
1425
+ /** 播放 */
1426
+ play: () => void;
1427
+ /** 暂停 */
1428
+ pause: () => void;
1429
+ /** 跳转到下一曲 */
1430
+ next: () => void;
1431
+ /** 跳转到上一曲 */
1432
+ previous: () => void;
1433
+ /** 跳转到指定曲目 */
1434
+ goToTrack: (index: number) => void;
1435
+ /** 设置循环模式 */
1436
+ setLoopMode: (mode: 'list' | 'single' | 'shuffle') => void;
1437
+ /** 获取当前状态 */
1438
+ getState: () => {
1439
+ currentIndex: number;
1440
+ isPlaying: boolean;
1441
+ currentTime: number;
1442
+ duration: number;
1443
+ loopMode: 'list' | 'single' | 'shuffle';
1444
+ };
1445
+ }
1446
+
1447
+ /**
1448
+ * MMDMusicPlayer - MMD 音乐播放器组件 (Study with Miku 风格)
1449
+ *
1450
+ * 核心功能:
1451
+ * - 多曲目无缝切换
1452
+ * - 完整的媒体控制 (播放/暂停/进度/音量)
1453
+ * - 沉浸式 3D 舞台
1454
+ * - 自动清理内存与物理引擎
1455
+ */
1456
+ declare const MMDMusicPlayer: React__default.ForwardRefExoticComponent<MMDMusicPlayerProps & React__default.RefAttributes<MMDMusicPlayerRef>>;
1457
+
1458
+ interface MusicControlsProps {
1459
+ isPlaying: boolean;
1460
+ currentTime: number;
1461
+ duration: number;
1462
+ loopMode: 'list' | 'single' | 'shuffle';
1463
+ isCameraManual?: boolean;
1464
+ onPlayPause: () => void;
1465
+ onNext: () => void;
1466
+ onPrevious: () => void;
1467
+ onSeek: (time: number) => void;
1468
+ onToggleLoop: () => void;
1469
+ onTogglePlaylist: () => void;
1470
+ onResetCamera?: () => void;
1471
+ className?: string;
1472
+ }
1473
+ declare const MusicControls: React__default.FC<MusicControlsProps>;
1474
+
1475
+ interface PlaylistPanelProps {
1476
+ tracks: MusicTrack[];
1477
+ currentIndex: number;
1478
+ isOpen: boolean;
1479
+ onClose: () => void;
1480
+ onSelectTrack: (index: number) => void;
1481
+ className?: string;
1482
+ mikuMode?: boolean;
1483
+ onSearch?: (keyword: string) => void;
1484
+ isSearching?: boolean;
1485
+ }
1486
+ declare const PlaylistPanel: React__default.FC<PlaylistPanelProps>;
1487
+
1488
+ interface TrackInfoProps {
1489
+ track: MusicTrack;
1490
+ className?: string;
1491
+ }
1492
+ declare const TrackInfo: React__default.FC<TrackInfoProps>;
1493
+
1494
+ interface ARMarkerConfig {
1495
+ type?: 'pattern' | 'barcode' | 'nft' | 'unknown';
1496
+ patternUrl?: string;
1497
+ descriptorsUrl?: string;
1498
+ barcodeValue?: number;
1499
+ changeMatrixMode?: 'modelViewMatrix' | 'cameraTransformMatrix';
1500
+ }
1501
+
1502
+ /**
1503
+ * AR 模式枚举
1504
+ */
1505
+ declare enum ARMode {
1506
+ /**
1507
+ * 叠加模式 - 模型固定在屏幕上,跟随屏幕移动
1508
+ * 特点:简单易用,不需要陀螺仪权限
1509
+ */
1510
+ Overlay = "overlay",
1511
+ /**
1512
+ * 世界固定模式 - 真正的 AR 体验
1513
+ * 特点:模型固定在世界空间,移动设备时模型保持原位
1514
+ * 需要:设备陀螺仪/加速度计权限
1515
+ */
1516
+ WorldFixed = "world-fixed"
1517
+ }
1518
+ /** 预设模型配置 */
1519
+ interface ModelPreset {
1520
+ /** 预设ID */
1521
+ id: string;
1522
+ /** 显示名称 */
1523
+ name: string;
1524
+ /** 缩略图URL */
1525
+ thumbnail?: string;
1526
+ /** 模型路径 (.pmx) */
1527
+ modelPath: string;
1528
+ }
1529
+ /** 预设动作配置 */
1530
+ interface MotionPreset {
1531
+ /** 预设ID */
1532
+ id: string;
1533
+ /** 显示名称 */
1534
+ name: string;
1535
+ /** 动作路径 (.vmd) */
1536
+ motionPath: string;
1537
+ }
1538
+ /** 预设音乐配置 */
1539
+ interface AudioPreset {
1540
+ /** 预设ID */
1541
+ id: string;
1542
+ /** 显示名称 */
1543
+ name: string;
1544
+ /** 音乐路径 */
1545
+ audioPath: string;
1546
+ }
1547
+ interface MMDARPlayerProps {
1548
+ /** 舞台配置 */
1549
+ stage?: MMDStage;
1550
+ /** 移动端优化配置 */
1551
+ mobileOptimization?: MobileOptimization;
1552
+ /** 摄像头配置 */
1553
+ cameraConfig?: {
1554
+ /** 偏好使用的摄像头 ('user' 为前置, 'environment' 为后置) */
1555
+ facingMode?: 'user' | 'environment';
1556
+ /** 视频分辨率 */
1557
+ width?: number | {
1558
+ min?: number;
1559
+ ideal?: number;
1560
+ max?: number;
1561
+ };
1562
+ height?: number | {
1563
+ min?: number;
1564
+ ideal?: number;
1565
+ max?: number;
1566
+ };
1567
+ };
1568
+ /** AR.js 相机参数文件 URL */
1569
+ cameraParametersUrl?: string;
1570
+ /** Marker 配置 */
1571
+ markerConfig?: ARMarkerConfig;
1572
+ /**
1573
+ * Marker 放置模式
1574
+ * - manual: 识别到 marker 后仍需点击按钮手动放置(默认)
1575
+ * - follow-marker: 识别到 marker 自动显示并跟随 marker
1576
+ */
1577
+ markerPlacementMode?: 'manual' | 'follow-marker';
1578
+ /** 是否开启镜像显示 (通常前置摄像头需要开启) */
1579
+ mirrored?: boolean;
1580
+ /** 是否显示设置按钮 */
1581
+ showSettings?: boolean;
1582
+ /** 预设模型列表 */
1583
+ modelPresets: ModelPreset[];
1584
+ /** 预设动作列表 */
1585
+ motionPresets: MotionPreset[];
1586
+ /** 预设音乐列表 (可选) */
1587
+ audioPresets?: AudioPreset[];
1588
+ /** 默认模型ID */
1589
+ defaultModelId?: string;
1590
+ /** 默认动作ID */
1591
+ defaultMotionId?: string;
1592
+ /** 默认音乐ID (可选) */
1593
+ defaultAudioId?: string;
1594
+ /** 模型缩放 */
1595
+ modelScale?: number | {
1596
+ x: number;
1597
+ y: number;
1598
+ z: number;
1599
+ };
1600
+ /** 模型偏移 */
1601
+ modelOffset?: {
1602
+ x: number;
1603
+ y: number;
1604
+ z: number;
1605
+ };
1606
+ /** 初始时是否显示模型 (false 则需要点击放置) */
1607
+ initialModelVisible?: boolean;
1608
+ /** 放置按钮文案 */
1609
+ placementText?: string;
1610
+ /** AR 模式 (默认 Overlay) */
1611
+ arMode?: ARMode;
1612
+ /** 默认 AR 模式 */
1613
+ defaultARMode?: ARMode;
1614
+ /** 播放控制 */
1615
+ autoPlay?: boolean;
1616
+ loop?: boolean;
1617
+ /** 事件回调 */
1618
+ onCameraReady?: (stream: MediaStream) => void;
1619
+ onCameraError?: (error: Error) => void;
1620
+ onResourcesChange?: (resources: MMDResources) => void;
1621
+ onModelPlaced?: () => void;
1622
+ onARModeChange?: (mode: ARMode) => void;
1623
+ onLoad?: () => void;
1624
+ onError?: (error: Error) => void;
1625
+ /** 样式 */
1626
+ className?: string;
1627
+ style?: CSSProperties;
1628
+ }
1629
+ interface MMDARPlayerRef {
1630
+ /** 开启摄像头 */
1631
+ startCamera: () => Promise<void>;
1632
+ /** 关闭摄像头 */
1633
+ stopCamera: () => void;
1634
+ /** 切换摄像头 */
1635
+ switchCamera: () => Promise<void>;
1636
+ /** 截图 (包含视频背景和模型) */
1637
+ snapshot: () => Promise<string>;
1638
+ /** 放置模型 */
1639
+ placeModel: () => void;
1640
+ /** 移除模型(重置位置) */
1641
+ removeModel: () => void;
1642
+ /** 切换模型 */
1643
+ switchModel: (resources: MMDResources) => void;
1644
+ /** 切换 AR 模式 */
1645
+ setARMode: (mode: ARMode) => void;
1646
+ /** 获取当前 AR 模式 */
1647
+ getARMode: () => ARMode;
1648
+ }
1649
+
1650
+ declare const MMDARPlayer: React$1.ForwardRefExoticComponent<MMDARPlayerProps & React$1.RefAttributes<MMDARPlayerRef>>;
1651
+
1652
+ declare const MMDARApp: React__default.ForwardRefExoticComponent<MMDARPlayerProps & React__default.RefAttributes<MMDARPlayerRef>>;
1653
+
1654
+ /**
1655
+ * FX文件解析器类型定义
1656
+ * 用于解析MME (MikuMikuEffect) 的.fx效果文件
1657
+ */
1658
+ /**
1659
+ * FX文件解析结果
1660
+ */
1661
+ interface FXEffect {
1662
+ /** 文件名 */
1663
+ fileName: string;
1664
+ /** 原始内容 */
1665
+ rawContent: string;
1666
+ /** 宏定义 */
1667
+ defines: FXDefine[];
1668
+ /** 参数声明 */
1669
+ parameters: FXParameter[];
1670
+ /** 静态变量 */
1671
+ staticVariables: FXStaticVariable[];
1672
+ /** 纹理引用 */
1673
+ textures: FXTexture[];
1674
+ /** 控制器引用 */
1675
+ controllers: FXController[];
1676
+ /** 包含文件 */
1677
+ includes: string[];
1678
+ /** Technique定义 */
1679
+ techniques: FXTechnique[];
1680
+ /** 着色器函数 */
1681
+ shaderFunctions: FXShaderFunction[];
1682
+ /** 注释块 */
1683
+ comments: FXComment[];
1684
+ /** 转换后的GLSL shaders(可选) */
1685
+ glslShaders?: GLSLShaders;
1686
+ }
1687
+ /**
1688
+ * 宏定义
1689
+ */
1690
+ interface FXDefine {
1691
+ /** 宏名称 */
1692
+ name: string;
1693
+ /** 宏值 */
1694
+ value?: string;
1695
+ /** 是否被注释掉 */
1696
+ isCommented: boolean;
1697
+ /** 行号 */
1698
+ lineNumber: number;
1699
+ /** 注释说明 */
1700
+ comment?: string;
1701
+ }
1702
+ /**
1703
+ * 参数声明
1704
+ */
1705
+ interface FXParameter {
1706
+ /** 参数类型 (float, float2, float3, float4, texture, etc.) */
1707
+ type: string;
1708
+ /** 参数名称 */
1709
+ name: string;
1710
+ /** 语义 (POSITION, TEXCOORD, DIFFUSE, etc.) */
1711
+ semantic?: string;
1712
+ /** 默认值 */
1713
+ defaultValue?: string;
1714
+ /** 注解 (annotations) */
1715
+ annotations?: Record<string, any>;
1716
+ /** 行号 */
1717
+ lineNumber: number;
1718
+ /** 注释说明 */
1719
+ comment?: string;
1720
+ }
1721
+ /**
1722
+ * 静态变量
1723
+ */
1724
+ interface FXStaticVariable {
1725
+ /** 变量类型 */
1726
+ type: string;
1727
+ /** 变量名称 */
1728
+ name: string;
1729
+ /** 初始化表达式 */
1730
+ expression: string;
1731
+ /** 行号 */
1732
+ lineNumber: number;
1733
+ }
1734
+ /**
1735
+ * 纹理引用
1736
+ */
1737
+ interface FXTexture {
1738
+ /** 纹理名称 */
1739
+ name: string;
1740
+ /** 纹理路径 */
1741
+ path: string;
1742
+ /** 宽度 */
1743
+ width?: number;
1744
+ /** 高度 */
1745
+ height?: number;
1746
+ /** 纹理用途 (diffuse, normal, shadow, etc.) */
1747
+ purpose?: string;
1748
+ }
1749
+ /**
1750
+ * 控制器引用
1751
+ */
1752
+ interface FXController {
1753
+ /** 控制器名称 */
1754
+ name: string;
1755
+ /** 控制器对象 */
1756
+ objectName: string;
1757
+ /** 控制项 */
1758
+ itemName: string;
1759
+ /** 绑定到的参数 */
1760
+ boundParameter: string;
1761
+ }
1762
+ /**
1763
+ * Technique定义
1764
+ */
1765
+ interface FXTechnique {
1766
+ /** Technique名称 */
1767
+ name: string;
1768
+ /** Pass列表 */
1769
+ passes: FXPass[];
1770
+ /** 行号 */
1771
+ lineNumber: number;
1772
+ }
1773
+ /**
1774
+ * Pass定义
1775
+ */
1776
+ interface FXPass {
1777
+ /** Pass名称 */
1778
+ name?: string;
1779
+ /** 顶点着色器 */
1780
+ vertexShader?: {
1781
+ profile: string;
1782
+ function: string;
1783
+ };
1784
+ /** 像素着色器 */
1785
+ pixelShader?: {
1786
+ profile: string;
1787
+ function: string;
1788
+ };
1789
+ /** 渲染状态 */
1790
+ renderStates: Record<string, any>;
1791
+ }
1792
+ /**
1793
+ * 着色器函数
1794
+ */
1795
+ interface FXShaderFunction {
1796
+ /** 函数名 */
1797
+ name: string;
1798
+ /** 返回类型 */
1799
+ returnType: string;
1800
+ /** 参数列表 */
1801
+ parameters: string;
1802
+ /** 函数体 */
1803
+ body: string;
1804
+ /** 输出语义 */
1805
+ outputSemantic?: string;
1806
+ /** 行号 */
1807
+ lineNumber: number;
1808
+ }
1809
+ /**
1810
+ * 注释块
1811
+ */
1812
+ interface FXComment {
1813
+ /** 注释内容 */
1814
+ content: string;
1815
+ /** 注释类型 (line: 单行注释 //, block: 块注释) */
1816
+ type: 'line' | 'block';
1817
+ /** 行号 */
1818
+ lineNumber: number;
1819
+ }
1820
+ /**
1821
+ * 转换后的GLSL shaders
1822
+ */
1823
+ interface GLSLShaders {
1824
+ /** 顶点着色器 */
1825
+ vertexShader?: GLSLShader;
1826
+ /** 片段着色器 */
1827
+ fragmentShader?: GLSLShader;
1828
+ /** 转换警告 */
1829
+ warnings: string[];
1830
+ }
1831
+ /**
1832
+ * GLSL shader信息
1833
+ */
1834
+ interface GLSLShader {
1835
+ /** 转换后的GLSL代码 */
1836
+ code: string;
1837
+ /** Uniforms */
1838
+ uniforms: Map<string, {
1839
+ type: string;
1840
+ glslType: string;
1841
+ semantic?: string;
1842
+ }>;
1843
+ /** Attributes(仅顶点着色器) */
1844
+ attributes: Map<string, {
1845
+ type: string;
1846
+ glslType: string;
1847
+ semantic: string;
1848
+ }>;
1849
+ /** Varyings */
1850
+ varyings: Map<string, {
1851
+ type: string;
1852
+ glslType: string;
1853
+ }>;
1854
+ }
1855
+ /**
1856
+ * FX解析配置
1857
+ */
1858
+ interface FXParserOptions {
1859
+ /** 是否保留注释 */
1860
+ keepComments?: boolean;
1861
+ /** 是否解析Technique */
1862
+ parseTechniques?: boolean;
1863
+ /** 是否解析着色器函数 */
1864
+ parseShaderFunctions?: boolean;
1865
+ /** 是否解析纹理引用 */
1866
+ parseTextures?: boolean;
1867
+ /** 是否解析控制器引用 */
1868
+ parseControllers?: boolean;
1869
+ /** 是否转换HLSL到GLSL */
1870
+ convertToGLSL?: boolean;
1871
+ /** 顶点着色器函数名(用于GLSL转换) */
1872
+ vertexShaderFunction?: string;
1873
+ /** 片段着色器函数名(用于GLSL转换) */
1874
+ fragmentShaderFunction?: string;
1875
+ }
1876
+ /**
1877
+ * FX文件摘要信息(用于快速预览)
1878
+ */
1879
+ interface FXSummary {
1880
+ fileName: string;
1881
+ defineCount: number;
1882
+ parameterCount: number;
1883
+ textureCount: number;
1884
+ techniqueCount: number;
1885
+ hasLocalShadow: boolean;
1886
+ hasExcellentShadow: boolean;
1887
+ hasHgShadow: boolean;
1888
+ enabledDefines: string[];
1889
+ disabledDefines: string[];
1890
+ }
1891
+
1892
+ /**
1893
+ * FX文件解析器
1894
+ * 用于解析MME (MikuMikuEffect) 的.fx效果文件
1895
+ */
1896
+
1897
+ declare class FXParser {
1898
+ private options;
1899
+ private hlslConverter;
1900
+ constructor(options?: FXParserOptions);
1901
+ /**
1902
+ * 从URL加载并解析FX文件
1903
+ */
1904
+ loadAndParse(url: string): Promise<FXEffect>;
1905
+ /**
1906
+ * 解析FX文件内容
1907
+ */
1908
+ parse(content: string, fileName?: string): FXEffect;
1909
+ /**
1910
+ * 转换shader到GLSL
1911
+ */
1912
+ private convertShadersToGLSL;
1913
+ /**
1914
+ * 解析宏定义 (#define)
1915
+ */
1916
+ private parseDefines;
1917
+ /**
1918
+ * 解析参数声明
1919
+ */
1920
+ private parseParameters;
1921
+ /**
1922
+ * 解析注解 (annotations)
1923
+ */
1924
+ private parseAnnotations;
1925
+ /**
1926
+ * 解析静态变量
1927
+ */
1928
+ private parseStaticVariables;
1929
+ /**
1930
+ * 解析纹理引用
1931
+ */
1932
+ private parseTextures;
1933
+ /**
1934
+ * 解析控制器引用 (CONTROLOBJECT)
1935
+ */
1936
+ private parseControllers;
1937
+ /**
1938
+ * 解析include指令
1939
+ */
1940
+ private parseIncludes;
1941
+ /**
1942
+ * 解析Technique定义
1943
+ */
1944
+ private parseTechniques;
1945
+ /**
1946
+ * 解析Pass定义
1947
+ */
1948
+ private parsePasses;
1949
+ /**
1950
+ * 解析着色器函数
1951
+ */
1952
+ private parseShaderFunctions;
1953
+ /**
1954
+ * 解析注释
1955
+ */
1956
+ private parseComments;
1957
+ /**
1958
+ * 生成FX文件摘要
1959
+ */
1960
+ generateSummary(effect: FXEffect): FXSummary;
1961
+ /**
1962
+ * 提取特定着色器函数的代码
1963
+ */
1964
+ extractShaderFunction(effect: FXEffect, functionName: string): string | null;
1965
+ /**
1966
+ * 获取所有启用的功能标志
1967
+ */
1968
+ getEnabledFeatures(effect: FXEffect): string[];
1969
+ /**
1970
+ * 获取配置参数
1971
+ */
1972
+ getConfigParameters(effect: FXEffect): FXParameter[];
1973
+ }
1974
+
1975
+ /**
1976
+ * FX到Three.js适配器
1977
+ * 将解析的FX文件参数应用到Three.js渲染中
1978
+ */
1979
+
1980
+ /**
1981
+ * Three.js材质配置
1982
+ */
1983
+ interface ThreeMaterialConfig {
1984
+ /** 基础颜色 */
1985
+ color?: THREE.Color;
1986
+ /** 发光颜色 */
1987
+ emissive?: THREE.Color;
1988
+ /** 高光颜色 */
1989
+ specular?: THREE.Color;
1990
+ /** 光泽度 */
1991
+ shininess?: number;
1992
+ /** 透明度 */
1993
+ opacity?: number;
1994
+ /** 是否透明 */
1995
+ transparent?: boolean;
1996
+ /** 纹理贴图 */
1997
+ map?: THREE.Texture | null;
1998
+ /** 法线贴图 */
1999
+ normalMap?: THREE.Texture | null;
2000
+ /** 环境贴图 */
2001
+ envMap?: THREE.Texture | null;
2002
+ /** 自定义uniforms */
2003
+ uniforms?: Record<string, {
2004
+ value: any;
2005
+ }>;
2006
+ }
2007
+ /**
2008
+ * Three.js渲染配置
2009
+ */
2010
+ interface ThreeRenderConfig {
2011
+ /** 是否启用阴影 */
2012
+ enableShadow?: boolean;
2013
+ /** 阴影贴图尺寸 */
2014
+ shadowMapSize?: number;
2015
+ /** 环境光强度 */
2016
+ ambientLightIntensity?: number;
2017
+ /** 方向光强度 */
2018
+ directionalLightIntensity?: number;
2019
+ /** 方向光方向 */
2020
+ lightDirection?: THREE.Vector3;
2021
+ /** 色调映射 */
2022
+ toneMapping?: THREE.ToneMapping;
2023
+ /** 曝光度 */
2024
+ toneMappingExposure?: number;
2025
+ }
2026
+ /**
2027
+ * FX到Three.js适配器
2028
+ */
2029
+ declare class FXToThreeAdapter {
2030
+ private effect;
2031
+ private textureLoader;
2032
+ private loadedTextures;
2033
+ private basePath;
2034
+ constructor(effect: FXEffect, basePath?: string);
2035
+ /**
2036
+ * 创建ShaderMaterial(如果有GLSL shader)
2037
+ */
2038
+ createShaderMaterial(): THREE.ShaderMaterial | null;
2039
+ /**
2040
+ * 获取uniform的默认值
2041
+ */
2042
+ private getDefaultUniformValue;
2043
+ /**
2044
+ * 提取材质配置
2045
+ */
2046
+ extractMaterialConfig(): ThreeMaterialConfig;
2047
+ /**
2048
+ * 提取渲染配置
2049
+ */
2050
+ extractRenderConfig(): ThreeRenderConfig;
2051
+ /**
2052
+ * 加载纹理
2053
+ */
2054
+ loadTextures(): Promise<Map<string, THREE.Texture>>;
2055
+ /**
2056
+ * 加载单个纹理
2057
+ */
2058
+ private loadTexture;
2059
+ /**
2060
+ * 创建Three.js材质
2061
+ */
2062
+ createMaterial(): THREE.MeshPhongMaterial;
2063
+ /**
2064
+ * 配置Three.js场景
2065
+ * 仅应用渲染器配置,不添加光源
2066
+ */
2067
+ configureScene(scene: THREE.Scene, renderer: THREE.WebGLRenderer): void;
2068
+ /**
2069
+ * 获取指定用途的纹理
2070
+ */
2071
+ private getTextureByPurpose;
2072
+ /**
2073
+ * 解析float3值
2074
+ */
2075
+ private parseFloat3;
2076
+ /**
2077
+ * 解析float值
2078
+ */
2079
+ private parseFloat;
2080
+ /**
2081
+ * 解析参数值
2082
+ */
2083
+ private parseParameterValue;
2084
+ /**
2085
+ * 获取所有自定义uniforms
2086
+ */
2087
+ getUniforms(): Record<string, {
2088
+ value: any;
2089
+ }>;
2090
+ /**
2091
+ * 生成配置摘要
2092
+ */
2093
+ getSummary(): {
2094
+ materialParams: string[];
2095
+ textures: string[];
2096
+ renderFeatures: string[];
2097
+ };
2098
+ }
2099
+
2100
+ /**
2101
+ * HLSL到GLSL转换器
2102
+ * 将MME的HLSL shader代码转换为Three.js可用的GLSL代码
2103
+ */
2104
+ interface ConversionResult {
2105
+ /** 转换后的GLSL代码 */
2106
+ glslCode: string;
2107
+ /** 检测到的uniforms */
2108
+ uniforms: Map<string, UniformInfo>;
2109
+ /** 检测到的attributes */
2110
+ attributes: Map<string, AttributeInfo>;
2111
+ /** 检测到的varyings */
2112
+ varyings: Map<string, VaryingInfo>;
2113
+ /** 转换警告 */
2114
+ warnings: string[];
2115
+ }
2116
+ interface UniformInfo {
2117
+ type: string;
2118
+ glslType: string;
2119
+ semantic?: string;
2120
+ }
2121
+ interface AttributeInfo {
2122
+ type: string;
2123
+ glslType: string;
2124
+ semantic: string;
2125
+ }
2126
+ interface VaryingInfo {
2127
+ type: string;
2128
+ glslType: string;
2129
+ }
2130
+ declare class HLSLToGLSLConverter {
2131
+ private warnings;
2132
+ private uniforms;
2133
+ private attributes;
2134
+ private varyings;
2135
+ /**
2136
+ * HLSL类型到GLSL类型的映射
2137
+ */
2138
+ private typeMap;
2139
+ /**
2140
+ * HLSL函数到GLSL函数的映射
2141
+ */
2142
+ private functionMap;
2143
+ /**
2144
+ * HLSL语义到GLSL的映射
2145
+ */
2146
+ private semanticMap;
2147
+ /**
2148
+ * 转换HLSL shader代码为GLSL
2149
+ */
2150
+ convert(hlslCode: string, shaderType: 'vertex' | 'fragment'): ConversionResult;
2151
+ /**
2152
+ * 预处理代码
2153
+ */
2154
+ private preprocessCode;
2155
+ /**
2156
+ * 转换类型声明
2157
+ */
2158
+ private convertTypes;
2159
+ /**
2160
+ * 转换函数调用
2161
+ */
2162
+ private convertFunctions;
2163
+ /**
2164
+ * 转换mul()函数
2165
+ * HLSL: mul(matrix, vector) 或 mul(vector, matrix)
2166
+ * GLSL: matrix * vector 或 vector * matrix
2167
+ */
2168
+ private convertMulFunction;
2169
+ /**
2170
+ * 转换语义
2171
+ */
2172
+ private convertSemantics;
2173
+ /**
2174
+ * 转换输入/输出结构
2175
+ */
2176
+ private convertIOStructs;
2177
+ /**
2178
+ * 解析结构体成员
2179
+ */
2180
+ private parseStructMembers;
2181
+ /**
2182
+ * 添加GLSL头部和辅助函数
2183
+ */
2184
+ private addGLSLHeader;
2185
+ /**
2186
+ * 修复语法差异
2187
+ */
2188
+ private fixSyntaxDifferences;
2189
+ /**
2190
+ * 从FX效果中提取并转换shader
2191
+ */
2192
+ convertFromFXEffect(effect: any, vertexShaderName: string, fragmentShaderName: string): {
2193
+ vertexShader: ConversionResult;
2194
+ fragmentShader: ConversionResult;
2195
+ } | null;
2196
+ }
2197
+
2198
+ /**
2199
+ * 多FX文件适配器
2200
+ * 支持同时应用多个FX效果文件
2201
+ */
2202
+
2203
+ /**
2204
+ * 效果文件类型
2205
+ */
2206
+ type EffectFileType = 'fx' | 'x' | 'auto';
2207
+ /**
2208
+ * FX文件配置
2209
+ */
2210
+ interface FXFileConfig {
2211
+ /** FX/X文件路径 */
2212
+ path: string;
2213
+ /** 纹理基础路径 */
2214
+ texturePath?: string;
2215
+ /** 文件类型 */
2216
+ type?: EffectFileType;
2217
+ /**
2218
+ * 优先级 (数字越大优先级越高,默认0)
2219
+ * - .x文件建议设置为低优先级(如-10),作为基础效果
2220
+ * - .fx文件建议设置为高优先级(如10),作为细节效果
2221
+ */
2222
+ priority?: number;
2223
+ /**
2224
+ * 应用目标
2225
+ * - 'all': 应用到所有对象
2226
+ * - 'model': 仅应用到模型
2227
+ * - 'stage': 仅应用到舞台
2228
+ * - 'scene': 仅应用场景配置(光照、阴影等)
2229
+ * - string[]: 应用到指定名称的对象
2230
+ */
2231
+ target?: 'all' | 'model' | 'stage' | 'scene' | string[];
2232
+ /** 是否启用 */
2233
+ enabled?: boolean;
2234
+ /** 描述(用于调试) */
2235
+ description?: string;
2236
+ /** 是否转换为GLSL并使用ShaderMaterial */
2237
+ useShaderMaterial?: boolean;
2238
+ /** 顶点着色器函数名(用于GLSL转换) */
2239
+ vertexShaderFunction?: string;
2240
+ /** 片段着色器函数名(用于GLSL转换) */
2241
+ fragmentShaderFunction?: string;
2242
+ }
2243
+ /**
2244
+ * 多FX合并策略
2245
+ */
2246
+ type FXMergeStrategy = 'override' | 'merge' | 'additive';
2247
+ /**
2248
+ * 多FX适配器配置
2249
+ */
2250
+ interface MultiFXAdapterOptions {
2251
+ /** 合并策略 */
2252
+ mergeStrategy?: FXMergeStrategy;
2253
+ /** 是否自动加载纹理 */
2254
+ autoLoadTextures?: boolean;
2255
+ }
2256
+ /**
2257
+ * 多FX文件适配器
2258
+ * 支持同时加载和应用多个FX效果文件
2259
+ */
2260
+ declare class MultiFXAdapter {
2261
+ private effects;
2262
+ private adapters;
2263
+ private configs;
2264
+ private options;
2265
+ private parser;
2266
+ constructor(options?: MultiFXAdapterOptions);
2267
+ /**
2268
+ * 识别文件类型
2269
+ */
2270
+ private detectFileType;
2271
+ /**
2272
+ * 添加效果文件(支持.fx和.x)
2273
+ */
2274
+ addFX(config: FXFileConfig): Promise<void>;
2275
+ /**
2276
+ * 批量添加FX文件
2277
+ */
2278
+ addMultipleFX(configs: FXFileConfig[]): Promise<void>;
2279
+ /**
2280
+ * 移除FX文件
2281
+ */
2282
+ removeFX(path: string): void;
2283
+ /**
2284
+ * 清空所有FX
2285
+ */
2286
+ clear(): void;
2287
+ /**
2288
+ * 合并材质配置
2289
+ */
2290
+ extractMergedMaterialConfig(target?: string): ThreeMaterialConfig;
2291
+ /**
2292
+ * 合并渲染配置
2293
+ */
2294
+ extractMergedRenderConfig(): ThreeRenderConfig;
2295
+ /**
2296
+ * 应用到Three.js材质
2297
+ * 支持MeshPhongMaterial和MeshToonMaterial(MMD常用)
2298
+ */
2299
+ applyToMaterial(material: THREE.Material, target?: string): void;
2300
+ /**
2301
+ * 创建ShaderMaterial(如果配置了useShaderMaterial)
2302
+ * 返回第一个匹配target的ShaderMaterial,如果没有则返回null
2303
+ */
2304
+ createShaderMaterial(target?: string): THREE.ShaderMaterial | null;
2305
+ /**
2306
+ * 应用到Three.js场景
2307
+ */
2308
+ applyToScene(scene: THREE.Scene, renderer: THREE.WebGLRenderer): void;
2309
+ /**
2310
+ * 获取所有已加载的FX效果
2311
+ */
2312
+ getLoadedEffects(): FXEffect[];
2313
+ /**
2314
+ * 获取配置摘要
2315
+ */
2316
+ getSummary(): {
2317
+ totalFX: number;
2318
+ enabledFX: number;
2319
+ xFiles: number;
2320
+ fxFiles: number;
2321
+ configs: Array<{
2322
+ path: string;
2323
+ type: EffectFileType;
2324
+ priority: number;
2325
+ target: string | string[];
2326
+ features: string[];
2327
+ description?: string;
2328
+ }>;
2329
+ };
2330
+ /**
2331
+ * 获取指定类型的配置
2332
+ */
2333
+ getConfigsByType(type: EffectFileType): FXFileConfig[];
2334
+ /**
2335
+ * 获取场景级效果(.x文件)
2336
+ */
2337
+ getSceneEffects(): FXFileConfig[];
2338
+ /**
2339
+ * 获取模型级效果(.fx文件)
2340
+ */
2341
+ getModelEffects(): FXFileConfig[];
2342
+ /**
2343
+ * 获取合并后的Uniforms
2344
+ */
2345
+ getMergedUniforms(target?: string): Record<string, {
2346
+ value: any;
2347
+ }>;
2348
+ /**
2349
+ * 分层应用到场景对象
2350
+ * @param scene Three.js场景
2351
+ * @param renderer Three.js渲染器
2352
+ * @param modelMeshes 模型网格数组(可选,用于精确控制)
2353
+ * @param stageMeshes 舞台网格数组(可选,用于精确控制)
2354
+ */
2355
+ applyLayered(scene: THREE.Scene, renderer: THREE.WebGLRenderer, modelMeshes?: THREE.Object3D[], stageMeshes?: THREE.Object3D[]): void;
2356
+ /**
2357
+ * 打印当前配置(调试用)
2358
+ */
2359
+ printConfig(): void;
2360
+ }
2361
+
2362
+ /**
2363
+ * FX解析器工具函数
2364
+ */
2365
+
2366
+ /**
2367
+ * 将FX效果导出为JSON
2368
+ */
2369
+ declare function exportFXToJSON(effect: FXEffect): string;
2370
+ /**
2371
+ * 将FX效果导出为Markdown文档
2372
+ */
2373
+ declare function exportFXToMarkdown(effect: FXEffect): string;
2374
+ /**
2375
+ * 比较两个FX文件的差异
2376
+ */
2377
+ declare function compareFXEffects(effect1: FXEffect, effect2: FXEffect): {
2378
+ addedDefines: string[];
2379
+ removedDefines: string[];
2380
+ changedDefines: {
2381
+ name: string;
2382
+ oldValue?: string;
2383
+ newValue?: string;
2384
+ }[];
2385
+ addedTextures: string[];
2386
+ removedTextures: string[];
2387
+ addedParameters: string[];
2388
+ removedParameters: string[];
2389
+ };
2390
+ /**
2391
+ * 过滤特定类型的宏定义
2392
+ */
2393
+ declare function filterDefinesByPrefix(defines: FXDefine[], prefix: string): FXDefine[];
2394
+ /**
2395
+ * 获取所有纹理宏定义
2396
+ */
2397
+ declare function getTextureDefines(defines: FXDefine[]): FXDefine[];
2398
+ /**
2399
+ * 获取所有功能标志
2400
+ */
2401
+ declare function getFeatureFlags(defines: FXDefine[]): FXDefine[];
2402
+ /**
2403
+ * 获取所有颜色相关的参数
2404
+ */
2405
+ declare function getColorParameters(parameters: FXParameter[]): FXParameter[];
2406
+ /**
2407
+ * 检查是否包含特定功能
2408
+ */
2409
+ declare function hasFeature(effect: FXEffect, featureName: string): boolean;
2410
+ /**
2411
+ * 获取配置摘要文本
2412
+ */
2413
+ declare function getConfigSummaryText(effect: FXEffect): string;
2414
+ /**
2415
+ * 提取纹理文件路径列表(用于预加载)
2416
+ */
2417
+ declare function extractTexturePaths(effect: FXEffect): string[];
2418
+ /**
2419
+ * 验证FX文件的完整性
2420
+ */
2421
+ declare function validateFXEffect(effect: FXEffect): {
2422
+ isValid: boolean;
2423
+ errors: string[];
2424
+ warnings: string[];
2425
+ };
2426
+
2427
+ /**
2428
+ * FX文件查看器组件
2429
+ * 用于可视化展示FX文件的解析结果
2430
+ */
2431
+
2432
+ interface FXViewerProps {
2433
+ /** FX文件URL或内容 */
2434
+ source: string;
2435
+ /** 是否是文件内容(true)还是URL(false) */
2436
+ isContent?: boolean;
2437
+ /** 文件名 */
2438
+ fileName?: string;
2439
+ /** 解析完成回调 */
2440
+ onParsed?: (effect: FXEffect) => void;
2441
+ /** 错误回调 */
2442
+ onError?: (error: Error) => void;
2443
+ /** 自定义样式 */
2444
+ className?: string;
2445
+ }
2446
+ declare const FXViewer: React__default.FC<FXViewerProps>;
2447
+
2448
+ /**
2449
+ * FX效果Three.js预览组件
2450
+ * 展示如何将FX解析结果应用到Three.js渲染中
2451
+ */
2452
+
2453
+ interface FXThreePreviewProps {
2454
+ /** FX效果 */
2455
+ effect: FXEffect;
2456
+ /** 纹理基础路径 */
2457
+ texturePath?: string;
2458
+ /** 预览对象类型 */
2459
+ objectType?: 'sphere' | 'box' | 'torus' | 'plane';
2460
+ /** 自定义样式 */
2461
+ className?: string;
2462
+ /** 是否显示信息面板 */
2463
+ showInfo?: boolean;
2464
+ }
2465
+ declare const FXThreePreview: React__default.FC<FXThreePreviewProps>;
2466
+
2467
+ export { ARMode, type AudioPreset, type BranchCondition, CheerButton, type CheerButtonProps, CheerParticles, type CheerParticlesProps, type CheerParticlesRef, ChoiceMenu, type ChoiceMenuProps, DialogueBox, type DialogueBoxProps, type DialogueBoxTheme, type DialogueChoice, type DialogueHistoryItem, type DialogueLine, type EffectFileType, type FXComment, type FXController, type FXDefine, type FXEffect, type FXFileConfig, type FXMergeStrategy, type FXParameter, FXParser, type FXParserOptions, type FXPass, type FXShaderFunction, type FXStaticVariable, type FXSummary, type FXTechnique, type FXTexture, FXThreePreview, type FXThreePreviewProps, FXToThreeAdapter, FXViewer, type FXViewerProps, type GLSLShader, type GLSLShaders, HLSLToGLSLConverter, HistoryPanel, LoadingOverlay, type LoadingOverlayProps, LoadingScreen, type LoadingScreenProps, LoopConfirmDialog, MMDARApp, MMDARPlayer, type MMDARPlayerProps, type MMDARPlayerRef, type MMDDiagnosticReport, MMDLightingDebugPanel, type MMDLightingDebugPanelProps, type MMDLightingParams, type MMDLoaderConfig, MMDMusicPlayer, type MMDMusicPlayerConfig, type MMDMusicPlayerProps, type MMDMusicPlayerRef, MMDPlayerBase, MMDPlayerBaseProps, MMDPlayerBaseRef, MMDPlayerEnhanced, MMDPlayerEnhancedDebugInfo, MMDPlayerEnhancedProps, MMDPlaylist, MMDPlaylistDebugInfo, MMDPlaylistNode, MMDPlaylistProps, MMDResources, type MMDSceneRefs, MMDStage, type MMDUploadConfig, MMDUploadPanel, type MMDUploadPanelProps, type MMDUploadResourceType, MMDVisualNovel, type MMDVisualNovelProps, type MMDVisualNovelRef, MMDVisualNovelWithSelector, type MMDVisualNovelWithSelectorProps, type MMDVisualNovelWithSelectorRef, MMD_UPLOAD_CONFIGS, type MaterialTextureMapping, MobileOptimization, type ModelOption, type ModelPreset, type ModelSelectorConfig, ModelSelectorSettings, type ModelSelectorSettingsProps, type MotionPreset, MultiFXAdapter, type MultiFXAdapterOptions, MusicControls, type MusicControlsProps, type MusicTrack, PMXEditor, PMXEditor$1 as PMXEditorCore, type PMXEditorProps, PMXExporter, type PMXHeader, type PMXMaterial, type PMXModelInfo, type PMXParseResult, PMXParser, type PMXTexture, type PMXVertex, PMXViewer, type PMXViewerProps, PlaylistPanel, type PlaylistPanelProps, type ResourceMappingMode, type SphereTextureDiagnostic, StartScreen, type StartScreenProps, type ThreeMaterialConfig, type ThreeRenderConfig, TrackInfo, type TrackInfoProps, type VisualEffect, type VisualNovelNode, type VisualNovelScript, type VisualNovelTransitionState, addDefaultSphereTextures, checkModelSphereDefinition, checkSphereTextures, compareFXEffects, configureMaterialsForMMD, configureRendererForMMD, createMMDLights, diagnoseMaterialsMMD, exportFXToJSON, exportFXToMarkdown, extractTexturePaths, filterDefinesByPrefix, fullSphereDiagnostic, generateAllToonTextures, generateToonTexture, getColorParameters, getConfigSummaryText, getFeatureFlags, getTextureDefines, hasFeature, inspectMaterial, listAllMaterials, loadAmmo, printDiagnosticReport, printModelSphereInfo, printSphereDiagnostic, quickDiagnose, validateFXEffect };