2022-07-17 22:26:32 +00:00
<!DOCTYPE html>
2023-04-06 05:16:50 +00:00
< html lang = "en-US" dir = "ltr" >
2022-07-17 22:26:32 +00:00
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< title > Creating Features | Profectus< / title >
< meta name = "description" content = "A game engine that grows with you." >
2025-01-16 02:16:49 +00:00
< meta name = "generator" content = "VitePress v1.5.0" >
< link rel = "preload stylesheet" href = "/assets/style.CrJnQ4Np.css" as = "style" >
< link rel = "preload stylesheet" href = "/vp-icons.css" as = "style" >
< script type = "module" src = "/assets/app.DO9xH676.js" > < / script >
< link rel = "preload" href = "/assets/inter-roman-latin.Di8DUHzh.woff2" as = "font" type = "font/woff2" crossorigin = "" >
< link rel = "modulepreload" href = "/assets/chunks/theme.BNJzm9gY.js" >
< link rel = "modulepreload" href = "/assets/chunks/framework.P9qPzDnn.js" >
2025-01-16 20:25:34 +00:00
< link rel = "modulepreload" href = "/assets/guide_advanced-concepts_creating-features.md.BH93GYXK.lean.js" >
2025-01-16 02:16:49 +00:00
< link rel = "stylesheet" href = "https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,400;0,600;1,400" >
< link rel = "apple-touch-icon" sizes = "180x180" href = "/apple-touch-icon.png" >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "/favicon-32x32.png" >
< link rel = "icon" type = "image/png" sizes = "16x16" href = "/favicon-16x16.png" >
< link rel = "manifest" href = "/site.webmanifest" >
< meta name = "og:description" content = "A game engine that grows with you" >
< meta name = "og:image" content = "/Logo.png" >
< script id = "check-mac-os" > document . documentElement . classList . toggle ( "mac" , /Mac|iPhone|iPod|iPad/i . test ( navigator . platform ) ) ; < / script >
2022-07-17 22:26:32 +00:00
< / head >
< body >
2025-01-16 02:16:49 +00:00
< div id = "app" > < div class = "Layout" data-v-5d98c3a5 > <!-- [ --> <!-- ] --> <!-- [ --> < span tabindex = "-1" data-v-0f60ec36 > < / span > < a href = "#VPContent" class = "VPSkipLink visually-hidden" data-v-0f60ec36 > Skip to content < / a > <!-- ] --> <!-- --> < header class = "VPNav" data-v-5d98c3a5 data-v-ae24b3ad > < div class = "VPNavBar" data-v-ae24b3ad data-v-6aa21345 > < div class = "wrapper" data-v-6aa21345 > < div class = "container" data-v-6aa21345 > < div class = "title" data-v-6aa21345 > < div class = "VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4 > < a class = "title" href = "/" data-v-1168a8e4 > <!-- [ --> <!-- ] --> <!-- [ --> < img class = "VPImage logo" src = "/favicon.svg" alt data-v-8426fc1a > <!-- ] --> < span data-v-1168a8e4 > Profectus< / span > <!-- [ --> <!-- ] --> < / a > < / div > < / div > < div class = "content" data-v-6aa21345 > < div class = "content-body" data-v-6aa21345 > <!-- [ --> <!-- ] --> < div class = "VPNavBarSearch search" data-v-6aa21345 > <!-- --> < / div > < nav aria-labelledby = "main-nav-aria-label" class = "VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963 > < span id = "main-nav-aria-label" class = "visually-hidden" data-v-dc692963 > Main Navigation < / span > <!-- [ --> <!-- [ --> < a class = "VPLink link VPNavBarMenuLink active" href = "/guide/" tabindex = "0" data-v-dc692963 data-v-e56f3d57 > <!-- [ --> < span data-v-e56f3d57 > Guide< / span > <!-- ] --> < / a > <!-- ] --> <!-- [ --> < a class = "VPLink link VPNavBarMenuLink" href = "/api" tabindex = "0" data-v-dc692963 data-v-e56f3d57 > <!-- [ --> < span data-v-e56f3d57 > API< / span > <!-- ] --> < / a > <!-- ] --> <!-- [ --> < a class = "VPLink link vp-external-link-icon VPNavBarMenuLink" href = "https://forums.moddingtree.com" target = "_blank" rel = "noreferrer" tabindex = "0" data-v-dc692963 data-v-e56f3d57 > <!-- [ --> < span data-v-e56f3d57 > Forums< / span > <!-- ] --> < / a > <!-- ] --> <!-- ] --> < / nav > <!-- --> <!-- --> < div class = "VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406 > <!-- [ --> < a class = "VPSocialLink no-icon" href = "https://discord.gg/yJ4fjnjU54" aria-label = "discord" target = "_blank" rel = "noopener" data-v-7bc22406 data-v-bd121fe5 > < span class = "vpi-social-discord" > < / span > < / a > < a class = "VPSocialLink no-icon" href = "https://code.incremental.social/profectus/Profectus" aria-label target = "_blank" rel = "noopener" data-v-7bc22406 data-v-bd121fe5 > < svg id = "erAGSmQsg5F1" xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" viewBox = "0 0 334.73599 164" shape-rendering = "geometricPrecision" text-rendering = "geometricPrecision" > < g transform = "translate(-1.000199-.435301)" > < path d = "M271.24983,105.65061q-.36,4.08-.31,8.47.05,4.56-4.49,8.19-9.11,7.28-17.84-.35c-5.3-4.65-3.99-10.34-4.42-16.25-11.33-3.3-21.65-12.470005-22.8-24.590005q-.53-5.59-.95-11.21-.04-.52-.53-.64c-4.87-1.23-7.99-2.08-10.29-6.94-3.9-8.23.79-15.35,8.92-18.12.175893-.059771.287747-.229624.27-.41-.74-8.02-1.4-15.08,1.56-22.79c3.11-8.09,9.57-14.26,17.53-17.62q4.11-1.73,10.44-2.07q8.68-.46,17.4-.26q16.85.37,26.28,13.59c6.43,9.02,5.96,18.48,5.03,29.16q-.05.51.45.64c13.7,3.61,12.56,22.82-1.42,24.78-.330958.046125-.58496.316783-.61.65-.38,5.39-.17,11.34-2.1,16.46q-5.7,15.160005-22.12,19.310005Z" fill = "#6b438b" / > < path d = "M142.39,41.700605l-31,11.57c-.187231.072269-.39801.046259-.563762-.069568s-.265293-.306667-.266238-.510432l.01-19.31q0-.55.51-.74q23.03-8.68,46.02-17.25c2.57-.96,4.78-.76,7.42-.75.129956,0,.254589.051625.346482.143518s.143518.216526.143518.346482v132.320005c.000017.211265-.084586.413735-.23491.56218s-.353842.230494-.56509.22782l-19.99-.01q-1.17,0-1.17-1.16v-104.910005c.000142-.1604-.078229-.310715-.209821-.40243s-.299742-.113219-.450179-.05757Z" fill = "#eceff4" / > < path d = "M59.21,74.480605h33.95c.222782,0,.436439.0885.59397.24603s.24603.371188.24603.59397l-.01,18.96c0,.222782-.0885.436439-.24603.59397s-.371188.24603-.59397.24603l-33.88.03c-.222782,0-.436439.0885-.59397.24603s-.24603.371188-.24603.59397l-.08,38.580005c0,.222782-.0885.436439-.24603.59397s-.371188.24603-.59397.24603l-20.11-.01c-.222782,0-.436439-.0885-.59397-.24603s-.24603-.371188-.24603-.59397l-.01-38.580005c0-.222782-.0885-.436439-.24603-.59397s-.371188-.24603-.59397-.24603h-33.87c-.222782,0-.436439-.0885-.59397-.24603s-.24603-.371188-.24603-.59397l.02-19.02c0-.22
< span class = "line" > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > interface< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > Settings< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > {< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > hideChallenges< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > :< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > boolean< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < / span > < / code > < / pre > < / div > < p > Next you must set the default value of this setting when the settings is loaded, which happens during the < code > loadSettings< / code > event emitted on the < a href = "/api/game/events/variables/globalBus" > global bus< / a > . This is how that looks like for the same < code > hideChallenges< / code > setting from above:< / p > < div class = "language-ts vp-adaptive-theme" > < button title = "Copy Code" class = "copy" > < / button > < span class = "lang" > ts< / span > < pre class = "shiki shiki-themes material-theme-palenight material-theme-palenight vp-code" tabindex = "0" > < code > < span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > globalBus< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > on< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#C3E88D;--shiki-dark:#C3E88D;" > loadSettings< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > settings< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > {< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > settings< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > hideChallenges< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ??=< / span > < span style = "--shiki-light:#FF9CAC;--shiki-dark:#FF9CAC;" > false< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > )< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span > < / code > < / pre > < / div > < p > Finally, you' ll need to register a Vue component to the settings menu so the player can actually modify this setting. Here' s the example for the < code > hideChallenges< / code > setting:< / p > < div class = "language-ts vp-adaptive-theme" > < button title = "Copy Code" class = "copy" > < / button > < span class = "lang" > ts< / span > < pre class = "shiki shiki-themes material-theme-palenight material-theme-palenight vp-code" tabindex = "0" > < code > < span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > globalBus< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > on< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#C3E88D;--shiki-dark:#C3E88D;" > setupVue< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ()< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < / span >
< span class = "line" > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > registerSettingField< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ()< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > < < / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > Toggle< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > title< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ={< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > < span class< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > =< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#C3E88D;--shiki-dark:#C3E88D;" > option-title< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > > < / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > Hide maxed challenges< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > < desc> Hide challenges that have been fully completed.< /desc> < / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > < /span> < / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > onUpdate< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > :< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > modelValue< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ={< / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > value< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (settings< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > hideChallenges < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > =< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > value)< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > modelValue< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ={< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > settings.hideChallenges< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > /> < / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > ))< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > )< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span > < / code > < / pre > < / div > < h2 id = "updating-features" tabindex = "-1" > Updating Features < a class = "header-anchor" href = "#updating-features" aria-label = "Permalink to "Updating Features"" > < / a > < / h2 > < p > If your custom feature requires running some sort of update method every tick, you' ll want to search layers when they' re added for any features of this type (using the < a href = "/api/features/feature/functions/findFeatures" > findFeatures< / a > utility), add an event handler for every < code > update< / code > /< code > postUpdate< / code > /< code > preUpdate< / code > , and clean it up when the layer is removed. Here' s how this looks like for the < code > action< / code > feature:< / p > < div class = "language-ts vp-adaptive-theme" > < button title = "Copy Code" class = "copy" > < / button > < span class = "lang" > ts< / span > < pre class = "shiki shiki-themes material-theme-palenight material-theme-palenight vp-code" tabindex = "0" > < code > < span class = "line" > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > const< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > listeners< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > :< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > Record< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > < < / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > string< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > Unsubscribe< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > |< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > undefined< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > > < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > =< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > {};< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > globalBus< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > on< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#C3E88D;--shiki-dark:#C3E88D;" > addLayer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > layer< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > {< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > const< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > actions< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > :< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > Action< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > [] < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > =< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > findFeatures< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > (< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > layer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > ActionType< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > ) < / span > < span style = "--shiki-light:#89DDFF;--shiki-light-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic;" > as< / span > < span style = "--shiki-light:#FFCB6B;--shiki-dark:#FFCB6B;" > Action< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > []< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > listeners< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > [< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > layer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > id< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > ] < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > =< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > layer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > on< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > (< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#C3E88D;--shiki-dark:#C3E88D;" > postUpdate< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > diff< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > {< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > actions< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > forEach< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > (< / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > action< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > action< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > update< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > (< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > diff< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > ))< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > )< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > )< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > globalBus< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#82AAFF;--shiki-dark:#82AAFF;" > on< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > (< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#C3E88D;--shiki-dark:#C3E88D;" > removeLayer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > " < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ,< / span > < span style = "--shiki-light:#BABED8;--shiki-light-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic;" > layer< / span > < span style = "--shiki-light:#C792EA;--shiki-dark:#C792EA;" > => < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > {< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#676E95;--shiki-light-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic;" > // unsubscribe from postUpdate< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > listeners< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > [< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > layer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > id< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > ]< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ?.< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > ()< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span >
< span class = "line" > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > listeners< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > [< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > layer< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > .< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > id< / span > < span style = "--shiki-light:#F07178;--shiki-dark:#F07178;" > ] < / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > =< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > undefined;< / span > < / span >
2025-01-16 20:25:34 +00:00
< span class = "line" > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > }< / span > < span style = "--shiki-light:#BABED8;--shiki-dark:#BABED8;" > )< / span > < span style = "--shiki-light:#89DDFF;--shiki-dark:#89DDFF;" > ;< / span > < / span > < / code > < / pre > < / div > < / div > < / div > < / main > < footer class = "VPDocFooter" data-v-39a288b8 data-v-e257564d > <!-- [ --> <!-- ] --> < div class = "edit-info" data-v-e257564d > < div class = "edit-link" data-v-e257564d > < a class = "VPLink link vp-external-link-icon no-icon edit-link-button" href = "https://code.incremental.social/profectus/profectus-docs/_edit/main/docs/guide/advanced-concepts/creating-features.md" target = "_blank" rel = "noreferrer" data-v-e257564d > <!-- [ --> < span class = "vpi-square-pen edit-link-icon" data-v-e257564d > < / span > Edit this page<!-- ] --> < / a > < / div > < div class = "last-updated" data-v-e257564d > < p class = "VPLastUpdated" data-v-e257564d data-v-e98dd255 > Last updated: < time datetime = "2025-01-16T20:23:51.000Z" data-v-e98dd255 > < / time > < / p > < / div > < / div > < nav class = "prev-next" aria-labelledby = "doc-footer-aria-label" data-v-e257564d > < span class = "visually-hidden" id = "doc-footer-aria-label" data-v-e257564d > Pager< / span > < div class = "pager" data-v-e257564d > < a class = "VPLink link pager-link prev" href = "/guide/advanced-concepts/boards" data-v-e257564d > <!-- [ --> < span class = "desc" data-v-e257564d > Previous page< / span > < span class = "title" data-v-e257564d > Boards< / span > <!-- ] --> < / a > < / div > < div class = "pager" data-v-e257564d > < a class = "VPLink link pager-link next" href = "/guide/advanced-concepts/dynamic-layers" data-v-e257564d > <!-- [ --> < span class = "desc" data-v-e257564d > Next page< / span > < span class = "title" data-v-e257564d > Dynamic Layers< / span > <!-- ] --> < / a > < / div > < / nav > < / footer > <!-- [ --> <!-- ] --> < / div > < / div > < / div > <!-- [ --> <!-- ] --> < / div > < / div > <!-- --> <!-- [ --> <!-- ] --> < / div > < / div >
< script > w i n d o w . _ _ V P _ H A S H _ M A P _ _ = J S O N . p a r s e ( " { \ " a p i _ a p p . m d \ " : \ " D y P t y R Q e \ " , \ " a p i _ c o m p o n e n t s _ c o n t e x t . m d \ " : \ " D v 8 4 B L B Z \ " , \ " a p i _ c o m p o n e n t s _ e r r o r . m d \ " : \ " D c I M B z D t \ " , \ " a p i _ c o m p o n e n t s _ f i e l d s _ d a n g e r b u t t o n . m d \ " : \ " D q K c f 7 R 9 \ " , \ " a p i _ c o m p o n e n t s _ f i e l d s _ f e e d b a c k b u t t o n . m d \ " : \ " q Q V h L z 6 b \ " , \ " a p i _ c o m p o n e n t s _ f i e l d s _ s e l e c t . m d \ " : \ " T 3 D o J 4 m W \ " , \ " a p i _ c o m p o n e n t s _ f i e l d s _ s l i d e r . m d \ " : \ " C a U e - 1 r - \ " , \ " a p i _ c o m p o n e n t s _ f i e l d s _ t e x t . m d \ " : \ " C o n H x 9 R k \ " , \ " a p i _ c o m p o n e n t s _ f i e l d s _ t o g g l e . m d \ " : \ " B 3 w M p A o m \ " , \ " a p i _ c o m p o n e n t s _ g a m e . m d \ " : \ " C V I O u 3 e i \ " , \ " a p i _ c o m p o n e n t s _ h o t k e y . m d \ " : \ " B p i N W N _ _ \ " , \ " a p i _ c o m p o n e n t s _ l a y e r . m d \ " : \ " C a t c - 2 d 2 \ " , \ " a p i _ c o m p o n e n t s _ l a y o u t _ c o l l a p s i b l e . m d \ " : \ " D 0 4 8 a J W 7 \ " , \ " a p i _ c o m p o n e n t s _ l a y o u t _ c o l u m n . m d \ " : \ " D Z N u q m d L \ " , \ " a p i _ c o m p o n e n t s _ l a y o u t _ r o w . m d \ " : \ " z N f o 7 t 6 2 \ " , \ " a p i _ c o m p o n e n t s _ l a y o u t _ s p a c e r . m d \ " : \ " C W L K m K L y \ " , \ " a p i _ c o m p o n e n t s _ l a y o u t _ s t i c k y . m d \ " : \ " D Q z p a I _ v \ " , \ " a p i _ c o m p o n e n t s _ l a y o u t _ v e r t i c a l r u l e . m d \ " : \ " D 5 b n Z Y 0 d \ " , \ " a p i _ c o m p o n e n t s _ m a t h _ f l o o r . m d \ " : \ " B I b u q O I O \ " , \ " a p i _ c o m p o n e n t s _ m a t h _ f r a c t i o n . m d \ " : \ " K 8 N 1 6 v 6 X \ " , \ " a p i _ c o m p o n e n t s _ m a t h _ s q r t . m d \ " : \ " B c C O l k a 8 \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ a d d i c t i o n w a r n i n g . m d \ " : \ " B c r _ L v P 2 \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ c l o u d s a v e r e s o l v e r . m d \ " : \ " C t l C n y Q V \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ g a m e o v e r s c r e e n . m d \ " : \ " B L c U W z d Y \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ i n f o . m d \ " : \ " D 0 M _ D G I L \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ m o d a l . m d \ " : \ " D M j h N 9 R 0 \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ n a n s c r e e n . m d \ " : \ " C q Q K a D 4 B \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ o p t i o n s . m d \ " : \ " C Z p D T k M 8 \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ s a v e . m d \ " : \ " C G z 8 Q t 7 P \ " , \ " a p i _ c o m p o n e n t s _ m o d a l s _ s a v e s m a n a g e r . m d \ " : \ " C r s W 7 U a v \ " , \ " a p i _ c o m p o n e n t s _ n a v . m d \ " : \ " X P k Y t x V E \ " , \ " a p i _ c o m p o n e n t s _ n o d e . m d \ " : \ " D v _ o c T Y r \ " , \ " a p i _ c o m p o n e n t s _ n o t i f . m d \ " : \ " C e D q R G 5 x \ " , \ " a p i _ c o m p o n e n t s _ p r o f e c t u s . m d \ " : \ " C l Y G O P O 7 \ " , \ " a p i _ c o m p o n e n t s _ t p s . m d \ " : \ " D V s H - n K n \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ c o l o r t e x t . m d \ " : \ " C f r K a c x 6 \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ c r e a t e c o l l a p s i b l e a c h i e v e m e n t s . m d \ " : \ " l 9 7 D 4 e b e \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ c r e a t e c o l l a p s i b l e m o d i f i e r s e c t i o n s . m d \ " : \ " D S i u z Q q j \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ c r e a t e f o r m u l a p r e v i e w . m d \ " : \ " V k M l S Z n n \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ c r e a t e l a y e r t r e e n o d e . m d \ " : \ " P h Z M r f w 7 \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ c r e a t e r e s e t b u t t o n . m d \ " : \ " D O E 7 - a a Y \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ e s t i m a t e t i m e . m d \ " : \ " D N O j 1 2 T 7 \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ i s r e n d e r e d . m d \ " : \ " C 7 4 j 6 6 m 3 \ " , \ " a p i _ d a t a _ c o m m o n _ f u n c t i o n s _ s e t u p s e l e c t a b l e . m d \ " : \ " C R D U f 8 a c \ " , \ " a p i _ d a t a _ c o m m o n _ i n d e x . m d \ " : \ " C d i v B u z M \ " , \ " a p i _ d a t a _ c o m m o n _ i n t e r f a c e s _ l a y e r t r e e n o d e . m d \ " : \ " D B 0 j F v 1 Y \ " , \ " a p i _ d a t a _ c o m m o n _ i n t e r f a c e s _ l a y e r t r e e n o d e o p t i o n s . m d \ " : \ " D X 5 e b l t - \ " , \ " a p i _ d a t a _ c o m m o n _ i n t e r f a c e s _ r e s e t b u t t o n . m d \ " : \ " C e E O M y E n \ " , \ " a p i _ d a t a _ c o m m o n _ i n t e r f a c e s _ r e s e t b u t t o n o p t i o n s . m d \ " : \ " D a r d S R - 9 \ " , \ " a p i _ d a t a _ c o m m o n _ i n t e r f a c e s _ s e c t i o n . m d \ " : \ " C Y 0 R 0 s W _ \ " , \ " a p i _ d a t a _ c o m p o n e n t s _ c h a n g e l o g . m d \ " : \ " D O 6 _ K 2 I i \ " , \ " a p i _ d a t a _ p r o j e n t r y _ f u n c t i o n s _ f i x o l d s a v e . m d \ " : \ " B R D x b b D s \ " , \ " a p i _ d a t a _ p r o j e n t r y _ f u n c t i o n s _ g e t i n i t i a l l a y e r s . m d \ " : \ " D k Q B g a D 5 \ " , \ " a p i _ d a t a _ p r o j e n t r y _ i n d e x . m d \ " : \ " B V o S s W I 5 \ " , \ " a p i _ d a t a _ p r o j e n t r y _ v a r i a b l e s _ h a s w o n . m d \ " : \ " C L Y y h E _ X \ " , \ " a p i _ d a t a _ t h e m e s _ e n u m e r a t i o n s _ t h e m e s . m d \ " : \ " B _ B 2 k x 0 - \ " , \ " a p i _ d a t a _ t h e m e s _ i n d e x . m d \ " : \ " C x w N L J 0 c \ " , \ " a p i _ d a t a _ t h e m e s _ i n t e r f a c e s _ t h e m e . m d \ " : \ " B 2 I r 7 j c K \ " , \ " a p i _ d a t a _ t h e m e s _ i n t e r f a c e s _ t h e m e v a r s . m d \ " : \ " Y K t H k g 0 m \ " , \ " a p i _ d a t a _ t h e m e s _ v a r i a b l e s _ d e f a u l t . m d \ " : \ " D 2 K k l - 4 v \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ a c h i e v e m e n t _ e n u m e r a t i o n s _ a c h i e v e m e n t d i s p l a y . m d \ " : \ " D 3 s Y I 8 g U \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ a c h i e v e m e n t _ f u n c t i o n s _ c r e a t e a c h i e v e m e n t . m d \ " : \ " D r k G w R f B \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ a c h i e v e m e n t _ i n d e x . m d \ " : \ " C V u v w 9 A F \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ a c h i e v e m e n t _ i n t e r f a c e s _ a c h i e v e m e n t . m d \ " : \ " C B Z I e E x X \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ a c h i e v e m e n t _ i n t e r f a c e s _ a c h i e v e m e n t o p t i o n s . m d \ " : \ " 3 A - T _ m l t \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ a c h i e v e m e n t _ v a r i a b l e s _ a c h i e v e m e n t t y p e . m d \ " : \ " B D F D 1 Q X e \ " , \ " a p i _ f e a t u r e s _ a c h i e v e m e n t s _ c o m p o n e n t s _ a c h i e v e m e n t . m d \ " : \ " D c n B G X I B \ " , \ " a p i _ f e a t u r e s _ b a r s _ b a r _ f u n c t i o n s _ c r e a t e b a r . m d \ " : \ " 5 r 4 g O r k Q \ " , \ " a p i _ f e a t u r e s _ b a r s _ b a r _ i n d e x . m d \ " : \ " k t t D _ E q D \ " , \ " a p i _ f e a t u r e s _ b a r s _ b a r _ i n t e r f a c e s _ b a r . m d \ " : \ " C E f S _ Q S u \ " , \ " a p i _ f e a t u r e s _ b a r s _ b a r _ i n t e r f a c e s _ b a r o p t i o n s . m d \ " : \ " D w u a L h p p \ " , \ " a p i _ f e a t u r e s _ b a r s _ b a r _ v a r i a b l e s _ b a r t y p e . m d \ " : \ " B A v n N 4 1 H \ " , \ " a p i _ f e a t u r e s _ b a r s _ c o m p o n e n t s _ b a r . m d \ " : \ " C X D f W F Z e \ " , \ "
2022-07-17 22:26:32 +00:00
< / body >
< / html >