runtime-events.html 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <link rel="prev" href="additional-collisions.html">
  7. <link rel="next" href="post-processing.html">
  8. <link rel="icon" href="../assets/images/favicon.ico">
  9. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.11">
  10. <title>Runtime Events & Code Execution - DunGen</title>
  11. <link rel="stylesheet" href="../assets/stylesheets/main.4af4bdda.min.css">
  12. <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
  13. <script src="https://unpkg.com/iframe-worker/shim"></script>
  14. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  15. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
  16. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  17. <link rel="stylesheet" href="../stylesheets/extra.css">
  18. <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
  19. </head>
  20. <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="cyan">
  21. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  22. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  23. <label class="md-overlay" for="__drawer"></label>
  24. <div data-md-component="skip">
  25. <a href="#advanced-features-runtime-events-code-execution" class="md-skip">
  26. Skip to content
  27. </a>
  28. </div>
  29. <div data-md-component="announce">
  30. </div>
  31. <header class="md-header md-header--shadow" data-md-component="header">
  32. <nav class="md-header__inner md-grid" aria-label="Header">
  33. <a href="../index.html" title="DunGen" class="md-header__button md-logo" aria-label="DunGen" data-md-component="logo">
  34. <svg width="100%" height="100%" viewBox="0 0 258 272" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
  35. <path d="M79,20.998C103.163,20.998 126.827,20.993 150.49,21.002C156.512,21.004 156.994,21.502 157,27.603C157.008,36.435 157.275,45.279 156.89,54.094C156.689,58.68 158.685,61.484 161.849,64.242C170.723,71.978 179.515,79.812 188.188,87.772C190.849,90.214 193.071,93.217 195.28,95.995C199.425,101.209 199.993,100.532 203.73,100.441C209.056,100.311 214.403,100.217 219.713,100.549C222.988,100.754 224.083,99.873 224.059,96.517C223.93,78.354 223.952,60.189 224.044,42.025C224.059,38.949 223.341,37.434 219.868,37.603C214.383,37.872 208.877,37.791 203.381,37.715C199.579,37.663 197.517,38.715 197.907,43.168C198.327,47.964 197.807,52.836 198.065,57.655C198.263,61.366 196.432,62.919 193.348,61.885C188.656,60.311 184.193,58.029 179.724,55.858C179.188,55.598 179.033,54.157 179.028,53.262C178.979,44.43 179.007,35.598 178.995,26.766C178.99,22.857 180.241,20.823 184.822,20.897C200.816,21.158 216.816,20.988 232.814,21.004C239.132,21.01 240.996,22.894 240.998,29.241C241.006,56.07 241.005,82.9 240.998,109.729C240.997,114.795 238.959,117.469 233.922,117.935C228.649,118.423 223.32,118.407 218.015,118.42C208.355,118.444 198.68,117.994 189.04,118.408C184.225,118.615 181.96,116.755 180.231,112.653C175.241,100.811 167.104,91.401 156.54,84.26C153.778,82.394 150.001,81.189 146.67,81.142C126.51,80.86 106.344,81.107 86.182,80.92C81.723,80.878 80.502,82.453 80.517,86.753C80.64,122.394 80.606,158.037 80.499,193.679C80.487,197.764 81.821,199.148 86.047,199.093C103.375,198.866 120.707,198.998 138.038,198.998C159.059,198.998 178.198,184.319 182.849,163.942C184.15,158.243 183.93,152.135 183.91,146.215C183.896,141.846 185.254,139.882 189.885,139.936C204.381,140.105 218.88,139.974 233.378,140.01C238.862,140.024 240.989,142.215 240.993,147.822C241.011,180.317 241.012,212.813 240.992,245.308C240.988,250.939 238.967,252.977 233.218,252.985C205.722,253.022 178.226,253.017 150.73,252.989C145.524,252.983 144.074,251.47 144.001,246.325C143.982,244.992 144.14,243.641 143.973,242.329C143.34,237.341 146.132,235.979 150.411,235.99C160.395,236.016 171.06,236.112 181.183,236.112C181.349,229.59 181.592,223.106 181.957,216.723C182.112,214.015 183.166,213.054 185.926,212.937C199.005,212.385 199.002,212.308 199.002,225.465C199.002,236.846 199.003,236.883 210.211,236.618C214.669,236.512 219.122,236.203 223.998,235.966L223.998,215.809C223.998,197.812 223.911,179.813 224.071,161.817C224.103,158.195 223.211,156.729 219.348,156.922C213.399,157.218 207.424,157 201.518,157C200.995,162.216 201.49,167.296 200.093,171.982C197.761,179.807 196.375,184.335 192.2,189.003C186.463,195.42 180.539,202.401 173.212,206.467C165.218,210.904 155.809,213.982 146.533,214.772C140.003,215.328 133.915,215.112 127.586,214.988C124.239,214.923 122.845,216.06 122.934,219.622C123.145,228.116 123.005,236.618 123.001,245.117C122.998,251.059 121.128,252.977 115.061,252.989C97.897,253.025 80.733,253.002 63.568,253.002C51.404,253.002 39.239,253.028 27.074,252.99C21.11,252.972 19.972,251.911 19.969,246.171C19.952,212.512 20.027,178.852 19.931,145.193C19.92,141.244 21.512,139.936 25.206,139.967C36.037,140.056 46.872,139.868 57.7,140.066C61.659,140.139 62.704,138.654 62.9,134.816C63.079,131.328 63.031,127.859 62.985,124.329C62.92,119.388 61.017,118.259 56.858,118.302C47.864,118.397 38.869,118.381 29.875,118.42C29.044,118.424 28.21,118.569 27.382,118.535C20.483,118.255 19.854,117.626 19.858,110.743C19.874,83.582 19.901,56.422 19.946,29.261C19.957,22.709 21.747,21.005 28.509,21.001C45.173,20.992 61.836,20.998 79,20.998M40.806,37.592C39.579,39.018 37.305,40.427 37.283,41.871C37.009,60.012 37.047,78.158 37.045,96.302C37.045,98.812 38.187,100.243 40.973,100.24C46.626,100.235 52.281,100.327 57.93,100.537C61.815,100.681 63.165,99.043 63.06,95.156C62.832,86.672 62.99,78.177 63.001,69.687C63.01,63.101 65.168,60.989 71.882,60.989C92.36,60.99 112.837,60.999 133.315,60.997C139.718,60.996 139.987,60.711 139.998,54.125C140.004,50.629 139.757,47.111 140.059,43.642C140.457,39.073 138.568,37.373 134.101,37.395C103.319,37.551 72.535,37.595 40.806,37.592M62.997,200.455C62.997,187.472 63.078,174.487 62.886,161.507C62.863,159.996 61.38,157.25 60.476,157.208C52.923,156.859 45.347,157.01 37.87,157.01C37.87,182.364 37.917,206.983 37.817,231.602C37.803,235.205 39.289,236.074 42.623,236.055C62.599,235.939 82.576,236.005 102.552,235.977C103.642,235.975 104.732,235.678 105.997,235.493C105.997,229.703 105.875,224.216 106.048,218.738C106.137,215.898 105.136,214.958 102.315,214.998C93.661,215.12 85.004,215.009 76.348,215.006C62.998,215 62.998,215.006 62.997,200.455Z" style="fill:currentColor;fill-rule:nonzero;"/>
  36. <g transform="matrix(1,0,0,1,91.4761,179.778)">
  37. <text x="0px" y="0px" style="font-family:'Arial-BoldMT', 'Arial', sans-serif;font-weight:700;font-size:110px;fill:currentColor;">D</text>
  38. </g>
  39. </svg>
  40. </a>
  41. <label class="md-header__button md-icon" for="__drawer">
  42. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  43. </label>
  44. <div class="md-header__title" data-md-component="header-title">
  45. <div class="md-header__ellipsis">
  46. <div class="md-header__topic">
  47. <span class="md-ellipsis">
  48. DunGen
  49. </span>
  50. </div>
  51. <div class="md-header__topic" data-md-component="header-topic">
  52. <span class="md-ellipsis">
  53. Runtime Events & Code Execution
  54. </span>
  55. </div>
  56. </div>
  57. </div>
  58. </nav>
  59. </header>
  60. <div class="md-container" data-md-component="container">
  61. <main class="md-main" data-md-component="main">
  62. <div class="md-main__inner md-grid">
  63. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  64. <div class="md-sidebar__scrollwrap">
  65. <div class="md-sidebar__inner">
  66. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  67. <label class="md-nav__title" for="__drawer">
  68. <a href="../index.html" title="DunGen" class="md-nav__button md-logo" aria-label="DunGen" data-md-component="logo">
  69. <svg width="100%" height="100%" viewBox="0 0 258 272" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
  70. <path d="M79,20.998C103.163,20.998 126.827,20.993 150.49,21.002C156.512,21.004 156.994,21.502 157,27.603C157.008,36.435 157.275,45.279 156.89,54.094C156.689,58.68 158.685,61.484 161.849,64.242C170.723,71.978 179.515,79.812 188.188,87.772C190.849,90.214 193.071,93.217 195.28,95.995C199.425,101.209 199.993,100.532 203.73,100.441C209.056,100.311 214.403,100.217 219.713,100.549C222.988,100.754 224.083,99.873 224.059,96.517C223.93,78.354 223.952,60.189 224.044,42.025C224.059,38.949 223.341,37.434 219.868,37.603C214.383,37.872 208.877,37.791 203.381,37.715C199.579,37.663 197.517,38.715 197.907,43.168C198.327,47.964 197.807,52.836 198.065,57.655C198.263,61.366 196.432,62.919 193.348,61.885C188.656,60.311 184.193,58.029 179.724,55.858C179.188,55.598 179.033,54.157 179.028,53.262C178.979,44.43 179.007,35.598 178.995,26.766C178.99,22.857 180.241,20.823 184.822,20.897C200.816,21.158 216.816,20.988 232.814,21.004C239.132,21.01 240.996,22.894 240.998,29.241C241.006,56.07 241.005,82.9 240.998,109.729C240.997,114.795 238.959,117.469 233.922,117.935C228.649,118.423 223.32,118.407 218.015,118.42C208.355,118.444 198.68,117.994 189.04,118.408C184.225,118.615 181.96,116.755 180.231,112.653C175.241,100.811 167.104,91.401 156.54,84.26C153.778,82.394 150.001,81.189 146.67,81.142C126.51,80.86 106.344,81.107 86.182,80.92C81.723,80.878 80.502,82.453 80.517,86.753C80.64,122.394 80.606,158.037 80.499,193.679C80.487,197.764 81.821,199.148 86.047,199.093C103.375,198.866 120.707,198.998 138.038,198.998C159.059,198.998 178.198,184.319 182.849,163.942C184.15,158.243 183.93,152.135 183.91,146.215C183.896,141.846 185.254,139.882 189.885,139.936C204.381,140.105 218.88,139.974 233.378,140.01C238.862,140.024 240.989,142.215 240.993,147.822C241.011,180.317 241.012,212.813 240.992,245.308C240.988,250.939 238.967,252.977 233.218,252.985C205.722,253.022 178.226,253.017 150.73,252.989C145.524,252.983 144.074,251.47 144.001,246.325C143.982,244.992 144.14,243.641 143.973,242.329C143.34,237.341 146.132,235.979 150.411,235.99C160.395,236.016 171.06,236.112 181.183,236.112C181.349,229.59 181.592,223.106 181.957,216.723C182.112,214.015 183.166,213.054 185.926,212.937C199.005,212.385 199.002,212.308 199.002,225.465C199.002,236.846 199.003,236.883 210.211,236.618C214.669,236.512 219.122,236.203 223.998,235.966L223.998,215.809C223.998,197.812 223.911,179.813 224.071,161.817C224.103,158.195 223.211,156.729 219.348,156.922C213.399,157.218 207.424,157 201.518,157C200.995,162.216 201.49,167.296 200.093,171.982C197.761,179.807 196.375,184.335 192.2,189.003C186.463,195.42 180.539,202.401 173.212,206.467C165.218,210.904 155.809,213.982 146.533,214.772C140.003,215.328 133.915,215.112 127.586,214.988C124.239,214.923 122.845,216.06 122.934,219.622C123.145,228.116 123.005,236.618 123.001,245.117C122.998,251.059 121.128,252.977 115.061,252.989C97.897,253.025 80.733,253.002 63.568,253.002C51.404,253.002 39.239,253.028 27.074,252.99C21.11,252.972 19.972,251.911 19.969,246.171C19.952,212.512 20.027,178.852 19.931,145.193C19.92,141.244 21.512,139.936 25.206,139.967C36.037,140.056 46.872,139.868 57.7,140.066C61.659,140.139 62.704,138.654 62.9,134.816C63.079,131.328 63.031,127.859 62.985,124.329C62.92,119.388 61.017,118.259 56.858,118.302C47.864,118.397 38.869,118.381 29.875,118.42C29.044,118.424 28.21,118.569 27.382,118.535C20.483,118.255 19.854,117.626 19.858,110.743C19.874,83.582 19.901,56.422 19.946,29.261C19.957,22.709 21.747,21.005 28.509,21.001C45.173,20.992 61.836,20.998 79,20.998M40.806,37.592C39.579,39.018 37.305,40.427 37.283,41.871C37.009,60.012 37.047,78.158 37.045,96.302C37.045,98.812 38.187,100.243 40.973,100.24C46.626,100.235 52.281,100.327 57.93,100.537C61.815,100.681 63.165,99.043 63.06,95.156C62.832,86.672 62.99,78.177 63.001,69.687C63.01,63.101 65.168,60.989 71.882,60.989C92.36,60.99 112.837,60.999 133.315,60.997C139.718,60.996 139.987,60.711 139.998,54.125C140.004,50.629 139.757,47.111 140.059,43.642C140.457,39.073 138.568,37.373 134.101,37.395C103.319,37.551 72.535,37.595 40.806,37.592M62.997,200.455C62.997,187.472 63.078,174.487 62.886,161.507C62.863,159.996 61.38,157.25 60.476,157.208C52.923,156.859 45.347,157.01 37.87,157.01C37.87,182.364 37.917,206.983 37.817,231.602C37.803,235.205 39.289,236.074 42.623,236.055C62.599,235.939 82.576,236.005 102.552,235.977C103.642,235.975 104.732,235.678 105.997,235.493C105.997,229.703 105.875,224.216 106.048,218.738C106.137,215.898 105.136,214.958 102.315,214.998C93.661,215.12 85.004,215.009 76.348,215.006C62.998,215 62.998,215.006 62.997,200.455Z" style="fill:currentColor;fill-rule:nonzero;"/>
  71. <g transform="matrix(1,0,0,1,91.4761,179.778)">
  72. <text x="0px" y="0px" style="font-family:'Arial-BoldMT', 'Arial', sans-serif;font-weight:700;font-size:110px;fill:currentColor;">D</text>
  73. </g>
  74. </svg>
  75. </a>
  76. DunGen
  77. </label>
  78. <ul class="md-nav__list" data-md-scrollfix>
  79. <li class="md-nav__item">
  80. <a href="../index.html" class="md-nav__link">
  81. <span class="md-ellipsis">
  82. Introduction
  83. </span>
  84. </a>
  85. </li>
  86. <li class="md-nav__item">
  87. <a href="../changelog.html" class="md-nav__link">
  88. <span class="md-ellipsis">
  89. Changelog
  90. </span>
  91. </a>
  92. </li>
  93. <li class="md-nav__item md-nav__item--nested">
  94. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
  95. <div class="md-nav__link md-nav__container">
  96. <a href="../getting-started/index.html" class="md-nav__link ">
  97. <span class="md-ellipsis">
  98. Getting Started
  99. </span>
  100. </a>
  101. <label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0">
  102. <span class="md-nav__icon md-icon"></span>
  103. </label>
  104. </div>
  105. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
  106. <label class="md-nav__title" for="__nav_3">
  107. <span class="md-nav__icon md-icon"></span>
  108. Getting Started
  109. </label>
  110. <ul class="md-nav__list" data-md-scrollfix>
  111. <li class="md-nav__item">
  112. <a href="../getting-started/1-creating-tiles.html" class="md-nav__link">
  113. <span class="md-ellipsis">
  114. 1. Creating Tiles
  115. </span>
  116. </a>
  117. </li>
  118. <li class="md-nav__item">
  119. <a href="../getting-started/2-doorways.html" class="md-nav__link">
  120. <span class="md-ellipsis">
  121. 2. Doorways
  122. </span>
  123. </a>
  124. </li>
  125. <li class="md-nav__item">
  126. <a href="../getting-started/3-dungeon-flow.html" class="md-nav__link">
  127. <span class="md-ellipsis">
  128. 3. Dungeon Flow Basics
  129. </span>
  130. </a>
  131. </li>
  132. <li class="md-nav__item">
  133. <a href="../getting-started/4-scene-setup.html" class="md-nav__link">
  134. <span class="md-ellipsis">
  135. 4. Scene Setup & First Generation
  136. </span>
  137. </a>
  138. </li>
  139. </ul>
  140. </nav>
  141. </li>
  142. <li class="md-nav__item md-nav__item--nested">
  143. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
  144. <div class="md-nav__link md-nav__container">
  145. <a href="../core-concepts/index.html" class="md-nav__link ">
  146. <span class="md-ellipsis">
  147. Core Concepts
  148. </span>
  149. </a>
  150. <label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
  151. <span class="md-nav__icon md-icon"></span>
  152. </label>
  153. </div>
  154. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
  155. <label class="md-nav__title" for="__nav_4">
  156. <span class="md-nav__icon md-icon"></span>
  157. Core Concepts
  158. </label>
  159. <ul class="md-nav__list" data-md-scrollfix>
  160. <li class="md-nav__item">
  161. <a href="../core-concepts/tiles.html" class="md-nav__link">
  162. <span class="md-ellipsis">
  163. Tiles & Tile Component
  164. </span>
  165. </a>
  166. </li>
  167. <li class="md-nav__item">
  168. <a href="../core-concepts/weighting.html" class="md-nav__link">
  169. <span class="md-ellipsis">
  170. Weighting
  171. </span>
  172. </a>
  173. </li>
  174. <li class="md-nav__item">
  175. <a href="../core-concepts/tile-sets.html" class="md-nav__link">
  176. <span class="md-ellipsis">
  177. Tile Sets
  178. </span>
  179. </a>
  180. </li>
  181. <li class="md-nav__item">
  182. <a href="../core-concepts/archetypes.html" class="md-nav__link">
  183. <span class="md-ellipsis">
  184. Archetypes
  185. </span>
  186. </a>
  187. </li>
  188. <li class="md-nav__item">
  189. <a href="../core-concepts/doorways.html" class="md-nav__link">
  190. <span class="md-ellipsis">
  191. Doorways
  192. </span>
  193. </a>
  194. </li>
  195. <li class="md-nav__item">
  196. <a href="../core-concepts/dungeon-flow.html" class="md-nav__link">
  197. <span class="md-ellipsis">
  198. Dungeon Flow Asset
  199. </span>
  200. </a>
  201. </li>
  202. <li class="md-nav__item">
  203. <a href="../core-concepts/flow-editor.html" class="md-nav__link">
  204. <span class="md-ellipsis">
  205. Flow Editor
  206. </span>
  207. </a>
  208. </li>
  209. <li class="md-nav__item">
  210. <a href="../core-concepts/dungeon-generator.html" class="md-nav__link">
  211. <span class="md-ellipsis">
  212. Dungeon Generator
  213. </span>
  214. </a>
  215. </li>
  216. </ul>
  217. </nav>
  218. </li>
  219. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  220. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
  221. <div class="md-nav__link md-nav__container">
  222. <a href="index.html" class="md-nav__link ">
  223. <span class="md-ellipsis">
  224. Advanced Features
  225. </span>
  226. </a>
  227. <label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
  228. <span class="md-nav__icon md-icon"></span>
  229. </label>
  230. </div>
  231. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
  232. <label class="md-nav__title" for="__nav_5">
  233. <span class="md-nav__icon md-icon"></span>
  234. Advanced Features
  235. </label>
  236. <ul class="md-nav__list" data-md-scrollfix>
  237. <li class="md-nav__item">
  238. <a href="props-variety.html" class="md-nav__link">
  239. <span class="md-ellipsis">
  240. Props for Variety
  241. </span>
  242. </a>
  243. </li>
  244. <li class="md-nav__item">
  245. <a href="doors.html" class="md-nav__link">
  246. <span class="md-ellipsis">
  247. Doors
  248. </span>
  249. </a>
  250. </li>
  251. <li class="md-nav__item">
  252. <a href="multiple-floors.html" class="md-nav__link">
  253. <span class="md-ellipsis">
  254. Multiple Floors
  255. </span>
  256. </a>
  257. </li>
  258. <li class="md-nav__item">
  259. <a href="lock-key-system.html" class="md-nav__link">
  260. <span class="md-ellipsis">
  261. Lock & Key System
  262. </span>
  263. </a>
  264. </li>
  265. <li class="md-nav__item">
  266. <a href="injecting-tiles.html" class="md-nav__link">
  267. <span class="md-ellipsis">
  268. Injecting Special Tiles
  269. </span>
  270. </a>
  271. </li>
  272. <li class="md-nav__item">
  273. <a href="connection-rules.html" class="md-nav__link">
  274. <span class="md-ellipsis">
  275. Tile Connection Rules
  276. </span>
  277. </a>
  278. </li>
  279. <li class="md-nav__item">
  280. <a href="attached-dungeons.html" class="md-nav__link">
  281. <span class="md-ellipsis">
  282. Generating Attached Dungeons
  283. </span>
  284. </a>
  285. </li>
  286. <li class="md-nav__item">
  287. <a href="additional-collisions.html" class="md-nav__link">
  288. <span class="md-ellipsis">
  289. Avoid Collisions With the Scene
  290. </span>
  291. </a>
  292. </li>
  293. <li class="md-nav__item md-nav__item--active">
  294. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  295. <label class="md-nav__link md-nav__link--active" for="__toc">
  296. <span class="md-ellipsis">
  297. Runtime Events & Code Execution
  298. </span>
  299. <span class="md-nav__icon md-icon"></span>
  300. </label>
  301. <a href="runtime-events.html" class="md-nav__link md-nav__link--active">
  302. <span class="md-ellipsis">
  303. Runtime Events & Code Execution
  304. </span>
  305. </a>
  306. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  307. <label class="md-nav__title" for="__toc">
  308. <span class="md-nav__icon md-icon"></span>
  309. Table of contents
  310. </label>
  311. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  312. <li class="md-nav__item">
  313. <a href="#method-1-on-objects-inside-the-dungeon-idungeoncompletereceiver" class="md-nav__link">
  314. <span class="md-ellipsis">
  315. Method 1: On Objects Inside the Dungeon (IDungeonCompleteReceiver)
  316. </span>
  317. </a>
  318. </li>
  319. <li class="md-nav__item">
  320. <a href="#method-2-globally-via-generator-events" class="md-nav__link">
  321. <span class="md-ellipsis">
  322. Method 2: Globally via Generator Events
  323. </span>
  324. </a>
  325. </li>
  326. <li class="md-nav__item">
  327. <a href="#choosing-the-right-method" class="md-nav__link">
  328. <span class="md-ellipsis">
  329. Choosing the Right Method
  330. </span>
  331. </a>
  332. </li>
  333. </ul>
  334. </nav>
  335. </li>
  336. <li class="md-nav__item">
  337. <a href="post-processing.html" class="md-nav__link">
  338. <span class="md-ellipsis">
  339. Custom Post-Processing
  340. </span>
  341. </a>
  342. </li>
  343. <li class="md-nav__item">
  344. <a href="character-component.html" class="md-nav__link">
  345. <span class="md-ellipsis">
  346. DunGen Character Component
  347. </span>
  348. </a>
  349. </li>
  350. </ul>
  351. </nav>
  352. </li>
  353. <li class="md-nav__item md-nav__item--nested">
  354. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
  355. <div class="md-nav__link md-nav__container">
  356. <a href="../optimization/index.html" class="md-nav__link ">
  357. <span class="md-ellipsis">
  358. Optimization
  359. </span>
  360. </a>
  361. <label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="0">
  362. <span class="md-nav__icon md-icon"></span>
  363. </label>
  364. </div>
  365. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
  366. <label class="md-nav__title" for="__nav_6">
  367. <span class="md-nav__icon md-icon"></span>
  368. Optimization
  369. </label>
  370. <ul class="md-nav__list" data-md-scrollfix>
  371. <li class="md-nav__item">
  372. <a href="../optimization/culling.html" class="md-nav__link">
  373. <span class="md-ellipsis">
  374. Built-in Culling
  375. </span>
  376. </a>
  377. </li>
  378. <li class="md-nav__item">
  379. <a href="../optimization/tile-pooling.html" class="md-nav__link">
  380. <span class="md-ellipsis">
  381. Tile Pooling
  382. </span>
  383. </a>
  384. </li>
  385. </ul>
  386. </nav>
  387. </li>
  388. <li class="md-nav__item md-nav__item--nested">
  389. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
  390. <div class="md-nav__link md-nav__container">
  391. <a href="../pathfinding/index.html" class="md-nav__link ">
  392. <span class="md-ellipsis">
  393. Pathfinding
  394. </span>
  395. </a>
  396. <label class="md-nav__link " for="__nav_7" id="__nav_7_label" tabindex="0">
  397. <span class="md-nav__icon md-icon"></span>
  398. </label>
  399. </div>
  400. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
  401. <label class="md-nav__title" for="__nav_7">
  402. <span class="md-nav__icon md-icon"></span>
  403. Pathfinding
  404. </label>
  405. <ul class="md-nav__list" data-md-scrollfix>
  406. <li class="md-nav__item">
  407. <a href="../pathfinding/unity-navmesh.html" class="md-nav__link">
  408. <span class="md-ellipsis">
  409. Unity NavMesh Components
  410. </span>
  411. </a>
  412. </li>
  413. <li class="md-nav__item">
  414. <a href="../pathfinding/astar-pathfinding.html" class="md-nav__link">
  415. <span class="md-ellipsis">
  416. A* Pathfinding Project Pro
  417. </span>
  418. </a>
  419. </li>
  420. <li class="md-nav__item">
  421. <a href="../pathfinding/custom-adapters.html" class="md-nav__link">
  422. <span class="md-ellipsis">
  423. Custom Adapters
  424. </span>
  425. </a>
  426. </li>
  427. </ul>
  428. </nav>
  429. </li>
  430. <li class="md-nav__item md-nav__item--nested">
  431. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
  432. <div class="md-nav__link md-nav__container">
  433. <a href="../integrations/index.html" class="md-nav__link ">
  434. <span class="md-ellipsis">
  435. Integrations
  436. </span>
  437. </a>
  438. <label class="md-nav__link " for="__nav_8" id="__nav_8_label" tabindex="0">
  439. <span class="md-nav__icon md-icon"></span>
  440. </label>
  441. </div>
  442. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
  443. <label class="md-nav__title" for="__nav_8">
  444. <span class="md-nav__icon md-icon"></span>
  445. Integrations
  446. </label>
  447. <ul class="md-nav__list" data-md-scrollfix>
  448. <li class="md-nav__item">
  449. <a href="../integrations/sectr.html" class="md-nav__link">
  450. <span class="md-ellipsis">
  451. SECTR Portal Culling
  452. </span>
  453. </a>
  454. </li>
  455. <li class="md-nav__item">
  456. <a href="../integrations/playmaker.html" class="md-nav__link">
  457. <span class="md-ellipsis">
  458. PlayMaker Actions
  459. </span>
  460. </a>
  461. </li>
  462. </ul>
  463. </nav>
  464. </li>
  465. <li class="md-nav__item md-nav__item--nested">
  466. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" >
  467. <div class="md-nav__link md-nav__container">
  468. <a href="../troubleshooting/index.html" class="md-nav__link ">
  469. <span class="md-ellipsis">
  470. Troubleshooting
  471. </span>
  472. </a>
  473. <label class="md-nav__link " for="__nav_9" id="__nav_9_label" tabindex="0">
  474. <span class="md-nav__icon md-icon"></span>
  475. </label>
  476. </div>
  477. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
  478. <label class="md-nav__title" for="__nav_9">
  479. <span class="md-nav__icon md-icon"></span>
  480. Troubleshooting
  481. </label>
  482. <ul class="md-nav__list" data-md-scrollfix>
  483. <li class="md-nav__item">
  484. <a href="../troubleshooting/limitations.html" class="md-nav__link">
  485. <span class="md-ellipsis">
  486. Limitations & Considerations
  487. </span>
  488. </a>
  489. </li>
  490. <li class="md-nav__item">
  491. <a href="../troubleshooting/analysis.html" class="md-nav__link">
  492. <span class="md-ellipsis">
  493. Analysis
  494. </span>
  495. </a>
  496. </li>
  497. </ul>
  498. </nav>
  499. </li>
  500. <li class="md-nav__item md-nav__item--nested">
  501. <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" >
  502. <label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
  503. <span class="md-ellipsis">
  504. Reference
  505. </span>
  506. <span class="md-nav__icon md-icon"></span>
  507. </label>
  508. <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
  509. <label class="md-nav__title" for="__nav_10">
  510. <span class="md-nav__icon md-icon"></span>
  511. Reference
  512. </label>
  513. <ul class="md-nav__list" data-md-scrollfix>
  514. <li class="md-nav__item">
  515. <a href="../reference/faq.html" class="md-nav__link">
  516. <span class="md-ellipsis">
  517. FAQ
  518. </span>
  519. </a>
  520. </li>
  521. <li class="md-nav__item">
  522. <a href="../reference/cookbook.html" class="md-nav__link">
  523. <span class="md-ellipsis">
  524. Cookbook
  525. </span>
  526. </a>
  527. </li>
  528. </ul>
  529. </nav>
  530. </li>
  531. </ul>
  532. </nav>
  533. </div>
  534. </div>
  535. </div>
  536. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  537. <div class="md-sidebar__scrollwrap">
  538. <div class="md-sidebar__inner">
  539. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  540. <label class="md-nav__title" for="__toc">
  541. <span class="md-nav__icon md-icon"></span>
  542. Table of contents
  543. </label>
  544. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  545. <li class="md-nav__item">
  546. <a href="#method-1-on-objects-inside-the-dungeon-idungeoncompletereceiver" class="md-nav__link">
  547. <span class="md-ellipsis">
  548. Method 1: On Objects Inside the Dungeon (IDungeonCompleteReceiver)
  549. </span>
  550. </a>
  551. </li>
  552. <li class="md-nav__item">
  553. <a href="#method-2-globally-via-generator-events" class="md-nav__link">
  554. <span class="md-ellipsis">
  555. Method 2: Globally via Generator Events
  556. </span>
  557. </a>
  558. </li>
  559. <li class="md-nav__item">
  560. <a href="#choosing-the-right-method" class="md-nav__link">
  561. <span class="md-ellipsis">
  562. Choosing the Right Method
  563. </span>
  564. </a>
  565. </li>
  566. </ul>
  567. </nav>
  568. </div>
  569. </div>
  570. </div>
  571. <div class="md-content" data-md-component="content">
  572. <article class="md-content__inner md-typeset">
  573. <h1 id="advanced-features-runtime-events-code-execution">Advanced Features: Runtime Events &amp; Code Execution</h1>
  574. <p>After DunGen has finished generating the dungeon layout, placing tiles, handling props, and potentially running integrations like pathfinding, you'll often need to execute your own custom game logic. This could involve:</p>
  575. <ul>
  576. <li>Spawning the player character at the start tile.</li>
  577. <li>Initializing enemies or interactive objects placed within tile prefabs.</li>
  578. <li>Activating global game systems that depend on the dungeon layout.</li>
  579. <li>Fading in from a loading screen.</li>
  580. </ul>
  581. <p>DunGen provides two primary mechanisms to hook into the generation process and run your code once the dungeon is ready:</p>
  582. <ol>
  583. <li><strong>On Specific Objects:</strong> Implement an interface (<code>IDungeonCompleteReceiver</code>) on components attached to GameObjects <em>within</em> your Tile prefabs.</li>
  584. <li><strong>Globally:</strong> Listen to completion or status change events directly from the <code>DungeonGenerator</code> instance.</li>
  585. </ol>
  586. <hr />
  587. <h2 id="method-1-on-objects-inside-the-dungeon-idungeoncompletereceiver">Method 1: On Objects Inside the Dungeon (IDungeonCompleteReceiver)</h2>
  588. <p>This method is ideal when you want logic to run that is specific to a particular GameObject or prefab placed as part of the dungeon.</p>
  589. <p><strong>How it Works:</strong></p>
  590. <ol>
  591. <li>Create a C# script.</li>
  592. <li>Implement the <code>DunGen.IDungeonCompleteReceiver</code> interface in your script.</li>
  593. <li>This interface requires you to implement one method: <code>void OnDungeonComplete(Dungeon dungeon)</code>.</li>
  594. <li>Attach this script component to a GameObject that is <strong>part of one of your Tile prefabs</strong>.</li>
  595. <li>After DunGen successfully generates the <em>entire</em> dungeon layout, it will search all GameObjects within the final layout for components that implement <code>IDungeonCompleteReceiver</code> and call their <code>OnDungeonComplete</code> method.</li>
  596. </ol>
  597. <p><strong>Parameters:</strong></p>
  598. <ul>
  599. <li><code>Dungeon dungeon</code>: Provides access to the data structure representing the completed dungeon layout (containing information about tiles, doorways, paths, etc.).</li>
  600. </ul>
  601. <p><strong>Example: Spawning an Item or Enemy within a Tile</strong></p>
  602. <div class="language-C# highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="k">using</span><span class="w"> </span><span class="nn">UnityEngine</span><span class="p">;</span>
  603. </span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="k">using</span><span class="w"> </span><span class="nn">DunGen</span><span class="p">;</span>
  604. </span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
  605. </span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="c1">// Attach this script to a GameObject inside one of your Tile prefabs</span>
  606. </span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">PostGenerationSpawner</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">MonoBehaviour</span><span class="p">,</span><span class="w"> </span><span class="n">IDungeonCompleteReceiver</span>
  607. </span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="p">{</span>
  608. </span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="c1">// Assign the prefab to spawn in the Inspector</span>
  609. </span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">GameObject</span><span class="w"> </span><span class="n">PrefabToSpawn</span><span class="p">;</span>
  610. </span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a>
  611. </span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">OnDungeonComplete</span><span class="p">(</span><span class="n">Dungeon</span><span class="w"> </span><span class="n">dungeon</span><span class="p">)</span>
  612. </span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="p">{</span>
  613. </span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="c1">// Check if we actually have a prefab assigned</span>
  614. </span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">PrefabToSpawn</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">null</span><span class="p">)</span>
  615. </span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="w"> </span><span class="p">{</span>
  616. </span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="w"> </span><span class="n">Debug</span><span class="p">.</span><span class="n">LogWarning</span><span class="p">(</span><span class="s">&quot;PrefabToSpawn is not set!&quot;</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">);</span>
  617. </span><span id="__span-0-16"><a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span>
  618. </span><span id="__span-0-17"><a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="w"> </span><span class="p">}</span>
  619. </span><span id="__span-0-18"><a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a>
  620. </span><span id="__span-0-19"><a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="w"> </span><span class="n">Debug</span><span class="p">.</span><span class="n">Log</span><span class="p">(</span><span class="s">$&quot;Dungeon complete! Spawning &#39;{PrefabToSpawn.name}&#39; at {transform.position}&quot;</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">);</span>
  621. </span><span id="__span-0-20"><a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a>
  622. </span><span id="__span-0-21"><a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="w"> </span><span class="c1">// Instantiate the prefab at this GameObject&#39;s position and rotation</span>
  623. </span><span id="__span-0-22"><a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="w"> </span><span class="c1">// Parent it to this object&#39;s parent (likely the Tile root) for organisation</span>
  624. </span><span id="__span-0-23"><a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a><span class="w"> </span><span class="c1">// NOTE: If you&#39;re using Tile pooling, you will need to clean up the spawned objects manually</span>
  625. </span><span id="__span-0-24"><a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="w"> </span><span class="n">GameObject</span><span class="w"> </span><span class="n">instance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Instantiate</span><span class="p">(</span><span class="n">PrefabToSpawn</span><span class="p">,</span><span class="w"> </span><span class="n">transform</span><span class="p">.</span><span class="n">position</span><span class="p">,</span><span class="w"> </span><span class="n">transform</span><span class="p">.</span><span class="n">rotation</span><span class="p">,</span><span class="w"> </span><span class="n">transform</span><span class="p">.</span><span class="n">parent</span><span class="p">);</span>
  626. </span><span id="__span-0-25"><a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a>
  627. </span><span id="__span-0-26"><a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="w"> </span><span class="c1">// Optional: You could add logic here to initialize the spawned object</span>
  628. </span><span id="__span-0-27"><a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="w"> </span><span class="c1">// EnemyController enemy = instance.GetComponent&lt;EnemyController&gt;();</span>
  629. </span><span id="__span-0-28"><a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="w"> </span><span class="c1">// if(enemy != null) { enemy.Initialize(); }</span>
  630. </span><span id="__span-0-29"><a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a><span class="w"> </span><span class="p">}</span>
  631. </span><span id="__span-0-30"><a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="p">}</span>
  632. </span></code></pre></div>
  633. <p><strong>Use Cases:</strong></p>
  634. <ul>
  635. <li>Activating specific logic within a room once the whole dungeon is ready.</li>
  636. <li>Spawning enemies or items at designated locations within tiles.</li>
  637. <li>Initializing puzzle elements placed inside prefabs.</li>
  638. </ul>
  639. <hr />
  640. <h2 id="method-2-globally-via-generator-events">Method 2: Globally via Generator Events</h2>
  641. <p>This method is suitable when you need to run logic that relates to the dungeon generation process as a whole, rather than a specific object within it. You subscribe to an event on the <code>DungeonGenerator</code>.</p>
  642. <p><strong>How it Works:</strong></p>
  643. <ol>
  644. <li>Get a reference to your <code>RuntimeDungeon</code> component and its underlying <code>DungeonGenerator</code> instance.</li>
  645. <li>The <code>DungeonGenerator</code> has a delegate/event called <code>OnGenerationComplete</code>.</li>
  646. <li>Create a method in your script that matches the required signature: <code>void OnGenerationComplete(DungeonGenerator generator, GenerationStatus status)</code></li>
  647. <li>Subscribe your method to the <code>OnGenerationComplete</code> event (using +=).</li>
  648. <li>Crucially, remember to unsubscribe from the event (using -=) when your listener object is destroyed or disabled to prevent errors.</li>
  649. </ol>
  650. <p><strong>Parameters:</strong></p>
  651. <ul>
  652. <li><code>DungeonGenerator generator:</code> The instance of the generator that fired the event.</li>
  653. </ul>
  654. <p><strong>Example: Spawning the Player After Dungeon Completion</strong></p>
  655. <div class="language-C# highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">GlobalDungeonCompleteListener</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">MonoBehaviour</span>
  656. </span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="p">{</span>
  657. </span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="c1">// Assign your Runtime Dungeon in the Inspector</span>
  658. </span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">RuntimeDungeon</span><span class="w"> </span><span class="n">RuntimeDungeon</span><span class="p">;</span>
  659. </span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="c1">// Assign your player prefab in the Inspector</span>
  660. </span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">GameObject</span><span class="w"> </span><span class="n">PlayerPrefab</span><span class="p">;</span>
  661. </span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>
  662. </span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a>
  663. </span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Start</span><span class="p">()</span>
  664. </span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="w"> </span><span class="p">{</span>
  665. </span><span id="__span-1-11"><a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">RuntimeDungeon</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">null</span><span class="p">)</span>
  666. </span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="w"> </span><span class="p">{</span>
  667. </span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="w"> </span><span class="n">Debug</span><span class="p">.</span><span class="n">LogError</span><span class="p">(</span><span class="s">&quot;RuntimeDungeon is not assigned!&quot;</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">);</span>
  668. </span><span id="__span-1-14"><a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span>
  669. </span><span id="__span-1-15"><a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a><span class="w"> </span><span class="p">}</span>
  670. </span><span id="__span-1-16"><a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a>
  671. </span><span id="__span-1-17"><a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a><span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">generator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RuntimeDungeon</span><span class="p">.</span><span class="n">Generator</span><span class="p">;</span>
  672. </span><span id="__span-1-18"><a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a>
  673. </span><span id="__span-1-19"><a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a><span class="w"> </span><span class="c1">// Subscribe to the event</span>
  674. </span><span id="__span-1-20"><a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a><span class="w"> </span><span class="n">generator</span><span class="p">.</span><span class="n">OnGenerationComplete</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">HandleDungeonCompletion</span><span class="p">;</span>
  675. </span><span id="__span-1-21"><a id="__codelineno-1-21" name="__codelineno-1-21" href="#__codelineno-1-21"></a>
  676. </span><span id="__span-1-22"><a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a><span class="w"> </span><span class="c1">// Optional: If generation might already be complete before Start runs</span>
  677. </span><span id="__span-1-23"><a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a><span class="w"> </span><span class="c1">// (e.g., if GenerateOnStart was true), check current status.</span>
  678. </span><span id="__span-1-24"><a id="__codelineno-1-24" name="__codelineno-1-24" href="#__codelineno-1-24"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">generator</span><span class="p">.</span><span class="n">Status</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">GenerationStatus</span><span class="p">.</span><span class="n">Complete</span><span class="p">)</span>
  679. </span><span id="__span-1-25"><a id="__codelineno-1-25" name="__codelineno-1-25" href="#__codelineno-1-25"></a><span class="w"> </span><span class="n">HandleDungeonCompletion</span><span class="p">(</span><span class="n">generator</span><span class="p">);</span>
  680. </span><span id="__span-1-26"><a id="__codelineno-1-26" name="__codelineno-1-26" href="#__codelineno-1-26"></a><span class="w"> </span><span class="p">}</span>
  681. </span><span id="__span-1-27"><a id="__codelineno-1-27" name="__codelineno-1-27" href="#__codelineno-1-27"></a>
  682. </span><span id="__span-1-28"><a id="__codelineno-1-28" name="__codelineno-1-28" href="#__codelineno-1-28"></a><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">OnDestroy</span><span class="p">()</span>
  683. </span><span id="__span-1-29"><a id="__codelineno-1-29" name="__codelineno-1-29" href="#__codelineno-1-29"></a><span class="w"> </span><span class="p">{</span>
  684. </span><span id="__span-1-30"><a id="__codelineno-1-30" name="__codelineno-1-30" href="#__codelineno-1-30"></a><span class="w"> </span><span class="c1">// IMPORTANT: Unsubscribe when this object is destroyed</span>
  685. </span><span id="__span-1-31"><a id="__codelineno-1-31" name="__codelineno-1-31" href="#__codelineno-1-31"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">RuntimeDungeon</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="k">null</span><span class="p">)</span>
  686. </span><span id="__span-1-32"><a id="__codelineno-1-32" name="__codelineno-1-32" href="#__codelineno-1-32"></a><span class="w"> </span><span class="n">RuntimeDungeon</span><span class="p">.</span><span class="n">Generator</span><span class="p">.</span><span class="n">OnGenerationComplete</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="n">HandleDungeonCompletion</span><span class="p">;</span>
  687. </span><span id="__span-1-33"><a id="__codelineno-1-33" name="__codelineno-1-33" href="#__codelineno-1-33"></a><span class="w"> </span><span class="p">}</span>
  688. </span><span id="__span-1-34"><a id="__codelineno-1-34" name="__codelineno-1-34" href="#__codelineno-1-34"></a>
  689. </span><span id="__span-1-35"><a id="__codelineno-1-35" name="__codelineno-1-35" href="#__codelineno-1-35"></a><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">HandleDungeonCompletion</span><span class="p">(</span><span class="n">DungeonGenerator</span><span class="w"> </span><span class="n">generator</span><span class="p">)</span>
  690. </span><span id="__span-1-36"><a id="__codelineno-1-36" name="__codelineno-1-36" href="#__codelineno-1-36"></a><span class="w"> </span><span class="p">{</span>
  691. </span><span id="__span-1-37"><a id="__codelineno-1-37" name="__codelineno-1-37" href="#__codelineno-1-37"></a><span class="w"> </span><span class="n">Debug</span><span class="p">.</span><span class="n">Log</span><span class="p">(</span><span class="s">&quot;Dungeon Generation Complete! Spawning Player...&quot;</span><span class="p">);</span>
  692. </span><span id="__span-1-38"><a id="__codelineno-1-38" name="__codelineno-1-38" href="#__codelineno-1-38"></a>
  693. </span><span id="__span-1-39"><a id="__codelineno-1-39" name="__codelineno-1-39" href="#__codelineno-1-39"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">PlayerPrefab</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">null</span><span class="p">)</span>
  694. </span><span id="__span-1-40"><a id="__codelineno-1-40" name="__codelineno-1-40" href="#__codelineno-1-40"></a><span class="w"> </span><span class="p">{</span>
  695. </span><span id="__span-1-41"><a id="__codelineno-1-41" name="__codelineno-1-41" href="#__codelineno-1-41"></a><span class="w"> </span><span class="n">Debug</span><span class="p">.</span><span class="n">LogError</span><span class="p">(</span><span class="s">&quot;Player Prefab is not assigned!&quot;</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">);</span>
  696. </span><span id="__span-1-42"><a id="__codelineno-1-42" name="__codelineno-1-42" href="#__codelineno-1-42"></a><span class="w"> </span><span class="k">return</span><span class="p">;</span>
  697. </span><span id="__span-1-43"><a id="__codelineno-1-43" name="__codelineno-1-43" href="#__codelineno-1-43"></a><span class="w"> </span><span class="p">}</span>
  698. </span><span id="__span-1-44"><a id="__codelineno-1-44" name="__codelineno-1-44" href="#__codelineno-1-44"></a>
  699. </span><span id="__span-1-45"><a id="__codelineno-1-45" name="__codelineno-1-45" href="#__codelineno-1-45"></a><span class="w"> </span><span class="c1">// Get the start tile location from the generated dungeon data</span>
  700. </span><span id="__span-1-46"><a id="__codelineno-1-46" name="__codelineno-1-46" href="#__codelineno-1-46"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">generator</span><span class="p">.</span><span class="n">CurrentDungeon</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="k">null</span><span class="p">)</span>
  701. </span><span id="__span-1-47"><a id="__codelineno-1-47" name="__codelineno-1-47" href="#__codelineno-1-47"></a><span class="w"> </span><span class="p">{</span>
  702. </span><span id="__span-1-48"><a id="__codelineno-1-48" name="__codelineno-1-48" href="#__codelineno-1-48"></a><span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">startTile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">generator</span><span class="p">.</span><span class="n">CurrentDungeon</span><span class="p">.</span><span class="n">MainPathTiles</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
  703. </span><span id="__span-1-49"><a id="__codelineno-1-49" name="__codelineno-1-49" href="#__codelineno-1-49"></a><span class="w"> </span><span class="n">Vector3</span><span class="w"> </span><span class="n">spawnPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">startTile</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span><span class="p">;</span>
  704. </span><span id="__span-1-50"><a id="__codelineno-1-50" name="__codelineno-1-50" href="#__codelineno-1-50"></a><span class="w"> </span><span class="c1">// You might want to offset this slightly or use a specific spawn point transform within the start tile</span>
  705. </span><span id="__span-1-51"><a id="__codelineno-1-51" name="__codelineno-1-51" href="#__codelineno-1-51"></a><span class="w"> </span><span class="n">Instantiate</span><span class="p">(</span><span class="n">PlayerPrefab</span><span class="p">,</span><span class="w"> </span><span class="n">spawnPosition</span><span class="p">,</span><span class="w"> </span><span class="n">Quaternion</span><span class="p">.</span><span class="n">identity</span><span class="p">);</span>
  706. </span><span id="__span-1-52"><a id="__codelineno-1-52" name="__codelineno-1-52" href="#__codelineno-1-52"></a><span class="w"> </span><span class="p">}</span>
  707. </span><span id="__span-1-53"><a id="__codelineno-1-53" name="__codelineno-1-53" href="#__codelineno-1-53"></a><span class="w"> </span><span class="k">else</span>
  708. </span><span id="__span-1-54"><a id="__codelineno-1-54" name="__codelineno-1-54" href="#__codelineno-1-54"></a><span class="w"> </span><span class="n">Debug</span><span class="p">.</span><span class="n">LogError</span><span class="p">(</span><span class="s">&quot;Could not find generated dungeon to spawn player!&quot;</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">);</span>
  709. </span><span id="__span-1-55"><a id="__codelineno-1-55" name="__codelineno-1-55" href="#__codelineno-1-55"></a><span class="w"> </span><span class="p">}</span>
  710. </span><span id="__span-1-56"><a id="__codelineno-1-56" name="__codelineno-1-56" href="#__codelineno-1-56"></a><span class="p">}</span>
  711. </span></code></pre></div>
  712. <p><strong>Use Cases:</strong></p>
  713. <ul>
  714. <li>Spawning the player character.</li>
  715. <li>Initializing global managers or systems after the level is built.</li>
  716. <li>Signaling that loading is complete and fading in the game view.</li>
  717. </ul>
  718. <h2 id="choosing-the-right-method">Choosing the Right Method</h2>
  719. <ul>
  720. <li>Use <code>IDungeonCompleteReceiver</code> for logic tightly coupled to specific prefabs or locations within the dungeon.</li>
  721. <li>Use the <code>OnGenerationComplete</code> event for global actions that need to happen once the entire dungeon generation process is finished.</li>
  722. </ul>
  723. </article>
  724. </div>
  725. <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
  726. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  727. </div>
  728. <button type="button" class="md-top md-icon" data-md-component="top" hidden>
  729. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
  730. Back to top
  731. </button>
  732. </main>
  733. <footer class="md-footer">
  734. <nav class="md-footer__inner md-grid" aria-label="Footer" >
  735. <a href="additional-collisions.html" class="md-footer__link md-footer__link--prev" aria-label="Previous: Avoid Collisions With the Scene">
  736. <div class="md-footer__button md-icon">
  737. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
  738. </div>
  739. <div class="md-footer__title">
  740. <span class="md-footer__direction">
  741. Previous
  742. </span>
  743. <div class="md-ellipsis">
  744. Avoid Collisions With the Scene
  745. </div>
  746. </div>
  747. </a>
  748. <a href="post-processing.html" class="md-footer__link md-footer__link--next" aria-label="Next: Custom Post-Processing">
  749. <div class="md-footer__title">
  750. <span class="md-footer__direction">
  751. Next
  752. </span>
  753. <div class="md-ellipsis">
  754. Custom Post-Processing
  755. </div>
  756. </div>
  757. <div class="md-footer__button md-icon">
  758. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
  759. </div>
  760. </a>
  761. </nav>
  762. <div class="md-footer-meta md-typeset">
  763. <div class="md-footer-meta__inner md-grid">
  764. <div class="md-copyright">
  765. <div class="md-copyright__highlight">
  766. Copyright &copy; Aegon Games Ltd.
  767. </div>
  768. Made with
  769. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  770. Material for MkDocs
  771. </a>
  772. </div>
  773. </div>
  774. </div>
  775. </footer>
  776. </div>
  777. <div class="md-dialog" data-md-component="dialog">
  778. <div class="md-dialog__inner md-typeset"></div>
  779. </div>
  780. <script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "announce.dismiss", "header.autohide", "navigation.footer", "navigation.indexes", "navigation.top", "navigation.tracking"], "search": "../assets/javascripts/workers/search.f8cc74c7.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
  781. <script src="../assets/javascripts/bundle.c8b220af.min.js"></script>
  782. </body>
  783. </html>