[{"data":1,"prerenderedAt":1148},["ShallowReactive",2],{"doc:\u002Fgame-engine\u002Fadvanced\u002Fwasm":3,"surround:\u002Fgame-engine\u002Fadvanced\u002Fwasm":897,"navigation":908},{"id":4,"title":5,"body":6,"description":890,"extension":891,"meta":892,"navigation":289,"path":893,"seo":894,"stem":895,"__hash__":896},"docs\u002F01.game-engine\u002F08.advanced\u002F02.wasm.md","WebAssembly",{"type":7,"value":8,"toc":880},"minimark",[9,14,23,26,30,64,68,125,129,178,181,199,203,377,381,483,487,498,697,711,715,864,876],[10,11,13],"h2",{"id":12},"kiedy-wasm-ma-sens","Kiedy WASM ma sens",[15,16,17,18,22],"p",{},"WASM jest ",[19,20,21],"strong",{},"opcjonalny",". Most jest przygotowany, ale dodawaj moduł tylko wtedy, gdy benchmark TS vs WASM wykaże mierzalną korzyść (ADR 0004).",[15,24,25],{},"Typowe kandydaci: pathfinding A*, generowanie terenu, symulacje cząsteczek, ciężka geometria.",[10,27,29],{"id":28},"zasady-granicy-tswasm","Zasady granicy TS↔WASM",[31,32,33,40,55],"ol",{},[34,35,36,39],"li",{},[19,37,38],{},"Jedno wywołanie z dużą paczką danych > wiele drobnych wywołań."," Przekroczenie granicy kosztuje.",[34,41,42,45,46,50,51,54],{},[19,43,44],{},"Nie ujawniaj wewnętrznych klas C++."," Cienka fasada ",[47,48,49],"code",{},"extern \"C\""," lub ",[47,52,53],{},"embind",".",[34,56,57,63],{},[19,58,59,62],{},[47,60,61],{},"required: false"," nie wywala gry."," Brak pliku WASM = graceful fallback do TS.",[10,65,67],{"id":66},"instalacja-emscripten","Instalacja Emscripten",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-bash shiki shiki-themes github-light github-dark","git clone https:\u002F\u002Fgithub.com\u002Femscripten-core\u002Femsdk.git\n.\u002Femsdk\u002Femsdk install latest\n.\u002Femsdk\u002Femsdk activate latest\nsource .\u002Femsdk\u002Femsdk_env.sh\n","bash","",[47,76,77,93,105,115],{"__ignoreMap":74},[78,79,82,86,90],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"sScJk","git",[78,87,89],{"class":88},"sZZnC"," clone",[78,91,92],{"class":88}," https:\u002F\u002Fgithub.com\u002Femscripten-core\u002Femsdk.git\n",[78,94,96,99,102],{"class":80,"line":95},2,[78,97,98],{"class":84},".\u002Femsdk\u002Femsdk",[78,100,101],{"class":88}," install",[78,103,104],{"class":88}," latest\n",[78,106,108,110,113],{"class":80,"line":107},3,[78,109,98],{"class":84},[78,111,112],{"class":88}," activate",[78,114,104],{"class":88},[78,116,118,122],{"class":80,"line":117},4,[78,119,121],{"class":120},"sj4cs","source",[78,123,124],{"class":88}," .\u002Femsdk\u002Femsdk_env.sh\n",[10,126,128],{"id":127},"kompilacja","Kompilacja",[69,130,132],{"className":71,"code":131,"language":73,"meta":74,"style":74},"emcmake cmake -S native\u002Fcore -B native\u002Fcore\u002Fbuild-wasm\ncmake --build native\u002Fcore\u002Fbuild-wasm\nls native\u002Fcore\u002Fbuild-wasm\u002F*.wasm\n",[47,133,134,154,164],{"__ignoreMap":74},[78,135,136,139,142,145,148,151],{"class":80,"line":81},[78,137,138],{"class":84},"emcmake",[78,140,141],{"class":88}," cmake",[78,143,144],{"class":120}," -S",[78,146,147],{"class":88}," native\u002Fcore",[78,149,150],{"class":120}," -B",[78,152,153],{"class":88}," native\u002Fcore\u002Fbuild-wasm\n",[78,155,156,159,162],{"class":80,"line":95},[78,157,158],{"class":84},"cmake",[78,160,161],{"class":120}," --build",[78,163,153],{"class":88},[78,165,166,169,172,175],{"class":80,"line":107},[78,167,168],{"class":84},"ls",[78,170,171],{"class":88}," native\u002Fcore\u002Fbuild-wasm\u002F",[78,173,174],{"class":120},"*",[78,176,177],{"class":88},".wasm\n",[15,179,180],{},"Skopiuj artefakty do playgroundu:",[69,182,184],{"className":71,"code":183,"language":73,"meta":74,"style":74},"cp native\u002Fcore\u002Fbuild-wasm\u002Fcore.* apps\u002Fplayground\u002Fpublic\u002Fwasm\u002F\n",[47,185,186],{"__ignoreMap":74},[78,187,188,191,194,196],{"class":80,"line":81},[78,189,190],{"class":84},"cp",[78,192,193],{"class":88}," native\u002Fcore\u002Fbuild-wasm\u002Fcore.",[78,195,174],{"class":120},[78,197,198],{"class":88}," apps\u002Fplayground\u002Fpublic\u002Fwasm\u002F\n",[10,200,202],{"id":201},"użycie-w-silniku","Użycie w silniku",[69,204,208],{"className":205,"code":206,"language":207,"meta":74,"style":74},"language-ts shiki shiki-themes github-light github-dark","const engine = createEngine({\n  parent: 'app',\n  width: 800,\n  height: 600,\n  wasm: { wasmUrl: '\u002Fwasm\u002Fcore.wasm', required: false }\n})\n\nawait engine.getWasm().load()\n\nif (engine.getWasm().isReady()) {\n  const path = engine.getWasm().call\u003CVec2i[]>('findPathAStar', grid, start, goal)\n}\n","ts",[47,209,210,229,240,250,260,278,284,291,312,317,336,371],{"__ignoreMap":74},[78,211,212,216,219,222,225],{"class":80,"line":81},[78,213,215],{"class":214},"szBVR","const",[78,217,218],{"class":120}," engine",[78,220,221],{"class":214}," =",[78,223,224],{"class":84}," createEngine",[78,226,228],{"class":227},"sVt8B","({\n",[78,230,231,234,237],{"class":80,"line":95},[78,232,233],{"class":227},"  parent: ",[78,235,236],{"class":88},"'app'",[78,238,239],{"class":227},",\n",[78,241,242,245,248],{"class":80,"line":107},[78,243,244],{"class":227},"  width: ",[78,246,247],{"class":120},"800",[78,249,239],{"class":227},[78,251,252,255,258],{"class":80,"line":117},[78,253,254],{"class":227},"  height: ",[78,256,257],{"class":120},"600",[78,259,239],{"class":227},[78,261,263,266,269,272,275],{"class":80,"line":262},5,[78,264,265],{"class":227},"  wasm: { wasmUrl: ",[78,267,268],{"class":88},"'\u002Fwasm\u002Fcore.wasm'",[78,270,271],{"class":227},", required: ",[78,273,274],{"class":120},"false",[78,276,277],{"class":227}," }\n",[78,279,281],{"class":80,"line":280},6,[78,282,283],{"class":227},"})\n",[78,285,287],{"class":80,"line":286},7,[78,288,290],{"emptyLinePlaceholder":289},true,"\n",[78,292,294,297,300,303,306,309],{"class":80,"line":293},8,[78,295,296],{"class":214},"await",[78,298,299],{"class":227}," engine.",[78,301,302],{"class":84},"getWasm",[78,304,305],{"class":227},"().",[78,307,308],{"class":84},"load",[78,310,311],{"class":227},"()\n",[78,313,315],{"class":80,"line":314},9,[78,316,290],{"emptyLinePlaceholder":289},[78,318,320,323,326,328,330,333],{"class":80,"line":319},10,[78,321,322],{"class":214},"if",[78,324,325],{"class":227}," (engine.",[78,327,302],{"class":84},[78,329,305],{"class":227},[78,331,332],{"class":84},"isReady",[78,334,335],{"class":227},"()) {\n",[78,337,339,342,345,347,349,351,353,356,359,362,365,368],{"class":80,"line":338},11,[78,340,341],{"class":214},"  const",[78,343,344],{"class":120}," path",[78,346,221],{"class":214},[78,348,299],{"class":227},[78,350,302],{"class":84},[78,352,305],{"class":227},[78,354,355],{"class":84},"call",[78,357,358],{"class":227},"\u003C",[78,360,361],{"class":84},"Vec2i",[78,363,364],{"class":227},"[]>(",[78,366,367],{"class":88},"'findPathAStar'",[78,369,370],{"class":227},", grid, start, goal)\n",[78,372,374],{"class":80,"line":373},12,[78,375,376],{"class":227},"}\n",[10,378,380],{"id":379},"api-mostu","API mostu",[69,382,384],{"className":205,"code":383,"language":207,"meta":74,"style":74},"engine.getWasm().isReady()\nengine.getWasm().getState()\nengine.getWasm().getError()\nengine.getWasm().getInstance()\nengine.getWasm().call\u003CT>(name, ...args): T | null\nengine.getWasm().reset()\n",[47,385,386,399,412,425,438,470],{"__ignoreMap":74},[78,387,388,391,393,395,397],{"class":80,"line":81},[78,389,390],{"class":227},"engine.",[78,392,302],{"class":84},[78,394,305],{"class":227},[78,396,332],{"class":84},[78,398,311],{"class":227},[78,400,401,403,405,407,410],{"class":80,"line":95},[78,402,390],{"class":227},[78,404,302],{"class":84},[78,406,305],{"class":227},[78,408,409],{"class":84},"getState",[78,411,311],{"class":227},[78,413,414,416,418,420,423],{"class":80,"line":107},[78,415,390],{"class":227},[78,417,302],{"class":84},[78,419,305],{"class":227},[78,421,422],{"class":84},"getError",[78,424,311],{"class":227},[78,426,427,429,431,433,436],{"class":80,"line":117},[78,428,390],{"class":227},[78,430,302],{"class":84},[78,432,305],{"class":227},[78,434,435],{"class":84},"getInstance",[78,437,311],{"class":227},[78,439,440,442,444,446,448,450,453,456,459,462,464,467],{"class":80,"line":262},[78,441,390],{"class":227},[78,443,302],{"class":84},[78,445,305],{"class":227},[78,447,355],{"class":84},[78,449,358],{"class":227},[78,451,452],{"class":84},"T",[78,454,455],{"class":227},">(name, ",[78,457,458],{"class":214},"...",[78,460,461],{"class":227},"args): ",[78,463,452],{"class":120},[78,465,466],{"class":214}," |",[78,468,469],{"class":120}," null\n",[78,471,472,474,476,478,481],{"class":80,"line":280},[78,473,390],{"class":227},[78,475,302],{"class":84},[78,477,305],{"class":227},[78,479,480],{"class":84},"reset",[78,482,311],{"class":227},[10,484,486],{"id":485},"przykład-pathfinding-a","Przykład: pathfinding A*",[15,488,489,490,493,494,497],{},"TS przekazuje płaską tablicę ",[47,491,492],{},"blocked"," (",[47,495,496],{},"Uint8Array","), C++ zwraca wektor pozycji:",[69,499,501],{"className":205,"code":500,"language":207,"meta":74,"style":74},"const grid = {\n  width: 64,\n  height: 64,\n  blocked: new Uint8Array(4096)\n}\n\nconst path = engine.getWasm().call\u003CVec2i[]>(\n  'findPathAStar',\n  grid,\n  { x: 0, y: 0 },\n  { x: 63, y: 63 }\n)\n\nif (path) {\n  for (const step of path) {\n    enemy.moveTo(step.x * TILE, step.y * TILE)\n  }\n}\n",[47,502,503,515,524,532,552,556,560,583,590,595,611,624,628,633,641,660,686,692],{"__ignoreMap":74},[78,504,505,507,510,512],{"class":80,"line":81},[78,506,215],{"class":214},[78,508,509],{"class":120}," grid",[78,511,221],{"class":214},[78,513,514],{"class":227}," {\n",[78,516,517,519,522],{"class":80,"line":95},[78,518,244],{"class":227},[78,520,521],{"class":120},"64",[78,523,239],{"class":227},[78,525,526,528,530],{"class":80,"line":107},[78,527,254],{"class":227},[78,529,521],{"class":120},[78,531,239],{"class":227},[78,533,534,537,540,543,546,549],{"class":80,"line":117},[78,535,536],{"class":227},"  blocked: ",[78,538,539],{"class":214},"new",[78,541,542],{"class":84}," Uint8Array",[78,544,545],{"class":227},"(",[78,547,548],{"class":120},"4096",[78,550,551],{"class":227},")\n",[78,553,554],{"class":80,"line":262},[78,555,376],{"class":227},[78,557,558],{"class":80,"line":280},[78,559,290],{"emptyLinePlaceholder":289},[78,561,562,564,566,568,570,572,574,576,578,580],{"class":80,"line":286},[78,563,215],{"class":214},[78,565,344],{"class":120},[78,567,221],{"class":214},[78,569,299],{"class":227},[78,571,302],{"class":84},[78,573,305],{"class":227},[78,575,355],{"class":84},[78,577,358],{"class":227},[78,579,361],{"class":84},[78,581,582],{"class":227},"[]>(\n",[78,584,585,588],{"class":80,"line":293},[78,586,587],{"class":88},"  'findPathAStar'",[78,589,239],{"class":227},[78,591,592],{"class":80,"line":314},[78,593,594],{"class":227},"  grid,\n",[78,596,597,600,603,606,608],{"class":80,"line":319},[78,598,599],{"class":227},"  { x: ",[78,601,602],{"class":120},"0",[78,604,605],{"class":227},", y: ",[78,607,602],{"class":120},[78,609,610],{"class":227}," },\n",[78,612,613,615,618,620,622],{"class":80,"line":338},[78,614,599],{"class":227},[78,616,617],{"class":120},"63",[78,619,605],{"class":227},[78,621,617],{"class":120},[78,623,277],{"class":227},[78,625,626],{"class":80,"line":373},[78,627,551],{"class":227},[78,629,631],{"class":80,"line":630},13,[78,632,290],{"emptyLinePlaceholder":289},[78,634,636,638],{"class":80,"line":635},14,[78,637,322],{"class":214},[78,639,640],{"class":227}," (path) {\n",[78,642,644,647,649,651,654,657],{"class":80,"line":643},15,[78,645,646],{"class":214},"  for",[78,648,493],{"class":227},[78,650,215],{"class":214},[78,652,653],{"class":120}," step",[78,655,656],{"class":214}," of",[78,658,659],{"class":227}," path) {\n",[78,661,663,666,669,672,674,677,680,682,684],{"class":80,"line":662},16,[78,664,665],{"class":227},"    enemy.",[78,667,668],{"class":84},"moveTo",[78,670,671],{"class":227},"(step.x ",[78,673,174],{"class":214},[78,675,676],{"class":120}," TILE",[78,678,679],{"class":227},", step.y ",[78,681,174],{"class":214},[78,683,676],{"class":120},[78,685,551],{"class":227},[78,687,689],{"class":80,"line":688},17,[78,690,691],{"class":227},"  }\n",[78,693,695],{"class":80,"line":694},18,[78,696,376],{"class":227},[15,698,699,700,703,704,493,707,710],{},"Implementacja po stronie C++ żyje w ",[47,701,702],{},"native\u002Fcore\u002Finclude\u002Fpathfinding.hpp",". Testuj algorytm ",[19,705,706],{},"natywnie i w przeglądarce",[47,708,709],{},"native\u002Fcore\u002Ftests",").",[10,712,714],{"id":713},"graceful-fallback","Graceful fallback",[69,716,718],{"className":205,"code":717,"language":207,"meta":74,"style":74},"async function findPath(grid: Grid, from: Vec2i, to: Vec2i): Promise\u003CVec2i[]> {\n  const wasm = engine.getWasm()\n  if (wasm.isReady()) {\n    const result = wasm.call\u003CVec2i[]>('findPathAStar', grid, from, to)\n    if (result) return result\n  }\n  return findPathAStarTS(grid, from, to)\n}\n",[47,719,720,778,793,805,831,845,849,860],{"__ignoreMap":74},[78,721,722,725,728,731,733,737,740,743,746,749,751,754,756,759,761,763,766,768,771,773,775],{"class":80,"line":81},[78,723,724],{"class":214},"async",[78,726,727],{"class":214}," function",[78,729,730],{"class":84}," findPath",[78,732,545],{"class":227},[78,734,736],{"class":735},"s4XuR","grid",[78,738,739],{"class":214},":",[78,741,742],{"class":84}," Grid",[78,744,745],{"class":227},", ",[78,747,748],{"class":735},"from",[78,750,739],{"class":214},[78,752,753],{"class":84}," Vec2i",[78,755,745],{"class":227},[78,757,758],{"class":735},"to",[78,760,739],{"class":214},[78,762,753],{"class":84},[78,764,765],{"class":227},")",[78,767,739],{"class":214},[78,769,770],{"class":84}," Promise",[78,772,358],{"class":227},[78,774,361],{"class":84},[78,776,777],{"class":227},"[]> {\n",[78,779,780,782,785,787,789,791],{"class":80,"line":95},[78,781,341],{"class":214},[78,783,784],{"class":120}," wasm",[78,786,221],{"class":214},[78,788,299],{"class":227},[78,790,302],{"class":84},[78,792,311],{"class":227},[78,794,795,798,801,803],{"class":80,"line":107},[78,796,797],{"class":214},"  if",[78,799,800],{"class":227}," (wasm.",[78,802,332],{"class":84},[78,804,335],{"class":227},[78,806,807,810,813,815,818,820,822,824,826,828],{"class":80,"line":117},[78,808,809],{"class":214},"    const",[78,811,812],{"class":120}," result",[78,814,221],{"class":214},[78,816,817],{"class":227}," wasm.",[78,819,355],{"class":84},[78,821,358],{"class":227},[78,823,361],{"class":84},[78,825,364],{"class":227},[78,827,367],{"class":88},[78,829,830],{"class":227},", grid, from, to)\n",[78,832,833,836,839,842],{"class":80,"line":262},[78,834,835],{"class":214},"    if",[78,837,838],{"class":227}," (result) ",[78,840,841],{"class":214},"return",[78,843,844],{"class":227}," result\n",[78,846,847],{"class":80,"line":280},[78,848,691],{"class":227},[78,850,851,854,857],{"class":80,"line":286},[78,852,853],{"class":214},"  return",[78,855,856],{"class":84}," findPathAStarTS",[78,858,859],{"class":227},"(grid, from, to)\n",[78,861,862],{"class":80,"line":293},[78,863,376],{"class":227},[865,866,869],"callout",{"title":867,"type":868},"Mierz, nie zgaduj","warning",[15,870,871,872,875],{},"„WASM będzie szybszy” to hipoteza, nie fakt. Dla małych danych narzut kopiowania przez granicę potrafi zjeść cały zysk. Uruchom ",[47,873,874],{},"npm run bench"," dla obu wariantów i dopiero wtedy decyduj.",[877,878,879],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":74,"searchDepth":107,"depth":107,"links":881},[882,883,884,885,886,887,888,889],{"id":12,"depth":95,"text":13},{"id":28,"depth":95,"text":29},{"id":66,"depth":95,"text":67},{"id":127,"depth":95,"text":128},{"id":201,"depth":95,"text":202},{"id":379,"depth":95,"text":380},{"id":485,"depth":95,"text":486},{"id":713,"depth":95,"text":714},"Opcjonalny most TS↔WASM dla ciężkiego compute. Instalacja Emscripten, kompilacja C++23, zasady granicy i graceful fallback.","md",{},"\u002Fgame-engine\u002Fadvanced\u002Fwasm",{"title":5,"description":890},"01.game-engine\u002F08.advanced\u002F02.wasm","agz1o3eITgpNJxpJMXqxrZAqljUfM0k300OkE7baYbA",[898,903],{"title":899,"path":900,"stem":901,"description":902,"children":-1},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins","PluginHost, manifest, uprawnienia, punkty rozszerzeń, zależności z detekcją cykli i budżety błędów. Jak pisać pluginy bezpiecznie.",{"title":904,"path":905,"stem":906,"description":907,"children":-1},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging","DebugOverlay, LogBuffer i LogPanel, DebugViews, Profiler i raport diagnostyczny JSON. Kompletny toolbox do diagnozowania gier.",[909,1020,1081],{"title":910,"path":911,"stem":912,"children":913},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[914,916,920,924,928,954,983,996,1008,1012,1016],{"title":915,"path":911,"stem":912},"Przegląd",{"title":917,"path":918,"stem":919},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":921,"path":922,"stem":923},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration",{"title":925,"path":926,"stem":927},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":929,"path":930,"stem":931,"children":932,"page":953},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[933,937,941,945,949],{"title":934,"path":935,"stem":936},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":938,"path":939,"stem":940},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":942,"path":943,"stem":944},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":946,"path":947,"stem":948},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":950,"path":951,"stem":952},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":955,"path":956,"stem":957,"children":958,"page":953},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[959,963,967,971,975,979],{"title":960,"path":961,"stem":962},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":964,"path":965,"stem":966},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":968,"path":969,"stem":970},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":972,"path":973,"stem":974},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":976,"path":977,"stem":978},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":980,"path":981,"stem":982},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":984,"path":985,"stem":986,"children":987,"page":953},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[988,992],{"title":989,"path":990,"stem":991},"Format projektu","\u002Fgame-engine\u002Fdata\u002Fproject-format","01.game-engine\u002F07.data\u002F01.project-format",{"title":993,"path":994,"stem":995},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":997,"path":998,"stem":999,"children":1000,"page":953},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[1001,1002,1003,1004],{"title":899,"path":900,"stem":901},{"title":5,"path":893,"stem":895},{"title":904,"path":905,"stem":906},{"title":1005,"path":1006,"stem":1007},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":1009,"path":1010,"stem":1011},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment",{"title":1013,"path":1014,"stem":1015},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":1017,"path":1018,"stem":1019},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":1021,"path":1022,"stem":1023,"children":1024},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1025,1026,1029,1032,1053],{"title":915,"path":1022,"stem":1023},{"title":917,"path":1027,"stem":1028},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":921,"path":1030,"stem":1031},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1033,"path":1034,"stem":1035,"children":1036,"page":953},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1037,1041,1045,1049],{"title":1038,"path":1039,"stem":1040},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1042,"path":1043,"stem":1044},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1046,"path":1047,"stem":1048},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1050,"path":1051,"stem":1052},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1054,"path":1055,"stem":1056,"children":1057,"page":953},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1058,1062,1066,1070,1073,1077],{"title":1059,"path":1060,"stem":1061},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":1063,"path":1064,"stem":1065},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":1067,"path":1068,"stem":1069},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":1009,"path":1071,"stem":1072},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1074,"path":1075,"stem":1076},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1078,"path":1079,"stem":1080},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1082,"path":1083,"stem":1084,"children":1085},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1086,1087,1090,1111,1124,1144],{"title":915,"path":1083,"stem":1084},{"title":917,"path":1088,"stem":1089},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1091,"path":1092,"stem":1093,"children":1094,"page":953},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1095,1099,1103,1107],{"title":1096,"path":1097,"stem":1098},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1100,"path":1101,"stem":1102},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1104,"path":1105,"stem":1106},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1108,"path":1109,"stem":1110},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1112,"path":1113,"stem":1114,"children":1115,"page":953},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1116,1120],{"title":1117,"path":1118,"stem":1119},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1121,"path":1122,"stem":1123},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1125,"path":1126,"stem":1127,"children":1128,"page":953},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1129,1132,1136,1140],{"title":925,"path":1130,"stem":1131},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1133,"path":1134,"stem":1135},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1137,"path":1138,"stem":1139},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1141,"path":1142,"stem":1143},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1145,"path":1146,"stem":1147},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986307895]