[{"data":1,"prerenderedAt":1203},["ShallowReactive",2],{"doc:\u002Fgame-engine\u002Fdata\u002Fproject-format":3,"surround:\u002Fgame-engine\u002Fdata\u002Fproject-format":956,"navigation":965},{"id":4,"title":5,"body":6,"description":949,"extension":950,"meta":951,"navigation":370,"path":952,"seo":953,"stem":954,"__hash__":955},"docs\u002F01.game-engine\u002F07.data\u002F01.project-format.md","Format projektu",{"type":7,"value":8,"toc":940},"minimark",[9,14,23,27,286,290,343,347,441,444,448,533,536,540,551,649,903,910,914,936],[10,11,13],"h2",{"id":12},"po-co-wersjonowany-format","Po co wersjonowany format",[15,16,17,18,22],"p",{},"Projekt gry to dane, nie kod. Format JSON ma ",[19,20,21],"code",{},"formatVersion",", łańcuch migracji i walidację — dzięki temu stary projekt otworzy się w nowej wersji silnika (ADR 0002).",[10,24,26],{"id":25},"struktura","Struktura",[28,29,35],"pre",{"className":30,"code":31,"filename":32,"language":33,"meta":34,"style":34},"language-json shiki shiki-themes github-light github-dark","{\n  \"formatVersion\": 2,\n  \"name\": \"MyGame\",\n  \"game\": {\n    \"width\": 1280,\n    \"height\": 720,\n    \"scaleMode\": \"fit\",\n    \"backgroundColor\": \"#0f1419\"\n  },\n  \"assets\": [\n    { \"id\": \"hero\", \"type\": \"image\", \"src\": \"\u002Fassets\u002Fhero.png\" },\n    { \"id\": \"theme\", \"type\": \"audio\", \"src\": \"\u002Fassets\u002Ftheme.ogg\" }\n  ],\n  \"scenes\": [\n    { \"id\": \"menu\", \"objects\": [] },\n    { \"id\": \"game\", \"objects\": [] }\n  ]\n}\n","project.json","json","",[19,36,37,46,62,76,85,98,111,124,135,141,150,188,221,227,235,255,274,280],{"__ignoreMap":34},[38,39,42],"span",{"class":40,"line":41},"line",1,[38,43,45],{"class":44},"sVt8B","{\n",[38,47,49,53,56,59],{"class":40,"line":48},2,[38,50,52],{"class":51},"sj4cs","  \"formatVersion\"",[38,54,55],{"class":44},": ",[38,57,58],{"class":51},"2",[38,60,61],{"class":44},",\n",[38,63,65,68,70,74],{"class":40,"line":64},3,[38,66,67],{"class":51},"  \"name\"",[38,69,55],{"class":44},[38,71,73],{"class":72},"sZZnC","\"MyGame\"",[38,75,61],{"class":44},[38,77,79,82],{"class":40,"line":78},4,[38,80,81],{"class":51},"  \"game\"",[38,83,84],{"class":44},": {\n",[38,86,88,91,93,96],{"class":40,"line":87},5,[38,89,90],{"class":51},"    \"width\"",[38,92,55],{"class":44},[38,94,95],{"class":51},"1280",[38,97,61],{"class":44},[38,99,101,104,106,109],{"class":40,"line":100},6,[38,102,103],{"class":51},"    \"height\"",[38,105,55],{"class":44},[38,107,108],{"class":51},"720",[38,110,61],{"class":44},[38,112,114,117,119,122],{"class":40,"line":113},7,[38,115,116],{"class":51},"    \"scaleMode\"",[38,118,55],{"class":44},[38,120,121],{"class":72},"\"fit\"",[38,123,61],{"class":44},[38,125,127,130,132],{"class":40,"line":126},8,[38,128,129],{"class":51},"    \"backgroundColor\"",[38,131,55],{"class":44},[38,133,134],{"class":72},"\"#0f1419\"\n",[38,136,138],{"class":40,"line":137},9,[38,139,140],{"class":44},"  },\n",[38,142,144,147],{"class":40,"line":143},10,[38,145,146],{"class":51},"  \"assets\"",[38,148,149],{"class":44},": [\n",[38,151,153,156,159,161,164,167,170,172,175,177,180,182,185],{"class":40,"line":152},11,[38,154,155],{"class":44},"    { ",[38,157,158],{"class":51},"\"id\"",[38,160,55],{"class":44},[38,162,163],{"class":72},"\"hero\"",[38,165,166],{"class":44},", ",[38,168,169],{"class":51},"\"type\"",[38,171,55],{"class":44},[38,173,174],{"class":72},"\"image\"",[38,176,166],{"class":44},[38,178,179],{"class":51},"\"src\"",[38,181,55],{"class":44},[38,183,184],{"class":72},"\"\u002Fassets\u002Fhero.png\"",[38,186,187],{"class":44}," },\n",[38,189,191,193,195,197,200,202,204,206,209,211,213,215,218],{"class":40,"line":190},12,[38,192,155],{"class":44},[38,194,158],{"class":51},[38,196,55],{"class":44},[38,198,199],{"class":72},"\"theme\"",[38,201,166],{"class":44},[38,203,169],{"class":51},[38,205,55],{"class":44},[38,207,208],{"class":72},"\"audio\"",[38,210,166],{"class":44},[38,212,179],{"class":51},[38,214,55],{"class":44},[38,216,217],{"class":72},"\"\u002Fassets\u002Ftheme.ogg\"",[38,219,220],{"class":44}," }\n",[38,222,224],{"class":40,"line":223},13,[38,225,226],{"class":44},"  ],\n",[38,228,230,233],{"class":40,"line":229},14,[38,231,232],{"class":51},"  \"scenes\"",[38,234,149],{"class":44},[38,236,238,240,242,244,247,249,252],{"class":40,"line":237},15,[38,239,155],{"class":44},[38,241,158],{"class":51},[38,243,55],{"class":44},[38,245,246],{"class":72},"\"menu\"",[38,248,166],{"class":44},[38,250,251],{"class":51},"\"objects\"",[38,253,254],{"class":44},": [] },\n",[38,256,258,260,262,264,267,269,271],{"class":40,"line":257},16,[38,259,155],{"class":44},[38,261,158],{"class":51},[38,263,55],{"class":44},[38,265,266],{"class":72},"\"game\"",[38,268,166],{"class":44},[38,270,251],{"class":51},[38,272,273],{"class":44},": [] }\n",[38,275,277],{"class":40,"line":276},17,[38,278,279],{"class":44},"  ]\n",[38,281,283],{"class":40,"line":282},18,[38,284,285],{"class":44},"}\n",[10,287,289],{"id":288},"api","API",[28,291,295],{"className":292,"code":293,"language":294,"meta":34,"style":34},"language-ts shiki shiki-themes github-light github-dark","validateProject(input): ValidationResult\nmigrateProject(input): { project, migrated, fromVersion }\nimportProject(text, options?): ImportResult\nexportProject(project): string\n","ts",[19,296,297,306,314,335],{"__ignoreMap":34},[38,298,299,303],{"class":40,"line":41},[38,300,302],{"class":301},"sScJk","validateProject",[38,304,305],{"class":44},"(input): ValidationResult\n",[38,307,308,311],{"class":40,"line":48},[38,309,310],{"class":301},"migrateProject",[38,312,313],{"class":44},"(input): { project, migrated, fromVersion }\n",[38,315,316,319,322,326,329,332],{"class":40,"line":64},[38,317,318],{"class":301},"importProject",[38,320,321],{"class":44},"(text, options",[38,323,325],{"class":324},"szBVR","?",[38,327,328],{"class":44},")",[38,330,331],{"class":324},":",[38,333,334],{"class":44}," ImportResult\n",[38,336,337,340],{"class":40,"line":78},[38,338,339],{"class":301},"exportProject",[38,341,342],{"class":44},"(project): string\n",[10,344,346],{"id":345},"walidacja","Walidacja",[28,348,350],{"className":292,"code":349,"language":294,"meta":34,"style":34},"import { validateProject } from '@engine'\n\nconst result = validateProject(raw)\nif (!result.valid) {\n  for (const error of result.errors) {\n    console.error(error)\n  }\n}\n",[19,351,352,366,372,389,403,421,432,437],{"__ignoreMap":34},[38,353,354,357,360,363],{"class":40,"line":41},[38,355,356],{"class":324},"import",[38,358,359],{"class":44}," { validateProject } ",[38,361,362],{"class":324},"from",[38,364,365],{"class":72}," '@engine'\n",[38,367,368],{"class":40,"line":48},[38,369,371],{"emptyLinePlaceholder":370},true,"\n",[38,373,374,377,380,383,386],{"class":40,"line":64},[38,375,376],{"class":324},"const",[38,378,379],{"class":51}," result",[38,381,382],{"class":324}," =",[38,384,385],{"class":301}," validateProject",[38,387,388],{"class":44},"(raw)\n",[38,390,391,394,397,400],{"class":40,"line":78},[38,392,393],{"class":324},"if",[38,395,396],{"class":44}," (",[38,398,399],{"class":324},"!",[38,401,402],{"class":44},"result.valid) {\n",[38,404,405,408,410,412,415,418],{"class":40,"line":87},[38,406,407],{"class":324},"  for",[38,409,396],{"class":44},[38,411,376],{"class":324},[38,413,414],{"class":51}," error",[38,416,417],{"class":324}," of",[38,419,420],{"class":44}," result.errors) {\n",[38,422,423,426,429],{"class":40,"line":100},[38,424,425],{"class":44},"    console.",[38,427,428],{"class":301},"error",[38,430,431],{"class":44},"(error)\n",[38,433,434],{"class":40,"line":113},[38,435,436],{"class":44},"  }\n",[38,438,439],{"class":40,"line":126},[38,440,285],{"class":44},[15,442,443],{},"Walidacja sprawdza typy, wymagane pola, duplikaty id assetów i referencje — błędy są czytelne i wskazują konkretne pole.",[10,445,447],{"id":446},"migracje","Migracje",[28,449,451],{"className":292,"code":450,"language":294,"meta":34,"style":34},"import { migrateProject } from '@engine'\n\nconst { project, migrated, fromVersion } = migrateProject(oldProject)\nif (migrated) {\n  console.log(`Zmigrowano z wersji ${fromVersion} do 2`)\n}\n",[19,452,453,464,468,500,507,529],{"__ignoreMap":34},[38,454,455,457,460,462],{"class":40,"line":41},[38,456,356],{"class":324},[38,458,459],{"class":44}," { migrateProject } ",[38,461,362],{"class":324},[38,463,365],{"class":72},[38,465,466],{"class":40,"line":48},[38,467,371],{"emptyLinePlaceholder":370},[38,469,470,472,475,478,480,483,485,488,491,494,497],{"class":40,"line":64},[38,471,376],{"class":324},[38,473,474],{"class":44}," { ",[38,476,477],{"class":51},"project",[38,479,166],{"class":44},[38,481,482],{"class":51},"migrated",[38,484,166],{"class":44},[38,486,487],{"class":51},"fromVersion",[38,489,490],{"class":44}," } ",[38,492,493],{"class":324},"=",[38,495,496],{"class":301}," migrateProject",[38,498,499],{"class":44},"(oldProject)\n",[38,501,502,504],{"class":40,"line":78},[38,503,393],{"class":324},[38,505,506],{"class":44}," (migrated) {\n",[38,508,509,512,515,518,521,523,526],{"class":40,"line":87},[38,510,511],{"class":44},"  console.",[38,513,514],{"class":301},"log",[38,516,517],{"class":44},"(",[38,519,520],{"class":72},"`Zmigrowano z wersji ${",[38,522,487],{"class":44},[38,524,525],{"class":72},"} do 2`",[38,527,528],{"class":44},")\n",[38,530,531],{"class":40,"line":100},[38,532,285],{"class":44},[15,534,535],{},"Migracje są addytywne i idempotentne — projekt w aktualnej wersji przechodzi bez zmian.",[10,537,539],{"id":538},"import-i-eksport-z-sumą-kontrolną","Import i eksport z sumą kontrolną",[15,541,542,543,547,548,550],{},"Koperta eksportu zawiera sumę ",[544,545,546],"strong",{},"FNV-1a",". ",[19,549,318],{}," weryfikuje ją opcjonalnie:",[28,552,554],{"className":292,"code":553,"language":294,"meta":34,"style":34},"import { exportProject, importProject } from '@engine'\n\nconst text = exportProject(project)\n\nconst result = importProject(text, { verifyChecksum: true })\nif (!result.valid) throw new Error(result.errors.join('\\n'))\n",[19,555,556,567,571,586,590,610],{"__ignoreMap":34},[38,557,558,560,563,565],{"class":40,"line":41},[38,559,356],{"class":324},[38,561,562],{"class":44}," { exportProject, importProject } ",[38,564,362],{"class":324},[38,566,365],{"class":72},[38,568,569],{"class":40,"line":48},[38,570,371],{"emptyLinePlaceholder":370},[38,572,573,575,578,580,583],{"class":40,"line":64},[38,574,376],{"class":324},[38,576,577],{"class":51}," text",[38,579,382],{"class":324},[38,581,582],{"class":301}," exportProject",[38,584,585],{"class":44},"(project)\n",[38,587,588],{"class":40,"line":78},[38,589,371],{"emptyLinePlaceholder":370},[38,591,592,594,596,598,601,604,607],{"class":40,"line":87},[38,593,376],{"class":324},[38,595,379],{"class":51},[38,597,382],{"class":324},[38,599,600],{"class":301}," importProject",[38,602,603],{"class":44},"(text, { verifyChecksum: ",[38,605,606],{"class":51},"true",[38,608,609],{"class":44}," })\n",[38,611,612,614,616,618,621,624,627,630,633,636,638,641,644,646],{"class":40,"line":100},[38,613,393],{"class":324},[38,615,396],{"class":44},[38,617,399],{"class":324},[38,619,620],{"class":44},"result.valid) ",[38,622,623],{"class":324},"throw",[38,625,626],{"class":324}," new",[38,628,629],{"class":301}," Error",[38,631,632],{"class":44},"(result.errors.",[38,634,635],{"class":301},"join",[38,637,517],{"class":44},[38,639,640],{"class":72},"'",[38,642,643],{"class":51},"\\n",[38,645,640],{"class":72},[38,647,648],{"class":44},"))\n",[28,650,652],{"className":292,"code":651,"language":294,"meta":34,"style":34},"async function saveToDisk(project: Project) {\n  const blob = new Blob([exportProject(project)], { type: 'application\u002Fjson' })\n  const url = URL.createObjectURL(blob)\n  const a = document.createElement('a')\n  a.href = url\n  a.download = `${project.name}.json`\n  a.click()\n  URL.revokeObjectURL(url)\n}\n\nasync function loadFromDisk(file: File) {\n  const result = importProject(await file.text(), { verifyChecksum: true })\n  if (!result.valid) throw new Error(result.errors.join('\\n'))\n  return result.project\n}\n",[19,653,654,678,706,727,749,759,779,790,803,807,811,832,860,891,899],{"__ignoreMap":34},[38,655,656,659,662,665,667,670,672,675],{"class":40,"line":41},[38,657,658],{"class":324},"async",[38,660,661],{"class":324}," function",[38,663,664],{"class":301}," saveToDisk",[38,666,517],{"class":44},[38,668,477],{"class":669},"s4XuR",[38,671,331],{"class":324},[38,673,674],{"class":301}," Project",[38,676,677],{"class":44},") {\n",[38,679,680,683,686,688,690,693,696,698,701,704],{"class":40,"line":48},[38,681,682],{"class":324},"  const",[38,684,685],{"class":51}," blob",[38,687,382],{"class":324},[38,689,626],{"class":324},[38,691,692],{"class":301}," Blob",[38,694,695],{"class":44},"([",[38,697,339],{"class":301},[38,699,700],{"class":44},"(project)], { type: ",[38,702,703],{"class":72},"'application\u002Fjson'",[38,705,609],{"class":44},[38,707,708,710,713,715,718,721,724],{"class":40,"line":64},[38,709,682],{"class":324},[38,711,712],{"class":51}," url",[38,714,382],{"class":324},[38,716,717],{"class":51}," URL",[38,719,720],{"class":44},".",[38,722,723],{"class":301},"createObjectURL",[38,725,726],{"class":44},"(blob)\n",[38,728,729,731,734,736,739,742,744,747],{"class":40,"line":78},[38,730,682],{"class":324},[38,732,733],{"class":51}," a",[38,735,382],{"class":324},[38,737,738],{"class":44}," document.",[38,740,741],{"class":301},"createElement",[38,743,517],{"class":44},[38,745,746],{"class":72},"'a'",[38,748,528],{"class":44},[38,750,751,754,756],{"class":40,"line":87},[38,752,753],{"class":44},"  a.href ",[38,755,493],{"class":324},[38,757,758],{"class":44}," url\n",[38,760,761,764,766,769,771,773,776],{"class":40,"line":100},[38,762,763],{"class":44},"  a.download ",[38,765,493],{"class":324},[38,767,768],{"class":72}," `${",[38,770,477],{"class":44},[38,772,720],{"class":72},[38,774,775],{"class":44},"name",[38,777,778],{"class":72},"}.json`\n",[38,780,781,784,787],{"class":40,"line":113},[38,782,783],{"class":44},"  a.",[38,785,786],{"class":301},"click",[38,788,789],{"class":44},"()\n",[38,791,792,795,797,800],{"class":40,"line":126},[38,793,794],{"class":51},"  URL",[38,796,720],{"class":44},[38,798,799],{"class":301},"revokeObjectURL",[38,801,802],{"class":44},"(url)\n",[38,804,805],{"class":40,"line":137},[38,806,285],{"class":44},[38,808,809],{"class":40,"line":143},[38,810,371],{"emptyLinePlaceholder":370},[38,812,813,815,817,820,822,825,827,830],{"class":40,"line":152},[38,814,658],{"class":324},[38,816,661],{"class":324},[38,818,819],{"class":301}," loadFromDisk",[38,821,517],{"class":44},[38,823,824],{"class":669},"file",[38,826,331],{"class":324},[38,828,829],{"class":301}," File",[38,831,677],{"class":44},[38,833,834,836,838,840,842,844,847,850,853,856,858],{"class":40,"line":190},[38,835,682],{"class":324},[38,837,379],{"class":51},[38,839,382],{"class":324},[38,841,600],{"class":301},[38,843,517],{"class":44},[38,845,846],{"class":324},"await",[38,848,849],{"class":44}," file.",[38,851,852],{"class":301},"text",[38,854,855],{"class":44},"(), { verifyChecksum: ",[38,857,606],{"class":51},[38,859,609],{"class":44},[38,861,862,865,867,869,871,873,875,877,879,881,883,885,887,889],{"class":40,"line":223},[38,863,864],{"class":324},"  if",[38,866,396],{"class":44},[38,868,399],{"class":324},[38,870,620],{"class":44},[38,872,623],{"class":324},[38,874,626],{"class":324},[38,876,629],{"class":301},[38,878,632],{"class":44},[38,880,635],{"class":301},[38,882,517],{"class":44},[38,884,640],{"class":72},[38,886,643],{"class":51},[38,888,640],{"class":72},[38,890,648],{"class":44},[38,892,893,896],{"class":40,"line":229},[38,894,895],{"class":324},"  return",[38,897,898],{"class":44}," result.project\n",[38,900,901],{"class":40,"line":237},[38,902,285],{"class":44},[904,905,907],"callout",{"type":906},"tip",[15,908,909],{},"Suma kontrolna chroni przed uszkodzeniem pliku (ucięty upload, ręczna edycja), nie przed złośliwą modyfikacją — FNV-1a nie jest funkcją kryptograficzną. Do integralności bezpieczeństwa użyj podpisu po stronie serwera.",[10,911,913],{"id":912},"powiązane","Powiązane",[915,916,917,926],"ul",{},[918,919,920,925],"li",{},[921,922,924],"a",{"href":923},"\u002Fgame-engine\u002Fdata\u002Fsaves","Zapisy gry"," — repozytoria i backendy przechowywania.",[918,927,928,932,933,720],{},[921,929,931],{"href":930},"\u002Fgame-engine\u002Fconfiguration","Konfiguracja"," — jak format projektu mapuje się na ",[19,934,935],{},"EngineConfig",[937,938,939],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":34,"searchDepth":64,"depth":64,"links":941},[942,943,944,945,946,947,948],{"id":12,"depth":48,"text":13},{"id":25,"depth":48,"text":26},{"id":288,"depth":48,"text":289},{"id":345,"depth":48,"text":346},{"id":446,"depth":48,"text":447},{"id":538,"depth":48,"text":539},{"id":912,"depth":48,"text":913},"Wersjonowany JSON projektu (formatVersion 2), walidacja, migracje, import\u002Feksport z sumą kontrolną FNV-1a.","md",{},"\u002Fgame-engine\u002Fdata\u002Fproject-format",{"title":5,"description":949},"01.game-engine\u002F07.data\u002F01.project-format","8tPJbp2u_DkBfRVuCg9LzpA9H9sG0h3tBJVy4N5peM8",[957,962],{"title":958,"path":959,"stem":960,"description":961,"children":-1},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens","to, from, delay, sekwencje, 28 krzywych easingu, repeat\u002Fyoyo i anulowanie. Animacje właściwości bez dotykania renderera.",{"title":924,"path":923,"stem":963,"description":964,"children":-1},"01.game-engine\u002F07.data\u002F02.saves","ProjectRepository z atomowym zapisem, PlayerSaveRepository i sześć backendów SaveStore — od localStorage po SQL.",[966,1075,1136],{"title":967,"path":968,"stem":969,"children":970},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[971,973,977,979,983,1009,1035,1042,1063,1067,1071],{"title":972,"path":968,"stem":969},"Przegląd",{"title":974,"path":975,"stem":976},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":931,"path":930,"stem":978},"01.game-engine\u002F03.configuration",{"title":980,"path":981,"stem":982},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":984,"path":985,"stem":986,"children":987,"page":1008},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[988,992,996,1000,1004],{"title":989,"path":990,"stem":991},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":993,"path":994,"stem":995},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":997,"path":998,"stem":999},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":1001,"path":1002,"stem":1003},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":1005,"path":1006,"stem":1007},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":1010,"path":1011,"stem":1012,"children":1013,"page":1008},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[1014,1018,1022,1026,1030,1034],{"title":1015,"path":1016,"stem":1017},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":1019,"path":1020,"stem":1021},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":1023,"path":1024,"stem":1025},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":1027,"path":1028,"stem":1029},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":1031,"path":1032,"stem":1033},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":958,"path":959,"stem":960},{"title":1036,"path":1037,"stem":1038,"children":1039,"page":1008},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[1040,1041],{"title":5,"path":952,"stem":954},{"title":924,"path":923,"stem":963},{"title":1043,"path":1044,"stem":1045,"children":1046,"page":1008},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[1047,1051,1055,1059],{"title":1048,"path":1049,"stem":1050},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":1052,"path":1053,"stem":1054},"WebAssembly","\u002Fgame-engine\u002Fadvanced\u002Fwasm","01.game-engine\u002F08.advanced\u002F02.wasm",{"title":1056,"path":1057,"stem":1058},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging",{"title":1060,"path":1061,"stem":1062},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":1064,"path":1065,"stem":1066},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment",{"title":1068,"path":1069,"stem":1070},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":1072,"path":1073,"stem":1074},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":1076,"path":1077,"stem":1078,"children":1079},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1080,1081,1084,1087,1108],{"title":972,"path":1077,"stem":1078},{"title":974,"path":1082,"stem":1083},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":931,"path":1085,"stem":1086},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1088,"path":1089,"stem":1090,"children":1091,"page":1008},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1092,1096,1100,1104],{"title":1093,"path":1094,"stem":1095},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1097,"path":1098,"stem":1099},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1101,"path":1102,"stem":1103},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1105,"path":1106,"stem":1107},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1109,"path":1110,"stem":1111,"children":1112,"page":1008},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1113,1117,1121,1125,1128,1132],{"title":1114,"path":1115,"stem":1116},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":1118,"path":1119,"stem":1120},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":1122,"path":1123,"stem":1124},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":1064,"path":1126,"stem":1127},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1129,"path":1130,"stem":1131},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1133,"path":1134,"stem":1135},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1137,"path":1138,"stem":1139,"children":1140},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1141,1142,1145,1166,1179,1199],{"title":972,"path":1138,"stem":1139},{"title":974,"path":1143,"stem":1144},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1146,"path":1147,"stem":1148,"children":1149,"page":1008},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1150,1154,1158,1162],{"title":1151,"path":1152,"stem":1153},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1155,"path":1156,"stem":1157},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1159,"path":1160,"stem":1161},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1163,"path":1164,"stem":1165},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1167,"path":1168,"stem":1169,"children":1170,"page":1008},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1171,1175],{"title":1172,"path":1173,"stem":1174},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1176,"path":1177,"stem":1178},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1180,"path":1181,"stem":1182,"children":1183,"page":1008},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1184,1187,1191,1195],{"title":980,"path":1185,"stem":1186},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1188,"path":1189,"stem":1190},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1192,"path":1193,"stem":1194},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1196,"path":1197,"stem":1198},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1200,"path":1201,"stem":1202},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986307740]