@pretty-chitty/core 1.1.1

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 (779) hide show
  1. package/LICENSE.md +51 -0
  2. package/README.md +152 -0
  3. package/dist/0e0a96423fd742218c61.woff2 +0 -0
  4. package/dist/1e28c9f184923aacc181.woff +0 -0
  5. package/dist/37f3b2ddcbe588b2aaa5.jpg +0 -0
  6. package/dist/3f0fb9058a03e14ad2fa.jpg +0 -0
  7. package/dist/4482e08504d544757971.woff2 +0 -0
  8. package/dist/5212361bfd059a27e2da.woff2 +0 -0
  9. package/dist/699b459f21e39ca4b8df.woff2 +0 -0
  10. package/dist/7e339dfbea59fe54f2e3.png +0 -0
  11. package/dist/a3e6d4ebd8f859f0f1dc.woff +0 -0
  12. package/dist/b8b0d3bc0d26444e4a5a.woff2 +0 -0
  13. package/dist/bce9a6fcc5b3da9a086a.woff +0 -0
  14. package/dist/components/ActionLogDisplay.d.ts +4 -0
  15. package/dist/components/ActionLogDisplay.d.ts.map +1 -0
  16. package/dist/components/ActionLogDisplay.js +144 -0
  17. package/dist/components/ActionLogDisplay.js.map +1 -0
  18. package/dist/components/ActionLogHistory.d.ts +6 -0
  19. package/dist/components/ActionLogHistory.d.ts.map +1 -0
  20. package/dist/components/ActionLogHistory.js +81 -0
  21. package/dist/components/ActionLogHistory.js.map +1 -0
  22. package/dist/components/ActionLogHistoryDisplay.d.ts +2 -0
  23. package/dist/components/ActionLogHistoryDisplay.d.ts.map +1 -0
  24. package/dist/components/ActionLogHistoryDisplay.js +17 -0
  25. package/dist/components/ActionLogHistoryDisplay.js.map +1 -0
  26. package/dist/components/ActionLogSidebar.d.ts +2 -0
  27. package/dist/components/ActionLogSidebar.d.ts.map +1 -0
  28. package/dist/components/ActionLogSidebar.js +9 -0
  29. package/dist/components/ActionLogSidebar.js.map +1 -0
  30. package/dist/components/BottomBar.d.ts +2 -0
  31. package/dist/components/BottomBar.d.ts.map +1 -0
  32. package/dist/components/BottomBar.js +33 -0
  33. package/dist/components/BottomBar.js.map +1 -0
  34. package/dist/components/BottomBarBreak.d.ts +2 -0
  35. package/dist/components/BottomBarBreak.d.ts.map +1 -0
  36. package/dist/components/BottomBarBreak.js +8 -0
  37. package/dist/components/BottomBarBreak.js.map +1 -0
  38. package/dist/components/BottomBarButton.d.ts +16 -0
  39. package/dist/components/BottomBarButton.d.ts.map +1 -0
  40. package/dist/components/BottomBarButton.js +123 -0
  41. package/dist/components/BottomBarButton.js.map +1 -0
  42. package/dist/components/CanvasLibraryViewer.d.ts +8 -0
  43. package/dist/components/CanvasLibraryViewer.d.ts.map +1 -0
  44. package/dist/components/CanvasLibraryViewer.js +29 -0
  45. package/dist/components/CanvasLibraryViewer.js.map +1 -0
  46. package/dist/components/ChitLibraryViewer.d.ts +8 -0
  47. package/dist/components/ChitLibraryViewer.d.ts.map +1 -0
  48. package/dist/components/ChitLibraryViewer.js +101 -0
  49. package/dist/components/ChitLibraryViewer.js.map +1 -0
  50. package/dist/components/ClientTrustMatchViewer.d.ts +11 -0
  51. package/dist/components/ClientTrustMatchViewer.d.ts.map +1 -0
  52. package/dist/components/ClientTrustMatchViewer.js +53 -0
  53. package/dist/components/ClientTrustMatchViewer.js.map +1 -0
  54. package/dist/components/ContextGalleryDisplay.d.ts +4 -0
  55. package/dist/components/ContextGalleryDisplay.d.ts.map +1 -0
  56. package/dist/components/ContextGalleryDisplay.js +49 -0
  57. package/dist/components/ContextGalleryDisplay.js.map +1 -0
  58. package/dist/components/GalleryDisplay.d.ts +2 -0
  59. package/dist/components/GalleryDisplay.d.ts.map +1 -0
  60. package/dist/components/GalleryDisplay.js +42 -0
  61. package/dist/components/GalleryDisplay.js.map +1 -0
  62. package/dist/components/GalleryPlayground.d.ts +14 -0
  63. package/dist/components/GalleryPlayground.d.ts.map +1 -0
  64. package/dist/components/GalleryPlayground.js +36 -0
  65. package/dist/components/GalleryPlayground.js.map +1 -0
  66. package/dist/components/GalleryViewer.d.ts +48 -0
  67. package/dist/components/GalleryViewer.d.ts.map +1 -0
  68. package/dist/components/GalleryViewer.js +567 -0
  69. package/dist/components/GalleryViewer.js.map +1 -0
  70. package/dist/components/GameDesigner.d.ts +5 -0
  71. package/dist/components/GameDesigner.d.ts.map +1 -0
  72. package/dist/components/GameDesigner.js +14 -0
  73. package/dist/components/GameDesigner.js.map +1 -0
  74. package/dist/components/GameDialog.d.ts +7 -0
  75. package/dist/components/GameDialog.d.ts.map +1 -0
  76. package/dist/components/GameDialog.js +24 -0
  77. package/dist/components/GameDialog.js.map +1 -0
  78. package/dist/components/GameModalBackdrop.d.ts +10 -0
  79. package/dist/components/GameModalBackdrop.d.ts.map +1 -0
  80. package/dist/components/GameModalBackdrop.js +33 -0
  81. package/dist/components/GameModalBackdrop.js.map +1 -0
  82. package/dist/components/GameModalDialog.d.ts +11 -0
  83. package/dist/components/GameModalDialog.d.ts.map +1 -0
  84. package/dist/components/GameModalDialog.js +42 -0
  85. package/dist/components/GameModalDialog.js.map +1 -0
  86. package/dist/components/LiveButton.d.ts +4 -0
  87. package/dist/components/LiveButton.d.ts.map +1 -0
  88. package/dist/components/LiveButton.js +17 -0
  89. package/dist/components/LiveButton.js.map +1 -0
  90. package/dist/components/MatchEndDisplay.d.ts +2 -0
  91. package/dist/components/MatchEndDisplay.d.ts.map +1 -0
  92. package/dist/components/MatchEndDisplay.js +67 -0
  93. package/dist/components/MatchEndDisplay.js.map +1 -0
  94. package/dist/components/MatchViewer.d.ts +5 -0
  95. package/dist/components/MatchViewer.d.ts.map +1 -0
  96. package/dist/components/MatchViewer.js +59 -0
  97. package/dist/components/MatchViewer.js.map +1 -0
  98. package/dist/components/ObjectWithPropsEditor.d.ts +5 -0
  99. package/dist/components/ObjectWithPropsEditor.d.ts.map +1 -0
  100. package/dist/components/ObjectWithPropsEditor.js +88 -0
  101. package/dist/components/ObjectWithPropsEditor.js.map +1 -0
  102. package/dist/components/Panel/MultiPanel.d.ts +13 -0
  103. package/dist/components/Panel/MultiPanel.d.ts.map +1 -0
  104. package/dist/components/Panel/MultiPanel.js +196 -0
  105. package/dist/components/Panel/MultiPanel.js.map +1 -0
  106. package/dist/components/Panel/PanelContents.d.ts +27 -0
  107. package/dist/components/Panel/PanelContents.d.ts.map +1 -0
  108. package/dist/components/Panel/PanelContents.js +202 -0
  109. package/dist/components/Panel/PanelContents.js.map +1 -0
  110. package/dist/components/Panel/PanelTabStack.d.ts +9 -0
  111. package/dist/components/Panel/PanelTabStack.d.ts.map +1 -0
  112. package/dist/components/Panel/PanelTabStack.js +56 -0
  113. package/dist/components/Panel/PanelTabStack.js.map +1 -0
  114. package/dist/components/Panel/SinglePanel.d.ts +13 -0
  115. package/dist/components/Panel/SinglePanel.d.ts.map +1 -0
  116. package/dist/components/Panel/SinglePanel.js +44 -0
  117. package/dist/components/Panel/SinglePanel.js.map +1 -0
  118. package/dist/components/Panel/ViewerWrapper.d.ts +17 -0
  119. package/dist/components/Panel/ViewerWrapper.d.ts.map +1 -0
  120. package/dist/components/Panel/ViewerWrapper.js +70 -0
  121. package/dist/components/Panel/ViewerWrapper.js.map +1 -0
  122. package/dist/components/Panel/ViewerZoomControls.d.ts +8 -0
  123. package/dist/components/Panel/ViewerZoomControls.d.ts.map +1 -0
  124. package/dist/components/Panel/ViewerZoomControls.js +152 -0
  125. package/dist/components/Panel/ViewerZoomControls.js.map +1 -0
  126. package/dist/components/Panel/util.d.ts +3 -0
  127. package/dist/components/Panel/util.d.ts.map +1 -0
  128. package/dist/components/Panel/util.js +5 -0
  129. package/dist/components/Panel/util.js.map +1 -0
  130. package/dist/components/PanelSpark.d.ts +7 -0
  131. package/dist/components/PanelSpark.d.ts.map +1 -0
  132. package/dist/components/PanelSpark.js +84 -0
  133. package/dist/components/PanelSpark.js.map +1 -0
  134. package/dist/components/PersistentCanvas.d.ts +12 -0
  135. package/dist/components/PersistentCanvas.d.ts.map +1 -0
  136. package/dist/components/PersistentCanvas.js +44 -0
  137. package/dist/components/PersistentCanvas.js.map +1 -0
  138. package/dist/components/PlayerImage.d.ts +9 -0
  139. package/dist/components/PlayerImage.d.ts.map +1 -0
  140. package/dist/components/PlayerImage.js +21 -0
  141. package/dist/components/PlayerImage.js.map +1 -0
  142. package/dist/components/Playground.d.ts +9 -0
  143. package/dist/components/Playground.d.ts.map +1 -0
  144. package/dist/components/Playground.js +129 -0
  145. package/dist/components/Playground.js.map +1 -0
  146. package/dist/components/PromptControls.d.ts +4 -0
  147. package/dist/components/PromptControls.d.ts.map +1 -0
  148. package/dist/components/PromptControls.js +87 -0
  149. package/dist/components/PromptControls.js.map +1 -0
  150. package/dist/components/SelectableItemAndStage.d.ts +8 -0
  151. package/dist/components/SelectableItemAndStage.d.ts.map +1 -0
  152. package/dist/components/SelectableItemAndStage.js +16 -0
  153. package/dist/components/SelectableItemAndStage.js.map +1 -0
  154. package/dist/components/SettingsDisplay.d.ts +2 -0
  155. package/dist/components/SettingsDisplay.d.ts.map +1 -0
  156. package/dist/components/SettingsDisplay.js +62 -0
  157. package/dist/components/SettingsDisplay.js.map +1 -0
  158. package/dist/components/SparkLineChart.d.ts +21 -0
  159. package/dist/components/SparkLineChart.d.ts.map +1 -0
  160. package/dist/components/SparkLineChart.js +143 -0
  161. package/dist/components/SparkLineChart.js.map +1 -0
  162. package/dist/components/StageAndEditor.d.ts +5 -0
  163. package/dist/components/StageAndEditor.d.ts.map +1 -0
  164. package/dist/components/StageAndEditor.js +12 -0
  165. package/dist/components/StageAndEditor.js.map +1 -0
  166. package/dist/components/TimeControlBar.d.ts +5 -0
  167. package/dist/components/TimeControlBar.d.ts.map +1 -0
  168. package/dist/components/TimeControlBar.js +38 -0
  169. package/dist/components/TimeControlBar.js.map +1 -0
  170. package/dist/components/TokenizedMessage.d.ts +13 -0
  171. package/dist/components/TokenizedMessage.d.ts.map +1 -0
  172. package/dist/components/TokenizedMessage.js +102 -0
  173. package/dist/components/TokenizedMessage.js.map +1 -0
  174. package/dist/components/TopBar.d.ts +4 -0
  175. package/dist/components/TopBar.d.ts.map +1 -0
  176. package/dist/components/TopBar.js +47 -0
  177. package/dist/components/TopBar.js.map +1 -0
  178. package/dist/components/TopBarDropdown.d.ts +6 -0
  179. package/dist/components/TopBarDropdown.d.ts.map +1 -0
  180. package/dist/components/TopBarDropdown.js +69 -0
  181. package/dist/components/TopBarDropdown.js.map +1 -0
  182. package/dist/components/TopBarPlayers.d.ts +2 -0
  183. package/dist/components/TopBarPlayers.d.ts.map +1 -0
  184. package/dist/components/TopBarPlayers.js +70 -0
  185. package/dist/components/TopBarPlayers.js.map +1 -0
  186. package/dist/components/UpdatingCanvasImage.d.ts +7 -0
  187. package/dist/components/UpdatingCanvasImage.d.ts.map +1 -0
  188. package/dist/components/UpdatingCanvasImage.js +22 -0
  189. package/dist/components/UpdatingCanvasImage.js.map +1 -0
  190. package/dist/components/UpdatingCanvasViewer.d.ts +7 -0
  191. package/dist/components/UpdatingCanvasViewer.d.ts.map +1 -0
  192. package/dist/components/UpdatingCanvasViewer.js +50 -0
  193. package/dist/components/UpdatingCanvasViewer.js.map +1 -0
  194. package/dist/components/Viewer.d.ts +16 -0
  195. package/dist/components/Viewer.d.ts.map +1 -0
  196. package/dist/components/Viewer.js +289 -0
  197. package/dist/components/Viewer.js.map +1 -0
  198. package/dist/components/index.d.ts +1 -0
  199. package/dist/components/index.d.ts.map +1 -0
  200. package/dist/components/index.js +2 -0
  201. package/dist/components/index.js.map +1 -0
  202. package/dist/e085acb5e467d8e85d21.woff +0 -0
  203. package/dist/e65dff62134b8879e792.woff +0 -0
  204. package/dist/game/Chit.d.ts +64 -0
  205. package/dist/game/Chit.d.ts.map +1 -0
  206. package/dist/game/Chit.js +524 -0
  207. package/dist/game/Chit.js.map +1 -0
  208. package/dist/game/ClientTimeState.d.ts +16 -0
  209. package/dist/game/ClientTimeState.d.ts.map +1 -0
  210. package/dist/game/ClientTimeState.js +38 -0
  211. package/dist/game/ClientTimeState.js.map +1 -0
  212. package/dist/game/ClockDetails.d.ts +9 -0
  213. package/dist/game/ClockDetails.d.ts.map +1 -0
  214. package/dist/game/ClockDetails.js +19 -0
  215. package/dist/game/ClockDetails.js.map +1 -0
  216. package/dist/game/Connection.d.ts +26 -0
  217. package/dist/game/Connection.d.ts.map +1 -0
  218. package/dist/game/Connection.js +99 -0
  219. package/dist/game/Connection.js.map +1 -0
  220. package/dist/game/ConnectionObject.d.ts +7 -0
  221. package/dist/game/ConnectionObject.d.ts.map +1 -0
  222. package/dist/game/ConnectionObject.js +16 -0
  223. package/dist/game/ConnectionObject.js.map +1 -0
  224. package/dist/game/ConnectionTransport.d.ts +17 -0
  225. package/dist/game/ConnectionTransport.d.ts.map +1 -0
  226. package/dist/game/ConnectionTransport.js +39 -0
  227. package/dist/game/ConnectionTransport.js.map +1 -0
  228. package/dist/game/DropdownChit.d.ts +7 -0
  229. package/dist/game/DropdownChit.d.ts.map +1 -0
  230. package/dist/game/DropdownChit.js +29 -0
  231. package/dist/game/DropdownChit.js.map +1 -0
  232. package/dist/game/GalleryItemChitChildrenSource.d.ts +12 -0
  233. package/dist/game/GalleryItemChitChildrenSource.d.ts.map +1 -0
  234. package/dist/game/GalleryItemChitChildrenSource.js +25 -0
  235. package/dist/game/GalleryItemChitChildrenSource.js.map +1 -0
  236. package/dist/game/GalleryItemRawSource.d.ts +9 -0
  237. package/dist/game/GalleryItemRawSource.d.ts.map +1 -0
  238. package/dist/game/GalleryItemRawSource.js +13 -0
  239. package/dist/game/GalleryItemRawSource.js.map +1 -0
  240. package/dist/game/Game.d.ts +51 -0
  241. package/dist/game/Game.d.ts.map +1 -0
  242. package/dist/game/Game.js +2 -0
  243. package/dist/game/Game.js.map +1 -0
  244. package/dist/game/GameBagChit.d.ts +16 -0
  245. package/dist/game/GameBagChit.d.ts.map +1 -0
  246. package/dist/game/GameBagChit.js +51 -0
  247. package/dist/game/GameBagChit.js.map +1 -0
  248. package/dist/game/GameButton.d.ts +30 -0
  249. package/dist/game/GameButton.d.ts.map +1 -0
  250. package/dist/game/GameButton.js +115 -0
  251. package/dist/game/GameButton.js.map +1 -0
  252. package/dist/game/GameDeckChit.d.ts +23 -0
  253. package/dist/game/GameDeckChit.d.ts.map +1 -0
  254. package/dist/game/GameDeckChit.js +79 -0
  255. package/dist/game/GameDeckChit.js.map +1 -0
  256. package/dist/game/GameTheme.d.ts +75 -0
  257. package/dist/game/GameTheme.d.ts.map +1 -0
  258. package/dist/game/GameTheme.js +103 -0
  259. package/dist/game/GameTheme.js.map +1 -0
  260. package/dist/game/Match.d.ts +34 -0
  261. package/dist/game/Match.d.ts.map +1 -0
  262. package/dist/game/Match.js +151 -0
  263. package/dist/game/Match.js.map +1 -0
  264. package/dist/game/MatchConnection.d.ts +8 -0
  265. package/dist/game/MatchConnection.d.ts.map +1 -0
  266. package/dist/game/MatchConnection.js +6 -0
  267. package/dist/game/MatchConnection.js.map +1 -0
  268. package/dist/game/MatchStorage.d.ts +17 -0
  269. package/dist/game/MatchStorage.d.ts.map +1 -0
  270. package/dist/game/MatchStorage.js +32 -0
  271. package/dist/game/MatchStorage.js.map +1 -0
  272. package/dist/game/ModalState.d.ts +9 -0
  273. package/dist/game/ModalState.d.ts.map +1 -0
  274. package/dist/game/ModalState.js +27 -0
  275. package/dist/game/ModalState.js.map +1 -0
  276. package/dist/game/OrderedOutlet.d.ts +50 -0
  277. package/dist/game/OrderedOutlet.d.ts.map +1 -0
  278. package/dist/game/OrderedOutlet.js +164 -0
  279. package/dist/game/OrderedOutlet.js.map +1 -0
  280. package/dist/game/Pick.d.ts +26 -0
  281. package/dist/game/Pick.d.ts.map +1 -0
  282. package/dist/game/Pick.js +239 -0
  283. package/dist/game/Pick.js.map +1 -0
  284. package/dist/game/PlayerChit.d.ts +16 -0
  285. package/dist/game/PlayerChit.d.ts.map +1 -0
  286. package/dist/game/PlayerChit.js +56 -0
  287. package/dist/game/PlayerChit.js.map +1 -0
  288. package/dist/game/PlayerInfo.d.ts +12 -0
  289. package/dist/game/PlayerInfo.d.ts.map +1 -0
  290. package/dist/game/PlayerInfo.js +20 -0
  291. package/dist/game/PlayerInfo.js.map +1 -0
  292. package/dist/game/PlayerPromptStatusChit.d.ts +5 -0
  293. package/dist/game/PlayerPromptStatusChit.d.ts.map +1 -0
  294. package/dist/game/PlayerPromptStatusChit.js +35 -0
  295. package/dist/game/PlayerPromptStatusChit.js.map +1 -0
  296. package/dist/game/Prompt.d.ts +94 -0
  297. package/dist/game/Prompt.d.ts.map +1 -0
  298. package/dist/game/Prompt.js +229 -0
  299. package/dist/game/Prompt.js.map +1 -0
  300. package/dist/game/RootChit.d.ts +15 -0
  301. package/dist/game/RootChit.d.ts.map +1 -0
  302. package/dist/game/RootChit.js +62 -0
  303. package/dist/game/RootChit.js.map +1 -0
  304. package/dist/game/SparkChit.d.ts +27 -0
  305. package/dist/game/SparkChit.d.ts.map +1 -0
  306. package/dist/game/SparkChit.js +97 -0
  307. package/dist/game/SparkChit.js.map +1 -0
  308. package/dist/game/StaticChitTypeRegistry.d.ts +5 -0
  309. package/dist/game/StaticChitTypeRegistry.d.ts.map +1 -0
  310. package/dist/game/StaticChitTypeRegistry.js +3 -0
  311. package/dist/game/StaticChitTypeRegistry.js.map +1 -0
  312. package/dist/game/Turn.d.ts +169 -0
  313. package/dist/game/Turn.d.ts.map +1 -0
  314. package/dist/game/Turn.js +1031 -0
  315. package/dist/game/Turn.js.map +1 -0
  316. package/dist/game/TurnState.d.ts +30 -0
  317. package/dist/game/TurnState.d.ts.map +1 -0
  318. package/dist/game/TurnState.js +170 -0
  319. package/dist/game/TurnState.js.map +1 -0
  320. package/dist/game/clientTransport/ClientPrompts.d.ts +23 -0
  321. package/dist/game/clientTransport/ClientPrompts.d.ts.map +1 -0
  322. package/dist/game/clientTransport/ClientPrompts.js +85 -0
  323. package/dist/game/clientTransport/ClientPrompts.js.map +1 -0
  324. package/dist/game/clientTransport/ClientStatus.d.ts +19 -0
  325. package/dist/game/clientTransport/ClientStatus.d.ts.map +1 -0
  326. package/dist/game/clientTransport/ClientStatus.js +25 -0
  327. package/dist/game/clientTransport/ClientStatus.js.map +1 -0
  328. package/dist/game/clientTransport/ClientTime.d.ts +42 -0
  329. package/dist/game/clientTransport/ClientTime.d.ts.map +1 -0
  330. package/dist/game/clientTransport/ClientTime.js +197 -0
  331. package/dist/game/clientTransport/ClientTime.js.map +1 -0
  332. package/dist/game/index.d.ts +1 -0
  333. package/dist/game/index.d.ts.map +1 -0
  334. package/dist/game/index.js +2 -0
  335. package/dist/game/index.js.map +1 -0
  336. package/dist/game/serverTransport/ServerPrompts.d.ts +17 -0
  337. package/dist/game/serverTransport/ServerPrompts.d.ts.map +1 -0
  338. package/dist/game/serverTransport/ServerPrompts.js +51 -0
  339. package/dist/game/serverTransport/ServerPrompts.js.map +1 -0
  340. package/dist/game/serverTransport/ServerStatus.d.ts +12 -0
  341. package/dist/game/serverTransport/ServerStatus.d.ts.map +1 -0
  342. package/dist/game/serverTransport/ServerStatus.js +16 -0
  343. package/dist/game/serverTransport/ServerStatus.js.map +1 -0
  344. package/dist/game/serverTransport/ServerTime.d.ts +39 -0
  345. package/dist/game/serverTransport/ServerTime.d.ts.map +1 -0
  346. package/dist/game/serverTransport/ServerTime.js +57 -0
  347. package/dist/game/serverTransport/ServerTime.js.map +1 -0
  348. package/dist/hooks/useChits.d.ts +4 -0
  349. package/dist/hooks/useChits.d.ts.map +1 -0
  350. package/dist/hooks/useChits.js +24 -0
  351. package/dist/hooks/useChits.js.map +1 -0
  352. package/dist/hooks/useConnection.d.ts +8 -0
  353. package/dist/hooks/useConnection.d.ts.map +1 -0
  354. package/dist/hooks/useConnection.js +14 -0
  355. package/dist/hooks/useConnection.js.map +1 -0
  356. package/dist/hooks/useEventChannelState.d.ts +4 -0
  357. package/dist/hooks/useEventChannelState.d.ts.map +1 -0
  358. package/dist/hooks/useEventChannelState.js +25 -0
  359. package/dist/hooks/useEventChannelState.js.map +1 -0
  360. package/dist/hooks/useGame.d.ts +8 -0
  361. package/dist/hooks/useGame.d.ts.map +1 -0
  362. package/dist/hooks/useGame.js +14 -0
  363. package/dist/hooks/useGame.js.map +1 -0
  364. package/dist/hooks/useGameTheme.d.ts +8 -0
  365. package/dist/hooks/useGameTheme.d.ts.map +1 -0
  366. package/dist/hooks/useGameTheme.js +11 -0
  367. package/dist/hooks/useGameTheme.js.map +1 -0
  368. package/dist/hooks/useModalState.d.ts +7 -0
  369. package/dist/hooks/useModalState.d.ts.map +1 -0
  370. package/dist/hooks/useModalState.js +12 -0
  371. package/dist/hooks/useModalState.js.map +1 -0
  372. package/dist/hooks/usePanelPositioning.d.ts +22 -0
  373. package/dist/hooks/usePanelPositioning.d.ts.map +1 -0
  374. package/dist/hooks/usePanelPositioning.js +10 -0
  375. package/dist/hooks/usePanelPositioning.js.map +1 -0
  376. package/dist/hooks/usePanelScale.d.ts +7 -0
  377. package/dist/hooks/usePanelScale.d.ts.map +1 -0
  378. package/dist/hooks/usePanelScale.js +22 -0
  379. package/dist/hooks/usePanelScale.js.map +1 -0
  380. package/dist/hooks/usePanelStates.d.ts +9 -0
  381. package/dist/hooks/usePanelStates.d.ts.map +1 -0
  382. package/dist/hooks/usePanelStates.js +19 -0
  383. package/dist/hooks/usePanelStates.js.map +1 -0
  384. package/dist/hooks/usePlayer.d.ts +7 -0
  385. package/dist/hooks/usePlayer.d.ts.map +1 -0
  386. package/dist/hooks/usePlayer.js +14 -0
  387. package/dist/hooks/usePlayer.js.map +1 -0
  388. package/dist/hooks/useSmartDebouncedState.d.ts +27 -0
  389. package/dist/hooks/useSmartDebouncedState.d.ts.map +1 -0
  390. package/dist/hooks/useSmartDebouncedState.js +109 -0
  391. package/dist/hooks/useSmartDebouncedState.js.map +1 -0
  392. package/dist/hooks/useTimeController.d.ts +22 -0
  393. package/dist/hooks/useTimeController.d.ts.map +1 -0
  394. package/dist/hooks/useTimeController.js +89 -0
  395. package/dist/hooks/useTimeController.js.map +1 -0
  396. package/dist/hooks/useTokenMap.d.ts +5 -0
  397. package/dist/hooks/useTokenMap.d.ts.map +1 -0
  398. package/dist/hooks/useTokenMap.js +16 -0
  399. package/dist/hooks/useTokenMap.js.map +1 -0
  400. package/dist/hooks/useWebGlRenderer.d.ts +34 -0
  401. package/dist/hooks/useWebGlRenderer.d.ts.map +1 -0
  402. package/dist/hooks/useWebGlRenderer.js +167 -0
  403. package/dist/hooks/useWebGlRenderer.js.map +1 -0
  404. package/dist/index.d.ts +97 -0
  405. package/dist/index.d.ts.map +1 -0
  406. package/dist/index.html +12 -0
  407. package/dist/index.js +62 -0
  408. package/dist/index.js.map +1 -0
  409. package/dist/pretty-chitty.js +190767 -0
  410. package/dist/pretty-chitty.js.map +1 -0
  411. package/dist/rendering/CameraSpec.d.ts +22 -0
  412. package/dist/rendering/CameraSpec.d.ts.map +1 -0
  413. package/dist/rendering/CameraSpec.js +25 -0
  414. package/dist/rendering/CameraSpec.js.map +1 -0
  415. package/dist/rendering/CameraWrapperPerspective.d.ts +44 -0
  416. package/dist/rendering/CameraWrapperPerspective.d.ts.map +1 -0
  417. package/dist/rendering/CameraWrapperPerspective.js +481 -0
  418. package/dist/rendering/CameraWrapperPerspective.js.map +1 -0
  419. package/dist/rendering/ChitGalleryItemInstance.d.ts +31 -0
  420. package/dist/rendering/ChitGalleryItemInstance.d.ts.map +1 -0
  421. package/dist/rendering/ChitGalleryItemInstance.js +75 -0
  422. package/dist/rendering/ChitGalleryItemInstance.js.map +1 -0
  423. package/dist/rendering/ChitRenderInstance.d.ts +104 -0
  424. package/dist/rendering/ChitRenderInstance.d.ts.map +1 -0
  425. package/dist/rendering/ChitRenderInstance.js +902 -0
  426. package/dist/rendering/ChitRenderInstance.js.map +1 -0
  427. package/dist/rendering/ChitRenderSpec.d.ts +80 -0
  428. package/dist/rendering/ChitRenderSpec.d.ts.map +1 -0
  429. package/dist/rendering/ChitRenderSpec.js +152 -0
  430. package/dist/rendering/ChitRenderSpec.js.map +1 -0
  431. package/dist/rendering/HighlightSpec.d.ts +6 -0
  432. package/dist/rendering/HighlightSpec.d.ts.map +1 -0
  433. package/dist/rendering/HighlightSpec.js +6 -0
  434. package/dist/rendering/HighlightSpec.js.map +1 -0
  435. package/dist/rendering/LightSpec.d.ts +17 -0
  436. package/dist/rendering/LightSpec.d.ts.map +1 -0
  437. package/dist/rendering/LightSpec.js +37 -0
  438. package/dist/rendering/LightSpec.js.map +1 -0
  439. package/dist/rendering/LightWrapper.d.ts +19 -0
  440. package/dist/rendering/LightWrapper.d.ts.map +1 -0
  441. package/dist/rendering/LightWrapper.js +114 -0
  442. package/dist/rendering/LightWrapper.js.map +1 -0
  443. package/dist/rendering/RootChitRenderInstance.d.ts +81 -0
  444. package/dist/rendering/RootChitRenderInstance.d.ts.map +1 -0
  445. package/dist/rendering/RootChitRenderInstance.js +372 -0
  446. package/dist/rendering/RootChitRenderInstance.js.map +1 -0
  447. package/dist/rendering/Splay.d.ts +23 -0
  448. package/dist/rendering/Splay.d.ts.map +1 -0
  449. package/dist/rendering/Splay.js +89 -0
  450. package/dist/rendering/Splay.js.map +1 -0
  451. package/dist/rendering/SplayCounter.d.ts +19 -0
  452. package/dist/rendering/SplayCounter.d.ts.map +1 -0
  453. package/dist/rendering/SplayCounter.js +18 -0
  454. package/dist/rendering/SplayCounter.js.map +1 -0
  455. package/dist/rendering/TextureReferenceCounter.d.ts +12 -0
  456. package/dist/rendering/TextureReferenceCounter.d.ts.map +1 -0
  457. package/dist/rendering/TextureReferenceCounter.js +76 -0
  458. package/dist/rendering/TextureReferenceCounter.js.map +1 -0
  459. package/dist/rendering/index.d.ts +1 -0
  460. package/dist/rendering/index.d.ts.map +1 -0
  461. package/dist/rendering/index.js +2 -0
  462. package/dist/rendering/index.js.map +1 -0
  463. package/dist/rendering/outline/DepthVisualizationPass.d.ts +12 -0
  464. package/dist/rendering/outline/DepthVisualizationPass.d.ts.map +1 -0
  465. package/dist/rendering/outline/DepthVisualizationPass.js +93 -0
  466. package/dist/rendering/outline/DepthVisualizationPass.js.map +1 -0
  467. package/dist/rendering/outline/EffectComposer.d.ts +24 -0
  468. package/dist/rendering/outline/EffectComposer.d.ts.map +1 -0
  469. package/dist/rendering/outline/EffectComposer.js +118 -0
  470. package/dist/rendering/outline/EffectComposer.js.map +1 -0
  471. package/dist/rendering/outline/FullScreenQuad.d.ts +12 -0
  472. package/dist/rendering/outline/FullScreenQuad.d.ts.map +1 -0
  473. package/dist/rendering/outline/FullScreenQuad.js +21 -0
  474. package/dist/rendering/outline/FullScreenQuad.js.map +1 -0
  475. package/dist/rendering/outline/IDBasedOutlinePass.d.ts +49 -0
  476. package/dist/rendering/outline/IDBasedOutlinePass.d.ts.map +1 -0
  477. package/dist/rendering/outline/IDBasedOutlinePass.js +597 -0
  478. package/dist/rendering/outline/IDBasedOutlinePass.js.map +1 -0
  479. package/dist/rendering/outline/OutputPass.d.ts +13 -0
  480. package/dist/rendering/outline/OutputPass.d.ts.map +1 -0
  481. package/dist/rendering/outline/OutputPass.js +57 -0
  482. package/dist/rendering/outline/OutputPass.js.map +1 -0
  483. package/dist/rendering/outline/RenderPass.d.ts +13 -0
  484. package/dist/rendering/outline/RenderPass.d.ts.map +1 -0
  485. package/dist/rendering/outline/RenderPass.js +54 -0
  486. package/dist/rendering/outline/RenderPass.js.map +1 -0
  487. package/dist/rendering/outline/SceneWrapper.d.ts +39 -0
  488. package/dist/rendering/outline/SceneWrapper.d.ts.map +1 -0
  489. package/dist/rendering/outline/SceneWrapper.js +522 -0
  490. package/dist/rendering/outline/SceneWrapper.js.map +1 -0
  491. package/dist/rendering/outline/ShaderPass.d.ts +12 -0
  492. package/dist/rendering/outline/ShaderPass.d.ts.map +1 -0
  493. package/dist/rendering/outline/ShaderPass.js +43 -0
  494. package/dist/rendering/outline/ShaderPass.js.map +1 -0
  495. package/dist/rendering/outline/index.d.ts +8 -0
  496. package/dist/rendering/outline/index.d.ts.map +1 -0
  497. package/dist/rendering/outline/index.js +8 -0
  498. package/dist/rendering/outline/index.js.map +1 -0
  499. package/dist/rendering/outline/passes/DebugIDMappingPass.d.ts +20 -0
  500. package/dist/rendering/outline/passes/DebugIDMappingPass.d.ts.map +1 -0
  501. package/dist/rendering/outline/passes/DebugIDMappingPass.js +131 -0
  502. package/dist/rendering/outline/passes/DebugIDMappingPass.js.map +1 -0
  503. package/dist/rendering/outline/passes/DepthOcclusionPass.d.ts +24 -0
  504. package/dist/rendering/outline/passes/DepthOcclusionPass.d.ts.map +1 -0
  505. package/dist/rendering/outline/passes/DepthOcclusionPass.js +95 -0
  506. package/dist/rendering/outline/passes/DepthOcclusionPass.js.map +1 -0
  507. package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.d.ts +32 -0
  508. package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.d.ts.map +1 -0
  509. package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.js +208 -0
  510. package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.js.map +1 -0
  511. package/dist/rendering/outline/shaders.d.ts +20 -0
  512. package/dist/rendering/outline/shaders.d.ts.map +1 -0
  513. package/dist/rendering/outline/shaders.js +103 -0
  514. package/dist/rendering/outline/shaders.js.map +1 -0
  515. package/dist/rendering/outline/types.d.ts +14 -0
  516. package/dist/rendering/outline/types.d.ts.map +1 -0
  517. package/dist/rendering/outline/types.js +16 -0
  518. package/dist/rendering/outline/types.js.map +1 -0
  519. package/dist/utilities/Annotations.d.ts +60 -0
  520. package/dist/utilities/Annotations.d.ts.map +1 -0
  521. package/dist/utilities/Annotations.js +171 -0
  522. package/dist/utilities/Annotations.js.map +1 -0
  523. package/dist/utilities/BaseTable.d.ts +8 -0
  524. package/dist/utilities/BaseTable.d.ts.map +1 -0
  525. package/dist/utilities/BaseTable.js +35 -0
  526. package/dist/utilities/BaseTable.js.map +1 -0
  527. package/dist/utilities/BboxUtils.d.ts +3 -0
  528. package/dist/utilities/BboxUtils.d.ts.map +1 -0
  529. package/dist/utilities/BboxUtils.js +19 -0
  530. package/dist/utilities/BboxUtils.js.map +1 -0
  531. package/dist/utilities/CanvasStack/CanvasOperations.d.ts +140 -0
  532. package/dist/utilities/CanvasStack/CanvasOperations.d.ts.map +1 -0
  533. package/dist/utilities/CanvasStack/CanvasOperations.js +403 -0
  534. package/dist/utilities/CanvasStack/CanvasOperations.js.map +1 -0
  535. package/dist/utilities/CanvasStack/CanvasStack.d.ts +42 -0
  536. package/dist/utilities/CanvasStack/CanvasStack.d.ts.map +1 -0
  537. package/dist/utilities/CanvasStack/CanvasStack.js +128 -0
  538. package/dist/utilities/CanvasStack/CanvasStack.js.map +1 -0
  539. package/dist/utilities/CanvasStack/IconCanvas.d.ts +10 -0
  540. package/dist/utilities/CanvasStack/IconCanvas.d.ts.map +1 -0
  541. package/dist/utilities/CanvasStack/IconCanvas.js +15 -0
  542. package/dist/utilities/CanvasStack/IconCanvas.js.map +1 -0
  543. package/dist/utilities/CanvasStack/ImageCache.d.ts +8 -0
  544. package/dist/utilities/CanvasStack/ImageCache.d.ts.map +1 -0
  545. package/dist/utilities/CanvasStack/ImageCache.js +29 -0
  546. package/dist/utilities/CanvasStack/ImageCache.js.map +1 -0
  547. package/dist/utilities/CanvasStack/ImageColorOverlayer.d.ts +2 -0
  548. package/dist/utilities/CanvasStack/ImageColorOverlayer.d.ts.map +1 -0
  549. package/dist/utilities/CanvasStack/ImageColorOverlayer.js +31 -0
  550. package/dist/utilities/CanvasStack/ImageColorOverlayer.js.map +1 -0
  551. package/dist/utilities/CanvasStack/PlayerCanvas.d.ts +10 -0
  552. package/dist/utilities/CanvasStack/PlayerCanvas.d.ts.map +1 -0
  553. package/dist/utilities/CanvasStack/PlayerCanvas.js +15 -0
  554. package/dist/utilities/CanvasStack/PlayerCanvas.js.map +1 -0
  555. package/dist/utilities/CanvasStack/ReactCanvas.d.ts +133 -0
  556. package/dist/utilities/CanvasStack/ReactCanvas.d.ts.map +1 -0
  557. package/dist/utilities/CanvasStack/ReactCanvas.js +161 -0
  558. package/dist/utilities/CanvasStack/ReactCanvas.js.map +1 -0
  559. package/dist/utilities/CanvasStack/RichTextRenderer.d.ts +63 -0
  560. package/dist/utilities/CanvasStack/RichTextRenderer.d.ts.map +1 -0
  561. package/dist/utilities/CanvasStack/RichTextRenderer.js +523 -0
  562. package/dist/utilities/CanvasStack/RichTextRenderer.js.map +1 -0
  563. package/dist/utilities/CardMesh.d.ts +17 -0
  564. package/dist/utilities/CardMesh.d.ts.map +1 -0
  565. package/dist/utilities/CardMesh.js +44 -0
  566. package/dist/utilities/CardMesh.js.map +1 -0
  567. package/dist/utilities/Dice.d.ts +24 -0
  568. package/dist/utilities/Dice.d.ts.map +1 -0
  569. package/dist/utilities/Dice.js +148 -0
  570. package/dist/utilities/Dice.js.map +1 -0
  571. package/dist/utilities/EventChannel.d.ts +13 -0
  572. package/dist/utilities/EventChannel.d.ts.map +1 -0
  573. package/dist/utilities/EventChannel.js +47 -0
  574. package/dist/utilities/EventChannel.js.map +1 -0
  575. package/dist/utilities/GalleryItemConversion.d.ts +4 -0
  576. package/dist/utilities/GalleryItemConversion.d.ts.map +1 -0
  577. package/dist/utilities/GalleryItemConversion.js +28 -0
  578. package/dist/utilities/GalleryItemConversion.js.map +1 -0
  579. package/dist/utilities/IUpdatingCanvas.d.ts +19 -0
  580. package/dist/utilities/IUpdatingCanvas.d.ts.map +1 -0
  581. package/dist/utilities/IUpdatingCanvas.js +2 -0
  582. package/dist/utilities/IUpdatingCanvas.js.map +1 -0
  583. package/dist/utilities/LayoutHelper.d.ts +34 -0
  584. package/dist/utilities/LayoutHelper.d.ts.map +1 -0
  585. package/dist/utilities/LayoutHelper.js +451 -0
  586. package/dist/utilities/LayoutHelper.js.map +1 -0
  587. package/dist/utilities/ObjectWithProps.d.ts +5 -0
  588. package/dist/utilities/ObjectWithProps.d.ts.map +1 -0
  589. package/dist/utilities/ObjectWithProps.js +65 -0
  590. package/dist/utilities/ObjectWithProps.js.map +1 -0
  591. package/dist/utilities/OutlineCanvas.d.ts +12 -0
  592. package/dist/utilities/OutlineCanvas.d.ts.map +1 -0
  593. package/dist/utilities/OutlineCanvas.js +31 -0
  594. package/dist/utilities/OutlineCanvas.js.map +1 -0
  595. package/dist/utilities/OutlineGeometry.d.ts +3 -0
  596. package/dist/utilities/OutlineGeometry.d.ts.map +1 -0
  597. package/dist/utilities/OutlineGeometry.js +57 -0
  598. package/dist/utilities/OutlineGeometry.js.map +1 -0
  599. package/dist/utilities/ParameterizedCanvas.d.ts +13 -0
  600. package/dist/utilities/ParameterizedCanvas.d.ts.map +1 -0
  601. package/dist/utilities/ParameterizedCanvas.js +85 -0
  602. package/dist/utilities/ParameterizedCanvas.js.map +1 -0
  603. package/dist/utilities/RequestSharedAnimationFrame.d.ts +2 -0
  604. package/dist/utilities/RequestSharedAnimationFrame.d.ts.map +1 -0
  605. package/dist/utilities/RequestSharedAnimationFrame.js +16 -0
  606. package/dist/utilities/RequestSharedAnimationFrame.js.map +1 -0
  607. package/dist/utilities/StaticImage.d.ts +19 -0
  608. package/dist/utilities/StaticImage.d.ts.map +1 -0
  609. package/dist/utilities/StaticImage.js +38 -0
  610. package/dist/utilities/StaticImage.js.map +1 -0
  611. package/dist/utilities/SvgExtruder.d.ts +20 -0
  612. package/dist/utilities/SvgExtruder.d.ts.map +1 -0
  613. package/dist/utilities/SvgExtruder.js +238 -0
  614. package/dist/utilities/SvgExtruder.js.map +1 -0
  615. package/dist/utilities/ThreeDisposer.d.ts +11 -0
  616. package/dist/utilities/ThreeDisposer.d.ts.map +1 -0
  617. package/dist/utilities/ThreeDisposer.js +53 -0
  618. package/dist/utilities/ThreeDisposer.js.map +1 -0
  619. package/dist/utilities/zIndex.d.ts +14 -0
  620. package/dist/utilities/zIndex.d.ts.map +1 -0
  621. package/dist/utilities/zIndex.js +14 -0
  622. package/dist/utilities/zIndex.js.map +1 -0
  623. package/package.json +138 -0
  624. package/src/library/assets/checker.svg +4 -0
  625. package/src/library/assets/cutout.svg +22 -0
  626. package/src/library/components/ActionLogDisplay.tsx +183 -0
  627. package/src/library/components/ActionLogHistory.tsx +127 -0
  628. package/src/library/components/ActionLogHistoryDisplay.tsx +21 -0
  629. package/src/library/components/ActionLogSidebar.tsx +17 -0
  630. package/src/library/components/BottomBar.tsx +78 -0
  631. package/src/library/components/BottomBarBreak.tsx +12 -0
  632. package/src/library/components/BottomBarButton.tsx +181 -0
  633. package/src/library/components/CanvasLibraryViewer.tsx +86 -0
  634. package/src/library/components/ChitLibraryViewer.tsx +168 -0
  635. package/src/library/components/ClientTrustMatchViewer.tsx +83 -0
  636. package/src/library/components/ContextGalleryDisplay.tsx +72 -0
  637. package/src/library/components/GalleryDisplay.tsx +57 -0
  638. package/src/library/components/GalleryPlayground.tsx +50 -0
  639. package/src/library/components/GalleryViewer.tsx +773 -0
  640. package/src/library/components/GameDesigner.tsx +39 -0
  641. package/src/library/components/GameDialog.tsx +43 -0
  642. package/src/library/components/GameModalBackdrop.tsx +47 -0
  643. package/src/library/components/GameModalDialog.tsx +77 -0
  644. package/src/library/components/LiveButton.tsx +26 -0
  645. package/src/library/components/MatchEndDisplay.tsx +120 -0
  646. package/src/library/components/MatchViewer.tsx +111 -0
  647. package/src/library/components/ObjectWithPropsEditor.tsx +169 -0
  648. package/src/library/components/Panel/MultiPanel.tsx +276 -0
  649. package/src/library/components/Panel/PanelContents.tsx +359 -0
  650. package/src/library/components/Panel/PanelTabStack.tsx +103 -0
  651. package/src/library/components/Panel/SinglePanel.tsx +75 -0
  652. package/src/library/components/Panel/ViewerWrapper.tsx +131 -0
  653. package/src/library/components/Panel/ViewerZoomControls.tsx +216 -0
  654. package/src/library/components/Panel/util.ts +7 -0
  655. package/src/library/components/PanelSpark.tsx +112 -0
  656. package/src/library/components/PersistentCanvas.tsx +81 -0
  657. package/src/library/components/PlayerImage.tsx +40 -0
  658. package/src/library/components/Playground.tsx +285 -0
  659. package/src/library/components/PromptControls.tsx +132 -0
  660. package/src/library/components/SelectableItemAndStage.tsx +49 -0
  661. package/src/library/components/SettingsDisplay.tsx +142 -0
  662. package/src/library/components/SparkLineChart.tsx +307 -0
  663. package/src/library/components/StageAndEditor.tsx +28 -0
  664. package/src/library/components/TimeControlBar.tsx +71 -0
  665. package/src/library/components/TokenizedMessage.tsx +206 -0
  666. package/src/library/components/TopBar.tsx +90 -0
  667. package/src/library/components/TopBarDropdown.tsx +94 -0
  668. package/src/library/components/TopBarPlayers.tsx +163 -0
  669. package/src/library/components/UpdatingCanvasImage.tsx +25 -0
  670. package/src/library/components/UpdatingCanvasViewer.tsx +62 -0
  671. package/src/library/components/Viewer.tsx +360 -0
  672. package/src/library/components/index.ts +0 -0
  673. package/src/library/game/Chit.test.ts +66 -0
  674. package/src/library/game/Chit.ts +575 -0
  675. package/src/library/game/ClientTimeState.ts +42 -0
  676. package/src/library/game/ClockDetails.ts +24 -0
  677. package/src/library/game/Connection.test.ts +50 -0
  678. package/src/library/game/Connection.ts +122 -0
  679. package/src/library/game/ConnectionObject.ts +13 -0
  680. package/src/library/game/ConnectionTransport.ts +52 -0
  681. package/src/library/game/DropdownChit.tsx +17 -0
  682. package/src/library/game/GalleryItemChitChildrenSource.ts +31 -0
  683. package/src/library/game/GalleryItemRawSource.ts +15 -0
  684. package/src/library/game/Game.ts +55 -0
  685. package/src/library/game/GameBagChit.ts +42 -0
  686. package/src/library/game/GameButton.ts +127 -0
  687. package/src/library/game/GameDeckChit.ts +77 -0
  688. package/src/library/game/GameTheme.ts +122 -0
  689. package/src/library/game/Match.ts +187 -0
  690. package/src/library/game/MatchConnection.ts +5 -0
  691. package/src/library/game/MatchStorage.ts +51 -0
  692. package/src/library/game/ModalState.ts +29 -0
  693. package/src/library/game/OrderedOutlet.ts +198 -0
  694. package/src/library/game/Pick.ts +314 -0
  695. package/src/library/game/PlayerChit.ts +43 -0
  696. package/src/library/game/PlayerInfo.ts +30 -0
  697. package/src/library/game/PlayerPromptStatusChit.ts +20 -0
  698. package/src/library/game/Prompt.ts +292 -0
  699. package/src/library/game/RootChit.ts +54 -0
  700. package/src/library/game/SparkChit.ts +97 -0
  701. package/src/library/game/StaticChitTypeRegistry.ts +3 -0
  702. package/src/library/game/Turn.test.ts +611 -0
  703. package/src/library/game/Turn.ts +1249 -0
  704. package/src/library/game/TurnState.ts +187 -0
  705. package/src/library/game/clientTransport/ClientPrompts.ts +102 -0
  706. package/src/library/game/clientTransport/ClientStatus.ts +36 -0
  707. package/src/library/game/clientTransport/ClientTime.ts +256 -0
  708. package/src/library/game/index.ts +0 -0
  709. package/src/library/game/serverTransport/ServerPrompts.ts +76 -0
  710. package/src/library/game/serverTransport/ServerStatus.ts +31 -0
  711. package/src/library/game/serverTransport/ServerTime.ts +74 -0
  712. package/src/library/hooks/useChits.ts +32 -0
  713. package/src/library/hooks/useConnection.tsx +16 -0
  714. package/src/library/hooks/useEventChannelState.ts +33 -0
  715. package/src/library/hooks/useGame.tsx +16 -0
  716. package/src/library/hooks/useGameTheme.tsx +12 -0
  717. package/src/library/hooks/useModalState.tsx +13 -0
  718. package/src/library/hooks/usePanelPositioning.tsx +31 -0
  719. package/src/library/hooks/usePanelScale.tsx +23 -0
  720. package/src/library/hooks/usePanelStates.ts +30 -0
  721. package/src/library/hooks/usePlayer.tsx +15 -0
  722. package/src/library/hooks/useSmartDebouncedState.ts +161 -0
  723. package/src/library/hooks/useTimeController.tsx +108 -0
  724. package/src/library/hooks/useTokenMap.ts +20 -0
  725. package/src/library/hooks/useWebGlRenderer.tsx +227 -0
  726. package/src/library/index.ts +116 -0
  727. package/src/library/rendering/CameraSpec.ts +25 -0
  728. package/src/library/rendering/CameraWrapperPerspective.ts +612 -0
  729. package/src/library/rendering/ChitGalleryItemInstance.ts +108 -0
  730. package/src/library/rendering/ChitRenderInstance.ts +1141 -0
  731. package/src/library/rendering/ChitRenderSpec.ts +213 -0
  732. package/src/library/rendering/HighlightSpec.ts +5 -0
  733. package/src/library/rendering/LightSpec.ts +41 -0
  734. package/src/library/rendering/LightWrapper.ts +152 -0
  735. package/src/library/rendering/RootChitRenderInstance.ts +460 -0
  736. package/src/library/rendering/Splay.ts +118 -0
  737. package/src/library/rendering/SplayCounter.tsx +37 -0
  738. package/src/library/rendering/TextureReferenceCounter.ts +86 -0
  739. package/src/library/rendering/index.ts +0 -0
  740. package/src/library/rendering/outline/DepthVisualizationPass.ts +117 -0
  741. package/src/library/rendering/outline/EffectComposer.ts +187 -0
  742. package/src/library/rendering/outline/FullScreenQuad.ts +32 -0
  743. package/src/library/rendering/outline/IDBasedOutlinePass.ts +741 -0
  744. package/src/library/rendering/outline/OutputPass.ts +88 -0
  745. package/src/library/rendering/outline/RenderPass.ts +72 -0
  746. package/src/library/rendering/outline/SceneWrapper.ts +617 -0
  747. package/src/library/rendering/outline/ShaderPass.ts +50 -0
  748. package/src/library/rendering/outline/index.ts +8 -0
  749. package/src/library/rendering/outline/passes/DebugIDMappingPass.ts +154 -0
  750. package/src/library/rendering/outline/passes/DepthOcclusionPass.ts +106 -0
  751. package/src/library/rendering/outline/passes/InterMeshEdgeDetectionPass.ts +244 -0
  752. package/src/library/rendering/outline/shaders.ts +110 -0
  753. package/src/library/rendering/outline/types.ts +25 -0
  754. package/src/library/utilities/Annotations.ts +188 -0
  755. package/src/library/utilities/BaseTable.tsx +58 -0
  756. package/src/library/utilities/BboxUtils.ts +23 -0
  757. package/src/library/utilities/CanvasStack/CanvasOperations.tsx +630 -0
  758. package/src/library/utilities/CanvasStack/CanvasStack.ts +191 -0
  759. package/src/library/utilities/CanvasStack/IconCanvas.tsx +17 -0
  760. package/src/library/utilities/CanvasStack/ImageCache.ts +38 -0
  761. package/src/library/utilities/CanvasStack/ImageColorOverlayer.ts +36 -0
  762. package/src/library/utilities/CanvasStack/PlayerCanvas.tsx +17 -0
  763. package/src/library/utilities/CanvasStack/ReactCanvas.tsx +293 -0
  764. package/src/library/utilities/CanvasStack/RichTextRenderer.ts +719 -0
  765. package/src/library/utilities/CardMesh.ts +55 -0
  766. package/src/library/utilities/Dice.tsx +183 -0
  767. package/src/library/utilities/EventChannel.ts +52 -0
  768. package/src/library/utilities/GalleryItemConversion.ts +30 -0
  769. package/src/library/utilities/IUpdatingCanvas.ts +14 -0
  770. package/src/library/utilities/LayoutHelper.ts +586 -0
  771. package/src/library/utilities/ObjectWithProps.ts +52 -0
  772. package/src/library/utilities/OutlineCanvas.tsx +45 -0
  773. package/src/library/utilities/OutlineGeometry.ts +69 -0
  774. package/src/library/utilities/ParameterizedCanvas.ts +78 -0
  775. package/src/library/utilities/RequestSharedAnimationFrame.ts +16 -0
  776. package/src/library/utilities/StaticImage.tsx +58 -0
  777. package/src/library/utilities/SvgExtruder.ts +330 -0
  778. package/src/library/utilities/ThreeDisposer.ts +66 -0
  779. package/src/library/utilities/zIndex.ts +15 -0
