@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.
- package/LICENSE.md +51 -0
- package/README.md +152 -0
- package/dist/0e0a96423fd742218c61.woff2 +0 -0
- package/dist/1e28c9f184923aacc181.woff +0 -0
- package/dist/37f3b2ddcbe588b2aaa5.jpg +0 -0
- package/dist/3f0fb9058a03e14ad2fa.jpg +0 -0
- package/dist/4482e08504d544757971.woff2 +0 -0
- package/dist/5212361bfd059a27e2da.woff2 +0 -0
- package/dist/699b459f21e39ca4b8df.woff2 +0 -0
- package/dist/7e339dfbea59fe54f2e3.png +0 -0
- package/dist/a3e6d4ebd8f859f0f1dc.woff +0 -0
- package/dist/b8b0d3bc0d26444e4a5a.woff2 +0 -0
- package/dist/bce9a6fcc5b3da9a086a.woff +0 -0
- package/dist/components/ActionLogDisplay.d.ts +4 -0
- package/dist/components/ActionLogDisplay.d.ts.map +1 -0
- package/dist/components/ActionLogDisplay.js +144 -0
- package/dist/components/ActionLogDisplay.js.map +1 -0
- package/dist/components/ActionLogHistory.d.ts +6 -0
- package/dist/components/ActionLogHistory.d.ts.map +1 -0
- package/dist/components/ActionLogHistory.js +81 -0
- package/dist/components/ActionLogHistory.js.map +1 -0
- package/dist/components/ActionLogHistoryDisplay.d.ts +2 -0
- package/dist/components/ActionLogHistoryDisplay.d.ts.map +1 -0
- package/dist/components/ActionLogHistoryDisplay.js +17 -0
- package/dist/components/ActionLogHistoryDisplay.js.map +1 -0
- package/dist/components/ActionLogSidebar.d.ts +2 -0
- package/dist/components/ActionLogSidebar.d.ts.map +1 -0
- package/dist/components/ActionLogSidebar.js +9 -0
- package/dist/components/ActionLogSidebar.js.map +1 -0
- package/dist/components/BottomBar.d.ts +2 -0
- package/dist/components/BottomBar.d.ts.map +1 -0
- package/dist/components/BottomBar.js +33 -0
- package/dist/components/BottomBar.js.map +1 -0
- package/dist/components/BottomBarBreak.d.ts +2 -0
- package/dist/components/BottomBarBreak.d.ts.map +1 -0
- package/dist/components/BottomBarBreak.js +8 -0
- package/dist/components/BottomBarBreak.js.map +1 -0
- package/dist/components/BottomBarButton.d.ts +16 -0
- package/dist/components/BottomBarButton.d.ts.map +1 -0
- package/dist/components/BottomBarButton.js +123 -0
- package/dist/components/BottomBarButton.js.map +1 -0
- package/dist/components/CanvasLibraryViewer.d.ts +8 -0
- package/dist/components/CanvasLibraryViewer.d.ts.map +1 -0
- package/dist/components/CanvasLibraryViewer.js +29 -0
- package/dist/components/CanvasLibraryViewer.js.map +1 -0
- package/dist/components/ChitLibraryViewer.d.ts +8 -0
- package/dist/components/ChitLibraryViewer.d.ts.map +1 -0
- package/dist/components/ChitLibraryViewer.js +101 -0
- package/dist/components/ChitLibraryViewer.js.map +1 -0
- package/dist/components/ClientTrustMatchViewer.d.ts +11 -0
- package/dist/components/ClientTrustMatchViewer.d.ts.map +1 -0
- package/dist/components/ClientTrustMatchViewer.js +53 -0
- package/dist/components/ClientTrustMatchViewer.js.map +1 -0
- package/dist/components/ContextGalleryDisplay.d.ts +4 -0
- package/dist/components/ContextGalleryDisplay.d.ts.map +1 -0
- package/dist/components/ContextGalleryDisplay.js +49 -0
- package/dist/components/ContextGalleryDisplay.js.map +1 -0
- package/dist/components/GalleryDisplay.d.ts +2 -0
- package/dist/components/GalleryDisplay.d.ts.map +1 -0
- package/dist/components/GalleryDisplay.js +42 -0
- package/dist/components/GalleryDisplay.js.map +1 -0
- package/dist/components/GalleryPlayground.d.ts +14 -0
- package/dist/components/GalleryPlayground.d.ts.map +1 -0
- package/dist/components/GalleryPlayground.js +36 -0
- package/dist/components/GalleryPlayground.js.map +1 -0
- package/dist/components/GalleryViewer.d.ts +48 -0
- package/dist/components/GalleryViewer.d.ts.map +1 -0
- package/dist/components/GalleryViewer.js +567 -0
- package/dist/components/GalleryViewer.js.map +1 -0
- package/dist/components/GameDesigner.d.ts +5 -0
- package/dist/components/GameDesigner.d.ts.map +1 -0
- package/dist/components/GameDesigner.js +14 -0
- package/dist/components/GameDesigner.js.map +1 -0
- package/dist/components/GameDialog.d.ts +7 -0
- package/dist/components/GameDialog.d.ts.map +1 -0
- package/dist/components/GameDialog.js +24 -0
- package/dist/components/GameDialog.js.map +1 -0
- package/dist/components/GameModalBackdrop.d.ts +10 -0
- package/dist/components/GameModalBackdrop.d.ts.map +1 -0
- package/dist/components/GameModalBackdrop.js +33 -0
- package/dist/components/GameModalBackdrop.js.map +1 -0
- package/dist/components/GameModalDialog.d.ts +11 -0
- package/dist/components/GameModalDialog.d.ts.map +1 -0
- package/dist/components/GameModalDialog.js +42 -0
- package/dist/components/GameModalDialog.js.map +1 -0
- package/dist/components/LiveButton.d.ts +4 -0
- package/dist/components/LiveButton.d.ts.map +1 -0
- package/dist/components/LiveButton.js +17 -0
- package/dist/components/LiveButton.js.map +1 -0
- package/dist/components/MatchEndDisplay.d.ts +2 -0
- package/dist/components/MatchEndDisplay.d.ts.map +1 -0
- package/dist/components/MatchEndDisplay.js +67 -0
- package/dist/components/MatchEndDisplay.js.map +1 -0
- package/dist/components/MatchViewer.d.ts +5 -0
- package/dist/components/MatchViewer.d.ts.map +1 -0
- package/dist/components/MatchViewer.js +59 -0
- package/dist/components/MatchViewer.js.map +1 -0
- package/dist/components/ObjectWithPropsEditor.d.ts +5 -0
- package/dist/components/ObjectWithPropsEditor.d.ts.map +1 -0
- package/dist/components/ObjectWithPropsEditor.js +88 -0
- package/dist/components/ObjectWithPropsEditor.js.map +1 -0
- package/dist/components/Panel/MultiPanel.d.ts +13 -0
- package/dist/components/Panel/MultiPanel.d.ts.map +1 -0
- package/dist/components/Panel/MultiPanel.js +196 -0
- package/dist/components/Panel/MultiPanel.js.map +1 -0
- package/dist/components/Panel/PanelContents.d.ts +27 -0
- package/dist/components/Panel/PanelContents.d.ts.map +1 -0
- package/dist/components/Panel/PanelContents.js +202 -0
- package/dist/components/Panel/PanelContents.js.map +1 -0
- package/dist/components/Panel/PanelTabStack.d.ts +9 -0
- package/dist/components/Panel/PanelTabStack.d.ts.map +1 -0
- package/dist/components/Panel/PanelTabStack.js +56 -0
- package/dist/components/Panel/PanelTabStack.js.map +1 -0
- package/dist/components/Panel/SinglePanel.d.ts +13 -0
- package/dist/components/Panel/SinglePanel.d.ts.map +1 -0
- package/dist/components/Panel/SinglePanel.js +44 -0
- package/dist/components/Panel/SinglePanel.js.map +1 -0
- package/dist/components/Panel/ViewerWrapper.d.ts +17 -0
- package/dist/components/Panel/ViewerWrapper.d.ts.map +1 -0
- package/dist/components/Panel/ViewerWrapper.js +70 -0
- package/dist/components/Panel/ViewerWrapper.js.map +1 -0
- package/dist/components/Panel/ViewerZoomControls.d.ts +8 -0
- package/dist/components/Panel/ViewerZoomControls.d.ts.map +1 -0
- package/dist/components/Panel/ViewerZoomControls.js +152 -0
- package/dist/components/Panel/ViewerZoomControls.js.map +1 -0
- package/dist/components/Panel/util.d.ts +3 -0
- package/dist/components/Panel/util.d.ts.map +1 -0
- package/dist/components/Panel/util.js +5 -0
- package/dist/components/Panel/util.js.map +1 -0
- package/dist/components/PanelSpark.d.ts +7 -0
- package/dist/components/PanelSpark.d.ts.map +1 -0
- package/dist/components/PanelSpark.js +84 -0
- package/dist/components/PanelSpark.js.map +1 -0
- package/dist/components/PersistentCanvas.d.ts +12 -0
- package/dist/components/PersistentCanvas.d.ts.map +1 -0
- package/dist/components/PersistentCanvas.js +44 -0
- package/dist/components/PersistentCanvas.js.map +1 -0
- package/dist/components/PlayerImage.d.ts +9 -0
- package/dist/components/PlayerImage.d.ts.map +1 -0
- package/dist/components/PlayerImage.js +21 -0
- package/dist/components/PlayerImage.js.map +1 -0
- package/dist/components/Playground.d.ts +9 -0
- package/dist/components/Playground.d.ts.map +1 -0
- package/dist/components/Playground.js +129 -0
- package/dist/components/Playground.js.map +1 -0
- package/dist/components/PromptControls.d.ts +4 -0
- package/dist/components/PromptControls.d.ts.map +1 -0
- package/dist/components/PromptControls.js +87 -0
- package/dist/components/PromptControls.js.map +1 -0
- package/dist/components/SelectableItemAndStage.d.ts +8 -0
- package/dist/components/SelectableItemAndStage.d.ts.map +1 -0
- package/dist/components/SelectableItemAndStage.js +16 -0
- package/dist/components/SelectableItemAndStage.js.map +1 -0
- package/dist/components/SettingsDisplay.d.ts +2 -0
- package/dist/components/SettingsDisplay.d.ts.map +1 -0
- package/dist/components/SettingsDisplay.js +62 -0
- package/dist/components/SettingsDisplay.js.map +1 -0
- package/dist/components/SparkLineChart.d.ts +21 -0
- package/dist/components/SparkLineChart.d.ts.map +1 -0
- package/dist/components/SparkLineChart.js +143 -0
- package/dist/components/SparkLineChart.js.map +1 -0
- package/dist/components/StageAndEditor.d.ts +5 -0
- package/dist/components/StageAndEditor.d.ts.map +1 -0
- package/dist/components/StageAndEditor.js +12 -0
- package/dist/components/StageAndEditor.js.map +1 -0
- package/dist/components/TimeControlBar.d.ts +5 -0
- package/dist/components/TimeControlBar.d.ts.map +1 -0
- package/dist/components/TimeControlBar.js +38 -0
- package/dist/components/TimeControlBar.js.map +1 -0
- package/dist/components/TokenizedMessage.d.ts +13 -0
- package/dist/components/TokenizedMessage.d.ts.map +1 -0
- package/dist/components/TokenizedMessage.js +102 -0
- package/dist/components/TokenizedMessage.js.map +1 -0
- package/dist/components/TopBar.d.ts +4 -0
- package/dist/components/TopBar.d.ts.map +1 -0
- package/dist/components/TopBar.js +47 -0
- package/dist/components/TopBar.js.map +1 -0
- package/dist/components/TopBarDropdown.d.ts +6 -0
- package/dist/components/TopBarDropdown.d.ts.map +1 -0
- package/dist/components/TopBarDropdown.js +69 -0
- package/dist/components/TopBarDropdown.js.map +1 -0
- package/dist/components/TopBarPlayers.d.ts +2 -0
- package/dist/components/TopBarPlayers.d.ts.map +1 -0
- package/dist/components/TopBarPlayers.js +70 -0
- package/dist/components/TopBarPlayers.js.map +1 -0
- package/dist/components/UpdatingCanvasImage.d.ts +7 -0
- package/dist/components/UpdatingCanvasImage.d.ts.map +1 -0
- package/dist/components/UpdatingCanvasImage.js +22 -0
- package/dist/components/UpdatingCanvasImage.js.map +1 -0
- package/dist/components/UpdatingCanvasViewer.d.ts +7 -0
- package/dist/components/UpdatingCanvasViewer.d.ts.map +1 -0
- package/dist/components/UpdatingCanvasViewer.js +50 -0
- package/dist/components/UpdatingCanvasViewer.js.map +1 -0
- package/dist/components/Viewer.d.ts +16 -0
- package/dist/components/Viewer.d.ts.map +1 -0
- package/dist/components/Viewer.js +289 -0
- package/dist/components/Viewer.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -0
- package/dist/e085acb5e467d8e85d21.woff +0 -0
- package/dist/e65dff62134b8879e792.woff +0 -0
- package/dist/game/Chit.d.ts +64 -0
- package/dist/game/Chit.d.ts.map +1 -0
- package/dist/game/Chit.js +524 -0
- package/dist/game/Chit.js.map +1 -0
- package/dist/game/ClientTimeState.d.ts +16 -0
- package/dist/game/ClientTimeState.d.ts.map +1 -0
- package/dist/game/ClientTimeState.js +38 -0
- package/dist/game/ClientTimeState.js.map +1 -0
- package/dist/game/ClockDetails.d.ts +9 -0
- package/dist/game/ClockDetails.d.ts.map +1 -0
- package/dist/game/ClockDetails.js +19 -0
- package/dist/game/ClockDetails.js.map +1 -0
- package/dist/game/Connection.d.ts +26 -0
- package/dist/game/Connection.d.ts.map +1 -0
- package/dist/game/Connection.js +99 -0
- package/dist/game/Connection.js.map +1 -0
- package/dist/game/ConnectionObject.d.ts +7 -0
- package/dist/game/ConnectionObject.d.ts.map +1 -0
- package/dist/game/ConnectionObject.js +16 -0
- package/dist/game/ConnectionObject.js.map +1 -0
- package/dist/game/ConnectionTransport.d.ts +17 -0
- package/dist/game/ConnectionTransport.d.ts.map +1 -0
- package/dist/game/ConnectionTransport.js +39 -0
- package/dist/game/ConnectionTransport.js.map +1 -0
- package/dist/game/DropdownChit.d.ts +7 -0
- package/dist/game/DropdownChit.d.ts.map +1 -0
- package/dist/game/DropdownChit.js +29 -0
- package/dist/game/DropdownChit.js.map +1 -0
- package/dist/game/GalleryItemChitChildrenSource.d.ts +12 -0
- package/dist/game/GalleryItemChitChildrenSource.d.ts.map +1 -0
- package/dist/game/GalleryItemChitChildrenSource.js +25 -0
- package/dist/game/GalleryItemChitChildrenSource.js.map +1 -0
- package/dist/game/GalleryItemRawSource.d.ts +9 -0
- package/dist/game/GalleryItemRawSource.d.ts.map +1 -0
- package/dist/game/GalleryItemRawSource.js +13 -0
- package/dist/game/GalleryItemRawSource.js.map +1 -0
- package/dist/game/Game.d.ts +51 -0
- package/dist/game/Game.d.ts.map +1 -0
- package/dist/game/Game.js +2 -0
- package/dist/game/Game.js.map +1 -0
- package/dist/game/GameBagChit.d.ts +16 -0
- package/dist/game/GameBagChit.d.ts.map +1 -0
- package/dist/game/GameBagChit.js +51 -0
- package/dist/game/GameBagChit.js.map +1 -0
- package/dist/game/GameButton.d.ts +30 -0
- package/dist/game/GameButton.d.ts.map +1 -0
- package/dist/game/GameButton.js +115 -0
- package/dist/game/GameButton.js.map +1 -0
- package/dist/game/GameDeckChit.d.ts +23 -0
- package/dist/game/GameDeckChit.d.ts.map +1 -0
- package/dist/game/GameDeckChit.js +79 -0
- package/dist/game/GameDeckChit.js.map +1 -0
- package/dist/game/GameTheme.d.ts +75 -0
- package/dist/game/GameTheme.d.ts.map +1 -0
- package/dist/game/GameTheme.js +103 -0
- package/dist/game/GameTheme.js.map +1 -0
- package/dist/game/Match.d.ts +34 -0
- package/dist/game/Match.d.ts.map +1 -0
- package/dist/game/Match.js +151 -0
- package/dist/game/Match.js.map +1 -0
- package/dist/game/MatchConnection.d.ts +8 -0
- package/dist/game/MatchConnection.d.ts.map +1 -0
- package/dist/game/MatchConnection.js +6 -0
- package/dist/game/MatchConnection.js.map +1 -0
- package/dist/game/MatchStorage.d.ts +17 -0
- package/dist/game/MatchStorage.d.ts.map +1 -0
- package/dist/game/MatchStorage.js +32 -0
- package/dist/game/MatchStorage.js.map +1 -0
- package/dist/game/ModalState.d.ts +9 -0
- package/dist/game/ModalState.d.ts.map +1 -0
- package/dist/game/ModalState.js +27 -0
- package/dist/game/ModalState.js.map +1 -0
- package/dist/game/OrderedOutlet.d.ts +50 -0
- package/dist/game/OrderedOutlet.d.ts.map +1 -0
- package/dist/game/OrderedOutlet.js +164 -0
- package/dist/game/OrderedOutlet.js.map +1 -0
- package/dist/game/Pick.d.ts +26 -0
- package/dist/game/Pick.d.ts.map +1 -0
- package/dist/game/Pick.js +239 -0
- package/dist/game/Pick.js.map +1 -0
- package/dist/game/PlayerChit.d.ts +16 -0
- package/dist/game/PlayerChit.d.ts.map +1 -0
- package/dist/game/PlayerChit.js +56 -0
- package/dist/game/PlayerChit.js.map +1 -0
- package/dist/game/PlayerInfo.d.ts +12 -0
- package/dist/game/PlayerInfo.d.ts.map +1 -0
- package/dist/game/PlayerInfo.js +20 -0
- package/dist/game/PlayerInfo.js.map +1 -0
- package/dist/game/PlayerPromptStatusChit.d.ts +5 -0
- package/dist/game/PlayerPromptStatusChit.d.ts.map +1 -0
- package/dist/game/PlayerPromptStatusChit.js +35 -0
- package/dist/game/PlayerPromptStatusChit.js.map +1 -0
- package/dist/game/Prompt.d.ts +94 -0
- package/dist/game/Prompt.d.ts.map +1 -0
- package/dist/game/Prompt.js +229 -0
- package/dist/game/Prompt.js.map +1 -0
- package/dist/game/RootChit.d.ts +15 -0
- package/dist/game/RootChit.d.ts.map +1 -0
- package/dist/game/RootChit.js +62 -0
- package/dist/game/RootChit.js.map +1 -0
- package/dist/game/SparkChit.d.ts +27 -0
- package/dist/game/SparkChit.d.ts.map +1 -0
- package/dist/game/SparkChit.js +97 -0
- package/dist/game/SparkChit.js.map +1 -0
- package/dist/game/StaticChitTypeRegistry.d.ts +5 -0
- package/dist/game/StaticChitTypeRegistry.d.ts.map +1 -0
- package/dist/game/StaticChitTypeRegistry.js +3 -0
- package/dist/game/StaticChitTypeRegistry.js.map +1 -0
- package/dist/game/Turn.d.ts +169 -0
- package/dist/game/Turn.d.ts.map +1 -0
- package/dist/game/Turn.js +1031 -0
- package/dist/game/Turn.js.map +1 -0
- package/dist/game/TurnState.d.ts +30 -0
- package/dist/game/TurnState.d.ts.map +1 -0
- package/dist/game/TurnState.js +170 -0
- package/dist/game/TurnState.js.map +1 -0
- package/dist/game/clientTransport/ClientPrompts.d.ts +23 -0
- package/dist/game/clientTransport/ClientPrompts.d.ts.map +1 -0
- package/dist/game/clientTransport/ClientPrompts.js +85 -0
- package/dist/game/clientTransport/ClientPrompts.js.map +1 -0
- package/dist/game/clientTransport/ClientStatus.d.ts +19 -0
- package/dist/game/clientTransport/ClientStatus.d.ts.map +1 -0
- package/dist/game/clientTransport/ClientStatus.js +25 -0
- package/dist/game/clientTransport/ClientStatus.js.map +1 -0
- package/dist/game/clientTransport/ClientTime.d.ts +42 -0
- package/dist/game/clientTransport/ClientTime.d.ts.map +1 -0
- package/dist/game/clientTransport/ClientTime.js +197 -0
- package/dist/game/clientTransport/ClientTime.js.map +1 -0
- package/dist/game/index.d.ts +1 -0
- package/dist/game/index.d.ts.map +1 -0
- package/dist/game/index.js +2 -0
- package/dist/game/index.js.map +1 -0
- package/dist/game/serverTransport/ServerPrompts.d.ts +17 -0
- package/dist/game/serverTransport/ServerPrompts.d.ts.map +1 -0
- package/dist/game/serverTransport/ServerPrompts.js +51 -0
- package/dist/game/serverTransport/ServerPrompts.js.map +1 -0
- package/dist/game/serverTransport/ServerStatus.d.ts +12 -0
- package/dist/game/serverTransport/ServerStatus.d.ts.map +1 -0
- package/dist/game/serverTransport/ServerStatus.js +16 -0
- package/dist/game/serverTransport/ServerStatus.js.map +1 -0
- package/dist/game/serverTransport/ServerTime.d.ts +39 -0
- package/dist/game/serverTransport/ServerTime.d.ts.map +1 -0
- package/dist/game/serverTransport/ServerTime.js +57 -0
- package/dist/game/serverTransport/ServerTime.js.map +1 -0
- package/dist/hooks/useChits.d.ts +4 -0
- package/dist/hooks/useChits.d.ts.map +1 -0
- package/dist/hooks/useChits.js +24 -0
- package/dist/hooks/useChits.js.map +1 -0
- package/dist/hooks/useConnection.d.ts +8 -0
- package/dist/hooks/useConnection.d.ts.map +1 -0
- package/dist/hooks/useConnection.js +14 -0
- package/dist/hooks/useConnection.js.map +1 -0
- package/dist/hooks/useEventChannelState.d.ts +4 -0
- package/dist/hooks/useEventChannelState.d.ts.map +1 -0
- package/dist/hooks/useEventChannelState.js +25 -0
- package/dist/hooks/useEventChannelState.js.map +1 -0
- package/dist/hooks/useGame.d.ts +8 -0
- package/dist/hooks/useGame.d.ts.map +1 -0
- package/dist/hooks/useGame.js +14 -0
- package/dist/hooks/useGame.js.map +1 -0
- package/dist/hooks/useGameTheme.d.ts +8 -0
- package/dist/hooks/useGameTheme.d.ts.map +1 -0
- package/dist/hooks/useGameTheme.js +11 -0
- package/dist/hooks/useGameTheme.js.map +1 -0
- package/dist/hooks/useModalState.d.ts +7 -0
- package/dist/hooks/useModalState.d.ts.map +1 -0
- package/dist/hooks/useModalState.js +12 -0
- package/dist/hooks/useModalState.js.map +1 -0
- package/dist/hooks/usePanelPositioning.d.ts +22 -0
- package/dist/hooks/usePanelPositioning.d.ts.map +1 -0
- package/dist/hooks/usePanelPositioning.js +10 -0
- package/dist/hooks/usePanelPositioning.js.map +1 -0
- package/dist/hooks/usePanelScale.d.ts +7 -0
- package/dist/hooks/usePanelScale.d.ts.map +1 -0
- package/dist/hooks/usePanelScale.js +22 -0
- package/dist/hooks/usePanelScale.js.map +1 -0
- package/dist/hooks/usePanelStates.d.ts +9 -0
- package/dist/hooks/usePanelStates.d.ts.map +1 -0
- package/dist/hooks/usePanelStates.js +19 -0
- package/dist/hooks/usePanelStates.js.map +1 -0
- package/dist/hooks/usePlayer.d.ts +7 -0
- package/dist/hooks/usePlayer.d.ts.map +1 -0
- package/dist/hooks/usePlayer.js +14 -0
- package/dist/hooks/usePlayer.js.map +1 -0
- package/dist/hooks/useSmartDebouncedState.d.ts +27 -0
- package/dist/hooks/useSmartDebouncedState.d.ts.map +1 -0
- package/dist/hooks/useSmartDebouncedState.js +109 -0
- package/dist/hooks/useSmartDebouncedState.js.map +1 -0
- package/dist/hooks/useTimeController.d.ts +22 -0
- package/dist/hooks/useTimeController.d.ts.map +1 -0
- package/dist/hooks/useTimeController.js +89 -0
- package/dist/hooks/useTimeController.js.map +1 -0
- package/dist/hooks/useTokenMap.d.ts +5 -0
- package/dist/hooks/useTokenMap.d.ts.map +1 -0
- package/dist/hooks/useTokenMap.js +16 -0
- package/dist/hooks/useTokenMap.js.map +1 -0
- package/dist/hooks/useWebGlRenderer.d.ts +34 -0
- package/dist/hooks/useWebGlRenderer.d.ts.map +1 -0
- package/dist/hooks/useWebGlRenderer.js +167 -0
- package/dist/hooks/useWebGlRenderer.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.html +12 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/pretty-chitty.js +190767 -0
- package/dist/pretty-chitty.js.map +1 -0
- package/dist/rendering/CameraSpec.d.ts +22 -0
- package/dist/rendering/CameraSpec.d.ts.map +1 -0
- package/dist/rendering/CameraSpec.js +25 -0
- package/dist/rendering/CameraSpec.js.map +1 -0
- package/dist/rendering/CameraWrapperPerspective.d.ts +44 -0
- package/dist/rendering/CameraWrapperPerspective.d.ts.map +1 -0
- package/dist/rendering/CameraWrapperPerspective.js +481 -0
- package/dist/rendering/CameraWrapperPerspective.js.map +1 -0
- package/dist/rendering/ChitGalleryItemInstance.d.ts +31 -0
- package/dist/rendering/ChitGalleryItemInstance.d.ts.map +1 -0
- package/dist/rendering/ChitGalleryItemInstance.js +75 -0
- package/dist/rendering/ChitGalleryItemInstance.js.map +1 -0
- package/dist/rendering/ChitRenderInstance.d.ts +104 -0
- package/dist/rendering/ChitRenderInstance.d.ts.map +1 -0
- package/dist/rendering/ChitRenderInstance.js +902 -0
- package/dist/rendering/ChitRenderInstance.js.map +1 -0
- package/dist/rendering/ChitRenderSpec.d.ts +80 -0
- package/dist/rendering/ChitRenderSpec.d.ts.map +1 -0
- package/dist/rendering/ChitRenderSpec.js +152 -0
- package/dist/rendering/ChitRenderSpec.js.map +1 -0
- package/dist/rendering/HighlightSpec.d.ts +6 -0
- package/dist/rendering/HighlightSpec.d.ts.map +1 -0
- package/dist/rendering/HighlightSpec.js +6 -0
- package/dist/rendering/HighlightSpec.js.map +1 -0
- package/dist/rendering/LightSpec.d.ts +17 -0
- package/dist/rendering/LightSpec.d.ts.map +1 -0
- package/dist/rendering/LightSpec.js +37 -0
- package/dist/rendering/LightSpec.js.map +1 -0
- package/dist/rendering/LightWrapper.d.ts +19 -0
- package/dist/rendering/LightWrapper.d.ts.map +1 -0
- package/dist/rendering/LightWrapper.js +114 -0
- package/dist/rendering/LightWrapper.js.map +1 -0
- package/dist/rendering/RootChitRenderInstance.d.ts +81 -0
- package/dist/rendering/RootChitRenderInstance.d.ts.map +1 -0
- package/dist/rendering/RootChitRenderInstance.js +372 -0
- package/dist/rendering/RootChitRenderInstance.js.map +1 -0
- package/dist/rendering/Splay.d.ts +23 -0
- package/dist/rendering/Splay.d.ts.map +1 -0
- package/dist/rendering/Splay.js +89 -0
- package/dist/rendering/Splay.js.map +1 -0
- package/dist/rendering/SplayCounter.d.ts +19 -0
- package/dist/rendering/SplayCounter.d.ts.map +1 -0
- package/dist/rendering/SplayCounter.js +18 -0
- package/dist/rendering/SplayCounter.js.map +1 -0
- package/dist/rendering/TextureReferenceCounter.d.ts +12 -0
- package/dist/rendering/TextureReferenceCounter.d.ts.map +1 -0
- package/dist/rendering/TextureReferenceCounter.js +76 -0
- package/dist/rendering/TextureReferenceCounter.js.map +1 -0
- package/dist/rendering/index.d.ts +1 -0
- package/dist/rendering/index.d.ts.map +1 -0
- package/dist/rendering/index.js +2 -0
- package/dist/rendering/index.js.map +1 -0
- package/dist/rendering/outline/DepthVisualizationPass.d.ts +12 -0
- package/dist/rendering/outline/DepthVisualizationPass.d.ts.map +1 -0
- package/dist/rendering/outline/DepthVisualizationPass.js +93 -0
- package/dist/rendering/outline/DepthVisualizationPass.js.map +1 -0
- package/dist/rendering/outline/EffectComposer.d.ts +24 -0
- package/dist/rendering/outline/EffectComposer.d.ts.map +1 -0
- package/dist/rendering/outline/EffectComposer.js +118 -0
- package/dist/rendering/outline/EffectComposer.js.map +1 -0
- package/dist/rendering/outline/FullScreenQuad.d.ts +12 -0
- package/dist/rendering/outline/FullScreenQuad.d.ts.map +1 -0
- package/dist/rendering/outline/FullScreenQuad.js +21 -0
- package/dist/rendering/outline/FullScreenQuad.js.map +1 -0
- package/dist/rendering/outline/IDBasedOutlinePass.d.ts +49 -0
- package/dist/rendering/outline/IDBasedOutlinePass.d.ts.map +1 -0
- package/dist/rendering/outline/IDBasedOutlinePass.js +597 -0
- package/dist/rendering/outline/IDBasedOutlinePass.js.map +1 -0
- package/dist/rendering/outline/OutputPass.d.ts +13 -0
- package/dist/rendering/outline/OutputPass.d.ts.map +1 -0
- package/dist/rendering/outline/OutputPass.js +57 -0
- package/dist/rendering/outline/OutputPass.js.map +1 -0
- package/dist/rendering/outline/RenderPass.d.ts +13 -0
- package/dist/rendering/outline/RenderPass.d.ts.map +1 -0
- package/dist/rendering/outline/RenderPass.js +54 -0
- package/dist/rendering/outline/RenderPass.js.map +1 -0
- package/dist/rendering/outline/SceneWrapper.d.ts +39 -0
- package/dist/rendering/outline/SceneWrapper.d.ts.map +1 -0
- package/dist/rendering/outline/SceneWrapper.js +522 -0
- package/dist/rendering/outline/SceneWrapper.js.map +1 -0
- package/dist/rendering/outline/ShaderPass.d.ts +12 -0
- package/dist/rendering/outline/ShaderPass.d.ts.map +1 -0
- package/dist/rendering/outline/ShaderPass.js +43 -0
- package/dist/rendering/outline/ShaderPass.js.map +1 -0
- package/dist/rendering/outline/index.d.ts +8 -0
- package/dist/rendering/outline/index.d.ts.map +1 -0
- package/dist/rendering/outline/index.js +8 -0
- package/dist/rendering/outline/index.js.map +1 -0
- package/dist/rendering/outline/passes/DebugIDMappingPass.d.ts +20 -0
- package/dist/rendering/outline/passes/DebugIDMappingPass.d.ts.map +1 -0
- package/dist/rendering/outline/passes/DebugIDMappingPass.js +131 -0
- package/dist/rendering/outline/passes/DebugIDMappingPass.js.map +1 -0
- package/dist/rendering/outline/passes/DepthOcclusionPass.d.ts +24 -0
- package/dist/rendering/outline/passes/DepthOcclusionPass.d.ts.map +1 -0
- package/dist/rendering/outline/passes/DepthOcclusionPass.js +95 -0
- package/dist/rendering/outline/passes/DepthOcclusionPass.js.map +1 -0
- package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.d.ts +32 -0
- package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.d.ts.map +1 -0
- package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.js +208 -0
- package/dist/rendering/outline/passes/InterMeshEdgeDetectionPass.js.map +1 -0
- package/dist/rendering/outline/shaders.d.ts +20 -0
- package/dist/rendering/outline/shaders.d.ts.map +1 -0
- package/dist/rendering/outline/shaders.js +103 -0
- package/dist/rendering/outline/shaders.js.map +1 -0
- package/dist/rendering/outline/types.d.ts +14 -0
- package/dist/rendering/outline/types.d.ts.map +1 -0
- package/dist/rendering/outline/types.js +16 -0
- package/dist/rendering/outline/types.js.map +1 -0
- package/dist/utilities/Annotations.d.ts +60 -0
- package/dist/utilities/Annotations.d.ts.map +1 -0
- package/dist/utilities/Annotations.js +171 -0
- package/dist/utilities/Annotations.js.map +1 -0
- package/dist/utilities/BaseTable.d.ts +8 -0
- package/dist/utilities/BaseTable.d.ts.map +1 -0
- package/dist/utilities/BaseTable.js +35 -0
- package/dist/utilities/BaseTable.js.map +1 -0
- package/dist/utilities/BboxUtils.d.ts +3 -0
- package/dist/utilities/BboxUtils.d.ts.map +1 -0
- package/dist/utilities/BboxUtils.js +19 -0
- package/dist/utilities/BboxUtils.js.map +1 -0
- package/dist/utilities/CanvasStack/CanvasOperations.d.ts +140 -0
- package/dist/utilities/CanvasStack/CanvasOperations.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/CanvasOperations.js +403 -0
- package/dist/utilities/CanvasStack/CanvasOperations.js.map +1 -0
- package/dist/utilities/CanvasStack/CanvasStack.d.ts +42 -0
- package/dist/utilities/CanvasStack/CanvasStack.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/CanvasStack.js +128 -0
- package/dist/utilities/CanvasStack/CanvasStack.js.map +1 -0
- package/dist/utilities/CanvasStack/IconCanvas.d.ts +10 -0
- package/dist/utilities/CanvasStack/IconCanvas.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/IconCanvas.js +15 -0
- package/dist/utilities/CanvasStack/IconCanvas.js.map +1 -0
- package/dist/utilities/CanvasStack/ImageCache.d.ts +8 -0
- package/dist/utilities/CanvasStack/ImageCache.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/ImageCache.js +29 -0
- package/dist/utilities/CanvasStack/ImageCache.js.map +1 -0
- package/dist/utilities/CanvasStack/ImageColorOverlayer.d.ts +2 -0
- package/dist/utilities/CanvasStack/ImageColorOverlayer.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/ImageColorOverlayer.js +31 -0
- package/dist/utilities/CanvasStack/ImageColorOverlayer.js.map +1 -0
- package/dist/utilities/CanvasStack/PlayerCanvas.d.ts +10 -0
- package/dist/utilities/CanvasStack/PlayerCanvas.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/PlayerCanvas.js +15 -0
- package/dist/utilities/CanvasStack/PlayerCanvas.js.map +1 -0
- package/dist/utilities/CanvasStack/ReactCanvas.d.ts +133 -0
- package/dist/utilities/CanvasStack/ReactCanvas.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/ReactCanvas.js +161 -0
- package/dist/utilities/CanvasStack/ReactCanvas.js.map +1 -0
- package/dist/utilities/CanvasStack/RichTextRenderer.d.ts +63 -0
- package/dist/utilities/CanvasStack/RichTextRenderer.d.ts.map +1 -0
- package/dist/utilities/CanvasStack/RichTextRenderer.js +523 -0
- package/dist/utilities/CanvasStack/RichTextRenderer.js.map +1 -0
- package/dist/utilities/CardMesh.d.ts +17 -0
- package/dist/utilities/CardMesh.d.ts.map +1 -0
- package/dist/utilities/CardMesh.js +44 -0
- package/dist/utilities/CardMesh.js.map +1 -0
- package/dist/utilities/Dice.d.ts +24 -0
- package/dist/utilities/Dice.d.ts.map +1 -0
- package/dist/utilities/Dice.js +148 -0
- package/dist/utilities/Dice.js.map +1 -0
- package/dist/utilities/EventChannel.d.ts +13 -0
- package/dist/utilities/EventChannel.d.ts.map +1 -0
- package/dist/utilities/EventChannel.js +47 -0
- package/dist/utilities/EventChannel.js.map +1 -0
- package/dist/utilities/GalleryItemConversion.d.ts +4 -0
- package/dist/utilities/GalleryItemConversion.d.ts.map +1 -0
- package/dist/utilities/GalleryItemConversion.js +28 -0
- package/dist/utilities/GalleryItemConversion.js.map +1 -0
- package/dist/utilities/IUpdatingCanvas.d.ts +19 -0
- package/dist/utilities/IUpdatingCanvas.d.ts.map +1 -0
- package/dist/utilities/IUpdatingCanvas.js +2 -0
- package/dist/utilities/IUpdatingCanvas.js.map +1 -0
- package/dist/utilities/LayoutHelper.d.ts +34 -0
- package/dist/utilities/LayoutHelper.d.ts.map +1 -0
- package/dist/utilities/LayoutHelper.js +451 -0
- package/dist/utilities/LayoutHelper.js.map +1 -0
- package/dist/utilities/ObjectWithProps.d.ts +5 -0
- package/dist/utilities/ObjectWithProps.d.ts.map +1 -0
- package/dist/utilities/ObjectWithProps.js +65 -0
- package/dist/utilities/ObjectWithProps.js.map +1 -0
- package/dist/utilities/OutlineCanvas.d.ts +12 -0
- package/dist/utilities/OutlineCanvas.d.ts.map +1 -0
- package/dist/utilities/OutlineCanvas.js +31 -0
- package/dist/utilities/OutlineCanvas.js.map +1 -0
- package/dist/utilities/OutlineGeometry.d.ts +3 -0
- package/dist/utilities/OutlineGeometry.d.ts.map +1 -0
- package/dist/utilities/OutlineGeometry.js +57 -0
- package/dist/utilities/OutlineGeometry.js.map +1 -0
- package/dist/utilities/ParameterizedCanvas.d.ts +13 -0
- package/dist/utilities/ParameterizedCanvas.d.ts.map +1 -0
- package/dist/utilities/ParameterizedCanvas.js +85 -0
- package/dist/utilities/ParameterizedCanvas.js.map +1 -0
- package/dist/utilities/RequestSharedAnimationFrame.d.ts +2 -0
- package/dist/utilities/RequestSharedAnimationFrame.d.ts.map +1 -0
- package/dist/utilities/RequestSharedAnimationFrame.js +16 -0
- package/dist/utilities/RequestSharedAnimationFrame.js.map +1 -0
- package/dist/utilities/StaticImage.d.ts +19 -0
- package/dist/utilities/StaticImage.d.ts.map +1 -0
- package/dist/utilities/StaticImage.js +38 -0
- package/dist/utilities/StaticImage.js.map +1 -0
- package/dist/utilities/SvgExtruder.d.ts +20 -0
- package/dist/utilities/SvgExtruder.d.ts.map +1 -0
- package/dist/utilities/SvgExtruder.js +238 -0
- package/dist/utilities/SvgExtruder.js.map +1 -0
- package/dist/utilities/ThreeDisposer.d.ts +11 -0
- package/dist/utilities/ThreeDisposer.d.ts.map +1 -0
- package/dist/utilities/ThreeDisposer.js +53 -0
- package/dist/utilities/ThreeDisposer.js.map +1 -0
- package/dist/utilities/zIndex.d.ts +14 -0
- package/dist/utilities/zIndex.d.ts.map +1 -0
- package/dist/utilities/zIndex.js +14 -0
- package/dist/utilities/zIndex.js.map +1 -0
- package/package.json +138 -0
- package/src/library/assets/checker.svg +4 -0
- package/src/library/assets/cutout.svg +22 -0
- package/src/library/components/ActionLogDisplay.tsx +183 -0
- package/src/library/components/ActionLogHistory.tsx +127 -0
- package/src/library/components/ActionLogHistoryDisplay.tsx +21 -0
- package/src/library/components/ActionLogSidebar.tsx +17 -0
- package/src/library/components/BottomBar.tsx +78 -0
- package/src/library/components/BottomBarBreak.tsx +12 -0
- package/src/library/components/BottomBarButton.tsx +181 -0
- package/src/library/components/CanvasLibraryViewer.tsx +86 -0
- package/src/library/components/ChitLibraryViewer.tsx +168 -0
- package/src/library/components/ClientTrustMatchViewer.tsx +83 -0
- package/src/library/components/ContextGalleryDisplay.tsx +72 -0
- package/src/library/components/GalleryDisplay.tsx +57 -0
- package/src/library/components/GalleryPlayground.tsx +50 -0
- package/src/library/components/GalleryViewer.tsx +773 -0
- package/src/library/components/GameDesigner.tsx +39 -0
- package/src/library/components/GameDialog.tsx +43 -0
- package/src/library/components/GameModalBackdrop.tsx +47 -0
- package/src/library/components/GameModalDialog.tsx +77 -0
- package/src/library/components/LiveButton.tsx +26 -0
- package/src/library/components/MatchEndDisplay.tsx +120 -0
- package/src/library/components/MatchViewer.tsx +111 -0
- package/src/library/components/ObjectWithPropsEditor.tsx +169 -0
- package/src/library/components/Panel/MultiPanel.tsx +276 -0
- package/src/library/components/Panel/PanelContents.tsx +359 -0
- package/src/library/components/Panel/PanelTabStack.tsx +103 -0
- package/src/library/components/Panel/SinglePanel.tsx +75 -0
- package/src/library/components/Panel/ViewerWrapper.tsx +131 -0
- package/src/library/components/Panel/ViewerZoomControls.tsx +216 -0
- package/src/library/components/Panel/util.ts +7 -0
- package/src/library/components/PanelSpark.tsx +112 -0
- package/src/library/components/PersistentCanvas.tsx +81 -0
- package/src/library/components/PlayerImage.tsx +40 -0
- package/src/library/components/Playground.tsx +285 -0
- package/src/library/components/PromptControls.tsx +132 -0
- package/src/library/components/SelectableItemAndStage.tsx +49 -0
- package/src/library/components/SettingsDisplay.tsx +142 -0
- package/src/library/components/SparkLineChart.tsx +307 -0
- package/src/library/components/StageAndEditor.tsx +28 -0
- package/src/library/components/TimeControlBar.tsx +71 -0
- package/src/library/components/TokenizedMessage.tsx +206 -0
- package/src/library/components/TopBar.tsx +90 -0
- package/src/library/components/TopBarDropdown.tsx +94 -0
- package/src/library/components/TopBarPlayers.tsx +163 -0
- package/src/library/components/UpdatingCanvasImage.tsx +25 -0
- package/src/library/components/UpdatingCanvasViewer.tsx +62 -0
- package/src/library/components/Viewer.tsx +360 -0
- package/src/library/components/index.ts +0 -0
- package/src/library/game/Chit.test.ts +66 -0
- package/src/library/game/Chit.ts +575 -0
- package/src/library/game/ClientTimeState.ts +42 -0
- package/src/library/game/ClockDetails.ts +24 -0
- package/src/library/game/Connection.test.ts +50 -0
- package/src/library/game/Connection.ts +122 -0
- package/src/library/game/ConnectionObject.ts +13 -0
- package/src/library/game/ConnectionTransport.ts +52 -0
- package/src/library/game/DropdownChit.tsx +17 -0
- package/src/library/game/GalleryItemChitChildrenSource.ts +31 -0
- package/src/library/game/GalleryItemRawSource.ts +15 -0
- package/src/library/game/Game.ts +55 -0
- package/src/library/game/GameBagChit.ts +42 -0
- package/src/library/game/GameButton.ts +127 -0
- package/src/library/game/GameDeckChit.ts +77 -0
- package/src/library/game/GameTheme.ts +122 -0
- package/src/library/game/Match.ts +187 -0
- package/src/library/game/MatchConnection.ts +5 -0
- package/src/library/game/MatchStorage.ts +51 -0
- package/src/library/game/ModalState.ts +29 -0
- package/src/library/game/OrderedOutlet.ts +198 -0
- package/src/library/game/Pick.ts +314 -0
- package/src/library/game/PlayerChit.ts +43 -0
- package/src/library/game/PlayerInfo.ts +30 -0
- package/src/library/game/PlayerPromptStatusChit.ts +20 -0
- package/src/library/game/Prompt.ts +292 -0
- package/src/library/game/RootChit.ts +54 -0
- package/src/library/game/SparkChit.ts +97 -0
- package/src/library/game/StaticChitTypeRegistry.ts +3 -0
- package/src/library/game/Turn.test.ts +611 -0
- package/src/library/game/Turn.ts +1249 -0
- package/src/library/game/TurnState.ts +187 -0
- package/src/library/game/clientTransport/ClientPrompts.ts +102 -0
- package/src/library/game/clientTransport/ClientStatus.ts +36 -0
- package/src/library/game/clientTransport/ClientTime.ts +256 -0
- package/src/library/game/index.ts +0 -0
- package/src/library/game/serverTransport/ServerPrompts.ts +76 -0
- package/src/library/game/serverTransport/ServerStatus.ts +31 -0
- package/src/library/game/serverTransport/ServerTime.ts +74 -0
- package/src/library/hooks/useChits.ts +32 -0
- package/src/library/hooks/useConnection.tsx +16 -0
- package/src/library/hooks/useEventChannelState.ts +33 -0
- package/src/library/hooks/useGame.tsx +16 -0
- package/src/library/hooks/useGameTheme.tsx +12 -0
- package/src/library/hooks/useModalState.tsx +13 -0
- package/src/library/hooks/usePanelPositioning.tsx +31 -0
- package/src/library/hooks/usePanelScale.tsx +23 -0
- package/src/library/hooks/usePanelStates.ts +30 -0
- package/src/library/hooks/usePlayer.tsx +15 -0
- package/src/library/hooks/useSmartDebouncedState.ts +161 -0
- package/src/library/hooks/useTimeController.tsx +108 -0
- package/src/library/hooks/useTokenMap.ts +20 -0
- package/src/library/hooks/useWebGlRenderer.tsx +227 -0
- package/src/library/index.ts +116 -0
- package/src/library/rendering/CameraSpec.ts +25 -0
- package/src/library/rendering/CameraWrapperPerspective.ts +612 -0
- package/src/library/rendering/ChitGalleryItemInstance.ts +108 -0
- package/src/library/rendering/ChitRenderInstance.ts +1141 -0
- package/src/library/rendering/ChitRenderSpec.ts +213 -0
- package/src/library/rendering/HighlightSpec.ts +5 -0
- package/src/library/rendering/LightSpec.ts +41 -0
- package/src/library/rendering/LightWrapper.ts +152 -0
- package/src/library/rendering/RootChitRenderInstance.ts +460 -0
- package/src/library/rendering/Splay.ts +118 -0
- package/src/library/rendering/SplayCounter.tsx +37 -0
- package/src/library/rendering/TextureReferenceCounter.ts +86 -0
- package/src/library/rendering/index.ts +0 -0
- package/src/library/rendering/outline/DepthVisualizationPass.ts +117 -0
- package/src/library/rendering/outline/EffectComposer.ts +187 -0
- package/src/library/rendering/outline/FullScreenQuad.ts +32 -0
- package/src/library/rendering/outline/IDBasedOutlinePass.ts +741 -0
- package/src/library/rendering/outline/OutputPass.ts +88 -0
- package/src/library/rendering/outline/RenderPass.ts +72 -0
- package/src/library/rendering/outline/SceneWrapper.ts +617 -0
- package/src/library/rendering/outline/ShaderPass.ts +50 -0
- package/src/library/rendering/outline/index.ts +8 -0
- package/src/library/rendering/outline/passes/DebugIDMappingPass.ts +154 -0
- package/src/library/rendering/outline/passes/DepthOcclusionPass.ts +106 -0
- package/src/library/rendering/outline/passes/InterMeshEdgeDetectionPass.ts +244 -0
- package/src/library/rendering/outline/shaders.ts +110 -0
- package/src/library/rendering/outline/types.ts +25 -0
- package/src/library/utilities/Annotations.ts +188 -0
- package/src/library/utilities/BaseTable.tsx +58 -0
- package/src/library/utilities/BboxUtils.ts +23 -0
- package/src/library/utilities/CanvasStack/CanvasOperations.tsx +630 -0
- package/src/library/utilities/CanvasStack/CanvasStack.ts +191 -0
- package/src/library/utilities/CanvasStack/IconCanvas.tsx +17 -0
- package/src/library/utilities/CanvasStack/ImageCache.ts +38 -0
- package/src/library/utilities/CanvasStack/ImageColorOverlayer.ts +36 -0
- package/src/library/utilities/CanvasStack/PlayerCanvas.tsx +17 -0
- package/src/library/utilities/CanvasStack/ReactCanvas.tsx +293 -0
- package/src/library/utilities/CanvasStack/RichTextRenderer.ts +719 -0
- package/src/library/utilities/CardMesh.ts +55 -0
- package/src/library/utilities/Dice.tsx +183 -0
- package/src/library/utilities/EventChannel.ts +52 -0
- package/src/library/utilities/GalleryItemConversion.ts +30 -0
- package/src/library/utilities/IUpdatingCanvas.ts +14 -0
- package/src/library/utilities/LayoutHelper.ts +586 -0
- package/src/library/utilities/ObjectWithProps.ts +52 -0
- package/src/library/utilities/OutlineCanvas.tsx +45 -0
- package/src/library/utilities/OutlineGeometry.ts +69 -0
- package/src/library/utilities/ParameterizedCanvas.ts +78 -0
- package/src/library/utilities/RequestSharedAnimationFrame.ts +16 -0
- package/src/library/utilities/StaticImage.tsx +58 -0
- package/src/library/utilities/SvgExtruder.ts +330 -0
- package/src/library/utilities/ThreeDisposer.ts +66 -0
- 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
|
+
}
|