From dadf8a65eace01bf9beaf346799d4da3b5647d66 Mon Sep 17 00:00:00 2001 From: AristurtleDev <103014489+AristurtleDev@users.noreply.github.com> Date: Mon, 30 Sep 2024 04:42:27 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20craftwor?= =?UTF-8?q?kgames/craftworkgames.github.io@1548afb551791ca4ff58ed789a09993?= =?UTF-8?q?d9ebe54c9=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 ++-- assets/js/11b43341.4e17f869.js | 1 - assets/js/11b43341.61d144f3.js | 1 + assets/js/24f3c139.9c54f07f.js | 1 - assets/js/24f3c139.f2245831.js | 1 + assets/js/4ef90eef.9b81e0d8.js | 1 - assets/js/4ef90eef.b374bb8a.js | 1 + assets/js/655e0645.03921cf6.js | 1 + assets/js/655e0645.718a3f2b.js | 1 - assets/js/84044833.40c091da.js | 1 + assets/js/84044833.a4e9c2f5.js | 1 - assets/js/f291af6e.74862146.js | 1 + assets/js/f291af6e.b4db295b.js | 1 - assets/js/{main.1807643e.js => main.53ebba81.js} | 4 ++-- ...43e.js.LICENSE.txt => main.53ebba81.js.LICENSE.txt} | 0 ...ntime~main.17c21336.js => runtime~main.a509b40e.js} | 2 +- blog/archive/index.html | 4 ++-- blog/bmfont-update/index.html | 4 ++-- blog/index.html | 4 ++-- blog/kni-fna/index.html | 4 ++-- blog/mongame-extended-is-back/index.html | 4 ++-- blog/monogame-extended-gum/index.html | 4 ++-- blog/tags/4.0/index.html | 4 ++-- blog/tags/bitmap-fonts/index.html | 4 ++-- blog/tags/fna/index.html | 4 ++-- blog/tags/gum/index.html | 4 ++-- blog/tags/index.html | 4 ++-- blog/tags/kni/index.html | 4 ++-- blog/tags/releases/index.html | 4 ++-- blog/tags/ui/index.html | 4 ++-- blog/tags/updates/index.html | 4 ++-- blog/update-2024-06-12/index.html | 4 ++-- blog/version-4-initial-release/index.html | 4 ++-- docs/about/contributing/index.html | 4 ++-- docs/about/introduction/index.html | 4 ++-- docs/about/principles/index.html | 4 ++-- docs/archived/animations/index.html | 4 ++-- docs/features/2d-animations/animatedsprite/index.html | 6 +++--- docs/features/2d-animations/spritesheet/index.html | 6 +++--- docs/features/camera/index.html | 6 +++--- docs/features/camera/orthographic-camera/index.html | 6 +++--- docs/features/collections/index.html | 6 +++--- docs/features/collision/index.html | 6 +++--- .../contentManager-extensions/index.html | 6 +++--- docs/features/entities/index.html | 6 +++--- docs/features/fonts/bitmapfont/index.html | 6 +++--- docs/features/input/inputlistener/index.html | 6 +++--- docs/features/input/keyboardextended/index.html | 6 +++--- docs/features/input/mouseextended/index.html | 6 +++--- docs/features/object-pooling/index.html | 6 +++--- docs/features/particles/index.html | 6 +++--- docs/features/scene-graphs/index.html | 8 ++++---- docs/features/screen-management/index.html | 10 +++++----- docs/features/serialization/index.html | 8 ++++---- docs/features/texture-handling/sprite/index.html | 6 +++--- .../texture-handling/texture2datlas/index.html | 6 +++--- .../texture-handling/texture2dregion/index.html | 6 +++--- docs/features/tiled/index.html | 8 ++++---- docs/features/tweening/index.html | 8 ++++---- docs/features/ui/gum/gum-forms/index.html | 6 +++--- docs/getting-started/installation-fna/index.html | 4 ++-- docs/getting-started/installation-kni/index.html | 4 ++-- docs/getting-started/installation-monogame/index.html | 4 ++-- index.html | 4 ++-- 64 files changed, 136 insertions(+), 136 deletions(-) delete mode 100644 assets/js/11b43341.4e17f869.js create mode 100644 assets/js/11b43341.61d144f3.js delete mode 100644 assets/js/24f3c139.9c54f07f.js create mode 100644 assets/js/24f3c139.f2245831.js delete mode 100644 assets/js/4ef90eef.9b81e0d8.js create mode 100644 assets/js/4ef90eef.b374bb8a.js create mode 100644 assets/js/655e0645.03921cf6.js delete mode 100644 assets/js/655e0645.718a3f2b.js create mode 100644 assets/js/84044833.40c091da.js delete mode 100644 assets/js/84044833.a4e9c2f5.js create mode 100644 assets/js/f291af6e.74862146.js delete mode 100644 assets/js/f291af6e.b4db295b.js rename assets/js/{main.1807643e.js => main.53ebba81.js} (96%) rename assets/js/{main.1807643e.js.LICENSE.txt => main.53ebba81.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.17c21336.js => runtime~main.a509b40e.js} (60%) diff --git a/404.html b/404.html index c72a422..0ef81c8 100644 --- a/404.html +++ b/404.html @@ -5,8 +5,8 @@ Page Not Found | MonoGame.Extended - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/11b43341.4e17f869.js b/assets/js/11b43341.4e17f869.js deleted file mode 100644 index 9687c29..0000000 --- a/assets/js/11b43341.4e17f869.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[2256],{7674:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"MonoGame.Extended","items":[{"type":"link","label":"Introduction","href":"/docs/about/introduction","docId":"about/introduction","unlisted":false},{"type":"link","label":"Principles","href":"/docs/about/principles","docId":"about/principles","unlisted":false},{"type":"link","label":"Contributing","href":"/docs/about/contributing","docId":"about/contributing","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Getting Started","items":[{"type":"link","label":"Installation (MonoGame)","href":"/docs/getting-started/installation-monogame","docId":"getting-started/installation-monogame","unlisted":false},{"type":"link","label":"Installation (KNI)","href":"/docs/getting-started/installation-kni","docId":"getting-started/installation-kni","unlisted":false},{"type":"link","label":"Installation (FNA)","href":"/docs/getting-started/installation-fna","docId":"getting-started/installation-fna","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Features","items":[{"type":"category","label":"Texture Handling","items":[{"type":"link","label":"Texture2DRegion","href":"/docs/features/texture-handling/texture2dregion/","docId":"features/texture-handling/texture2dregion/texture2dregion","unlisted":false},{"type":"link","label":"Texture2DAtlas","href":"/docs/features/texture-handling/texture2datlas/","docId":"features/texture-handling/texture2datlas/texture2datlas","unlisted":false},{"type":"link","label":"Sprite","href":"/docs/features/texture-handling/sprite/","docId":"features/texture-handling/sprite/sprite","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"2D Animations","items":[{"type":"link","label":"Spritesheet","href":"/docs/features/2d-animations/spritesheet/","docId":"features/2d-animations/spritesheet/spritesheet","unlisted":false},{"type":"link","label":"AnimatedSprite","href":"/docs/features/2d-animations/animatedsprite/","docId":"features/2d-animations/animatedsprite/animatedsprite","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Fonts","items":[{"type":"link","label":"Bitmap Font","href":"/docs/features/fonts/bitmapfont/","docId":"features/fonts/bitmapfont/bitmapfont","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Input","items":[{"type":"link","label":"KeyboardExtended","href":"/docs/features/input/keyboardextended/","docId":"features/input/keyboardextended/keyboardextended","unlisted":false},{"type":"link","label":"MouseExtended","href":"/docs/features/input/mouseextended/","docId":"features/input/mouseextended/mouseextended","unlisted":false},{"type":"link","label":"InputListener","href":"/docs/features/input/inputlistener/","docId":"features/input/inputlistener/inputlistener","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Camera","items":[{"type":"link","label":"Camera","href":"/docs/features/camera/","docId":"features/camera/camera","unlisted":false},{"type":"link","label":"Orthographic Camera","href":"/docs/features/camera/orthographic-camera/","docId":"features/camera/orthographic-camera/orthographiccamera","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Collections","items":[{"type":"link","label":"Collections","href":"/docs/features/collections/","docId":"features/collections/collections","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Object Pooling","items":[{"type":"link","label":"Object Pooling","href":"/docs/features/object-pooling/","docId":"features/object-pooling/object-pooling","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"User Interface","items":[{"type":"link","label":"Gum Forms","href":"/docs/features/ui/gum/gum-forms/","docId":"features/ui/gum/gum-forms/gum-forms","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Collisions","items":[{"type":"link","label":"Collision","href":"/docs/features/collision/","docId":"features/collision/collision","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"ContentManager","items":[{"type":"link","label":"ContentManager extensions","href":"/docs/features/contentmanager/contentManager-extensions","docId":"features/contentmanager/contentManager-extensions","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Entities","items":[{"type":"link","label":"Entities","href":"/docs/features/entities/","docId":"features/entities/entities","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Particles","items":[{"type":"link","label":"Particles","href":"/docs/features/particles/","docId":"features/particles/particles","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Scene Graphs","items":[{"type":"link","label":"Scene Graphs","href":"/docs/features/scene-graphs/","docId":"features/scene-graphs/scene-graphs","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"about/contributing":{"id":"about/contributing","title":"Contributing","description":"We\'re happy that you have chosen to contribute to the MonoGame.Extended project. You are joining a team of dedicated volunteers that are building an extension library for the game framework MonoGame.","sidebar":"docs"},"about/introduction":{"id":"about/introduction","title":"Introduction","description":"Welcome to the MonoGame.Extended documentation!","sidebar":"docs"},"about/principles":{"id":"about/principles","title":"Principles","description":"Extended principles are to help you manifest an early prototype for your ideas of a game and evolve it into a working game without throwing away the prototype.","sidebar":"docs"},"archived/animations/animations":{"id":"archived/animations/animations","title":"Animations","description":"The MonoGame.Extended.Animations library contains classes useful for animating 2D sprite."},"features/2d-animations/animatedsprite/animatedsprite":{"id":"features/2d-animations/animatedsprite/animatedsprite","title":"AnimatedSprite","description":"An AnimatedSprite encapsulates a SpriteSheet with methods to set the current animation and control the playback.","sidebar":"docs"},"features/2d-animations/spritesheet/spritesheet":{"id":"features/2d-animations/spritesheet/spritesheet","title":"Spritesheet","description":"A Spritesheet is a wrapper around a Texture2DAtlas with methods for defining frame based animations.","sidebar":"docs"},"features/camera/camera":{"id":"features/camera/camera","title":"Camera","description":"A virtual \'camera\' to view","sidebar":"docs"},"features/camera/orthographic-camera/orthographiccamera":{"id":"features/camera/orthographic-camera/orthographiccamera","title":"Orthographic Camera","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/collections/collections":{"id":"features/collections/collections","title":"Collections","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/collision/collision":{"id":"features/collision/collision","title":"Collision","description":"2D grid-based collision system.","sidebar":"docs"},"features/contentmanager/contentManager-extensions":{"id":"features/contentmanager/contentManager-extensions","title":"ContentManager extensions","description":"Extensions for the MonoGame ContentManager class.","sidebar":"docs"},"features/entities/entities":{"id":"features/entities/entities","title":"Entities","description":"High performance, Artemis based, Entity Component System (ECS)","sidebar":"docs"},"features/fonts/bitmapfont/bitmapfont":{"id":"features/fonts/bitmapfont/bitmapfont","title":"Bitmap Font","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/input/inputlistener/inputlistener":{"id":"features/input/inputlistener/inputlistener","title":"InputListener","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/input/keyboardextended/keyboardextended":{"id":"features/input/keyboardextended/keyboardextended","title":"KeyboardExtended","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/input/mouseextended/mouseextended":{"id":"features/input/mouseextended/mouseextended","title":"MouseExtended","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/object-pooling/object-pooling":{"id":"features/object-pooling/object-pooling","title":"Object Pooling","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/particles/particles":{"id":"features/particles/particles","title":"Particles","description":"Particle engine, ported from Mercury Particle Engine.","sidebar":"docs"},"features/scene-graphs/scene-graphs":{"id":"features/scene-graphs/scene-graphs","title":"Scene Graphs","description":"Used to manage the spatial representation of objects.","sidebar":"docs"},"features/screen-management/screen-management":{"id":"features/screen-management/screen-management","title":"Screen Management","description":"Screen management to split your game into multiple screens."},"features/serialization/serialization":{"id":"features/serialization/serialization","title":"Serialization","description":"JSON serialization helpers"},"features/texture-handling/sprite/sprite":{"id":"features/texture-handling/sprite/sprite","title":"Sprite","description":"A drawable region of a Texture2D with additional properties for rendering such as scale, rotation, and color","sidebar":"docs"},"features/texture-handling/texture2datlas/texture2datlas":{"id":"features/texture-handling/texture2datlas/texture2datlas","title":"Texture2DAtlas","description":"A Texture2DAtlas is a 2D texture atlas that contains a collection of texture regions.","sidebar":"docs"},"features/texture-handling/texture2dregion/texture2dregion":{"id":"features/texture-handling/texture2dregion/texture2dregion","title":"Texture2DRegion","description":"A Texture2DRegion is a subregion of a texture.","sidebar":"docs"},"features/tiled/tiled":{"id":"features/tiled/tiled","title":"Tiled","description":"Load and render map files created with the Tiled Map Editor."},"features/tweening/tweening":{"id":"features/tweening/tweening","title":"Tweening","description":"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation."},"features/ui/gum/gum-forms/gum-forms":{"id":"features/ui/gum/gum-forms/gum-forms","title":"Gum Forms","description":"An example document for gum","sidebar":"docs"},"getting-started/installation-fna":{"id":"getting-started/installation-fna","title":"Installation (FNA)","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"getting-started/installation-kni":{"id":"getting-started/installation-kni","title":"Installation (KNI)","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"getting-started/installation-monogame":{"id":"getting-started/installation-monogame","title":"Installation (MonoGame)","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/11b43341.61d144f3.js b/assets/js/11b43341.61d144f3.js new file mode 100644 index 0000000..58a648e --- /dev/null +++ b/assets/js/11b43341.61d144f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[2256],{7674:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"MonoGame.Extended","items":[{"type":"link","label":"Introduction","href":"/docs/about/introduction","docId":"about/introduction","unlisted":false},{"type":"link","label":"Principles","href":"/docs/about/principles","docId":"about/principles","unlisted":false},{"type":"link","label":"Contributing","href":"/docs/about/contributing","docId":"about/contributing","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Getting Started","items":[{"type":"link","label":"Installation (MonoGame)","href":"/docs/getting-started/installation-monogame","docId":"getting-started/installation-monogame","unlisted":false},{"type":"link","label":"Installation (KNI)","href":"/docs/getting-started/installation-kni","docId":"getting-started/installation-kni","unlisted":false},{"type":"link","label":"Installation (FNA)","href":"/docs/getting-started/installation-fna","docId":"getting-started/installation-fna","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Features","items":[{"type":"category","label":"Texture Handling","items":[{"type":"link","label":"Texture2DRegion","href":"/docs/features/texture-handling/texture2dregion/","docId":"features/texture-handling/texture2dregion/texture2dregion","unlisted":false},{"type":"link","label":"Texture2DAtlas","href":"/docs/features/texture-handling/texture2datlas/","docId":"features/texture-handling/texture2datlas/texture2datlas","unlisted":false},{"type":"link","label":"Sprite","href":"/docs/features/texture-handling/sprite/","docId":"features/texture-handling/sprite/sprite","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"2D Animations","items":[{"type":"link","label":"Spritesheet","href":"/docs/features/2d-animations/spritesheet/","docId":"features/2d-animations/spritesheet/spritesheet","unlisted":false},{"type":"link","label":"AnimatedSprite","href":"/docs/features/2d-animations/animatedsprite/","docId":"features/2d-animations/animatedsprite/animatedsprite","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Fonts","items":[{"type":"link","label":"Bitmap Font","href":"/docs/features/fonts/bitmapfont/","docId":"features/fonts/bitmapfont/bitmapfont","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Input","items":[{"type":"link","label":"KeyboardExtended","href":"/docs/features/input/keyboardextended/","docId":"features/input/keyboardextended/keyboardextended","unlisted":false},{"type":"link","label":"MouseExtended","href":"/docs/features/input/mouseextended/","docId":"features/input/mouseextended/mouseextended","unlisted":false},{"type":"link","label":"InputListener","href":"/docs/features/input/inputlistener/","docId":"features/input/inputlistener/inputlistener","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Camera","items":[{"type":"link","label":"Camera","href":"/docs/features/camera/","docId":"features/camera/camera","unlisted":false},{"type":"link","label":"Orthographic Camera","href":"/docs/features/camera/orthographic-camera/","docId":"features/camera/orthographic-camera/orthographiccamera","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Collections","items":[{"type":"link","label":"Collections","href":"/docs/features/collections/","docId":"features/collections/collections","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Object Pooling","items":[{"type":"link","label":"Object Pooling","href":"/docs/features/object-pooling/","docId":"features/object-pooling/object-pooling","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"User Interface","items":[{"type":"link","label":"Gum Forms","href":"/docs/features/ui/gum/gum-forms/","docId":"features/ui/gum/gum-forms/gum-forms","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Collisions","items":[{"type":"link","label":"Collision","href":"/docs/features/collision/","docId":"features/collision/collision","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"ContentManager","items":[{"type":"link","label":"ContentManager extensions","href":"/docs/features/contentmanager/contentManager-extensions","docId":"features/contentmanager/contentManager-extensions","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Entities","items":[{"type":"link","label":"Entities","href":"/docs/features/entities/","docId":"features/entities/entities","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Particles","items":[{"type":"link","label":"Particles","href":"/docs/features/particles/","docId":"features/particles/particles","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Scene Graphs","items":[{"type":"link","label":"Scene Graphs","href":"/docs/features/scene-graphs/","docId":"features/scene-graphs/scene-graphs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Screen Management","items":[{"type":"link","label":"Screen Management","href":"/docs/features/screen-management/","docId":"features/screen-management/screen-management","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Serialization","items":[{"type":"link","label":"Serialization","href":"/docs/features/serialization/","docId":"features/serialization/serialization","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Tweening","items":[{"type":"link","label":"Tweening","href":"/docs/features/tweening/","docId":"features/tweening/tweening","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Tiled","items":[{"type":"link","label":"Tiled","href":"/docs/features/tiled/","docId":"features/tiled/tiled","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"about/contributing":{"id":"about/contributing","title":"Contributing","description":"We\'re happy that you have chosen to contribute to the MonoGame.Extended project. You are joining a team of dedicated volunteers that are building an extension library for the game framework MonoGame.","sidebar":"docs"},"about/introduction":{"id":"about/introduction","title":"Introduction","description":"Welcome to the MonoGame.Extended documentation!","sidebar":"docs"},"about/principles":{"id":"about/principles","title":"Principles","description":"Extended principles are to help you manifest an early prototype for your ideas of a game and evolve it into a working game without throwing away the prototype.","sidebar":"docs"},"archived/animations/animations":{"id":"archived/animations/animations","title":"Animations","description":"The MonoGame.Extended.Animations library contains classes useful for animating 2D sprite."},"features/2d-animations/animatedsprite/animatedsprite":{"id":"features/2d-animations/animatedsprite/animatedsprite","title":"AnimatedSprite","description":"An AnimatedSprite encapsulates a SpriteSheet with methods to set the current animation and control the playback.","sidebar":"docs"},"features/2d-animations/spritesheet/spritesheet":{"id":"features/2d-animations/spritesheet/spritesheet","title":"Spritesheet","description":"A Spritesheet is a wrapper around a Texture2DAtlas with methods for defining frame based animations.","sidebar":"docs"},"features/camera/camera":{"id":"features/camera/camera","title":"Camera","description":"A virtual \'camera\' to view","sidebar":"docs"},"features/camera/orthographic-camera/orthographiccamera":{"id":"features/camera/orthographic-camera/orthographiccamera","title":"Orthographic Camera","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/collections/collections":{"id":"features/collections/collections","title":"Collections","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/collision/collision":{"id":"features/collision/collision","title":"Collision","description":"2D grid-based collision system.","sidebar":"docs"},"features/contentmanager/contentManager-extensions":{"id":"features/contentmanager/contentManager-extensions","title":"ContentManager extensions","description":"Extensions for the MonoGame ContentManager class.","sidebar":"docs"},"features/entities/entities":{"id":"features/entities/entities","title":"Entities","description":"High performance, Artemis based, Entity Component System (ECS)","sidebar":"docs"},"features/fonts/bitmapfont/bitmapfont":{"id":"features/fonts/bitmapfont/bitmapfont","title":"Bitmap Font","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/input/inputlistener/inputlistener":{"id":"features/input/inputlistener/inputlistener","title":"InputListener","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/input/keyboardextended/keyboardextended":{"id":"features/input/keyboardextended/keyboardextended","title":"KeyboardExtended","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/input/mouseextended/mouseextended":{"id":"features/input/mouseextended/mouseextended","title":"MouseExtended","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/object-pooling/object-pooling":{"id":"features/object-pooling/object-pooling","title":"Object Pooling","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"features/particles/particles":{"id":"features/particles/particles","title":"Particles","description":"Particle engine, ported from Mercury Particle Engine.","sidebar":"docs"},"features/scene-graphs/scene-graphs":{"id":"features/scene-graphs/scene-graphs","title":"Scene Graphs","description":"Used to manage the spatial representation of objects.","sidebar":"docs"},"features/screen-management/screen-management":{"id":"features/screen-management/screen-management","title":"Screen Management","description":"Screen management to split your game into multiple screens.","sidebar":"docs"},"features/serialization/serialization":{"id":"features/serialization/serialization","title":"Serialization","description":"JSON serialization helpers","sidebar":"docs"},"features/texture-handling/sprite/sprite":{"id":"features/texture-handling/sprite/sprite","title":"Sprite","description":"A drawable region of a Texture2D with additional properties for rendering such as scale, rotation, and color","sidebar":"docs"},"features/texture-handling/texture2datlas/texture2datlas":{"id":"features/texture-handling/texture2datlas/texture2datlas","title":"Texture2DAtlas","description":"A Texture2DAtlas is a 2D texture atlas that contains a collection of texture regions.","sidebar":"docs"},"features/texture-handling/texture2dregion/texture2dregion":{"id":"features/texture-handling/texture2dregion/texture2dregion","title":"Texture2DRegion","description":"A Texture2DRegion is a subregion of a texture.","sidebar":"docs"},"features/tiled/tiled":{"id":"features/tiled/tiled","title":"Tiled","description":"Load and render map files created with the Tiled Map Editor.","sidebar":"docs"},"features/tweening/tweening":{"id":"features/tweening/tweening","title":"Tweening","description":"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation.","sidebar":"docs"},"features/ui/gum/gum-forms/gum-forms":{"id":"features/ui/gum/gum-forms/gum-forms","title":"Gum Forms","description":"An example document for gum","sidebar":"docs"},"getting-started/installation-fna":{"id":"getting-started/installation-fna","title":"Installation (FNA)","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"getting-started/installation-kni":{"id":"getting-started/installation-kni","title":"Installation (KNI)","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"},"getting-started/installation-monogame":{"id":"getting-started/installation-monogame","title":"Installation (MonoGame)","description":"This page is up to date for MonoGame.Extended @mgeversion@. If you find outdated information, please open an issue.","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/24f3c139.9c54f07f.js b/assets/js/24f3c139.9c54f07f.js deleted file mode 100644 index 34e96c2..0000000 --- a/assets/js/24f3c139.9c54f07f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[9444],{7554:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>o,toc:()=>c});var t=i(4848),a=i(8453);const d={id:"tiled",title:"Tiled",sidebar_label:"Tiled",description:"Load and render map files created with the Tiled Map Editor."},r="Tiled",o={id:"features/tiled/tiled",title:"Tiled",description:"Load and render map files created with the Tiled Map Editor.",source:"@site/docs/features/tiled/tiled.md",sourceDirName:"features/tiled",slug:"/features/tiled/",permalink:"/docs/features/tiled/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/tiled/tiled.md",tags:[],version:"current",frontMatter:{id:"tiled",title:"Tiled",sidebar_label:"Tiled",description:"Load and render map files created with the Tiled Map Editor."}},s={},c=[{value:"Installation",id:"installation",level:2},{value:"Content Pipeline",id:"content-pipeline",level:3},{value:"NuGet",id:"nuget",level:3},{value:"Usage",id:"usage",level:2},{value:"Adding a Camera",id:"adding-a-camera",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,t.jsxs)(n.p,{children:["This page ",(0,t.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,t.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,t.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://www.mapeditor.org/",children:(0,t.jsx)(n.img,{alt:"Tiled Logo",src:i(1261).A+"",width:"419",height:"228"})})}),"\n",(0,t.jsx)(n.h1,{id:"tiled",children:"Tiled"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"MonoGame.Extended.Tiled"})," library allows you to load and render maps files (",(0,t.jsx)(n.code,{children:".tmx"}),") created with the ",(0,t.jsx)(n.a,{href:"http://www.mapeditor.org/",children:"Tiled Map Editor"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsx)(n.h3,{id:"content-pipeline",children:"Content Pipeline"}),"\n",(0,t.jsxs)(n.p,{children:["To load a Tiled map you first to compile it using the Content Pipeline. If you have not setup the Content Pipeline with ",(0,t.jsx)(n.code,{children:"MonoGame.Extended"})," yet see the instructions on how to install the Content Pipeline in the ",(0,t.jsx)(n.a,{href:"/docs/getting-started/installation-monogame",children:"getting started section"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"nuget",children:"NuGet"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.nuget.org/packages/MonoGame.Extended.Tiled/",children:"MonoGame.Extended.Tiled"})," is distributed via a NuGet package. You can add the NuGet package to your C# project through your IDE of choice (Visual Studio, Xamarin Studio, Rider, etc) or through the Command Line Interface (CLI) using the dotnet command."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"dotnet add package MonoGame.Extended.Tiled\n"})}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The assets used in this example can be downloaded ",(0,t.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:i(3906).A+"",children:"here"})]})}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Tiled"})," namespaces."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended.Tiled;\nusing MonoGame.Extended.Tiled.Renderers;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Next, we define our ",(0,t.jsx)(n.code,{children:"Tiledmap"})," and ",(0,t.jsx)(n.code,{children:"TiledMapRenderer"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"TiledMap _tiledMap;\nTiledMapRenderer _tiledMapRenderer;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Which we then initialize in the LoadContent function."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:'protected override void LoadContent()\n{\n _tiledMap = Content.Load("samplemap");\n _tiledMapRenderer = new TiledMapRenderer(GraphicsDevice, _tiledMap);\n\n _spriteBatch = new SpriteBatch(GraphicsDevice);\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Finally we render and update the map by calling ",(0,t.jsx)(n.code,{children:"mapRenderer.Update()"})," and ",(0,t.jsx)(n.code,{children:"mapRenderer.Draw()"})," respectively."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Update(GameTime gameTime)\n{\n _tiledMapRenderer.Update(gameTime);\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Draw(GameTime gameTime)\n{\n GraphicsDevice.Clear(Color.Black);\n \n _tiledMapRenderer.Draw();\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"adding-a-camera",children:"Adding a Camera"}),"\n",(0,t.jsxs)(n.p,{children:["The game now renders the ",(0,t.jsx)(n.code,{children:"TiledMap"}),". The next step is to navigate through the map with a ",(0,t.jsx)(n.code,{children:"Camera"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Camera"})," namespaces."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended;\nusing MonoGame.Extended.ViewportAdapters;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we define our Camera"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private OrthographicCamera _camera;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Which we then initialize in the Initialize function."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Initialize()\n{\n var viewportadapter = new BoxingViewportAdapter(Window, GraphicsDevice, 800, 600);\n _camera = new OrthographicCamera(viewportadapter);\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"We need to tell the Camera where to look. To do this, we declare the following field."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private Vector2 _cameraPosition;\n"})}),"\n",(0,t.jsx)(n.p,{children:"We update this field with the following function."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private Vector2 GetMovementDirection()\n{\n var movementDirection = Vector2.Zero;\n var state = Keyboard.GetState();\n if (state.IsKeyDown(Keys.Down))\n {\n movementDirection += Vector2.UnitY;\n }\n if (state.IsKeyDown(Keys.Up))\n {\n movementDirection -= Vector2.UnitY;\n }\n if (state.IsKeyDown(Keys.Left))\n {\n movementDirection -= Vector2.UnitX;\n }\n if (state.IsKeyDown(Keys.Right))\n {\n movementDirection += Vector2.UnitX;\n }\n \n // Can't normalize the zero vector so test for it before normalizing\n if (movementDirection != Vector2.Zero)\n {\n movementDirection.Normalize(); \n }\n \n return movementDirection;\n}\n\nprivate void MoveCamera(GameTime gameTime)\n{\n var speed = 200;\n var seconds = gameTime.GetElapsedSeconds();\n var movementDirection = GetMovementDirection();\n _cameraPosition += speed * movementDirection * seconds;\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Which we then use in the ",(0,t.jsx)(n.code,{children:"Update"})," function."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Update(GameTime gameTime)\n{\n _tiledMapRenderer.Update(gameTime);\n\n MoveCamera(gameTime);\n _camera.LookAt(_cameraPosition);\n\n base.Update(gameTime);\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["To render the map with our ",(0,t.jsx)(n.code,{children:"Camera"}),", we call the Draw function with the Camera's ",(0,t.jsx)(n.code,{children:"ViewMatrix"})," as follows."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Draw(GameTime gameTime)\n{\n GraphicsDevice.Clear(Color.Black);\n\n _tiledMapRenderer.Draw(_camera.GetViewMatrix());\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},3906:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/files/assets-6a3b3a06d9df585805d29f6f45628bcd.zip"},1261:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/tiled-logo-15cece4c4c24263ef65eb0399df18c10.png"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var t=i(6540);const a={},d=t.createContext(a);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24f3c139.f2245831.js b/assets/js/24f3c139.f2245831.js new file mode 100644 index 0000000..cad7d91 --- /dev/null +++ b/assets/js/24f3c139.f2245831.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[9444],{7554:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>o,toc:()=>c});var t=i(4848),a=i(8453);const d={id:"tiled",title:"Tiled",sidebar_label:"Tiled",description:"Load and render map files created with the Tiled Map Editor."},r="Tiled",o={id:"features/tiled/tiled",title:"Tiled",description:"Load and render map files created with the Tiled Map Editor.",source:"@site/docs/features/tiled/tiled.md",sourceDirName:"features/tiled",slug:"/features/tiled/",permalink:"/docs/features/tiled/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/tiled/tiled.md",tags:[],version:"current",frontMatter:{id:"tiled",title:"Tiled",sidebar_label:"Tiled",description:"Load and render map files created with the Tiled Map Editor."},sidebar:"docs",previous:{title:"Tweening",permalink:"/docs/features/tweening/"}},s={},c=[{value:"Installation",id:"installation",level:2},{value:"Content Pipeline",id:"content-pipeline",level:3},{value:"NuGet",id:"nuget",level:3},{value:"Usage",id:"usage",level:2},{value:"Adding a Camera",id:"adding-a-camera",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,t.jsxs)(n.p,{children:["This page ",(0,t.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,t.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,t.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://www.mapeditor.org/",children:(0,t.jsx)(n.img,{alt:"Tiled Logo",src:i(1261).A+"",width:"419",height:"228"})})}),"\n",(0,t.jsx)(n.h1,{id:"tiled",children:"Tiled"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"MonoGame.Extended.Tiled"})," library allows you to load and render maps files (",(0,t.jsx)(n.code,{children:".tmx"}),") created with the ",(0,t.jsx)(n.a,{href:"http://www.mapeditor.org/",children:"Tiled Map Editor"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsx)(n.h3,{id:"content-pipeline",children:"Content Pipeline"}),"\n",(0,t.jsxs)(n.p,{children:["To load a Tiled map you first to compile it using the Content Pipeline. If you have not setup the Content Pipeline with ",(0,t.jsx)(n.code,{children:"MonoGame.Extended"})," yet see the instructions on how to install the Content Pipeline in the ",(0,t.jsx)(n.a,{href:"/docs/getting-started/installation-monogame",children:"getting started section"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"nuget",children:"NuGet"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://www.nuget.org/packages/MonoGame.Extended.Tiled/",children:"MonoGame.Extended.Tiled"})," is distributed via a NuGet package. You can add the NuGet package to your C# project through your IDE of choice (Visual Studio, Xamarin Studio, Rider, etc) or through the Command Line Interface (CLI) using the dotnet command."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"dotnet add package MonoGame.Extended.Tiled\n"})}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["The assets used in this example can be downloaded ",(0,t.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:i(3906).A+"",children:"here"})]})}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Tiled"})," namespaces."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended.Tiled;\nusing MonoGame.Extended.Tiled.Renderers;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Next, we define our ",(0,t.jsx)(n.code,{children:"Tiledmap"})," and ",(0,t.jsx)(n.code,{children:"TiledMapRenderer"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"TiledMap _tiledMap;\nTiledMapRenderer _tiledMapRenderer;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Which we then initialize in the LoadContent function."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:'protected override void LoadContent()\n{\n _tiledMap = Content.Load("samplemap");\n _tiledMapRenderer = new TiledMapRenderer(GraphicsDevice, _tiledMap);\n\n _spriteBatch = new SpriteBatch(GraphicsDevice);\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Finally we render and update the map by calling ",(0,t.jsx)(n.code,{children:"mapRenderer.Update()"})," and ",(0,t.jsx)(n.code,{children:"mapRenderer.Draw()"})," respectively."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Update(GameTime gameTime)\n{\n _tiledMapRenderer.Update(gameTime);\n}\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Draw(GameTime gameTime)\n{\n GraphicsDevice.Clear(Color.Black);\n \n _tiledMapRenderer.Draw();\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"adding-a-camera",children:"Adding a Camera"}),"\n",(0,t.jsxs)(n.p,{children:["The game now renders the ",(0,t.jsx)(n.code,{children:"TiledMap"}),". The next step is to navigate through the map with a ",(0,t.jsx)(n.code,{children:"Camera"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Camera"})," namespaces."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended;\nusing MonoGame.Extended.ViewportAdapters;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we define our Camera"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private OrthographicCamera _camera;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Which we then initialize in the Initialize function."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Initialize()\n{\n var viewportadapter = new BoxingViewportAdapter(Window, GraphicsDevice, 800, 600);\n _camera = new OrthographicCamera(viewportadapter);\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"We need to tell the Camera where to look. To do this, we declare the following field."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private Vector2 _cameraPosition;\n"})}),"\n",(0,t.jsx)(n.p,{children:"We update this field with the following function."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private Vector2 GetMovementDirection()\n{\n var movementDirection = Vector2.Zero;\n var state = Keyboard.GetState();\n if (state.IsKeyDown(Keys.Down))\n {\n movementDirection += Vector2.UnitY;\n }\n if (state.IsKeyDown(Keys.Up))\n {\n movementDirection -= Vector2.UnitY;\n }\n if (state.IsKeyDown(Keys.Left))\n {\n movementDirection -= Vector2.UnitX;\n }\n if (state.IsKeyDown(Keys.Right))\n {\n movementDirection += Vector2.UnitX;\n }\n \n // Can't normalize the zero vector so test for it before normalizing\n if (movementDirection != Vector2.Zero)\n {\n movementDirection.Normalize(); \n }\n \n return movementDirection;\n}\n\nprivate void MoveCamera(GameTime gameTime)\n{\n var speed = 200;\n var seconds = gameTime.GetElapsedSeconds();\n var movementDirection = GetMovementDirection();\n _cameraPosition += speed * movementDirection * seconds;\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Which we then use in the ",(0,t.jsx)(n.code,{children:"Update"})," function."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Update(GameTime gameTime)\n{\n _tiledMapRenderer.Update(gameTime);\n\n MoveCamera(gameTime);\n _camera.LookAt(_cameraPosition);\n\n base.Update(gameTime);\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["To render the map with our ",(0,t.jsx)(n.code,{children:"Camera"}),", we call the Draw function with the Camera's ",(0,t.jsx)(n.code,{children:"ViewMatrix"})," as follows."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Draw(GameTime gameTime)\n{\n GraphicsDevice.Clear(Color.Black);\n\n _tiledMapRenderer.Draw(_camera.GetViewMatrix());\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},3906:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/files/assets-6a3b3a06d9df585805d29f6f45628bcd.zip"},1261:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/tiled-logo-15cece4c4c24263ef65eb0399df18c10.png"},8453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var t=i(6540);const a={},d=t.createContext(a);function r(e){const n=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),t.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ef90eef.9b81e0d8.js b/assets/js/4ef90eef.9b81e0d8.js deleted file mode 100644 index 96e8ba5..0000000 --- a/assets/js/4ef90eef.9b81e0d8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[3529],{2772:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var a=t(4848),d=t(8453);const i={id:"scene-graphs",title:"Scene Graphs",sidebar_label:"Scene Graphs",description:"Used to manage the spatial representation of objects."},o=void 0,r={id:"features/scene-graphs/scene-graphs",title:"Scene Graphs",description:"Used to manage the spatial representation of objects.",source:"@site/docs/features/scene-graphs/scene-graphs.md",sourceDirName:"features/scene-graphs",slug:"/features/scene-graphs/",permalink:"/docs/features/scene-graphs/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/scene-graphs/scene-graphs.md",tags:[],version:"current",frontMatter:{id:"scene-graphs",title:"Scene Graphs",sidebar_label:"Scene Graphs",description:"Used to manage the spatial representation of objects."},sidebar:"docs",previous:{title:"Particles",permalink:"/docs/features/particles/"}},s={},c=[{value:"Car SceneGraph",id:"car-scenegraph",level:3},{value:"Diagram",id:"diagram",level:3},{value:"Usage",id:"usage",level:2},{value:"Updating",id:"updating",level:3},{value:"Drawing",id:"drawing",level:3},{value:"Getting SceneNode at position",id:"getting-scenenode-at-position",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,d.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,a.jsxs)(n.p,{children:["This page ",(0,a.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,a.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,a.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"SceneGraph"})," is used to manage the spatial representation of objects. It is a tree structure in which the transformations of the parent nodes are applied to the child nodes."]}),"\n",(0,a.jsxs)(n.h3,{id:"car-scenegraph",children:["Car ",(0,a.jsx)(n.code,{children:"SceneGraph"})]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Car scene graph",src:t(7679).A+"",width:"503",height:"225"})}),"\n",(0,a.jsx)(n.h3,{id:"diagram",children:"Diagram"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Diagram",src:t(8606).A+"",width:"322",height:"252"})}),"\n",(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["The assets used in this example can be downloaded ",(0,a.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(8074).A+"",children:"here"})]})}),"\n",(0,a.jsx)(n.p,{children:"We start by including the required namespaces."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended;\nusing MonoGame.Extended.SceneGraphs;\nusing MonoGame.Extended.Sprites;\nusing MonoGame.Extended.ViewportAdapters;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Next, we declare our ",(0,a.jsx)(n.code,{children:"SceneGraph"})," and The ",(0,a.jsx)(n.code,{children:"SceneNodes"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"private SceneNode _carNode;\nprivate SceneNode _hoveredNode;\nprivate SceneNode _leftWheelNode;\nprivate SceneNode _rightWheelNode;\nprivate SceneGraph _sceneGraph;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Which we initialize in the ",(0,a.jsx)(n.code,{children:"LoadContent"})," function"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:'_sceneGraph = new SceneGraph();\n\n_carNode = new SceneNode("car-hull", GraphicsDevice.Viewport.Bounds.Center.ToVector2());\n\nvar carHullTexture = Content.Load("car-hull");\nvar carHullSprite = new Sprite(carHullTexture);\n_carNode.Entities.Add(new SpriteEntity(carHullSprite));\n\nvar carWheelTexture = Content.Load("car-wheel");\nvar carWheelSprite = new Sprite(carWheelTexture);\n\n_leftWheelNode = new SceneNode("left-wheel", new Vector2(-29, 17));\n_leftWheelNode.Entities.Add(new SpriteEntity(carWheelSprite));\n\n_rightWheelNode = new SceneNode("right-wheel", new Vector2(40, 17));\n_rightWheelNode.Entities.Add(new SpriteEntity(carWheelSprite));\n\n_carNode.Children.Add(_rightWheelNode);\n_carNode.Children.Add(_leftWheelNode);\n_sceneGraph.RootNode.Children.Add(_carNode);\n'})}),"\n",(0,a.jsx)(n.h3,{id:"updating",children:"Updating"}),"\n",(0,a.jsxs)(n.p,{children:["First we declare a ",(0,a.jsx)(n.code,{children:"_speed"})," field that is used to update the ",(0,a.jsx)(n.code,{children:"SceneGraph"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"private float _speed = 0.15f;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Then, we add the following code to the ",(0,a.jsx)(n.code,{children:"Update"})," function to update the potition of the Car and the rotation of the Wheels"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"var keyboardState = Keyboard.GetState();\nvar mouseState = Mouse.GetState();\n\nif (keyboardState.IsKeyDown(Keys.W))\n _speed += (float)gameTime.ElapsedGameTime.TotalSeconds * 0.5f;\n\nif (keyboardState.IsKeyDown(Keys.S))\n _speed -= (float)gameTime.ElapsedGameTime.TotalSeconds * 0.5f;\n\n_leftWheelNode.Rotation += _speed;\n_rightWheelNode.Rotation = _leftWheelNode.Rotation;\n_carNode.Position += new Vector2(_speed * 5, 0);\n"})}),"\n",(0,a.jsx)(n.p,{children:"We check the collision detection of the car in the following way"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"const int maxX = 535;\nif (_carNode.Position.X >= maxX)\n{\n _speed = -_speed * 0.2f;\n _carNode.Position = new Vector2(maxX, _carNode.Position.Y);\n}\nconst int minX = 265;\nif (_carNode.Position.X <= minX)\n{\n _speed = -_speed * 0.2f;\n _carNode.Position = new Vector2(minX, _carNode.Position.Y);\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"drawing",children:"Drawing"}),"\n",(0,a.jsxs)(n.p,{children:["We use the following code in our Draw function to draw the ",(0,a.jsx)(n.code,{children:"SceneGraph"})," and collision walls"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"GraphicsDevice.Clear(Color.CornflowerBlue);\n\n_spriteBatch.Begin(samplerState: SamplerState.PointClamp);\n\n_spriteBatch.Draw(_sceneGraph);\n_spriteBatch.FillRectangle(0, 266, 800, 240, Color.DarkOliveGreen);\n_spriteBatch.FillRectangle(200, 0, 5, 480, Color.DarkOliveGreen);\n_spriteBatch.FillRectangle(595, 0, 5, 480, Color.DarkOliveGreen);\n\n_spriteBatch.End();\n"})}),"\n",(0,a.jsxs)(n.h3,{id:"getting-scenenode-at-position",children:["Getting ",(0,a.jsx)(n.code,{children:"SceneNode"})," at position"]}),"\n",(0,a.jsxs)(n.p,{children:["First we create a field ",(0,a.jsx)(n.code,{children:"_hoveredNode"})," in which we store the Node."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"private SceneNode _hoveredNode;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Which we then assign in the ",(0,a.jsx)(n.code,{children:"Update"})," function"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"_hoveredNode = _sceneGraph.GetSceneNodeAt(new Vector2(mouseState.X, mouseState.Y));\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Finally, We add the following code between ",(0,a.jsx)(n.code,{children:"_spriteBatch"})," ",(0,a.jsx)(n.code,{children:"Begin"})," and ",(0,a.jsx)(n.code,{children:"End"})," to draw it"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"if (_hoveredNode != null)\n{\n var boundingRectangle = _hoveredNode.BoundingRectangle;\n _spriteBatch.DrawRectangle(boundingRectangle, Color.Black);\n _spriteBatch.DrawString(_bitmapFont, _hoveredNode.Name, new Vector2(14, 2), Color.White);\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},8074:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/files/assets-99097d098b530701722ca03031bb7e61.zip"},7679:(e,n,t)=>{t.d(n,{A:()=>a});const a="data:image/png;base64,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"},8606:(e,n,t)=>{t.d(n,{A:()=>a});const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUIAAAD8CAYAAAACGq0tAAAEwHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMkVsZWN0cm9uJTIyJTIwbW9kaWZpZWQlM0QlMjIyMDIwLTEwLTIwVDA4JTNBNDklM0E1NS41NjRaJTIyJTIwYWdlbnQlM0QlMjI1LjAlMjAoV2luZG93cyUyME5UJTIwMTAuMCUzQiUyMFdpbjY0JTNCJTIweDY0KSUyMEFwcGxlV2ViS2l0JTJGNTM3LjM2JTIwKEtIVE1MJTJDJTIwbGlrZSUyMEdlY2tvKSUyMGRyYXcuaW8lMkYxMy43LjMlMjBDaHJvbWUlMkY4NS4wLjQxODMuOTglMjBFbGVjdHJvbiUyRjEwLjEuMiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMGV0YWclM0QlMjIxUGJ0ZlpLMEw3aEhxNTFiSXl5MiUyMiUyMHZlcnNpb24lM0QlMjIxMy43LjMlMjIlMjB0eXBlJTNEJTIyZGV2aWNlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyaVFhLVV0dndIcmVvNEVOdU92RmclMjIlMjBuYW1lJTNEJTIyUGFnaW5hLTElMjIlM0U3WmROajVzd0VJWiUyRkRjZVZ3SkRzNWhxYWJTdWxyYlFjcWoxVkxrd3dXZU5CamdtaHY3NDJtQkJDTjkxS1VkbERMZ2klMkZNJTJCT1BlVHdqMmZIRCUyRlBCUjBvSjl3UVM0UTl6azRQZ2ZIRUptbnF1JTJGUnFoYklaajVyWkRLTEdrbHJ4ZWk3QmRZMGNhbFpaYkFidUNvRUxuS2lxRVlveEFRcTRGR3BjUnE2TFpCUGx5MW9DbU1oQ2ltZkt4JTJCenhMRld2V0IzUGY2SjhoUzFxM3N6UmV0SmFlZHN6M0pqdEVFcXhQSlh6bCUyQktCRlYlMkI1Y2ZRdUFtZDExZTJyakhWNnpIalVrUTZpMEIyOGNmejlzcWZKWVIlMkZiYiUyQldsZnVFMzYlMkJzekQybEpmMndIYXpxdTR5QUlsT2lCMmlWQXhURkpTdmVuVXBzUlFKbUdWY1BlcDkxb2lGRmowdGJrR3AydEtscFVJdE1aVnphOTJnVU5ibzZid3NPZjBKZkVuamw3U1pPa1NPVXRzRUNyUGNKdVA4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"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var a=t(6540);const d={},i=a.createContext(d);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4ef90eef.b374bb8a.js b/assets/js/4ef90eef.b374bb8a.js new file mode 100644 index 0000000..c3faa87 --- /dev/null +++ b/assets/js/4ef90eef.b374bb8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[3529],{2772:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var a=t(4848),d=t(8453);const i={id:"scene-graphs",title:"Scene Graphs",sidebar_label:"Scene Graphs",description:"Used to manage the spatial representation of objects."},o=void 0,r={id:"features/scene-graphs/scene-graphs",title:"Scene Graphs",description:"Used to manage the spatial representation of objects.",source:"@site/docs/features/scene-graphs/scene-graphs.md",sourceDirName:"features/scene-graphs",slug:"/features/scene-graphs/",permalink:"/docs/features/scene-graphs/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/scene-graphs/scene-graphs.md",tags:[],version:"current",frontMatter:{id:"scene-graphs",title:"Scene Graphs",sidebar_label:"Scene Graphs",description:"Used to manage the spatial representation of objects."},sidebar:"docs",previous:{title:"Particles",permalink:"/docs/features/particles/"},next:{title:"Screen Management",permalink:"/docs/features/screen-management/"}},s={},c=[{value:"Car SceneGraph",id:"car-scenegraph",level:3},{value:"Diagram",id:"diagram",level:3},{value:"Usage",id:"usage",level:2},{value:"Updating",id:"updating",level:3},{value:"Drawing",id:"drawing",level:3},{value:"Getting SceneNode at position",id:"getting-scenenode-at-position",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,d.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,a.jsxs)(n.p,{children:["This page ",(0,a.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,a.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,a.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"SceneGraph"})," is used to manage the spatial representation of objects. It is a tree structure in which the transformations of the parent nodes are applied to the child nodes."]}),"\n",(0,a.jsxs)(n.h3,{id:"car-scenegraph",children:["Car ",(0,a.jsx)(n.code,{children:"SceneGraph"})]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Car scene graph",src:t(7679).A+"",width:"503",height:"225"})}),"\n",(0,a.jsx)(n.h3,{id:"diagram",children:"Diagram"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Diagram",src:t(8606).A+"",width:"322",height:"252"})}),"\n",(0,a.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,a.jsx)(n.admonition,{type:"info",children:(0,a.jsxs)(n.p,{children:["The assets used in this example can be downloaded ",(0,a.jsx)(n.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(8074).A+"",children:"here"})]})}),"\n",(0,a.jsx)(n.p,{children:"We start by including the required namespaces."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended;\nusing MonoGame.Extended.SceneGraphs;\nusing MonoGame.Extended.Sprites;\nusing MonoGame.Extended.ViewportAdapters;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Next, we declare our ",(0,a.jsx)(n.code,{children:"SceneGraph"})," and The ",(0,a.jsx)(n.code,{children:"SceneNodes"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"private SceneNode _carNode;\nprivate SceneNode _hoveredNode;\nprivate SceneNode _leftWheelNode;\nprivate SceneNode _rightWheelNode;\nprivate SceneGraph _sceneGraph;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Which we initialize in the ",(0,a.jsx)(n.code,{children:"LoadContent"})," function"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:'_sceneGraph = new SceneGraph();\n\n_carNode = new SceneNode("car-hull", GraphicsDevice.Viewport.Bounds.Center.ToVector2());\n\nvar carHullTexture = Content.Load("car-hull");\nvar carHullSprite = new Sprite(carHullTexture);\n_carNode.Entities.Add(new SpriteEntity(carHullSprite));\n\nvar carWheelTexture = Content.Load("car-wheel");\nvar carWheelSprite = new Sprite(carWheelTexture);\n\n_leftWheelNode = new SceneNode("left-wheel", new Vector2(-29, 17));\n_leftWheelNode.Entities.Add(new SpriteEntity(carWheelSprite));\n\n_rightWheelNode = new SceneNode("right-wheel", new Vector2(40, 17));\n_rightWheelNode.Entities.Add(new SpriteEntity(carWheelSprite));\n\n_carNode.Children.Add(_rightWheelNode);\n_carNode.Children.Add(_leftWheelNode);\n_sceneGraph.RootNode.Children.Add(_carNode);\n'})}),"\n",(0,a.jsx)(n.h3,{id:"updating",children:"Updating"}),"\n",(0,a.jsxs)(n.p,{children:["First we declare a ",(0,a.jsx)(n.code,{children:"_speed"})," field that is used to update the ",(0,a.jsx)(n.code,{children:"SceneGraph"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"private float _speed = 0.15f;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Then, we add the following code to the ",(0,a.jsx)(n.code,{children:"Update"})," function to update the potition of the Car and the rotation of the Wheels"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"var keyboardState = Keyboard.GetState();\nvar mouseState = Mouse.GetState();\n\nif (keyboardState.IsKeyDown(Keys.W))\n _speed += (float)gameTime.ElapsedGameTime.TotalSeconds * 0.5f;\n\nif (keyboardState.IsKeyDown(Keys.S))\n _speed -= (float)gameTime.ElapsedGameTime.TotalSeconds * 0.5f;\n\n_leftWheelNode.Rotation += _speed;\n_rightWheelNode.Rotation = _leftWheelNode.Rotation;\n_carNode.Position += new Vector2(_speed * 5, 0);\n"})}),"\n",(0,a.jsx)(n.p,{children:"We check the collision detection of the car in the following way"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"const int maxX = 535;\nif (_carNode.Position.X >= maxX)\n{\n _speed = -_speed * 0.2f;\n _carNode.Position = new Vector2(maxX, _carNode.Position.Y);\n}\nconst int minX = 265;\nif (_carNode.Position.X <= minX)\n{\n _speed = -_speed * 0.2f;\n _carNode.Position = new Vector2(minX, _carNode.Position.Y);\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"drawing",children:"Drawing"}),"\n",(0,a.jsxs)(n.p,{children:["We use the following code in our Draw function to draw the ",(0,a.jsx)(n.code,{children:"SceneGraph"})," and collision walls"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"GraphicsDevice.Clear(Color.CornflowerBlue);\n\n_spriteBatch.Begin(samplerState: SamplerState.PointClamp);\n\n_spriteBatch.Draw(_sceneGraph);\n_spriteBatch.FillRectangle(0, 266, 800, 240, Color.DarkOliveGreen);\n_spriteBatch.FillRectangle(200, 0, 5, 480, Color.DarkOliveGreen);\n_spriteBatch.FillRectangle(595, 0, 5, 480, Color.DarkOliveGreen);\n\n_spriteBatch.End();\n"})}),"\n",(0,a.jsxs)(n.h3,{id:"getting-scenenode-at-position",children:["Getting ",(0,a.jsx)(n.code,{children:"SceneNode"})," at position"]}),"\n",(0,a.jsxs)(n.p,{children:["First we create a field ",(0,a.jsx)(n.code,{children:"_hoveredNode"})," in which we store the Node."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"private SceneNode _hoveredNode;\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Which we then assign in the ",(0,a.jsx)(n.code,{children:"Update"})," function"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"_hoveredNode = _sceneGraph.GetSceneNodeAt(new Vector2(mouseState.X, mouseState.Y));\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Finally, We add the following code between ",(0,a.jsx)(n.code,{children:"_spriteBatch"})," ",(0,a.jsx)(n.code,{children:"Begin"})," and ",(0,a.jsx)(n.code,{children:"End"})," to draw it"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cs",children:"if (_hoveredNode != null)\n{\n var boundingRectangle = _hoveredNode.BoundingRectangle;\n _spriteBatch.DrawRectangle(boundingRectangle, Color.Black);\n _spriteBatch.DrawString(_bitmapFont, _hoveredNode.Name, new Vector2(14, 2), Color.White);\n}\n"})})]})}function h(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},8074:(e,n,t)=>{t.d(n,{A:()=>a});const a=t.p+"assets/files/assets-99097d098b530701722ca03031bb7e61.zip"},7679:(e,n,t)=>{t.d(n,{A:()=>a});const a="data:image/png;base64,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"},8606:(e,n,t)=>{t.d(n,{A:()=>a});const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUIAAAD8CAYAAAACGq0tAAAEwHRFWHRteGZpbGUAJTNDbXhmaWxlJTIwaG9zdCUzRCUyMkVsZWN0cm9uJTIyJTIwbW9kaWZpZWQlM0QlMjIyMDIwLTEwLTIwVDA4JTNBNDklM0E1NS41NjRaJTIyJTIwYWdlbnQlM0QlMjI1LjAlMjAoV2luZG93cyUyME5UJTIwMTAuMCUzQiUyMFdpbjY0JTNCJTIweDY0KSUyMEFwcGxlV2ViS2l0JTJGNTM3LjM2JTIwKEtIVE1MJTJDJTIwbGlrZSUyMEdlY2tvKSUyMGRyYXcuaW8lMkYxMy43LjMlMjBDaHJvbWUlMkY4NS4wLjQxODMuOTglMjBFbGVjdHJvbiUyRjEwLjEuMiUyMFNhZmFyaSUyRjUzNy4zNiUyMiUyMGV0YWclM0QlMjIxUGJ0ZlpLMEw3aEhxNTFiSXl5MiUyMiUyMHZlcnNpb24lM0QlMjIxMy43LjMlMjIlMjB0eXBlJTNEJTIyZGV2aWNlJTIyJTNFJTNDZGlhZ3JhbSUyMGlkJTNEJTIyaVFhLVV0dndIcmVvNEVOdU92RmclMjIlMjBuYW1lJTNEJTIyUGFnaW5hLTElMjIlM0U3WmROajVzd0VJWiUyRkRjZVZ3SkRzNWhxYWJTdWxyYlFjcWoxVkxrd3dXZU5CamdtaHY3NDJtQkJDTjkxS1VkbERMZ2klMkZNJTJCT1BlVHdqMmZIRCUyRlBCUjBvSjl3UVM0UTl6azRQZ2ZIRUptbnF1JTJGUnFoYklaajVyWkRLTEdrbHJ4ZWk3QmRZMGNhbFpaYkFidUNvRUxuS2lxRVlveEFRcTRGR3BjUnE2TFpCUGx5MW9DbU1oQ2ltZkt4JTJCenhMRld2V0IzUGY2SjhoUzFxM3N6UmV0SmFlZHN6M0pqdEVFcXhQSlh6bCUyQktCRlYlMkI1Y2ZRdUFtZDExZTJyakhWNnpIalVrUTZpMEIyOGNmejlzcWZKWVIlMkZiYiUyQldsZnVFMzYlMkJzekQybEpmMndIYXpxdTR5QUlsT2lCMmlWQXhURkpTdmVuVXBzUlFKbUdWY1BlcDkxb2lGRmowdGJrR3AydEtscFVJdE1aVnphOTJnVU5ibzZid3NPZjBKZkVuamw3U1pPa1NPVXRzRUNyUGNKdVA4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"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var a=t(6540);const d={},i=a.createContext(d);function o(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:o(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/655e0645.03921cf6.js b/assets/js/655e0645.03921cf6.js new file mode 100644 index 0000000..aa8f68d --- /dev/null +++ b/assets/js/655e0645.03921cf6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[5857],{10:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var t=a(4848),r=a(8453);const o={id:"screen-management",title:"Screen Management",sidebar_label:"Screen Management",description:"Screen management to split your game into multiple screens."},i=void 0,s={id:"features/screen-management/screen-management",title:"Screen Management",description:"Screen management to split your game into multiple screens.",source:"@site/docs/features/screen-management/screen-management.md",sourceDirName:"features/screen-management",slug:"/features/screen-management/",permalink:"/docs/features/screen-management/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/screen-management/screen-management.md",tags:[],version:"current",frontMatter:{id:"screen-management",title:"Screen Management",sidebar_label:"Screen Management",description:"Screen management to split your game into multiple screens."},sidebar:"docs",previous:{title:"Scene Graphs",permalink:"/docs/features/scene-graphs/"},next:{title:"Serialization",permalink:"/docs/features/serialization/"}},c={},d=[{value:"Usage",id:"usage",level:2},{value:"Screen 1",id:"screen-1",level:3},{value:"Screen 2",id:"screen-2",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,t.jsxs)(n.p,{children:["This page ",(0,t.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,t.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,t.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"ScreenManager"})," helps you to split your game into multiple ",(0,t.jsx)(n.code,{children:"GameScreens"})," with their own ",(0,t.jsx)(n.code,{children:"Dispose()"}),",\n",(0,t.jsx)(n.code,{children:"Initialize()"}),",\n",(0,t.jsx)(n.code,{children:"LoadContent()"}),",\n",(0,t.jsx)(n.code,{children:"UnloadContent()"}),",\n",(0,t.jsx)(n.code,{children:"Update(GameTime gameTime)"}),",\nand, ",(0,t.jsx)(n.code,{children:"Draw(GameTime gameTime)"})," methods."]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Screens"})," and ",(0,t.jsx)(n.code,{children:"Transitions"})," namespaces."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended.Screens;\nusing MonoGame.Extended.Screens.Transitions;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we implement our GameScreens.\nIn this example, we use 2 GameScreens with a sprite that follows the Cursor."}),"\n",(0,t.jsx)(n.h3,{id:"screen-1",children:"Screen 1"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:'public class MyScreen1 : GameScreen\n{\n private new Game1 Game => (Game1) base.Game;\n \n private Texture2D _logo;\n private SpriteFont _font;\n private Vector2 _position = new Vector2(50,50);\n public MyScreen1(Game1 game) : base(game) { }\n\n public override void LoadContent()\n {\n base.LoadContent();\n _font = Game.Content.Load("font");\n _logo = Game.Content.Load("logo-mge");\n }\n\n public override void Update(GameTime gameTime)\n {\n _position = Vector2.Lerp(_position, Mouse.GetState().Position.ToVector2(), 1f * gameTime.GetElapsedSeconds());\n }\n\n public override void Draw(GameTime gameTime)\n {\n Game.GraphicsDevice.Clear(new Color(16, 139, 204));\n Game.SpriteBatch.Begin();\n Game.SpriteBatch.DrawString(_font, nameof(MyScreen1), new Vector2(10,10), Color.White);\n Game.SpriteBatch.Draw(_logo, _position, Color.White);\n Game.SpriteBatch.End();\n }\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"screen-2",children:"Screen 2"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:'public class MyScreen2 : GameScreen\n{\n private new Game1 Game => (Game1)base.Game;\n private Texture2D _logo;\n private SpriteFont _font;\n private Vector2 _position = new Vector2(50, 50);\n \n public MyScreen2(Game1 game) : base(game) { }\n\n public override void LoadContent()\n {\n base.LoadContent();\n _font = Game.Content.Load("font");\n _logo = Game.Content.Load("logo-mg");\n }\n\n public override void Update(GameTime gameTime)\n {\n _position = Vector2.Lerp(_position, Mouse.GetState().Position.ToVector2(), 1f * gameTime.GetElapsedSeconds());\n }\n\n public override void Draw(GameTime gameTime)\n {\n Game.GraphicsDevice.Clear(Color.White);\n Game.SpriteBatch.Begin();\n Game.SpriteBatch.DrawString(_font, nameof(MyScreen2), new Vector2(10, 10), Color.Orange);\n Game.SpriteBatch.Draw(_logo, _position, Color.White);\n Game.SpriteBatch.End();\n }\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Next, we define our ",(0,t.jsx)(n.code,{children:"ScreenManger"})," in our ",(0,t.jsx)(n.code,{children:"Game"})," class."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private readonly ScreenManager _screenManager;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Which we then assign and register as ",(0,t.jsx)(n.code,{children:"GameComponent"})," in the constructor."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"_screenManager = new ScreenManager();\nComponents.Add(_screenManager);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Then we define the following methods to load the screens."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private void LoadScreen1()\n{\n _screenManager.LoadScreen(new MyScreen1(this), new FadeTransition(GraphicsDevice, Color.Black));\n}\n\nprivate void LoadScreen2()\n{\n _screenManager.LoadScreen(new MyScreen2(this), new FadeTransition(GraphicsDevice, Color.Black));\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Which we then call from the ",(0,t.jsx)(n.code,{children:"Initialize"})," and ",(0,t.jsx)(n.code,{children:"Update"})," methods."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Initialize()\n{\n base.Initialize();\n LoadScreen1();\n}\n\nprotected override void Update(GameTime gameTime)\n{\n KeyboardState keyboardState = Keyboard.GetState();\n if (keyboardState.IsKeyDown(Keys.Escape))\n Exit();\n if (keyboardState.IsKeyDown(Keys.D1))\n {\n LoadScreen1();\n }\n else if (keyboardState.IsKeyDown(Keys.D2))\n {\n LoadScreen2();\n }\n base.Update(gameTime);\n}\n"})})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>s});var t=a(6540);const r={},o=t.createContext(r);function i(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/655e0645.718a3f2b.js b/assets/js/655e0645.718a3f2b.js deleted file mode 100644 index a175a0f..0000000 --- a/assets/js/655e0645.718a3f2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[5857],{10:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var t=a(4848),r=a(8453);const o={id:"screen-management",title:"Screen Management",sidebar_label:"Screen Management",description:"Screen management to split your game into multiple screens."},i=void 0,s={id:"features/screen-management/screen-management",title:"Screen Management",description:"Screen management to split your game into multiple screens.",source:"@site/docs/features/screen-management/screen-management.md",sourceDirName:"features/screen-management",slug:"/features/screen-management/",permalink:"/docs/features/screen-management/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/screen-management/screen-management.md",tags:[],version:"current",frontMatter:{id:"screen-management",title:"Screen Management",sidebar_label:"Screen Management",description:"Screen management to split your game into multiple screens."}},c={},d=[{value:"Usage",id:"usage",level:2},{value:"Screen 1",id:"screen-1",level:3},{value:"Screen 2",id:"screen-2",level:3}];function m(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,t.jsxs)(n.p,{children:["This page ",(0,t.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,t.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,t.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"ScreenManager"})," helps you to split your game into multiple ",(0,t.jsx)(n.code,{children:"GameScreens"})," with their own ",(0,t.jsx)(n.code,{children:"Dispose()"}),",\n",(0,t.jsx)(n.code,{children:"Initialize()"}),",\n",(0,t.jsx)(n.code,{children:"LoadContent()"}),",\n",(0,t.jsx)(n.code,{children:"UnloadContent()"}),",\n",(0,t.jsx)(n.code,{children:"Update(GameTime gameTime)"}),",\nand, ",(0,t.jsx)(n.code,{children:"Draw(GameTime gameTime)"})," methods."]}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Screens"})," and ",(0,t.jsx)(n.code,{children:"Transitions"})," namespaces."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"using MonoGame.Extended.Screens;\nusing MonoGame.Extended.Screens.Transitions;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we implement our GameScreens.\nIn this example, we use 2 GameScreens with a sprite that follows the Cursor."}),"\n",(0,t.jsx)(n.h3,{id:"screen-1",children:"Screen 1"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:'public class MyScreen1 : GameScreen\n{\n private new Game1 Game => (Game1) base.Game;\n \n private Texture2D _logo;\n private SpriteFont _font;\n private Vector2 _position = new Vector2(50,50);\n public MyScreen1(Game1 game) : base(game) { }\n\n public override void LoadContent()\n {\n base.LoadContent();\n _font = Game.Content.Load("font");\n _logo = Game.Content.Load("logo-mge");\n }\n\n public override void Update(GameTime gameTime)\n {\n _position = Vector2.Lerp(_position, Mouse.GetState().Position.ToVector2(), 1f * gameTime.GetElapsedSeconds());\n }\n\n public override void Draw(GameTime gameTime)\n {\n Game.GraphicsDevice.Clear(new Color(16, 139, 204));\n Game.SpriteBatch.Begin();\n Game.SpriteBatch.DrawString(_font, nameof(MyScreen1), new Vector2(10,10), Color.White);\n Game.SpriteBatch.Draw(_logo, _position, Color.White);\n Game.SpriteBatch.End();\n }\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"screen-2",children:"Screen 2"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:'public class MyScreen2 : GameScreen\n{\n private new Game1 Game => (Game1)base.Game;\n private Texture2D _logo;\n private SpriteFont _font;\n private Vector2 _position = new Vector2(50, 50);\n \n public MyScreen2(Game1 game) : base(game) { }\n\n public override void LoadContent()\n {\n base.LoadContent();\n _font = Game.Content.Load("font");\n _logo = Game.Content.Load("logo-mg");\n }\n\n public override void Update(GameTime gameTime)\n {\n _position = Vector2.Lerp(_position, Mouse.GetState().Position.ToVector2(), 1f * gameTime.GetElapsedSeconds());\n }\n\n public override void Draw(GameTime gameTime)\n {\n Game.GraphicsDevice.Clear(Color.White);\n Game.SpriteBatch.Begin();\n Game.SpriteBatch.DrawString(_font, nameof(MyScreen2), new Vector2(10, 10), Color.Orange);\n Game.SpriteBatch.Draw(_logo, _position, Color.White);\n Game.SpriteBatch.End();\n }\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Next, we define our ",(0,t.jsx)(n.code,{children:"ScreenManger"})," in our ",(0,t.jsx)(n.code,{children:"Game"})," class."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private readonly ScreenManager _screenManager;\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Which we then assign and register as ",(0,t.jsx)(n.code,{children:"GameComponent"})," in the constructor."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"_screenManager = new ScreenManager();\nComponents.Add(_screenManager);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Then we define the following methods to load the screens."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"private void LoadScreen1()\n{\n _screenManager.LoadScreen(new MyScreen1(this), new FadeTransition(GraphicsDevice, Color.Black));\n}\n\nprivate void LoadScreen2()\n{\n _screenManager.LoadScreen(new MyScreen2(this), new FadeTransition(GraphicsDevice, Color.Black));\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Which we then call from the ",(0,t.jsx)(n.code,{children:"Initialize"})," and ",(0,t.jsx)(n.code,{children:"Update"})," methods."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-cs",children:"protected override void Initialize()\n{\n base.Initialize();\n LoadScreen1();\n}\n\nprotected override void Update(GameTime gameTime)\n{\n KeyboardState keyboardState = Keyboard.GetState();\n if (keyboardState.IsKeyDown(Keys.Escape))\n Exit();\n if (keyboardState.IsKeyDown(Keys.D1))\n {\n LoadScreen1();\n }\n else if (keyboardState.IsKeyDown(Keys.D2))\n {\n LoadScreen2();\n }\n base.Update(gameTime);\n}\n"})})]})}function l(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(m,{...e})}):m(e)}},8453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>s});var t=a(6540);const r={},o=t.createContext(r);function i(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/84044833.40c091da.js b/assets/js/84044833.40c091da.js new file mode 100644 index 0000000..5b4e49d --- /dev/null +++ b/assets/js/84044833.40c091da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[4501],{1982:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>a});var s=r(4848),o=r(8453);const i={id:"serialization",title:"Serialization",sidebar_label:"Serialization",description:"JSON serialization helpers"},t="Json Converters",l={id:"features/serialization/serialization",title:"Serialization",description:"JSON serialization helpers",source:"@site/docs/features/serialization/serialization.md",sourceDirName:"features/serialization",slug:"/features/serialization/",permalink:"/docs/features/serialization/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/serialization/serialization.md",tags:[],version:"current",frontMatter:{id:"serialization",title:"Serialization",sidebar_label:"Serialization",description:"JSON serialization helpers"},sidebar:"docs",previous:{title:"Screen Management",permalink:"/docs/features/screen-management/"},next:{title:"Tweening",permalink:"/docs/features/tweening/"}},c={},a=[{value:"JsonConverter Example",id:"jsonconverter-example",level:3},{value:"Color JsonConverter",id:"color-jsonconverter",level:2},{value:"Vector2 JsonConverter",id:"vector2-jsonconverter",level:2},{value:"NinePatchRegion2D JsonConverter",id:"ninepatchregion2d-jsonconverter",level:2},{value:"Size2 JsonConverter",id:"size2-jsonconverter",level:2},{value:"Range JsonConverter",id:"range-jsonconverter",level:2},{value:"TextureRegion2D JsonConverter",id:"textureregion2d-jsonconverter",level:2},{value:"Thickness JsonConverter",id:"thickness-jsonconverter",level:2},{value:"ReadAsMultiDimensional",id:"readasmultidimensional",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,s.jsxs)(n.p,{children:["This page ",(0,s.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,s.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,s.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,s.jsxs)(n.p,{children:["MonoGame.Extended contains various serialization helpers that work with ",(0,s.jsx)(n.a,{href:"http://www.newtonsoft.com/json/help/html/SerializingJSON.htm",children:"Newtonsoft Json.NET"}),"."]}),"\n",(0,s.jsx)(n.h1,{id:"json-converters",children:"Json Converters"}),"\n",(0,s.jsx)(n.p,{children:"The following XNA/MonoGame types have converters:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Color"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#color-jsonconverter",children:"ColorJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Vector2"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#vector2-jsonconverter",children:"Vector2JsonConverter"})})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The following MonoGame.Extended types have converters:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"NinePatchRegion2D"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#ninepatchregion2d-jsonconverter",children:"NinePatchRegion2DJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Size2"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#size2-jsonconverter",children:"Size2JsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Range"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#range-jsonconverter",children:"RangeJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"TextureRegion2D"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#textureregion2d-jsonconverter",children:"TextureRegion2DJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Thickness"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#thickness-jsonconverter",children:"ThicknessJsonConverter"})})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"jsonconverter-example",children:"JsonConverter Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"using Newtonsoft.Json;\nusing Microsoft.Xna.Framework;\nusing MonoGame.Extended.Serialization;\n\nstruct Thing {\n public Color BootStrapBlue;\n public Vector2 Position;\n}\nvar data = @\"{\n 'BootStrapBlue':'#428bca00',\n 'Position':'1.1 4',\n}\";\n\nvar thing = JsonConvert.DeserializeObject(data,\n new ColorJsonConverter(),\n new Vector2JsonConverter()\n);\n\nthing.BootStrapBlue; // \"{R:66 G:139 B:202 A:0}\"\nthing.Posistion; // \"{X:1.1 Y:4}\"\n"})}),"\n",(0,s.jsx)(n.h2,{id:"color-jsonconverter",children:"Color JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["ColorJsonConverter tells Newtonsoft Json.NET now to convert string hex values into XNA ",(0,s.jsx)(n.code,{children:"Color"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"#10203040"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.code,{children:"Color"})," object is created."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Color(16, 32, 48, 64);\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The format is a ",(0,s.jsx)(n.code,{children:"#"})," followed by byte hex codes for Red, Green, Blue, and Alpha channels."]}),"\n",(0,s.jsx)(n.h2,{id:"vector2-jsonconverter",children:"Vector2 JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["Vector2JsonConverter tells Newtonsoft Json.NET how to serialize XNA ",(0,s.jsx)(n.code,{children:"Vector2"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-JSON",children:'"1.2 33"\n'})}),"\n",(0,s.jsx)(n.p,{children:"A new Vector2 is created."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Vector2(1.2f, 33f);\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The format is ",(0,s.jsx)(n.code,{children:"X Y"})," for the x and y components of a 2D vector."]}),"\n",(0,s.jsx)(n.h2,{id:"ninepatchregion2d-jsonconverter",children:"NinePatchRegion2D JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["NinePatchRegion2DJsonConverter tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"NinePatchRegion2D"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON object value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "TextureRegion":"Center",\n "Padding":"1 2 3 4"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"NinePatchRegion2D"})," is created and the TextureRegion is looked up in the TextureRegionService."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new NinePatchRegion2D(TextureRegion2D('Center',...), 1, 2, 3, 4)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The format is not a string value, but a nested JSON object where ",(0,s.jsx)(n.code,{children:"Padding"})," is a ",(0,s.jsx)(n.code,{children:"Thickness"})," value."]}),"\n",(0,s.jsx)(n.h2,{id:"size2-jsonconverter",children:"Size2 JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["Size2JsonConverter tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"Size2"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"10 4"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"Size2"})," object is created. Understood, good buddy."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Size2(10f, 4f)\n"})}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string containing the Width, and Height values as decimal numbers."}),"\n",(0,s.jsx)(n.h2,{id:"range-jsonconverter",children:"Range JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"RangeJsonConverter"})," tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"Range"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"1 9000"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"Range"})," object is created."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Range(1, 9000);\n"})}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string containing one or two values."}),"\n",(0,s.jsx)(n.h2,{id:"textureregion2d-jsonconverter",children:"TextureRegion2D JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["TextureRegion2DJsonConverter tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"TextureRegion2D"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"Center"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The TextureRegionService is queried with ",(0,s.jsx)(n.code,{children:'GetTextureRegion("Center")'})]}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string with the name of the TextureRegion in a TextureAtlas."}),"\n",(0,s.jsx)(n.h2,{id:"thickness-jsonconverter",children:"Thickness JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["ThicknessJsonConverter tells Newtonsoft Json.NET how to serialize a MonoGame.Extended ",(0,s.jsx)(n.code,{children:"Thickness"})," object."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"1 2 3 4"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"Thickness"})," object is created."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'Thickness.Parse("1 2 3 4")\n'})}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string containing a value to be parsed by Thickness."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"1 2 3 4"'})," is left:1, top:2, right:3, bottom:4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"2 4"'})," is left:2, top:4, right:2, bottom:4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"8"'})," is left:8, top:8, right:8, bottom:8"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"1,2"'})," is left:1, top:2, right:1, top:2"]}),"\n"]}),"\n",(0,s.jsx)(n.h1,{id:"extensions",children:"Extensions"}),"\n",(0,s.jsx)(n.h2,{id:"readasmultidimensional",children:"ReadAsMultiDimensional"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Newtonsoft.Json.JsonReader"})," is extended with ",(0,s.jsx)(n.code,{children:"T[] ReadAsMultiDimensional()"})]}),"\n",(0,s.jsx)(n.p,{children:"This allows you to easily create a custom JsonConverter with a list of values."}),"\n",(0,s.jsx)(n.p,{children:"For example a list of floats"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"1.1 2.3 4.5 6.1"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Could be parsed into an array of floats using the following JsonConverter that uses ",(0,s.jsx)(n.code,{children:"ReadAsMultiDimensional"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:'public class PathJsonConverter : JsonConverter\n{\n public override object ReadJson(JsonReader reader, Type objectType, object value, JsonSerializer serializer)\n {\n float[] path = reader.ReadAsMultiDimensional();\n return path;\n }\n\n public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n {\n var path = (float[]) value;\n writer.WriteValue(string.Join(" ", path));\n }\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>t,x:()=>l});var s=r(6540);const o={},i=s.createContext(o);function t(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/84044833.a4e9c2f5.js b/assets/js/84044833.a4e9c2f5.js deleted file mode 100644 index b602ea9..0000000 --- a/assets/js/84044833.a4e9c2f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[4501],{1982:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>a});var s=r(4848),o=r(8453);const i={id:"serialization",title:"Serialization",sidebar_label:"Serialization",description:"JSON serialization helpers"},t="Json Converters",l={id:"features/serialization/serialization",title:"Serialization",description:"JSON serialization helpers",source:"@site/docs/features/serialization/serialization.md",sourceDirName:"features/serialization",slug:"/features/serialization/",permalink:"/docs/features/serialization/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/serialization/serialization.md",tags:[],version:"current",frontMatter:{id:"serialization",title:"Serialization",sidebar_label:"Serialization",description:"JSON serialization helpers"}},c={},a=[{value:"JsonConverter Example",id:"jsonconverter-example",level:3},{value:"Color JsonConverter",id:"color-jsonconverter",level:2},{value:"Vector2 JsonConverter",id:"vector2-jsonconverter",level:2},{value:"NinePatchRegion2D JsonConverter",id:"ninepatchregion2d-jsonconverter",level:2},{value:"Size2 JsonConverter",id:"size2-jsonconverter",level:2},{value:"Range JsonConverter",id:"range-jsonconverter",level:2},{value:"TextureRegion2D JsonConverter",id:"textureregion2d-jsonconverter",level:2},{value:"Thickness JsonConverter",id:"thickness-jsonconverter",level:2},{value:"ReadAsMultiDimensional",id:"readasmultidimensional",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,s.jsxs)(n.p,{children:["This page ",(0,s.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,s.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,s.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,s.jsxs)(n.p,{children:["MonoGame.Extended contains various serialization helpers that work with ",(0,s.jsx)(n.a,{href:"http://www.newtonsoft.com/json/help/html/SerializingJSON.htm",children:"Newtonsoft Json.NET"}),"."]}),"\n",(0,s.jsx)(n.h1,{id:"json-converters",children:"Json Converters"}),"\n",(0,s.jsx)(n.p,{children:"The following XNA/MonoGame types have converters:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Color"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#color-jsonconverter",children:"ColorJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Vector2"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#vector2-jsonconverter",children:"Vector2JsonConverter"})})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The following MonoGame.Extended types have converters:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"NinePatchRegion2D"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#ninepatchregion2d-jsonconverter",children:"NinePatchRegion2DJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Size2"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#size2-jsonconverter",children:"Size2JsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Range"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#range-jsonconverter",children:"RangeJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"TextureRegion2D"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#textureregion2d-jsonconverter",children:"TextureRegion2DJsonConverter"})})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Thickness"})," via ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"#thickness-jsonconverter",children:"ThicknessJsonConverter"})})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"jsonconverter-example",children:"JsonConverter Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"using Newtonsoft.Json;\nusing Microsoft.Xna.Framework;\nusing MonoGame.Extended.Serialization;\n\nstruct Thing {\n public Color BootStrapBlue;\n public Vector2 Position;\n}\nvar data = @\"{\n 'BootStrapBlue':'#428bca00',\n 'Position':'1.1 4',\n}\";\n\nvar thing = JsonConvert.DeserializeObject(data,\n new ColorJsonConverter(),\n new Vector2JsonConverter()\n);\n\nthing.BootStrapBlue; // \"{R:66 G:139 B:202 A:0}\"\nthing.Posistion; // \"{X:1.1 Y:4}\"\n"})}),"\n",(0,s.jsx)(n.h2,{id:"color-jsonconverter",children:"Color JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["ColorJsonConverter tells Newtonsoft Json.NET now to convert string hex values into XNA ",(0,s.jsx)(n.code,{children:"Color"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"#10203040"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A ",(0,s.jsx)(n.code,{children:"Color"})," object is created."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Color(16, 32, 48, 64);\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The format is a ",(0,s.jsx)(n.code,{children:"#"})," followed by byte hex codes for Red, Green, Blue, and Alpha channels."]}),"\n",(0,s.jsx)(n.h2,{id:"vector2-jsonconverter",children:"Vector2 JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["Vector2JsonConverter tells Newtonsoft Json.NET how to serialize XNA ",(0,s.jsx)(n.code,{children:"Vector2"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-JSON",children:'"1.2 33"\n'})}),"\n",(0,s.jsx)(n.p,{children:"A new Vector2 is created."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Vector2(1.2f, 33f);\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The format is ",(0,s.jsx)(n.code,{children:"X Y"})," for the x and y components of a 2D vector."]}),"\n",(0,s.jsx)(n.h2,{id:"ninepatchregion2d-jsonconverter",children:"NinePatchRegion2D JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["NinePatchRegion2DJsonConverter tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"NinePatchRegion2D"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON object value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "TextureRegion":"Center",\n "Padding":"1 2 3 4"\n}\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"NinePatchRegion2D"})," is created and the TextureRegion is looked up in the TextureRegionService."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new NinePatchRegion2D(TextureRegion2D('Center',...), 1, 2, 3, 4)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The format is not a string value, but a nested JSON object where ",(0,s.jsx)(n.code,{children:"Padding"})," is a ",(0,s.jsx)(n.code,{children:"Thickness"})," value."]}),"\n",(0,s.jsx)(n.h2,{id:"size2-jsonconverter",children:"Size2 JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["Size2JsonConverter tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"Size2"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"10 4"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"Size2"})," object is created. Understood, good buddy."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Size2(10f, 4f)\n"})}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string containing the Width, and Height values as decimal numbers."}),"\n",(0,s.jsx)(n.h2,{id:"range-jsonconverter",children:"Range JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"RangeJsonConverter"})," tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"Range"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"1 9000"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"Range"})," object is created."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:"new Range(1, 9000);\n"})}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string containing one or two values."}),"\n",(0,s.jsx)(n.h2,{id:"textureregion2d-jsonconverter",children:"TextureRegion2D JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["TextureRegion2DJsonConverter tells Newtonsoft Json.NET how to serialize MonoGame.Extended ",(0,s.jsx)(n.code,{children:"TextureRegion2D"})," objects."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"Center"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["The TextureRegionService is queried with ",(0,s.jsx)(n.code,{children:'GetTextureRegion("Center")'})]}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string with the name of the TextureRegion in a TextureAtlas."}),"\n",(0,s.jsx)(n.h2,{id:"thickness-jsonconverter",children:"Thickness JsonConverter"}),"\n",(0,s.jsxs)(n.p,{children:["ThicknessJsonConverter tells Newtonsoft Json.NET how to serialize a MonoGame.Extended ",(0,s.jsx)(n.code,{children:"Thickness"})," object."]}),"\n",(0,s.jsx)(n.p,{children:"Given the JSON string value"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"1 2 3 4"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["A new ",(0,s.jsx)(n.code,{children:"Thickness"})," object is created."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:'Thickness.Parse("1 2 3 4")\n'})}),"\n",(0,s.jsx)(n.p,{children:"The format is a JSON string containing a value to be parsed by Thickness."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"1 2 3 4"'})," is left:1, top:2, right:3, bottom:4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"2 4"'})," is left:2, top:4, right:2, bottom:4"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"8"'})," is left:8, top:8, right:8, bottom:8"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:'"1,2"'})," is left:1, top:2, right:1, top:2"]}),"\n"]}),"\n",(0,s.jsx)(n.h1,{id:"extensions",children:"Extensions"}),"\n",(0,s.jsx)(n.h2,{id:"readasmultidimensional",children:"ReadAsMultiDimensional"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Newtonsoft.Json.JsonReader"})," is extended with ",(0,s.jsx)(n.code,{children:"T[] ReadAsMultiDimensional()"})]}),"\n",(0,s.jsx)(n.p,{children:"This allows you to easily create a custom JsonConverter with a list of values."}),"\n",(0,s.jsx)(n.p,{children:"For example a list of floats"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"1.1 2.3 4.5 6.1"\n'})}),"\n",(0,s.jsxs)(n.p,{children:["Could be parsed into an array of floats using the following JsonConverter that uses ",(0,s.jsx)(n.code,{children:"ReadAsMultiDimensional"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-csharp",children:'public class PathJsonConverter : JsonConverter\n{\n public override object ReadJson(JsonReader reader, Type objectType, object value, JsonSerializer serializer)\n {\n float[] path = reader.ReadAsMultiDimensional();\n return path;\n }\n\n public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n {\n var path = (float[]) value;\n writer.WriteValue(string.Join(" ", path));\n }\n}\n'})})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>t,x:()=>l});var s=r(6540);const o={},i=s.createContext(o);function t(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f291af6e.74862146.js b/assets/js/f291af6e.74862146.js new file mode 100644 index 0000000..81a9b84 --- /dev/null +++ b/assets/js/f291af6e.74862146.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[9591],{8798:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var t=i(4848),s=i(8453);const a={id:"tweening",title:"Tweening",sidebar_label:"Tweening",description:"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation."},o=void 0,r={id:"features/tweening/tweening",title:"Tweening",description:"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation.",source:"@site/docs/features/tweening/tweening.md",sourceDirName:"features/tweening",slug:"/features/tweening/",permalink:"/docs/features/tweening/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/tweening/tweening.md",tags:[],version:"current",frontMatter:{id:"tweening",title:"Tweening",sidebar_label:"Tweening",description:"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation."},sidebar:"docs",previous:{title:"Serialization",permalink:"/docs/features/serialization/"},next:{title:"Tiled",permalink:"/docs/features/tiled/"}},c={},l=[{value:"Example",id:"example",level:2},{value:"Usage",id:"usage",level:3},{value:"Easing functions",id:"easing-functions",level:2},{value:"In-Easing functions",id:"in-easing-functions",level:3},{value:"Out-Easing functions",id:"out-easing-functions",level:3},{value:"In-Out-Easing functions",id:"in-out-easing-functions",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,t.jsxs)(n.p,{children:["This page ",(0,t.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,t.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,t.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,t.jsx)(n.p,{children:"Inbetweening, or just tweening for short, allows you to generate values for position, size, color, opacity, etc in intermediate frames giving the illusion of animation."}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:"The assets used in the example don't have any unique assets to download."}),"\n",(0,t.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Tweening"})," namespace."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"using MonoGame.Extended.Tweening;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we declare a class with a property we want to tween."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"class Player\n{\n public Vector2 Position { get; set; }\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we instantiate an instance of the Tweener and our class."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"private readonly Tweener _tweener = new Tweener();\nprivate readonly Player _player = new Player() { Position = new Vector2(200, 50) };\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then we order the ",(0,t.jsx)(n.code,{children:"Tweener"})," to tween the position.\nThe Tween method requires a target object and an expression that refers to a property of that object."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"_tweener.TweenTo(target: _player, expression: player => _player.Position, toValue: new Vector2(550, 50), duration: 2, delay: 1)\n .RepeatForever(repeatDelay: 0.2f)\n .AutoReverse()\n .Easing(EasingFunctions.Linear);\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Next, we add the ",(0,t.jsx)(n.code,{children:"Tweener"})," to the update loop,"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"protected override void Update(GameTime gameTime)\n{\n _tweener.Update(gameTime.GetElapsedSeconds());\n base.Update(gameTime);\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"And last but not least we draw."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"protected override void Draw(GameTime gameTime)\n{\n GraphicsDevice.Clear(Color.Black);\n _spriteBatch.Begin(samplerState: SamplerState.PointClamp);\n _spriteBatch.FillRectangle(_player.Position.X, _player.Position.Y, Size.X, Size.Y, Color.Red);\n _spriteBatch.End();\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"easing-functions",children:"Easing functions"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"EasingFunctions"})," calculate a value given a percentage of completeness.\nIn the example ",(0,t.jsx)(n.code,{children:"EasingFunctions.Linear"})," was used. Below is a visual representation of the other ",(0,t.jsx)(n.code,{children:"EasingFunctions"})]}),"\n",(0,t.jsx)(n.h3,{id:"in-easing-functions",children:"In-Easing functions"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"In-Easing functions",src:i(1083).A+"",width:"1250",height:"1250"})}),"\n",(0,t.jsx)(n.h3,{id:"out-easing-functions",children:"Out-Easing functions"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Out-Easing functions",src:i(9360).A+"",width:"1250",height:"1500"})}),"\n",(0,t.jsx)(n.h3,{id:"in-out-easing-functions",children:"In-Out-Easing functions"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"In-Out-Easing functions",src:i(8839).A+"",width:"1250",height:"1500"})})]})}function g(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1083:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/inEasing-78ec3d95639b9794e13cdfba1abd1c2a.gif"},8839:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/inOutEasing-0f15ed16a902cdfe8dce4df673120b8c.gif"},9360:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/outEasing-bac72e087112c36f50f2226499901a5a.gif"},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>r});var t=i(6540);const s={},a=t.createContext(s);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f291af6e.b4db295b.js b/assets/js/f291af6e.b4db295b.js deleted file mode 100644 index 4438452..0000000 --- a/assets/js/f291af6e.b4db295b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[9591],{8798:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>g,frontMatter:()=>a,metadata:()=>r,toc:()=>l});var t=i(4848),s=i(8453);const a={id:"tweening",title:"Tweening",sidebar_label:"Tweening",description:"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation."},o=void 0,r={id:"features/tweening/tweening",title:"Tweening",description:"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation.",source:"@site/docs/features/tweening/tweening.md",sourceDirName:"features/tweening",slug:"/features/tweening/",permalink:"/docs/features/tweening/",draft:!1,unlisted:!1,editUrl:"https://github.com/craftworkgames/craftworkgames.github.io/tree/develop/docs/features/tweening/tweening.md",tags:[],version:"current",frontMatter:{id:"tweening",title:"Tweening",sidebar_label:"Tweening",description:"Tweening to generate values for position, size, color, opacity, etc, in intermediate frames giving the illusion of animation."}},c={},l=[{value:"Example",id:"example",level:2},{value:"Usage",id:"usage",level:3},{value:"Easing functions",id:"easing-functions",level:2},{value:"In-Easing functions",id:"in-easing-functions",level:3},{value:"Out-Easing functions",id:"out-easing-functions",level:3},{value:"In-Out-Easing functions",id:"in-out-easing-functions",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.admonition,{title:"Not up to date",type:"warning",children:(0,t.jsxs)(n.p,{children:["This page ",(0,t.jsx)(n.strong,{children:"is not"})," up to date for MonoGame.Extended ",(0,t.jsx)(n.code,{children:"4.0.3"}),". If you would like to contribute to updating this document, please ",(0,t.jsx)(n.a,{href:"https://github.com/craftworkgames/craftworkgames.github.io/pulls",children:"create a new PR"})]})}),"\n",(0,t.jsx)(n.p,{children:"Inbetweening, or just tweening for short, allows you to generate values for position, size, color, opacity, etc in intermediate frames giving the illusion of animation."}),"\n",(0,t.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:"The assets used in the example don't have any unique assets to download."}),"\n",(0,t.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,t.jsxs)(n.p,{children:["We start by including the ",(0,t.jsx)(n.code,{children:"Tweening"})," namespace."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"using MonoGame.Extended.Tweening;\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we declare a class with a property we want to tween."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"class Player\n{\n public Vector2 Position { get; set; }\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"Next, we instantiate an instance of the Tweener and our class."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"private readonly Tweener _tweener = new Tweener();\nprivate readonly Player _player = new Player() { Position = new Vector2(200, 50) };\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Then we order the ",(0,t.jsx)(n.code,{children:"Tweener"})," to tween the position.\nThe Tween method requires a target object and an expression that refers to a property of that object."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"_tweener.TweenTo(target: _player, expression: player => _player.Position, toValue: new Vector2(550, 50), duration: 2, delay: 1)\n .RepeatForever(repeatDelay: 0.2f)\n .AutoReverse()\n .Easing(EasingFunctions.Linear);\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Next, we add the ",(0,t.jsx)(n.code,{children:"Tweener"})," to the update loop,"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"protected override void Update(GameTime gameTime)\n{\n _tweener.Update(gameTime.GetElapsedSeconds());\n base.Update(gameTime);\n}\n"})}),"\n",(0,t.jsx)(n.p,{children:"And last but not least we draw."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-csharp",children:"protected override void Draw(GameTime gameTime)\n{\n GraphicsDevice.Clear(Color.Black);\n _spriteBatch.Begin(samplerState: SamplerState.PointClamp);\n _spriteBatch.FillRectangle(_player.Position.X, _player.Position.Y, Size.X, Size.Y, Color.Red);\n _spriteBatch.End();\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"easing-functions",children:"Easing functions"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"EasingFunctions"})," calculate a value given a percentage of completeness.\nIn the example ",(0,t.jsx)(n.code,{children:"EasingFunctions.Linear"})," was used. Below is a visual representation of the other ",(0,t.jsx)(n.code,{children:"EasingFunctions"})]}),"\n",(0,t.jsx)(n.h3,{id:"in-easing-functions",children:"In-Easing functions"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"In-Easing functions",src:i(1083).A+"",width:"1250",height:"1250"})}),"\n",(0,t.jsx)(n.h3,{id:"out-easing-functions",children:"Out-Easing functions"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Out-Easing functions",src:i(9360).A+"",width:"1250",height:"1500"})}),"\n",(0,t.jsx)(n.h3,{id:"in-out-easing-functions",children:"In-Out-Easing functions"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"In-Out-Easing functions",src:i(8839).A+"",width:"1250",height:"1500"})})]})}function g(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1083:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/inEasing-78ec3d95639b9794e13cdfba1abd1c2a.gif"},8839:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/inOutEasing-0f15ed16a902cdfe8dce4df673120b8c.gif"},9360:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/outEasing-bac72e087112c36f50f2226499901a5a.gif"},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>r});var t=i(6540);const s={},a=t.createContext(s);function o(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.1807643e.js b/assets/js/main.53ebba81.js similarity index 96% rename from assets/js/main.1807643e.js rename to assets/js/main.53ebba81.js index 1c94146..2622496 100644 --- a/assets/js/main.1807643e.js +++ b/assets/js/main.53ebba81.js @@ -1,2 +1,2 @@ -/*! For license information please see main.1807643e.js.LICENSE.txt */ -(self.webpackChunkmonogame_extended_website=self.webpackChunkmonogame_extended_website||[]).push([[8792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"01a85c17":[()=>Promise.all([n.e(1869),n.e(8209)]).then(n.bind(n,9158)),"@theme/BlogTagsListPage",9158],"071ed2b5":[()=>n.e(1331).then(n.bind(n,7230)),"@site/blog/2024-06-24/kni-fna/kni-fna.md?truncated=true",7230],"08af526d":[()=>n.e(529).then(n.t.bind(n,1344,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-3ce.json",1344],"0946e072":[()=>Promise.all([n.e(1869),n.e(6128)]).then(n.bind(n,6917)),"@site/docs/getting-started/installation-kni.md",6917],"0cd15f3d":[()=>n.e(4113).then(n.bind(n,9888)),"@site/docs/features/object-pooling/object-pooling.md",9888],"11b43341":[()=>n.e(2256).then(n.t.bind(n,7674,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-7fc.json",7674],"16296e04":[()=>n.e(8530).then(n.bind(n,1677)),"@site/blog/2024-06-02-mongame-extended-is-back/index.md?truncated=true",1677],17896441:[()=>Promise.all([n.e(1869),n.e(6905),n.e(8401)]).then(n.bind(n,2447)),"@theme/DocItem",2447],"17a8bb09":[()=>n.e(4493).then(n.bind(n,8866)),"@site/docs/features/entities/entities.md",8866],"1a1c60a4":[()=>n.e(7712).then(n.t.bind(n,4301,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-updates-90b.json",4301],"1f31edb2":[()=>n.e(1513).then(n.bind(n,2697)),"@site/docs/features/input/mouseextended/mouseextended.md",2697],"2063472f":[()=>n.e(3215).then(n.t.bind(n,7646,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-18b.json",7646],"24f3c139":[()=>n.e(9444).then(n.bind(n,7554)),"@site/docs/features/tiled/tiled.md",7554],"254011a3":[()=>Promise.all([n.e(1869),n.e(9730)]).then(n.bind(n,9528)),"@site/docs/getting-started/installation-monogame.mdx",9528],"36994c47":[()=>n.e(9858).then(n.t.bind(n,5516,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",5516],"39239bc1":[()=>n.e(3851).then(n.bind(n,6129)),"@site/docs/features/input/inputlistener/inputlistener.md",6129],"3cf817b5":[()=>n.e(7708).then(n.bind(n,1994)),"@site/docs/features/collections/collections.md",1994],"4bd3fe22":[()=>n.e(9265).then(n.t.bind(n,8238,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-gum-4de.json",8238],"4e06db72":[()=>n.e(9005).then(n.bind(n,4905)),"@site/docs/features/texture-handling/texture2dregion/texture2dregion.md",4905],"4ef90eef":[()=>n.e(3529).then(n.bind(n,2772)),"@site/docs/features/scene-graphs/scene-graphs.md",2772],"51515e66":[()=>n.e(7505).then(n.bind(n,3491)),"@site/docs/about/introduction.md",3491],"54d6eb79":[()=>n.e(9039).then(n.bind(n,6370)),"@site/docs/features/collision/collision.md",6370],"55018ead":[()=>n.e(1042).then(n.bind(n,4098)),"@site/blog/2024-07-09/version-4-initial-release/version-4-initial-release.md?truncated=true",4098],"5a1e5e6c":[()=>n.e(9212).then(n.bind(n,3753)),"@site/docs/features/fonts/bitmapfont/bitmapfont.md",3753],"5b261258":[()=>n.e(976).then(n.bind(n,2394)),"@site/docs/features/camera/orthographic-camera/orthographic-camera.md",2394],"5e95c892":[()=>n.e(9647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5ef61680":[()=>n.e(5548).then(n.bind(n,7115)),"@site/blog/2024-06-02-mongame-extended-is-back/index.md",7115],"608560bd":[()=>n.e(4372).then(n.bind(n,4094)),"@site/blog/2024-06-15/monogame-extended-gum/monogame-extended-gum.md",4094],"655e0645":[()=>n.e(5857).then(n.bind(n,10)),"@site/docs/features/screen-management/screen-management.md",10],"6875c492":[()=>Promise.all([n.e(1869),n.e(6905),n.e(5303),n.e(4813)]).then(n.bind(n,3069)),"@theme/BlogTagsPostsPage",3069],"6c7b3833":[()=>n.e(730).then(n.bind(n,698)),"@site/blog/2024-06-24/kni-fna/kni-fna.md",698],"7202b5c5":[()=>n.e(8745).then(n.t.bind(n,9411,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-bitmap-fonts-fb1.json",9411],"812244db":[()=>n.e(7396).then(n.bind(n,6532)),"@site/blog/2024-06-13/bmfont-update/bmfont-update.md",6532],"814f3328":[()=>n.e(7472).then(n.t.bind(n,5513,19)),"~blog/default/blog-post-list-prop-default.json",5513],84044833:[()=>n.e(4501).then(n.bind(n,1982)),"@site/docs/features/serialization/serialization.md",1982],87269792:[()=>n.e(8685).then(n.t.bind(n,9238,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-4-0-366.json",9238],"88e57c37":[()=>n.e(7489).then(n.bind(n,206)),"@site/blog/2024-07-09/version-4-initial-release/version-4-initial-release.md",206],"94c085b7":[()=>n.e(6109).then(n.t.bind(n,6744,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-kni-3ef.json",6744],"9e4087bc":[()=>n.e(2711).then(n.bind(n,9331)),"@theme/BlogArchivePage",9331],"9f57cf59":[()=>n.e(5799).then(n.bind(n,2082)),"@site/docs/features/texture-handling/texture2datlas/texture2datlas.md",2082],a1c0d3ed:[()=>n.e(736).then(n.bind(n,694)),"@site/docs/about/principles.md",694],a49adc1e:[()=>n.e(295).then(n.bind(n,7140)),"@site/docs/features/camera/camera.md",7140],a6aa9e1f:[()=>Promise.all([n.e(1869),n.e(6905),n.e(5303),n.e(7643)]).then(n.bind(n,5124)),"@theme/BlogListPage",5124],a7456010:[()=>n.e(1235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],ab147173:[()=>n.e(3647).then(n.t.bind(n,1871,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-ui-b3d.json",1871],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],acecf23e:[()=>n.e(1903).then(n.t.bind(n,1912,19)),"~blog/default/blogMetadata-default.json",1912],ad0a97f0:[()=>n.e(535).then(n.bind(n,240)),"@site/docs/features/2d-animations/spritesheet/spritesheet.md",240],b0b31e12:[()=>n.e(3727).then(n.bind(n,194)),"@site/blog/2024-06-15/monogame-extended-gum/monogame-extended-gum.md?truncated=true",194],baa73a92:[()=>n.e(6713).then(n.bind(n,6720)),"@site/blog/2024-06-13/bmfont-update/bmfont-update.md?truncated=true",6720],bb26e22c:[()=>n.e(1819).then(n.bind(n,2857)),"@site/blog/2024-06-12/update.md?truncated=true",2857],be601dc5:[()=>n.e(3133).then(n.bind(n,7867)),"@site/docs/archived/animations/animations.md",7867],c4f5d8e4:[()=>Promise.all([n.e(1869),n.e(2634)]).then(n.bind(n,6467)),"@site/src/pages/index.js",6467],ccc49370:[()=>Promise.all([n.e(1869),n.e(6905),n.e(5303),n.e(3249)]).then(n.bind(n,3858)),"@theme/BlogPostPage",3858],ce3bcfd1:[()=>n.e(7962).then(n.bind(n,7659)),"@site/docs/features/ui/gum/gum-forms/gum-forms.md",7659],d0a09cf9:[()=>n.e(3123).then(n.bind(n,4886)),"@site/docs/getting-started/installation-fna.md",4886],d5bc498f:[()=>n.e(4880).then(n.bind(n,3711)),"@site/docs/about/contributing.md",3711],dabf4a7f:[()=>n.e(8024).then(n.bind(n,2407)),"@site/blog/2024-06-12/update.md",2407],dbfc4782:[()=>n.e(8749).then(n.t.bind(n,1895,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-61f.json",1895],df20c84d:[()=>n.e(938).then(n.bind(n,7827)),"@site/docs/features/contentmanager/contentManager-extensions.md",7827],df481f37:[()=>n.e(9622).then(n.bind(n,7502)),"@site/docs/features/2d-animations/animatedsprite/animatedsprite.md",7502],e0670b7d:[()=>n.e(6938).then(n.t.bind(n,3017,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-fna-2e5.json",3017],e24e1c44:[()=>n.e(6899).then(n.bind(n,4746)),"@site/docs/features/particles/particles.md",4746],ef97bd42:[()=>n.e(1706).then(n.bind(n,6103)),"@site/docs/features/input/keyboardextended/keyboardextended.md",6103],f291af6e:[()=>n.e(9591).then(n.bind(n,8798)),"@site/docs/features/tweening/tweening.md",8798],febdfe3c:[()=>n.e(2051).then(n.bind(n,1069)),"@site/docs/features/texture-handling/sprite/sprite.md",1069],ffad4089:[()=>n.e(2133).then(n.t.bind(n,3181,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-releases-610.json",3181]};var s=n(4848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(2237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,s.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],g=(0,u.A)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:l,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const l=a.__props;return delete a.__props,(0,s.jsx)(c.W,{value:i,children:(0,s.jsx)(o,{...a,...l,...n})})}})}const f=[{path:"/blog/",component:d("/blog/","4f0"),exact:!0},{path:"/blog/archive/",component:d("/blog/archive/","1d9"),exact:!0},{path:"/blog/bmfont-update/",component:d("/blog/bmfont-update/","d98"),exact:!0},{path:"/blog/kni-fna/",component:d("/blog/kni-fna/","fb2"),exact:!0},{path:"/blog/mongame-extended-is-back/",component:d("/blog/mongame-extended-is-back/","fef"),exact:!0},{path:"/blog/monogame-extended-gum/",component:d("/blog/monogame-extended-gum/","9de"),exact:!0},{path:"/blog/tags/",component:d("/blog/tags/","e17"),exact:!0},{path:"/blog/tags/4.0/",component:d("/blog/tags/4.0/","215"),exact:!0},{path:"/blog/tags/bitmap-fonts/",component:d("/blog/tags/bitmap-fonts/","35f"),exact:!0},{path:"/blog/tags/fna/",component:d("/blog/tags/fna/","859"),exact:!0},{path:"/blog/tags/gum/",component:d("/blog/tags/gum/","5da"),exact:!0},{path:"/blog/tags/kni/",component:d("/blog/tags/kni/","c61"),exact:!0},{path:"/blog/tags/releases/",component:d("/blog/tags/releases/","768"),exact:!0},{path:"/blog/tags/ui/",component:d("/blog/tags/ui/","6a8"),exact:!0},{path:"/blog/tags/updates/",component:d("/blog/tags/updates/","b3d"),exact:!0},{path:"/blog/update-2024-06-12/",component:d("/blog/update-2024-06-12/","755"),exact:!0},{path:"/blog/version-4-initial-release/",component:d("/blog/version-4-initial-release/","793"),exact:!0},{path:"/docs/",component:d("/docs/","5e4"),routes:[{path:"/docs/",component:d("/docs/","b57"),routes:[{path:"/docs/",component:d("/docs/","c59"),routes:[{path:"/docs/about/contributing/",component:d("/docs/about/contributing/","149"),exact:!0,sidebar:"docs"},{path:"/docs/about/introduction/",component:d("/docs/about/introduction/","465"),exact:!0,sidebar:"docs"},{path:"/docs/about/principles/",component:d("/docs/about/principles/","4aa"),exact:!0,sidebar:"docs"},{path:"/docs/archived/animations/",component:d("/docs/archived/animations/","bd6"),exact:!0},{path:"/docs/features/2d-animations/animatedsprite/",component:d("/docs/features/2d-animations/animatedsprite/","cd0"),exact:!0,sidebar:"docs"},{path:"/docs/features/2d-animations/spritesheet/",component:d("/docs/features/2d-animations/spritesheet/","669"),exact:!0,sidebar:"docs"},{path:"/docs/features/camera/",component:d("/docs/features/camera/","9e6"),exact:!0,sidebar:"docs"},{path:"/docs/features/camera/orthographic-camera/",component:d("/docs/features/camera/orthographic-camera/","878"),exact:!0,sidebar:"docs"},{path:"/docs/features/collections/",component:d("/docs/features/collections/","e49"),exact:!0,sidebar:"docs"},{path:"/docs/features/collision/",component:d("/docs/features/collision/","f74"),exact:!0,sidebar:"docs"},{path:"/docs/features/contentmanager/contentManager-extensions/",component:d("/docs/features/contentmanager/contentManager-extensions/","94c"),exact:!0,sidebar:"docs"},{path:"/docs/features/entities/",component:d("/docs/features/entities/","b2f"),exact:!0,sidebar:"docs"},{path:"/docs/features/fonts/bitmapfont/",component:d("/docs/features/fonts/bitmapfont/","556"),exact:!0,sidebar:"docs"},{path:"/docs/features/input/inputlistener/",component:d("/docs/features/input/inputlistener/","4c3"),exact:!0,sidebar:"docs"},{path:"/docs/features/input/keyboardextended/",component:d("/docs/features/input/keyboardextended/","8bf"),exact:!0,sidebar:"docs"},{path:"/docs/features/input/mouseextended/",component:d("/docs/features/input/mouseextended/","88b"),exact:!0,sidebar:"docs"},{path:"/docs/features/object-pooling/",component:d("/docs/features/object-pooling/","ee6"),exact:!0,sidebar:"docs"},{path:"/docs/features/particles/",component:d("/docs/features/particles/","bd6"),exact:!0,sidebar:"docs"},{path:"/docs/features/scene-graphs/",component:d("/docs/features/scene-graphs/","703"),exact:!0,sidebar:"docs"},{path:"/docs/features/screen-management/",component:d("/docs/features/screen-management/","abf"),exact:!0},{path:"/docs/features/serialization/",component:d("/docs/features/serialization/","aba"),exact:!0},{path:"/docs/features/texture-handling/sprite/",component:d("/docs/features/texture-handling/sprite/","105"),exact:!0,sidebar:"docs"},{path:"/docs/features/texture-handling/texture2datlas/",component:d("/docs/features/texture-handling/texture2datlas/","ef8"),exact:!0,sidebar:"docs"},{path:"/docs/features/texture-handling/texture2dregion/",component:d("/docs/features/texture-handling/texture2dregion/","737"),exact:!0,sidebar:"docs"},{path:"/docs/features/tiled/",component:d("/docs/features/tiled/","3a1"),exact:!0},{path:"/docs/features/tweening/",component:d("/docs/features/tweening/","221"),exact:!0},{path:"/docs/features/ui/gum/gum-forms/",component:d("/docs/features/ui/gum/gum-forms/","932"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started/installation-fna/",component:d("/docs/getting-started/installation-fna/","395"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started/installation-kni/",component:d("/docs/getting-started/installation-kni/","e06"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started/installation-monogame/",component:d("/docs/getting-started/installation-monogame/","874"),exact:!0,sidebar:"docs"}]}]}]},{path:"/",component:d("/","2e1"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(545),i=n(4625),s=n(4784),l=n(8193);const u=[n(119),n(6134),n(6294),n(1043)];var c=n(8328),d=n(6347),f=n(2831),p=n(4848);function g(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5260),h=n(4586),b=n(6025),y=n(6342),v=n(1213),w=n(2131),x=n(4090),k=n(2967),S=n(440),E=n(1463);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.A)(),r=(0,w.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.A)(),{pathname:r}=(0,d.zy)();return e+(0,S.applyTrailingSlash)((0,b.Ay)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function A(){const{i18n:{currentLocale:e}}=(0,h.A)(),{metadata:t,image:n}=(0,y.p)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:x.w})]}),n&&(0,p.jsx)(v.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(_,{}),(0,p.jsx)(E.A,{tag:k.Cy,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;var j=n(6125),N=n(6988),P=n(205);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,P.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,f.u)(c.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(O,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(d.qh,{location:t,render:()=>e})})}}const F=I,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,p.jsx)(F,{location:e,children:q})}function Q(){return(0,p.jsx)(V.A,{children:(0,p.jsx)(N.l,{children:(0,p.jsxs)(j.x,{children:[(0,p.jsxs)(g,{children:[(0,p.jsx)(H,{}),(0,p.jsx)(A,{}),(0,p.jsx)(U,{}),(0,p.jsx)(Y,{})]}),(0,p.jsx)(G,{})]})})})}var K=n(4054);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(6921);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,f.u)(c.A,e).flatMap((e=>{return t=e.route.path,Object.entries(K).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),R(e))},re=Object.freeze(ne);function ae(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,p.jsx)(i.I9,{children:t}):(0,p.jsx)(i.Kd,{children:t})}const oe=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(o.vd,{children:(0,p.jsx)(ae,{children:(0,p.jsx)(Q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(oe)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};R(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>f});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"about/introduction","docs":[{"id":"about/contributing","path":"/docs/about/contributing","sidebar":"docs"},{"id":"about/introduction","path":"/docs/about/introduction","sidebar":"docs"},{"id":"about/principles","path":"/docs/about/principles","sidebar":"docs"},{"id":"archived/animations/animations","path":"/docs/archived/animations/"},{"id":"features/2d-animations/animatedsprite/animatedsprite","path":"/docs/features/2d-animations/animatedsprite/","sidebar":"docs"},{"id":"features/2d-animations/spritesheet/spritesheet","path":"/docs/features/2d-animations/spritesheet/","sidebar":"docs"},{"id":"features/camera/camera","path":"/docs/features/camera/","sidebar":"docs"},{"id":"features/camera/orthographic-camera/orthographiccamera","path":"/docs/features/camera/orthographic-camera/","sidebar":"docs"},{"id":"features/collections/collections","path":"/docs/features/collections/","sidebar":"docs"},{"id":"features/collision/collision","path":"/docs/features/collision/","sidebar":"docs"},{"id":"features/contentmanager/contentManager-extensions","path":"/docs/features/contentmanager/contentManager-extensions","sidebar":"docs"},{"id":"features/entities/entities","path":"/docs/features/entities/","sidebar":"docs"},{"id":"features/fonts/bitmapfont/bitmapfont","path":"/docs/features/fonts/bitmapfont/","sidebar":"docs"},{"id":"features/input/inputlistener/inputlistener","path":"/docs/features/input/inputlistener/","sidebar":"docs"},{"id":"features/input/keyboardextended/keyboardextended","path":"/docs/features/input/keyboardextended/","sidebar":"docs"},{"id":"features/input/mouseextended/mouseextended","path":"/docs/features/input/mouseextended/","sidebar":"docs"},{"id":"features/object-pooling/object-pooling","path":"/docs/features/object-pooling/","sidebar":"docs"},{"id":"features/particles/particles","path":"/docs/features/particles/","sidebar":"docs"},{"id":"features/scene-graphs/scene-graphs","path":"/docs/features/scene-graphs/","sidebar":"docs"},{"id":"features/screen-management/screen-management","path":"/docs/features/screen-management/"},{"id":"features/serialization/serialization","path":"/docs/features/serialization/"},{"id":"features/texture-handling/sprite/sprite","path":"/docs/features/texture-handling/sprite/","sidebar":"docs"},{"id":"features/texture-handling/texture2datlas/texture2datlas","path":"/docs/features/texture-handling/texture2datlas/","sidebar":"docs"},{"id":"features/texture-handling/texture2dregion/texture2dregion","path":"/docs/features/texture-handling/texture2dregion/","sidebar":"docs"},{"id":"features/tiled/tiled","path":"/docs/features/tiled/"},{"id":"features/tweening/tweening","path":"/docs/features/tweening/"},{"id":"features/ui/gum/gum-forms/gum-forms","path":"/docs/features/ui/gum/gum-forms/","sidebar":"docs"},{"id":"getting-started/installation-fna","path":"/docs/getting-started/installation-fna","sidebar":"docs"},{"id":"getting-started/installation-kni","path":"/docs/getting-started/installation-kni","sidebar":"docs"},{"id":"getting-started/installation-monogame","path":"/docs/getting-started/installation-monogame","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/about/introduction","label":"about/introduction"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(2654);const l=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"}}}');var u=n(4848);const c={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(c);function f(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(6540),a=n(8193),o=n(5260),i=n(440),s=n(781),l=n(3102),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function f(e){let{children:t}=e;return(0,u.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function p(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(f,{children:(0,u.jsxs)(m,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(s.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const g=e=>(0,u.jsx)(p,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??g)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),a=n(4625),o=n(440),i=n(4586),s=n(6654),l=n(8193),u=n(3427),c=n(6025),d=n(4848);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:w,baseUrl:x}=v,k=v.future.experimental_router,{withBaseUrl:S}=(0,c.hH)(),E=(0,u.A)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=f||p;const A=(0,s.A)(C),T=C?.replace("pathname://","");let j=void 0!==T?(N=T,b&&(e=>e.startsWith("/"))(N)?S(N):N):void 0;var N;"hash"===k&&j?.startsWith("./")&&(j=j?.slice(1)),j&&A&&(j=(0,o.applyTrailingSlash)(j,{trailingSlash:w,baseUrl:x}));const P=(0,r.useRef)(!1),L=n?a.k2:a.N_,O=l.A.canUseIntersectionObserver,R=(0,r.useRef)(),I=()=>{P.current||null==j||(window.docusaurus.preload(j),P.current=!0)};(0,r.useEffect)((()=>(!O&&A&&null!=j&&window.docusaurus.prefetch(j),()=>{O&&R.current&&R.current.disconnect()})),[R,j,O,A]);const F=j?.startsWith("#")??!1,M=!y.target||"_self"===y.target,D=!j||!A||!M;return h||!F&&D||E.collectLink(j),y.id&&E.collectAnchor(y.id),D?(0,d.jsx)("a",{ref:_,href:j,...C&&!A&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(L,{...y,onMouseEnter:I,onTouchStart:I,innerRef:e=>{_.current=e,O&&e&&A&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=j&&window.docusaurus.prefetch(j))}))})),R.current.observe(e))},to:j,...n&&{isActive:m,activeClassName:g}})}const p=r.forwardRef(f)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>l});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:e}=(0,a.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,o.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6803:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(3102);function o(){const e=r.useContext(a.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>m,vT:()=>f,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>g,jh:()=>p});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function g(e){const t=d(e);return s(t)}function m(e){const t=d(e),{pathname:n}=(0,r.zy)();return l(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},6134:(e,t,n)=>{"use strict";var r=n(1765),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(2055)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),a=n(1312),o=n(6342),i=n(8774),s=n(3427);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:f}}=(0,o.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const p=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",f?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>pt});var r=n(6540),a=n(4164),o=n(7489),i=n(1213),s=n(6347),l=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=p();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),b=n(4090);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(m,{className:y.skipToContent})}var w=n(6342),x=n(5041);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,x.M)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:A.announcementBarPlaceholder}),(0,c.jsx)(C,{className:A.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var j=n(2069),N=n(3104);var P=n(9532),L=n(5600);const O=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,L.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,P.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(O.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(O);if(!e)throw new P.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,L.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=F();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(5293),z=n(2303);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,z.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.A)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,D.G)();return r?null:(0,c.jsx)(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var q=n(3465);function Y(){return(0,c.jsx)(q.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,j.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Y,{}),(0,c.jsx)(G,{className:"margin-right--md"}),(0,c.jsx)(Q,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...u}=e;const d=(0,X.Ay)(r),f=(0,X.Ay)(t),p=(0,X.Ay)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.A)(a),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,g&&(0,c.jsx)(te.A,{...s&&{width:12,height:12}})]})};return a?(0,c.jsx)(Z.A,{href:l?p:a,...u,...m}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...u,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),se=n(9169),le=n(4586);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,c.jsxs)("div",{ref:l,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.A)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:s.children??s.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[u,d,g]),(0,c.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.A)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),p()},children:l.children??l.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,c.jsx)(r,{...n})}var ge=n(2131);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var be=n(418);const ye={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.A)(n,ye.navbarSearchContainer),children:t})}var we=n(4070),xe=n(4142);var ke=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,le.A)(),f=(0,ge.o)(),{search:p,hash:g}=(0,s.zy)(),m=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(pe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(me,{className:he}),h]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(be.A,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,xe.QB)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,xe.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,xe.Vd)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,s.zy)(),f=(0,we.zK)(n),p=(0,we.jh)(n),{savePreferredVersionName:g}=(0,ke.g1)(n),m=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...o],h=(0,xe.Vd)(n)[0],b=t&&m.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,y=t&&m.length>1?void 0:Se(h).path;return m.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,c.jsx)(pe,{...i,mobile:t,label:b,to:y,items:m,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function Ce(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=F();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(M,{header:(0,c.jsx)(K,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pe(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Le(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,j.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Ne.navbarHideable,!d&&Ne.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Pe,{onClick:i.toggle}),(0,c.jsx)(je,{})]})}var Oe=n(440);const Re={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Fe(e){let{error:t}=e;const n=(0,Oe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Re.errorBoundaryError,children:n})}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const De="right";function ze(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,j.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Me,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(_e,{...e})},t)))})}function He(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ve(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??De)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(He,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(Y,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(G,{className:$e.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(be.A,{})})]})})}function We(){return(0,c.jsx)(Le,{children:(0,c.jsx)(Ve,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Ay)(n),l=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function qe(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ge,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(qe,{item:e},t)))})]})}function Qe(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Ye,{column:e},t)))})}function Ke(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ge,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Ke,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Qe,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(ot,{style:a,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(at,{copyright:t})})}const st=r.memo(it),lt=(0,P.fM)([D.a,x.o,N.Tv,ke.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(L.y_,{children:(0,c.jsx)(j.e,{children:(0,c.jsx)(R,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(lt,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Ie,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Fe,{error:t})})]})})})}const ft={mainWrapper:"mainWrapper_z2l0"};function pt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:s,description:l}),(0,c.jsx)(v,{}),(0,c.jsx)(T,{}),(0,c.jsx)(We,{}),(0,c.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,ft.mainWrapper,r),children:(0,c.jsx)(o.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(st,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),s=n(1122),l=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Ay)(t.src),dark:(0,a.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...f}=e,p=(0,a.Ay)(s?.href||"/"),g=n?"":t,m=s?.alt??g;return(0,l.jsxs)(r.A,{to:p,...f,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(u,{logo:s,alt:m,imageClassName:c}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(5260),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,o.A)(),{colorMode:c}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>b,u:()=>u});var r=n(6540),a=n(8193),o=n(205),i=n(3109),s=n(4848);const l="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.A.canUseDOM)return e?c:d}function m(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:c,style:u?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(c.current,n),i?.(n))},className:l,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,u]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&u(t)}),[a,t]),a?(0,s.jsx)(m,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?h:m;return(0,s.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>m,o:()=>g});var r=n(6540),a=n(2303),o=n(679),i=n(9532),s=n(6342),l=n(4848);const u=(0,o.Wf)("docusaurus.announcement.dismiss"),c=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),f=e=>u.set(String(e)),p=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(p.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>b,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(679),s=n(6342),l=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,g=e=>a.A.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{d.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,l.jsx)(u.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>b,g1:()=>v});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),s=n(4142),l=n(9532),u=n(679),c=n(4848);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,u.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return(0,c.jsx)(g.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.C5?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function y(){const e=(0,r.useContext)(g);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>u});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(s);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},2069:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(6540),a=n(5600),o=n(4581),i=n(7485),s=n(6342),l=n(9532),u=n(4848);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,s.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[l,u]=(0,r.useState)(!1);(0,i.$Z)((()=>{if(l)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:l})),[e,n,c,l])}function f(e){let{children:t}=e;const n=d();return(0,u.jsx)(c.Provider,{value:n,children:t})}function p(){const e=r.useContext(c);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>l,y_:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},4142:(e,t,n)=>{"use strict";n.d(t,{B5:()=>E,C5:()=>f,Nr:()=>p,OF:()=>w,QB:()=>S,Vd:()=>x,Y:()=>y,fW:()=>k,w8:()=>h});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),s=n(5597),l=n(2252),u=n(6588),c=n(1682),d=n(9169);const f=!!i.Gy;function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}const g=(e,t)=>void 0!==e&&(0,d.ys)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||m(e.items,t))}function b(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||h(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,s.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,c.s)([t,n,a].filter(Boolean))),[t,n,a])}function k(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.s)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,l.r)(),i=t.routes,s=i.find((e=>(0,a.B6)(n.pathname,e)));if(!s)return null;const u=s.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.v)(i),sidebarName:u,sidebarItems:c}}},7485:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>i,aZ:()=>l});var r=n(6540),a=n(6347),o=n(9532);function i(e){!function(e){const t=(0,a.W6)(),n=(0,o._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,a.W6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function l(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},1682:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{X:()=>r,s:()=>a})},1213:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>c,Jx:()=>p});var r=n(6540),a=n(4164),o=n(5260),i=n(6803),s=n(6025),l=n(4586);var u=n(4848);function c(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const c=function(e){const{siteConfig:t}=(0,l.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.hH)(),f=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.A,{children:[t&&(0,u.jsx)("title",{children:c}),t&&(0,u.jsx)("meta",{property:"og:title",content:c}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,a.A)(i,t);return(0,u.jsxs)(d.Provider,{value:s,children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("html",{className:s})}),n]})}function p(e){let{children:t}=e;const n=(0,i.A)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>c});var r=n(6540),a=n(205),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>c,a_:()=>g,gk:()=>m});var r=n(6540),a=n(8193),o=n(2303),i=n(205),s=n(9532),l=n(4848);const u=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(u.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(u);if(null==e)throw new s.dV("ScrollControllerProvider");return e}const f=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(f()),o=(0,s._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=f();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function g(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.A)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function m(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(4586);const r="default";function a(e,t){return`docs-${e}-${t}`}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c,Dv:()=>d});var r=n(6540);const a=JSON.parse('{"N":"localStorage","M":""}'),o=a.N;function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function s(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${a.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const r=s(t?.persistence);return null===r?u:{get:()=>{try{return r.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=r.getItem(n);r.setItem(n,e),i({key:n,oldValue:t,newValue:e,storage:r})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=r.getItem(n);r.removeItem(n),i({key:n,oldValue:e,newValue:null,storage:r})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===r&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,a.zy)(),u=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),c=s===i?e:e.replace(`/${s}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(2566);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?a(l):o(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(2566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>p,sC:()=>T,AO:()=>f});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(1561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,m(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=p(n);a&&a!==g&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,s],c=0;(l=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(u,i(e,c,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5302:(e,t,n)=>{var r=n(4634);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(s+=e.slice(i,p),i=p+d.length,f)s+=f[1];else{var g=e[i],m=n[2],h=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var x=null!=m&&null!=g&&g!==m,k="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||c,_=b||y;r.push({name:h||o++,prefix:m||"",delimiter:E,optional:S,repeat:k,partial:x,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+l(E)+"]+?"})}}return i{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",s="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(o),c=RegExp(l(a+" "+o+" "+i+" "+s)),d=l(o+" "+i+" "+s),f=l(a+" "+o+" "+s),p=r(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),g=r(/\((?:[^()]|<>)*\)/.source,2),m=/@?\b[A-Za-z_]\w*\b/.source,h=t(/<<0>>(?:\s*<<1>>)?/.source,[m,p]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,h]),y=/\[\s*(?:,\s*)*\]/.source,v=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,y]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,g,y]),x=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),k=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[x,b,y]),S={keyword:c,punctuation:/[<>()?,.:[\]]/},E=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,_=/"(?:\\.|[^\\"\r\n])*"/.source,C=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[_]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[m,k]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[m]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,h]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[m]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[v]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[k,f,m]),inside:S}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[m]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[m]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[g]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[k,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[k]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[m,p]),inside:{function:n(/^<<0>>/.source,[m]),generic:{pattern:RegExp(p),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,h,m,k,c.source,g,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[h,g]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(k),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var A=_+"|"+E,T=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[A]),j=r(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[T]),2),N=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,P=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,j]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[N,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[N]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[j]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var L=/:[^}\r\n]+/.source,O=r(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[T]),2),R=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,L]),I=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[A]),2),F=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[I,L]);function M(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,L]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[R]),lookbehind:!0,greedy:!0,inside:M(R,O)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[F]),lookbehind:!0,greedy:!0,inside:M(F,I)}],char:{pattern:RegExp(E),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=o.length);l++){var u=s[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),g=f.indexOf(p);if(g>-1){++a;var m=f.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(g+p.length),y=[];m&&y.push.apply(y,i([m])),y.push(h),b&&y.push.apply(y,i([b])),"string"==typeof u?s.splice.apply(s,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return s}(n.tokens)}}}})}(Prism)},2055:(e,t,n)=>{var r={"./prism-csharp":5651};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=2055},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n