@@ -0,0 +1,741 @@
1
+ import {
2
+ Color,
3
+ Vector2,
4
+ WebGLRenderTarget,
5
+ WebGLRenderer,
6
+ LinearFilter,
7
+ NearestFilter,
8
+ RGBAFormat,
9
+ FrontSide,
10
+ DepthTexture,
11
+ UnsignedShortType,
12
+ ShaderMaterial,
13
+ NormalBlending,
14
+ UniformsUtils,
15
+ IUniform,
16
+ Material,
17
+ UnsignedIntType,
18
+ FloatType,
19
+ } from "three";
20
+ import { Pass } from "./types";
21
+
22
+ import { InterMeshEdgeDetectionPass } from "./passes/InterMeshEdgeDetectionPass";
23
+ import { DebugIDMappingPass } from "./passes/DebugIDMappingPass";
24
+ import { DepthOcclusionPass } from "./passes/DepthOcclusionPass";
25
+ import { FullScreenQuad } from "./FullScreenQuad";
26
+ import { CopyShader } from "./shaders";
27
+ import { SceneWrapper } from "./SceneWrapper";
28
+
29
+ export class IDBasedOutlinePass extends Pass {
30
+ // Configuration properties
31
+ edgeThickness = 2;
32
+ edgeStrength = 3.0;
33
+ forceVisibleOutlines = false; // Debug: force outlines to be visible
34
+ debugMode = false;
35
+ debugShowIDDepth = false; // Debug: visualize ID depth buffer
36
+ debugShowDepthDiff = false; // Debug: visualize depth difference between scene and ID
37
+
38
+ // Constants
39
+ private static readonly INSTANCE_COUNTER = 0;
40
+ private static instanceCounter = IDBasedOutlinePass.INSTANCE_COUNTER;
41
+ private readonly instanceId: number;
42
+ readonly resolution: Vector2;
43
+
44
+ // Core materials and components
45
+ private readonly fsQuad = new FullScreenQuad(null);
46
+ private readonly clonedMaterials = new Set<Material>(); // Track cloned materials for disposal
47
+ materialCopy!: ShaderMaterial;
48
+ copyUniforms!: Record<string, IUniform>;
49
+
50
+ // Render targets
51
+ private renderTargetIDBuffer!: WebGLRenderTarget;
52
+ private renderTargetIDBufferFiltered!: WebGLRenderTarget; // Filtered ID buffer after depth occlusion
53
+ private renderTargetTempBuffer!: WebGLRenderTarget; // Dedicated temp buffer to avoid sharing conflicts
54
+ private renderTargetEdgeBuffer1!: WebGLRenderTarget;
55
+ private renderTargetEdgeBuffer2!: WebGLRenderTarget; // For depth occlusion pass output
56
+
57
+ // ID rendering components
58
+ private sharedIDMaterial!: ShaderMaterial; // Single shared material
59
+ private idBasedEdgeDetectionPass!: InterMeshEdgeDetectionPass;
60
+ private debugIDMappingPass!: DebugIDMappingPass;
61
+ private depthOcclusionPass!: DepthOcclusionPass;
62
+ private debugDepthVisualizationMaterial!: ShaderMaterial; // For visualizing ID depth buffer
63
+ private debugDepthDiffMaterial!: ShaderMaterial; // For visualizing depth difference
64
+
65
+ constructor(
66
+ resolution: Vector2,
67
+ private pixelRatio: number,
68
+ ) {
69
+ super();
70
+ this.resolution = resolution ? new Vector2(resolution.x, resolution.y) : new Vector2(256, 256);
71
+ this.instanceId = ++IDBasedOutlinePass.instanceCounter;
72
+ // Initialize ID-based components
73
+ this.initializeMaterials();
74
+ this.initializeRenderTargets();
75
+ this.initializeIDComponents();
76
+ }
77
+
78
+ private initializeMaterials(): void {
79
+ this.copyUniforms = UniformsUtils.clone(CopyShader.uniforms);
80
+ (this.copyUniforms["opacity"].value as number) = 1.0;
81
+ this.materialCopy = new ShaderMaterial({
82
+ uniforms: this.copyUniforms,
83
+ vertexShader: CopyShader.vertexShader,
84
+ fragmentShader: CopyShader.fragmentShader,
85
+ depthTest: false,
86
+ depthWrite: false,
87
+ transparent: false,
88
+ });
89
+ }
90
+
91
+ private initializeIDComponents(): void {
92
+ // Use NearestFilter for exact ID values without interpolation
93
+ // Note: Using standard 8-bit RGBA. Shader code uses rounding to handle precision loss on 6-bit displays.
94
+ const resx = Math.round(this.resolution.x * this.pixelRatio);
95
+ const resy = Math.round(this.resolution.y * this.pixelRatio);
96
+ const pars = {
97
+ minFilter: NearestFilter,
98
+ magFilter: NearestFilter,
99
+ format: RGBAFormat,
100
+ depthBuffer: true,
101
+ };
102
+ this.renderTargetIDBuffer = new WebGLRenderTarget(resx, resy, pars);
103
+ this.renderTargetIDBuffer.texture.name = "IDBasedOutline.idBuffer";
104
+ this.renderTargetIDBuffer.texture.generateMipmaps = false;
105
+
106
+ // Add depth texture to ID buffer
107
+ this.renderTargetIDBuffer.depthTexture = new DepthTexture(resx, resy);
108
+ // this.renderTargetIDBuffer.depthTexture.type = FloatType;
109
+
110
+ // Create filtered ID buffer (same resolution as ID buffer, for after occlusion filtering)
111
+ this.renderTargetIDBufferFiltered = new WebGLRenderTarget(resx, resy, pars);
112
+ this.renderTargetIDBufferFiltered.texture.name = "IDBasedOutline.idBufferFiltered";
113
+ this.renderTargetIDBufferFiltered.texture.generateMipmaps = false;
114
+
115
+ // Create dedicated temp buffer to avoid cross-contamination
116
+ this.renderTargetTempBuffer = new WebGLRenderTarget(
117
+ this.resolution.x * this.pixelRatio,
118
+ this.resolution.y * this.pixelRatio,
119
+ pars,
120
+ );
121
+ this.renderTargetTempBuffer.texture.name = "IDBasedOutline.tempBuffer";
122
+ this.renderTargetTempBuffer.texture.generateMipmaps = false;
123
+
124
+ // Create ID-based edge detection pass
125
+ this.idBasedEdgeDetectionPass = new InterMeshEdgeDetectionPass();
126
+
127
+ // Create debug ID mapping pass
128
+ this.debugIDMappingPass = new DebugIDMappingPass();
129
+
130
+ // Create depth occlusion pass
131
+ this.depthOcclusionPass = new DepthOcclusionPass();
132
+
133
+ // Create single shared ID material
134
+ this.createSharedIDMaterial();
135
+
136
+ // Create debug depth visualization material
137
+ this.createDebugDepthVisualizationMaterial();
138
+
139
+ // Create debug depth difference material
140
+ this.createDebugDepthDiffMaterial();
141
+ }
142
+
143
+ private createSharedIDMaterial(): void {
144
+ this.sharedIDMaterial = new ShaderMaterial({
145
+ uniforms: {
146
+ outlineIdColor: { value: new Color(1, 1, 1) }, // Will be updated per mesh (encoded outlineId)
147
+ originalMap: { value: null }, // Original diffuse texture for alpha testing
148
+ originalOpacity: { value: 1.0 }, // Original material opacity
149
+ alphaTest: { value: 0.0 }, // Alpha test threshold
150
+ hasOriginalMap: { value: false }, // Whether original material has a map
151
+ },
152
+ vertexShader: `
153
+ varying vec2 vUv;
154
+ varying vec3 vViewNormal;
155
+
156
+ void main() {
157
+ vUv = uv;
158
+
159
+ // Pass view-space normal to fragment shader
160
+ vViewNormal = normalize(normalMatrix * normal);
161
+
162
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
163
+ }
164
+ `,
165
+ fragmentShader: `
166
+ uniform vec3 outlineIdColor;
167
+ uniform sampler2D originalMap;
168
+ uniform float originalOpacity;
169
+ uniform float alphaTest;
170
+ uniform bool hasOriginalMap;
171
+ varying vec2 vUv;
172
+ varying vec3 vViewNormal;
173
+
174
+ void main() {
175
+ // Handle alpha testing for transparent materials
176
+ float alpha = 1.0;
177
+ if (hasOriginalMap) {
178
+ vec4 texColor = texture2D(originalMap, vUv);
179
+ alpha *= texColor.a;
180
+ }
181
+
182
+ if (alpha < 0.1) {
183
+ discard; // Respect original material's transparency (lower threshold for mipmaps)
184
+ }
185
+
186
+ // Write the encoded outlineId to the buffer
187
+ gl_FragColor = vec4(outlineIdColor, 1.0);
188
+ }
189
+ `,
190
+ depthTest: true,
191
+ depthWrite: true,
192
+ side: FrontSide, // Default to front side, will be overridden per material
193
+ });
194
+ }
195
+
196
+ private createDebugDepthVisualizationMaterial(): void {
197
+ this.debugDepthVisualizationMaterial = new ShaderMaterial({
198
+ uniforms: {
199
+ tDepth: { value: null },
200
+ cameraNear: { value: 0.1 },
201
+ cameraFar: { value: 1000 },
202
+ },
203
+ vertexShader: `
204
+ varying vec2 vUv;
205
+ void main() {
206
+ vUv = uv;
207
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
208
+ }
209
+ `,
210
+ fragmentShader: `
211
+ uniform sampler2D tDepth;
212
+ uniform float cameraNear;
213
+ uniform float cameraFar;
214
+ varying vec2 vUv;
215
+
216
+ void main() {
217
+ float rawDepth = texture2D(tDepth, vUv).r;
218
+
219
+ if (rawDepth >= 0.9999) {
220
+ gl_FragColor = vec4(0.1, 0.1, 0.1, 1.0);
221
+ return;
222
+ }
223
+
224
+ float z = rawDepth * 2.0 - 1.0;
225
+ float linearDepth = (2.0 * cameraNear * cameraFar) / (cameraFar + cameraNear - z * (cameraFar - cameraNear));
226
+ float normalizedDepth = (linearDepth - cameraNear) / (cameraFar - cameraNear);
227
+ normalizedDepth = clamp(normalizedDepth, 0.0, 1.0);
228
+ float visualDepth = pow(normalizedDepth, 0.5);
229
+ visualDepth = 1.0 - visualDepth;
230
+
231
+ gl_FragColor = vec4(vec3(visualDepth), 1.0);
232
+ }
233
+ `,
234
+ depthTest: false,
235
+ depthWrite: false,
236
+ });
237
+ }
238
+
239
+ private createDebugDepthDiffMaterial(): void {
240
+ this.debugDepthDiffMaterial = new ShaderMaterial({
241
+ uniforms: {
242
+ tSceneDepth: { value: null },
243
+ tIDDepth: { value: null },
244
+ cameraNear: { value: 0.1 },
245
+ cameraFar: { value: 1000 },
246
+ diffScale: { value: 50.0 }, // Amplify differences for visibility
247
+ },
248
+ vertexShader: `
249
+ varying vec2 vUv;
250
+ void main() {
251
+ vUv = uv;
252
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
253
+ }
254
+ `,
255
+ fragmentShader: `
256
+ uniform sampler2D tSceneDepth;
257
+ uniform sampler2D tIDDepth;
258
+ uniform float cameraNear;
259
+ uniform float cameraFar;
260
+ uniform float diffScale;
261
+ varying vec2 vUv;
262
+
263
+ void main() {
264
+ float sceneDepth = texture2D(tSceneDepth, vUv).r;
265
+ float idDepth = texture2D(tIDDepth, vUv).r;
266
+
267
+ // If either is background, show gray
268
+ if (sceneDepth >= 0.9999 || idDepth >= 0.9999) {
269
+ gl_FragColor = vec4(0.5, 0.5, 0.5, 1.0);
270
+ return;
271
+ }
272
+
273
+ // Convert both to linear depth
274
+ float z1 = sceneDepth * 2.0 - 1.0;
275
+ float linear1 = (2.0 * cameraNear * cameraFar) / (cameraFar + cameraNear - z1 * (cameraFar - cameraNear));
276
+
277
+ float z2 = idDepth * 2.0 - 1.0;
278
+ float linear2 = (2.0 * cameraNear * cameraFar) / (cameraFar + cameraNear - z2 * (cameraFar - cameraNear));
279
+
280
+ // Calculate difference (amplified for visibility)
281
+ float diff = (linear1 - linear2) * diffScale;
282
+
283
+ // Color code the difference:
284
+ // Green = no difference
285
+ // Red = ID depth is closer (scene depth > ID depth)
286
+ // Blue = Scene depth is closer (ID depth > scene depth)
287
+ vec3 color;
288
+ if (abs(diff) < 0.01) {
289
+ color = vec3(0.0, 1.0, 0.0); // Green - no difference
290
+ } else if (diff > 0.0) {
291
+ // Scene depth further than ID depth (ID is closer)
292
+ color = vec3(1.0, 1.0 - clamp(diff, 0.0, 1.0), 0.0); // Yellow to red
293
+ } else {
294
+ // ID depth further than scene depth (scene is closer)
295
+ color = vec3(1.0 + diff, 1.0 + diff, 1.0); // White to blue
296
+ }
297
+
298
+ gl_FragColor = vec4(color, 1.0);
299
+ }
300
+ `,
301
+ depthTest: false,
302
+ depthWrite: false,
303
+ });
304
+ }
305
+
306
+ // Simplified API - no more edge modes, just outline meshes with userData.outlineColor
307
+
308
+ private _lastSceneWrapper: SceneWrapper | undefined;
309
+ override render(
310
+ renderer: WebGLRenderer,
311
+ writeBuffer: WebGLRenderTarget,
312
+ readBuffer: WebGLRenderTarget,
313
+ maskActive: boolean,
314
+ ): void {
315
+ const renderStart = performance.now();
316
+
317
+ if (this._lastSceneWrapper !== this.sceneWrapper) {
318
+ // Mark materials dirty when scene wrapper changes
319
+ if (this.sceneWrapper) {
320
+ this.sceneWrapper.markMaterialsDirty();
321
+ }
322
+ this._lastSceneWrapper = this.sceneWrapper;
323
+ }
324
+
325
+ // Ensure SceneWrapper has reference to this pass
326
+ this.sceneWrapper.setOutlinePass(this);
327
+
328
+ // Save state before any processing
329
+ this.saveRenderState(renderer);
330
+
331
+ const updateStart = performance.now();
332
+ // Check if any meshes have userData.outlineColor
333
+ this.sceneWrapper.update();
334
+ const hasOutlinedMeshes = this.sceneWrapper.hasOutlinedObjects;
335
+ const updateTime = performance.now() - updateStart;
336
+
337
+ if (!hasOutlinedMeshes) {
338
+ if (this.renderToScreen) {
339
+ this.renderIDCopyToScreen(renderer, readBuffer);
340
+ } else {
341
+ // Copy input to output buffer for effects pipeline
342
+ this.fsQuad.material = this.materialCopy;
343
+ (this.copyUniforms["tDiffuse"].value as any) = readBuffer.texture;
344
+ renderer.setRenderTarget(writeBuffer);
345
+ renderer.clear(); // Clear output buffer
346
+ this.fsQuad.render(renderer);
347
+ }
348
+ this.restoreRenderState(renderer);
349
+ return;
350
+ }
351
+
352
+ // Setup temporary state for ID rendering
353
+ renderer.autoClear = false;
354
+ if (maskActive) (renderer.state as any).buffers.stencil.setTest(false);
355
+
356
+ const idBufferStart = performance.now();
357
+ // Step 1: Render ID buffer
358
+ this.renderIDBuffer(renderer);
359
+ const idBufferTime = performance.now() - idBufferStart;
360
+
361
+ // Debug: Show ID depth buffer if requested
362
+ if (this.debugShowIDDepth) {
363
+ this.debugDepthVisualizationMaterial.uniforms["tDepth"].value = this.renderTargetIDBuffer.depthTexture;
364
+ this.debugDepthVisualizationMaterial.uniforms["cameraNear"].value = this.camera.near;
365
+ this.debugDepthVisualizationMaterial.uniforms["cameraFar"].value = this.camera.far;
366
+ this.fsQuad.material = this.debugDepthVisualizationMaterial;
367
+
368
+ if (this.renderToScreen) {
369
+ renderer.setRenderTarget(null);
370
+ } else {
371
+ renderer.setRenderTarget(writeBuffer);
372
+ }
373
+ renderer.clear();
374
+ this.fsQuad.render(renderer);
375
+ this.restoreRenderState(renderer);
376
+ return;
377
+ }
378
+
379
+ // Debug: Show depth difference if requested
380
+ if (this.debugShowDepthDiff) {
381
+ this.debugDepthDiffMaterial.uniforms["tSceneDepth"].value = readBuffer.depthTexture;
382
+ this.debugDepthDiffMaterial.uniforms["tIDDepth"].value = this.renderTargetIDBuffer.depthTexture;
383
+ this.debugDepthDiffMaterial.uniforms["cameraNear"].value = this.camera.near;
384
+ this.debugDepthDiffMaterial.uniforms["cameraFar"].value = this.camera.far;
385
+ this.fsQuad.material = this.debugDepthDiffMaterial;
386
+
387
+ if (this.renderToScreen) {
388
+ renderer.setRenderTarget(null);
389
+ } else {
390
+ renderer.setRenderTarget(writeBuffer);
391
+ }
392
+ renderer.clear();
393
+ this.fsQuad.render(renderer);
394
+ this.restoreRenderState(renderer);
395
+ return;
396
+ }
397
+
398
+ const occlusionStart = performance.now();
399
+ // Step 2: Apply depth occlusion to filter ID buffer before edge detection
400
+ this.depthOcclusionPass.setInputTexture(this.renderTargetIDBuffer.texture);
401
+ this.depthOcclusionPass.setIDDepthTexture(this.renderTargetIDBuffer.depthTexture);
402
+ this.depthOcclusionPass.setSceneDepthTexture(readBuffer.depthTexture);
403
+ this.depthOcclusionPass.render(renderer, this.renderTargetIDBufferFiltered);
404
+ const occlusionTime = performance.now() - occlusionStart;
405
+
406
+ const edgeDetectStart = performance.now();
407
+ // Step 3: Use ID-based edge detection on the filtered ID buffer
408
+ this.performIDBasedEdgeDetection(renderer);
409
+ const edgeDetectTime = performance.now() - edgeDetectStart;
410
+
411
+ const compositingStart = performance.now();
412
+ // Step 3: Safe composition using dedicated temporary buffer to avoid feedback loops
413
+ // First copy original scene to our dedicated temp buffer
414
+ this.fsQuad.material = this.materialCopy;
415
+ (this.copyUniforms["tDiffuse"].value as any) = readBuffer.texture;
416
+ renderer.setRenderTarget(this.renderTargetTempBuffer); // Use dedicated temp buffer
417
+ renderer.clear(); // Clear temp buffer first
418
+ this.fsQuad.render(renderer);
419
+
420
+ // Use edge buffer from edge detection pass
421
+ const edgeTexture = this.renderTargetEdgeBuffer1.texture;
422
+
423
+ // Then composite temp + edges to final buffer (writeBuffer, not readBuffer!)
424
+ renderer.setRenderTarget(writeBuffer);
425
+ renderer.clear(); // Clear the buffer to ensure proper compositing
426
+
427
+ // First: Copy temp buffer (scene) to output
428
+ this.fsQuad.material = this.materialCopy;
429
+ (this.copyUniforms["tDiffuse"].value as any) = this.renderTargetTempBuffer.texture;
430
+ this.fsQuad.render(renderer);
431
+
432
+ // Second: Add edges using additive blending
433
+ renderer.autoClear = false;
434
+
435
+ const originalBlending = this.materialCopy.blending;
436
+ const originalTransparent = this.materialCopy.transparent;
437
+
438
+ this.materialCopy.blending = NormalBlending;
439
+ this.materialCopy.transparent = true;
440
+ this.materialCopy.needsUpdate = true;
441
+
442
+ (this.copyUniforms["tDiffuse"].value as any) = edgeTexture;
443
+ this.fsQuad.render(renderer);
444
+
445
+ // // Restore material blending settings
446
+ this.materialCopy.blending = originalBlending;
447
+ this.materialCopy.transparent = originalTransparent;
448
+ this.materialCopy.needsUpdate = true;
449
+
450
+ this.restoreRenderState(renderer);
451
+
452
+ if (this.renderToScreen) {
453
+ this.renderIDCopyToScreen(renderer, readBuffer);
454
+ }
455
+
456
+ const compositingTime = performance.now() - compositingStart;
457
+ const totalTime = performance.now() - renderStart;
458
+
459
+ // Log timing every 60 frames to avoid spam
460
+ if (Math.random() < 0.00016) {
461
+ // ~1/60 chance
462
+ console.log(`Outline Pass Timing:
463
+ Total: ${totalTime.toFixed(2)}ms
464
+ SceneWrapper Update: ${updateTime.toFixed(2)}ms
465
+ ID Buffer Render: ${idBufferTime.toFixed(2)}ms
466
+ Edge Detection: ${edgeDetectTime.toFixed(2)}ms
467
+ Depth Occlusion: ${occlusionTime.toFixed(2)}ms
468
+ Compositing: ${compositingTime.toFixed(2)}ms`);
469
+ }
470
+ }
471
+
472
+ private initializeRenderTargets(): void {
473
+ const pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat } as any;
474
+
475
+ this.renderTargetEdgeBuffer1 = new WebGLRenderTarget(
476
+ this.resolution.x * this.pixelRatio,
477
+ this.resolution.y * this.pixelRatio,
478
+ pars,
479
+ );
480
+ this.renderTargetEdgeBuffer1.texture.name = "OutlinePass.edge1";
481
+ this.renderTargetEdgeBuffer1.texture.generateMipmaps = false;
482
+ // Use linear filtering for smooth edge output
483
+ this.renderTargetEdgeBuffer1.texture.minFilter = LinearFilter;
484
+ this.renderTargetEdgeBuffer1.texture.magFilter = LinearFilter;
485
+
486
+ this.renderTargetEdgeBuffer2 = new WebGLRenderTarget(
487
+ this.resolution.x * this.pixelRatio,
488
+ this.resolution.y * this.pixelRatio,
489
+ pars,
490
+ );
491
+ this.renderTargetEdgeBuffer2.texture.name = "OutlinePass.edge2";
492
+ this.renderTargetEdgeBuffer2.texture.generateMipmaps = false;
493
+ this.renderTargetEdgeBuffer2.texture.minFilter = LinearFilter;
494
+ this.renderTargetEdgeBuffer2.texture.magFilter = LinearFilter;
495
+ }
496
+
497
+ private renderIDBuffer(renderer: WebGLRenderer): void {
498
+ const oldAutoClear = renderer.autoClear;
499
+
500
+ renderer.autoClear = false;
501
+
502
+ // Materials already prepared by SceneWrapper calling prepareShadowMesh
503
+
504
+ renderer.setRenderTarget(this.renderTargetIDBuffer);
505
+ renderer.setClearColor(0x000000, 1); // Black only for ID buffer
506
+ renderer.clear(true, true, true); // Clear color, depth, and stencil explicitly
507
+ // Restore original clear color immediately after clearing ID buffer
508
+ renderer.setClearColor(this.savedState.clearColor, this.savedState.clearAlpha);
509
+
510
+ // Ensure correct WebGL depth state to match original scene render
511
+ const context = renderer.getContext();
512
+ context.enable(context.DEPTH_TEST);
513
+ context.depthFunc(context.LESS);
514
+ context.depthMask(true);
515
+
516
+ renderer.render(this.sceneWrapper.outlineShadowScene, this.camera);
517
+
518
+ renderer.autoClear = oldAutoClear;
519
+ }
520
+
521
+ // Method called by SceneWrapper to prepare shadow meshes with ID materials
522
+ prepareShadowMesh(shadowMesh: any, originalMesh: any): void {
523
+ // Dispose existing materials if they exist to prevent memory leaks
524
+ if (shadowMesh.material) {
525
+ if (Array.isArray(shadowMesh.material)) {
526
+ shadowMesh.material.forEach((mat: Material) => {
527
+ this.clonedMaterials.delete(mat);
528
+ mat.dispose();
529
+ });
530
+ } else {
531
+ this.clonedMaterials.delete(shadowMesh.material);
532
+ shadowMesh.material.dispose();
533
+ }
534
+ }
535
+
536
+ // Only assign IDs to meshes that have userData.outlineColor
537
+ let meshID = 0;
538
+ if (originalMesh.userData?.outlineColor && originalMesh.userData?.outlineId !== undefined) {
539
+ meshID = originalMesh.userData.outlineId;
540
+ }
541
+
542
+ // Encode mesh ID for lookup
543
+ const r = ((meshID >> 16) & 0xff) / 255.0;
544
+ const g = ((meshID >> 8) & 0xff) / 255.0;
545
+ const b = (meshID & 0xff) / 255.0;
546
+
547
+ // Handle both single materials and material arrays
548
+ if (Array.isArray(originalMesh.material)) {
549
+ // Create ID material for each material in the array
550
+ const idMaterials = originalMesh.material.map((originalMaterial: Material) => {
551
+ const meshMaterial = this.sharedIDMaterial.clone();
552
+ this.clonedMaterials.add(meshMaterial); // Track for disposal
553
+
554
+ meshMaterial.uniforms["outlineIdColor"].value = new Color(r, g, b);
555
+ meshMaterial.needsUpdate = true;
556
+
557
+ this.copyMaterialProperties(meshMaterial, originalMaterial);
558
+ return meshMaterial;
559
+ });
560
+
561
+ shadowMesh.material = idMaterials;
562
+ } else {
563
+ // Single material case
564
+ const meshMaterial = this.sharedIDMaterial.clone();
565
+ this.clonedMaterials.add(meshMaterial); // Track for disposal
566
+
567
+ meshMaterial.uniforms["outlineIdColor"].value = new Color(r, g, b);
568
+ meshMaterial.needsUpdate = true;
569
+
570
+ this.copyMaterialProperties(meshMaterial, originalMesh.material);
571
+ shadowMesh.material = meshMaterial;
572
+ }
573
+ }
574
+
575
+ // Helper method to copy material properties to ID material
576
+ private copyMaterialProperties(idMaterial: any, originalMaterial: any): void {
577
+ if (!originalMaterial) {
578
+ // Default values for materials without transparency
579
+ idMaterial.uniforms["originalOpacity"].value = 1.0;
580
+ idMaterial.uniforms["originalMap"].value = null;
581
+ idMaterial.uniforms["hasOriginalMap"].value = false;
582
+ idMaterial.uniforms["alphaTest"].value = 0.0;
583
+ idMaterial.transparent = false;
584
+ idMaterial.opacity = 1.0;
585
+ return;
586
+ }
587
+
588
+ // Check if material has any transparency
589
+ const isTransparent =
590
+ originalMaterial.transparent ||
591
+ originalMaterial.alphaTest > 0 ||
592
+ (originalMaterial.opacity !== undefined && originalMaterial.opacity < 1.0) ||
593
+ (originalMaterial.map && originalMaterial.map.format === 1023); // RGBAFormat
594
+
595
+ if (isTransparent) {
596
+ // Full material property copying for transparent materials
597
+ if (originalMaterial.transparent) {
598
+ idMaterial.transparent = true;
599
+ }
600
+ if (originalMaterial.alphaTest > 0) {
601
+ idMaterial.alphaTest = originalMaterial.alphaTest;
602
+ }
603
+ if (originalMaterial.opacity !== undefined && originalMaterial.opacity < 1.0) {
604
+ idMaterial.opacity = originalMaterial.opacity;
605
+ idMaterial.transparent = true;
606
+ }
607
+
608
+ // Copy texture and alpha properties to uniforms for alpha testing
609
+ idMaterial.uniforms["originalOpacity"].value =
610
+ originalMaterial.opacity !== undefined ? originalMaterial.opacity : 1.0;
611
+ idMaterial.uniforms["originalMap"].value = originalMaterial.map || null;
612
+ idMaterial.uniforms["hasOriginalMap"].value = !!originalMaterial.map;
613
+ idMaterial.uniforms["alphaTest"].value = originalMaterial.alphaTest || 0.0;
614
+ } else {
615
+ // Simplified material for opaque materials - no texture sampling needed
616
+ idMaterial.transparent = false;
617
+ idMaterial.opacity = 1.0;
618
+ idMaterial.alphaTest = 0.0;
619
+
620
+ // Skip texture uniforms for opaque materials to save GPU memory
621
+ idMaterial.uniforms["originalOpacity"].value = 1.0;
622
+ idMaterial.uniforms["originalMap"].value = null;
623
+ idMaterial.uniforms["hasOriginalMap"].value = false;
624
+ idMaterial.uniforms["alphaTest"].value = 0.0;
625
+ }
626
+
627
+ // Always copy backface culling settings regardless of transparency
628
+ if (originalMaterial.side !== undefined) {
629
+ idMaterial.side = originalMaterial.side;
630
+ }
631
+ }
632
+
633
+ private performIDBasedEdgeDetection(renderer: WebGLRenderer): void {
634
+ // Collect all meshes with userData.outlineColor
635
+ const outliningMeshes: Array<{ id: number; color: Color }> = [];
636
+
637
+ // Use a Map to avoid O(N^2) lookups for large numbers of meshes
638
+ const idToMesh: Map<number, Color> = new Map();
639
+
640
+ this.sceneWrapper.outlineShadowScene.traverseVisible((object: any) => {
641
+ if (object.userData?.outlineColor && object.userData?.outlineId !== undefined) {
642
+ const meshID = object.userData.outlineId;
643
+ if (!idToMesh.has(meshID)) {
644
+ idToMesh.set(meshID, object.userData.outlineColor);
645
+ }
646
+ }
647
+ });
648
+
649
+ idToMesh.forEach((color, id) => {
650
+ outliningMeshes.push({ id, color });
651
+ });
652
+
653
+ if (this.debugMode) {
654
+ this.debugIDMappingPass.setIDTexture(this.renderTargetIDBufferFiltered.texture);
655
+ this.debugIDMappingPass.setOutliningMeshes(outliningMeshes);
656
+ this.debugIDMappingPass.setTextureSize(this.resolution.x * this.pixelRatio, this.resolution.y * this.pixelRatio);
657
+ this.debugIDMappingPass.render(renderer, this.renderTargetEdgeBuffer1);
658
+ } else {
659
+ // Use normal edge detection pass on the filtered ID buffer
660
+ this.idBasedEdgeDetectionPass.setIDTexture(this.renderTargetIDBufferFiltered.texture);
661
+ this.idBasedEdgeDetectionPass.setIDDepthTexture(this.renderTargetIDBuffer.depthTexture);
662
+ this.idBasedEdgeDetectionPass.setOutliningMeshes(outliningMeshes);
663
+ // Edge detection renders at full resolution but samples from filtered ID buffer
664
+ const resx = Math.round(this.resolution.x * this.pixelRatio);
665
+ const resy = Math.round(this.resolution.y * this.pixelRatio);
666
+ this.idBasedEdgeDetectionPass.setTextureSize(resx, resy); // ID buffer size for sampling
667
+ this.idBasedEdgeDetectionPass.setThickness(this.edgeThickness);
668
+ this.idBasedEdgeDetectionPass.setStrength(this.edgeStrength);
669
+ this.idBasedEdgeDetectionPass.setStepSize(Math.max(1, Math.floor(this.pixelRatio))); // Skip pixels based on pixelRatio
670
+ this.idBasedEdgeDetectionPass.render(renderer, this.renderTargetEdgeBuffer1);
671
+ }
672
+ }
673
+
674
+ private renderIDCopyToScreen(renderer: WebGLRenderer, readBuffer: WebGLRenderTarget): void {
675
+ this.fsQuad.material = this.materialCopy;
676
+ (this.copyUniforms["tDiffuse"].value as any) = readBuffer.texture;
677
+ renderer.setRenderTarget(null);
678
+ this.fsQuad.render(renderer);
679
+ }
680
+
681
+ // Consolidated state management
682
+ private savedState: {
683
+ clearColor: Color;
684
+ clearAlpha: number;
685
+ shadowMapEnabled: boolean;
686
+ autoClear: boolean;
687
+ blendEnabled: boolean;
688
+ srcBlendFactor: number;
689
+ dstBlendFactor: number;
690
+ } = {
691
+ clearColor: new Color(),
692
+ clearAlpha: 1,
693
+ shadowMapEnabled: true,
694
+ autoClear: true,
695
+ blendEnabled: false,
696
+ srcBlendFactor: 0,
697
+ dstBlendFactor: 0,
698
+ };
699
+
700
+ private saveRenderState(renderer: WebGLRenderer): void {
701
+ // Save only Three.js renderer state
702
+ this.savedState.clearColor.copy(renderer.getClearColor(new Color()));
703
+ this.savedState.clearAlpha = renderer.getClearAlpha();
704
+ this.savedState.shadowMapEnabled = renderer.shadowMap.enabled;
705
+ this.savedState.autoClear = renderer.autoClear;
706
+ }
707
+
708
+ private restoreRenderState(renderer: WebGLRenderer): void {
709
+ // Only restore Three.js renderer state, not OpenGL blend state
710
+ // Shadows need blending to remain disabled after our processing
711
+ renderer.setClearColor(this.savedState.clearColor, this.savedState.clearAlpha);
712
+ renderer.autoClear = this.savedState.autoClear;
713
+ renderer.shadowMap.enabled = this.savedState.shadowMapEnabled;
714
+ }
715
+
716
+ dispose(): void {
717
+ // Dispose all cloned materials to prevent GPU memory leaks
718
+ for (const material of this.clonedMaterials) {
719
+ material.dispose();
720
+ }
721
+ this.clonedMaterials.clear();
722
+
723
+ // Dispose shared material
724
+ if (this.sharedIDMaterial) {
725
+ this.sharedIDMaterial.dispose();
726
+ }
727
+
728
+ // Dispose copy material
729
+ if (this.materialCopy) {
730
+ this.materialCopy.dispose();
731
+ }
732
+
733
+ this.renderTargetIDBuffer.dispose();
734
+ this.renderTargetIDBufferFiltered.dispose();
735
+ this.renderTargetTempBuffer.dispose();
736
+ this.renderTargetEdgeBuffer1.dispose();
737
+ this.renderTargetEdgeBuffer2.dispose();
738
+ this.idBasedEdgeDetectionPass.dispose();
739
+ this.depthOcclusionPass.dispose();
740
+ }
741
+ }