diff --git a/mirror-docs/docusaurus.config.js b/mirror-docs/docusaurus.config.js index 89f85a4a..b39c6fc7 100644 --- a/mirror-docs/docusaurus.config.js +++ b/mirror-docs/docusaurus.config.js @@ -1,47 +1,59 @@ // @ts-check // Note: type annotations allow type checking and IDEs autocompletion -const themes = require('prism-react-renderer').themes; +const themes = require("prism-react-renderer").themes; const lightCodeTheme = themes.github; const darkCodeTheme = themes.dracula; const darkTheme = themes.vsDark; /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'The Mirror', - tagline: 'Open-Source Roblox & UEFN Alternative', - url: 'https://docs.themirror.space', - baseUrl: '/', - onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', - favicon: 'img/favicon.ico', + title: "The Mirror", + tagline: "Open-Source Roblox & UEFN Alternative", + url: "https://docs.themirror.space", + baseUrl: "/", + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "warn", + favicon: "img/favicon.ico", // GitHub pages deployment config. // If you aren't using GitHub pages, you don't need these. - organizationName: 'the-mirror-gdp', // Usually your GitHub org/user name. - projectName: 'The Mirror: Docs', // Usually your repo name. + organizationName: "the-mirror-gdp", // Usually your GitHub org/user name. + projectName: "The Mirror: Docs", // Usually your repo name. // Even if you don't use internalization, you can use this field to set useful // metadata like html lang. For example, if your site is Chinese, you may want // to replace "en" with "zh-Hans". i18n: { - defaultLocale: 'en', - locales: ['en'], + defaultLocale: "en", + locales: ["en", "ru"], + localeConfigs: { + en: { + label: "English", + direction: "ltr", + htmlLang: "en-US", + }, + ru: { + label: "Русский", + direction: "ltr", + htmlLang: "ru-RU", + }, + }, }, presets: [ [ - 'classic', + "classic", /** @type {import('@docusaurus/preset-classic').Options} */ ({ docs: { - sidebarPath: require.resolve('./sidebars.js'), + sidebarPath: require.resolve("./sidebars.js"), }, blog: { showReadingTime: true, }, theme: { - customCss: require.resolve('./src/css/custom.css'), + customCss: require.resolve("./src/css/custom.css"), }, }), ], @@ -53,274 +65,317 @@ const config = { navbar: { // title: 'The Mirror', logo: { - alt: 'The Mirror Logo', - src: 'img/white_transparent_logo.png', + alt: "The Mirror Logo", + src: "img/white_transparent_logo.png", }, items: [ { - type: 'doc', - docId: 'get-started', - position: 'left', - label: 'Docs: App', + type: "doc", + docId: "get-started", + position: "left", + label: "Docs: App", }, { - type: 'doc', - docId: 'open-source-code/get-started', - position: 'left', - label: 'Docs: Open-Source Code', + type: "doc", + docId: "open-source-code/get-started", + position: "left", + label: "Docs: Open-Source Code", }, { - href: 'https://github.com/the-mirror-gdp/the-mirror', - position: 'left', - label: 'Github Monorepo' + href: "https://github.com/the-mirror-gdp/the-mirror", + position: "left", + label: "Github Monorepo", }, { - href: 'https://in.themirror.space', - position: 'left', - label: 'In The Mirror' + href: "https://in.themirror.space", + position: "left", + label: "In The Mirror", // className: 'header-github-link', // 'aria-label': 'GitHub repository', - } + }, // { to: '/blog', label: 'Blog', position: 'left' }, + { + type: "localeDropdown", + position: "left", + }, ], }, metadata: [ - { name: 'title', content: 'Docs | The Mirror' }, - { name: 'og:title', content: 'Docs | The Mirror' }, - { name: 'og:url', content: 'https://docs.themirror.space/' }, - { name: 'og:image', content: 'https://docs.themirror.space/img/DocsSite.jpg' }, - { name: 'description', content: 'Game Development Platform: The Ultimate Sandbox' }, - { name: 'og:description', content: 'Game Development Platform: The Ultimate Sandbox' }, - { name: 'twitter:title', content: 'Docs | The Mirror' }, - { name: 'twitter:description', content: 'Game Development Platform: The Ultimate Sandbox' }, - { name: 'twitter:image', content: 'https://docs.themirror.space/img/DocsSite.jpg' }, - { name: 'twitter:card', content: 'https://docs.themirror.space/img/DocsSite.jpg' }, + { name: "title", content: "Docs | The Mirror" }, + { name: "og:title", content: "Docs | The Mirror" }, + { name: "og:url", content: "https://docs.themirror.space/" }, + { + name: "og:image", + content: "https://docs.themirror.space/img/DocsSite.jpg", + }, + { + name: "description", + content: "Game Development Platform: The Ultimate Sandbox", + }, + { + name: "og:description", + content: "Game Development Platform: The Ultimate Sandbox", + }, + { name: "twitter:title", content: "Docs | The Mirror" }, + { + name: "twitter:description", + content: "Game Development Platform: The Ultimate Sandbox", + }, + { + name: "twitter:image", + content: "https://docs.themirror.space/img/DocsSite.jpg", + }, + { + name: "twitter:card", + content: "https://docs.themirror.space/img/DocsSite.jpg", + }, ], footer: { - style: 'dark', + style: "dark", links: [ { - title: 'Social', + title: "Social", items: [ { - label: 'Discord', - href: 'https://themirror.space/discord', + label: "Discord", + href: "https://themirror.space/discord", }, { - label: 'Reddit', - href: 'https://reddit.com/r/themirrorspace', + label: "Reddit", + href: "https://reddit.com/r/themirrorspace", }, { - label: 'Twitter', - href: 'https://twitter.com/themirrorgdp', + label: "Twitter", + href: "https://twitter.com/themirrorgdp", }, { - label: 'Instagram', - href: 'https://instagram.com/themirrorgdp', + label: "Instagram", + href: "https://instagram.com/themirrorgdp", }, { - label: 'LinkedIn', - href: 'https://www.linkedin.com/company/the-mirror-megaverse', + label: "LinkedIn", + href: "https://www.linkedin.com/company/the-mirror-megaverse", }, ], }, { - title: 'Download', + title: "Download", items: [ - { - label: 'Itch.io: The Mirror', - href: 'https://themirrorgdp.itch.io/the-mirror', + label: "Itch.io: The Mirror", + href: "https://themirrorgdp.itch.io/the-mirror", }, ], }, { - title: 'About', + title: "About", items: [ - { - label: 'Home', - href: 'https://themirror.space', + label: "Home", + href: "https://themirror.space", }, { - label: 'Blog', - href: 'https://themirror.space/blog', + label: "Blog", + href: "https://themirror.space/blog", }, { - label: 'Features', - href: 'https://themirror.space/features', + label: "Features", + href: "https://themirror.space/features", }, { - label: 'Open-Source Licenses', - href: 'https://www.notion.so/the-mirror/Open-Source-License-Credits-Public-8a3e0d75682b48d7bfaa3518f4b5caaf', + label: "Open-Source Licenses", + href: "https://www.notion.so/the-mirror/Open-Source-License-Credits-Public-8a3e0d75682b48d7bfaa3518f4b5caaf", }, ], }, - ], copyright: `Copyright © ${new Date().getFullYear()} The Mirror Megaverse, Inc. | We ❤️ Open-Source: Built with Docusaurus`, }, colorMode: { - defaultMode: 'dark', + defaultMode: "dark", disableSwitch: true, - respectPrefersColorScheme: false + respectPrefersColorScheme: false, }, announcementBar: { - id: 'alpha_notice', + id: "alpha_notice", content: 'Star on Github! The Mirror is now open-source, MIT-licensed.', - backgroundColor: '#00CFFF', - textColor: '#06011F', + backgroundColor: "#00CFFF", + textColor: "#06011F", isCloseable: true, }, prism: { theme: lightCodeTheme, darkTheme: { plain: { - color: '#D4D4D4', - backgroundColor: '#1F1C36', + color: "#D4D4D4", + backgroundColor: "#1F1C36", }, styles: [ { types: ["prolog"], style: { - color: "rgb(0, 0, 128)" - } - }, { + color: "rgb(0, 0, 128)", + }, + }, + { types: ["comment"], style: { - color: "rgb(106, 153, 85)" - } - }, { - types: ["builtin", "changed", "keyword", "interpolation-punctuation"], + color: "rgb(106, 153, 85)", + }, + }, + { + types: [ + "builtin", + "changed", + "keyword", + "interpolation-punctuation", + ], style: { - color: "rgb(86, 156, 214)" - } - }, { + color: "rgb(86, 156, 214)", + }, + }, + { types: ["number", "inserted"], style: { - color: "rgb(181, 206, 168)" - } - }, { + color: "rgb(181, 206, 168)", + }, + }, + { types: ["constant"], style: { - color: "rgb(100, 102, 149)" - } - }, { + color: "rgb(100, 102, 149)", + }, + }, + { types: ["attr-name", "variable"], style: { - color: "rgb(156, 220, 254)" - } - }, { - types: ["deleted", "string", "attr-value", "template-punctuation"], + color: "rgb(156, 220, 254)", + }, + }, + { + types: [ + "deleted", + "string", + "attr-value", + "template-punctuation", + ], style: { - color: "rgb(206, 145, 120)" - } - }, { + color: "rgb(206, 145, 120)", + }, + }, + { types: ["selector"], style: { - color: "rgb(215, 186, 125)" - } - }, { + color: "rgb(215, 186, 125)", + }, + }, + { // Fix tag color types: ["tag"], style: { - color: "rgb(78, 201, 176)" - } - }, { + color: "rgb(78, 201, 176)", + }, + }, + { // Fix tag color for HTML types: ["tag"], languages: ["markup"], style: { - color: "rgb(86, 156, 214)" - } - }, { + color: "rgb(86, 156, 214)", + }, + }, + { types: ["punctuation", "operator"], style: { - color: "rgb(212, 212, 212)" - } - }, { + color: "rgb(212, 212, 212)", + }, + }, + { // Fix punctuation color for HTML types: ["punctuation"], languages: ["markup"], style: { - color: "#808080" - } - }, { + color: "#808080", + }, + }, + { types: ["function"], style: { - color: "rgb(37, 107, 251)" - } - }, { + color: "rgb(37, 107, 251)", + }, + }, + { types: ["class-name"], style: { - color: "rgb(78, 201, 176)" - } - }, { + color: "rgb(78, 201, 176)", + }, + }, + { types: ["char"], style: { - color: "rgb(209, 105, 105)" - } + color: "rgb(209, 105, 105)", + }, }, { - types: ['title'], + types: ["title"], style: { - color: '#569CD6', - fontWeight: 'bold', + color: "#569CD6", + fontWeight: "bold", }, }, { - types: ['property', 'parameter'], + types: ["property", "parameter"], style: { - color: '#9CDCFE', + color: "#9CDCFE", }, }, { - types: ['script'], + types: ["script"], style: { - color: '#D4D4D4', + color: "#D4D4D4", }, }, { - types: ['boolean', 'arrow', 'atrule', 'tag'], + types: ["boolean", "arrow", "atrule", "tag"], style: { - color: '#569CD6', + color: "#569CD6", }, }, { - types: ['number', 'color', 'unit'], + types: ["number", "color", "unit"], style: { - color: '#B5CEA8', + color: "#B5CEA8", }, }, { - types: ['font-matter'], + types: ["font-matter"], style: { - color: '#CE9178', + color: "#CE9178", }, }, { - types: ['keyword', 'rule'], + types: ["keyword", "rule"], style: { - color: '#C586C0', + color: "#C586C0", }, }, { - types: ['regex'], + types: ["regex"], style: { - color: '#D16969', + color: "#D16969", }, }, { - types: ['maybe-class-name'], + types: ["maybe-class-name"], style: { - color: '#4EC9B0', + color: "#4EC9B0", }, }, { - types: ['constant'], + types: ["constant"], style: { - color: '#4FC1FF', + color: "#4FC1FF", }, }, ], @@ -332,8 +387,8 @@ const config = { [ require.resolve("@cmfcmf/docusaurus-search-local"), { - style: undefined - } + style: undefined, + }, ], ], }; diff --git a/mirror-docs/i18n/ru/code.json b/mirror-docs/i18n/ru/code.json new file mode 100644 index 00000000..c6711225 --- /dev/null +++ b/mirror-docs/i18n/ru/code.json @@ -0,0 +1,357 @@ +{ + "homepage.title1": { + "message": "Свобода владения", + "description": "The main title on the homepage" + }, + "homepage.title2": { + "message": "Альтернатива Roblox и UEFN с открытым исходным кодом", + "description": "The subtitle on the homepage" + }, + "homepage.appDocsButton": { + "message": "Документация пользователя", + "description": "Button label for app docs" + }, + "homepage.openSourceDocsButton": { + "message": "Документация разработчика", + "description": "Button label for open-source docs" + }, + "homepage.layoutTitle": { + "message": "Документация", + "description": "The title tag for the homepage layout" + }, + "homepage.layoutDescription": { + "message": "Платформа для разработки игр: Идеальная песочница", + "description": "The description tag for the homepage layout" + }, + "Physics Sandbox": { + "message": "Физическая песочница", + "description": "The title for the Physics Sandbox feature" + }, + "feature.physics-sandbox.description": { + "message": "Создать многопользовательскую игру сложно! The Mirror делает это легко. Вы — создатель, разработчик, дизайнер и архитектор вашего Mirror Space.", + "description": "Description for the Physics Sandbox feature" + }, + "Co-Build with Friends": { + "message": "Создавайте совместно с друзьями", + "description": "The title for the Co-Build with Friends feature" + }, + "feature.co-build-with-friends.description": { + "message": "Благодаря Godot, The Mirror предлагает разработку игр в реальном времени с бесшовными переходами между созданием и игрой, объединенными воедино с готовыми сетевыми возможностями, платежами, аутентификацией, публикацией и многим другим.", + "description": "Description for the Co-Build with Friends feature" + }, + "Monetize": { + "message": "Монетизация", + "description": "The title for the Monetize feature" + }, + "feature.monetize.description": { + "message": "The Mirror — это ваша платформа для заработка на вашем увлечении разработкой игр и 3D-моделированием. Монетизируйте совместимые творения одним нажатием кнопки.", + "description": "Description for the Monetize feature" + }, + "theme.ErrorPageContent.title": { + "message": "На странице произошёл сбой.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Прокрутка к началу", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Архив", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Архив", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Навигация по странице списка блогов", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Следующие записи", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Предыдущие записи", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Навигация по странице поста блога", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Следующий пост", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Предыдущий пост", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} запись|{count} записи|{count} записей", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} с тегом \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Посмотреть все теги", + "description": "The label of the link targeting the tag list page" + }, + "theme.colorToggle.ariaLabel": { + "message": "Переключение между темным и светлым режимом (сейчас используется {mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "Тёмный режим", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "Светлый режим", + "description": "The name for the light color mode" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "Навигационная цепочка текущей страницы", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.docs.DocCard.categoryDescription.plurals": { + "message": "{count} элемент|{count} элемента|{count} элементов", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "Страница документа", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "Предыдущая страница", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "Следующая страница", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "Одна страница|{count} страницы|{count} страниц", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged} с тегом \"{tagName}\"", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "Версия: {versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "Это документация для будущей версии {siteTitle} {versionLabel}.", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "Это документация {siteTitle} для версии {versionLabel}, которая уже не поддерживается.", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "Актуальная документация находится на странице {latestVersionLink} ({versionLabel}).", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "последней версии", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "Отредактировать эту страницу", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "Прямая ссылка на {heading}", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": " {date}", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " от {user}", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "Последнее обновление{atDate}{byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "Версии", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.NotFound.title": { + "message": "Страница не найдена", + "description": "The title of the 404 page" + }, + "theme.tags.tagsListLabel": { + "message": "Теги:", + "description": "The label alongside a tag list" + }, + "theme.admonition.caution": { + "message": "предупреждение", + "description": "The default label used for the Caution admonition (:::caution)" + }, + "theme.admonition.danger": { + "message": "осторожно", + "description": "The default label used for the Danger admonition (:::danger)" + }, + "theme.admonition.info": { + "message": "к сведению", + "description": "The default label used for the Info admonition (:::info)" + }, + "theme.admonition.note": { + "message": "примечание", + "description": "The default label used for the Note admonition (:::note)" + }, + "theme.admonition.tip": { + "message": "подсказка", + "description": "The default label used for the Tip admonition (:::tip)" + }, + "theme.admonition.warning": { + "message": "warning", + "description": "The default label used for the Warning admonition (:::warning)" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "Закрыть", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "Навигация по последним постам в блоге", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.CodeBlock.copied": { + "message": "Скопировано", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "Скопировать в буфер обмена", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "Скопировать", + "description": "The copy button label on code blocks" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "Переключить перенос по строкам", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.DocSidebarItem.expandCategoryAriaLabel": { + "message": "Expand sidebar category '{label}'", + "description": "The ARIA label to expand the sidebar category" + }, + "theme.DocSidebarItem.collapseCategoryAriaLabel": { + "message": "Collapse sidebar category '{label}'", + "description": "The ARIA label to collapse the sidebar category" + }, + "theme.NavBar.navAriaLabel": { + "message": "Main", + "description": "The ARIA label for the main navigation" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "Языки", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.NotFound.p1": { + "message": "К сожалению, мы не смогли найти запрашиваемую вами страницу.", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "Пожалуйста, обратитесь к владельцу сайта, с которого вы перешли на эту ссылку, чтобы сообщить ему, что ссылка не работает.", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "Содержание этой страницы", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.blog.post.readMore": { + "message": "Читать дальше", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.readMoreLabel": { + "message": "Подробнее о {title}", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readingTime.plurals": { + "message": "{readingTime} мин. чтения|{readingTime} мин. чтения|{readingTime} мин. чтения", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.breadcrumbs.home": { + "message": "Главная страница", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "Свернуть сайдбар", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "Свернуть сайдбар", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.navAriaLabel": { + "message": "Docs sidebar", + "description": "The ARIA label for the sidebar navigation" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "Закрыть панель навигации", + "description": "The ARIA label for close button of mobile sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← Перейти к главному меню", + "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)" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "Переключить навигационную панель", + "description": "The ARIA label for hamburger menu button of mobile navigation" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "Развернуть сайдбар", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "Развернуть сайдбар", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "cmfcmf/d-s-l.searchBar.placeholder": { + "message": "Поиск...", + "description": "Placeholder shown in the searchbar" + }, + "cmfcmf/d-s-l.searchBar.clearButtonTitle": { + "message": "Очистить", + "description": "Title of the button to clear the current search input" + }, + "cmfcmf/d-s-l.searchBar.detachedCancelButtonText": { + "message": "Отменить", + "description": "Text of the button to close the detached search window" + }, + "cmfcmf/d-s-l.searchBar.submitButtonTitle": { + "message": "Поиск", + "description": "Title of the button to submit a new search" + }, + "cmfcmf/d-s-l.searchBar.noResults": { + "message": "Результатов не найдено.", + "description": "message shown if no results are found" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "Попробуйте ещё раз", + "description": "The label of the button to try again rendering when the React error boundary captures an error" + }, + "theme.common.skipToMainContent": { + "message": "Перейти к основному содержимому", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsPageTitle": { + "message": "Теги", + "description": "The title of the tag list page" + }, + "theme.unlistedContent.title": { + "message": "Unlisted page", + "description": "The unlisted content banner title" + }, + "theme.unlistedContent.message": { + "message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.", + "description": "The unlisted content banner message" + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-blog/options.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-blog/options.json new file mode 100644 index 00000000..9239ff70 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "Blog", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "Blog", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "Recent posts", + "description": "The label for the left sidebar" + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current.json new file mode 100644 index 00000000..5309c10f --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,70 @@ +{ + "version.label": { + "message": "Next", + "description": "The label for version current" + }, + "sidebar.tutorialSidebar.category.Build": { + "message": "Build", + "description": "The label for category Build in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Build.link.generated-index.description": { + "message": "There are 2 main modes in The Mirror: Build and Play. Build Mode has the power of a full-blown game engine for whatever you can imagine, developed in real-time with your fellow builders.", + "description": "The generated-index page description for category Build in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Scripting": { + "message": "Scripting", + "description": "The label for category Scripting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Scripting.link.generated-index.description": { + "message": "Bring your games to life with The Mirror's high-level visual scripting. Coding can be daunting, which is why The Mirror provides no-code visual scripting out-of-the-box to make it easy for people of any skill level to build in The Mirror. Visual scripting is still programming, but high-level, and without needing to write code as text. Full support for GDScript is also available if you prefer writing text-based code.", + "description": "The generated-index page description for category Scripting in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Physics": { + "message": "Physics", + "description": "The label for category Physics in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Physics.link.generated-index.description": { + "message": "The Mirror includes Jolt physics, an advanced physics engine. Everything is exposed with a high-level API and is networked out of the box.", + "description": "The generated-index page description for category Physics in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Play": { + "message": "Play", + "description": "The label for category Play in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Play.link.generated-index.description": { + "message": "There are 2 main modes in The Mirror: Build and Play. Play Mode is where your published games take flight and can be played by anyone in the world.", + "description": "The generated-index page description for category Play in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Users": { + "message": "Users", + "description": "The label for category Users in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Users.link.generated-index.description": { + "message": "Showcase your Mirror Image and interact with other people in The Mirror.", + "description": "The generated-index page description for category Users in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monetize": { + "message": "Monetize", + "description": "The label for category Monetize in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Monetize.link.generated-index.description": { + "message": "Easily monetize your game with in-Space transactions, buy/sell assets, perks, power-ups, levels, quests, items, skins, and much more", + "description": "The generated-index page description for category Monetize in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.REST API": { + "message": "REST API", + "description": "The label for category REST API in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.REST API.link.generated-index.description": { + "message": "The Mirror exposes a REST API to query Spaces, Objects, Assets, and more.", + "description": "The generated-index page description for category REST API in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Open-Source Code": { + "message": "Open-Source Code", + "description": "The label for category Open-Source Code in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Open-Source Code.link.generated-index.description": { + "message": "Documentation for The Mirror's open-source monorepo: https://github.com/the-mirror-gdp/the-mirror", + "description": "The generated-index page description for category Open-Source Code in sidebar tutorialSidebar" + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/10_publish.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/10_publish.jpeg new file mode 100644 index 00000000..c1b936a4 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/10_publish.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/1_co_build_in_real_time.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/1_co_build_in_real_time.jpeg new file mode 100644 index 00000000..5d29f053 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/1_co_build_in_real_time.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2022-06-18-14-54-39.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2022-06-18-14-54-39.jpeg new file mode 100644 index 00000000..42063514 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2022-06-18-14-54-39.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2022-06-18-14-55-13.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2022-06-18-14-55-13.jpeg new file mode 100644 index 00000000..cc87213b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2022-06-18-14-55-13.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2023-02-23-18-58-33.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2023-02-23-18-58-33.jpeg new file mode 100644 index 00000000..432a3bac Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2023-02-23-18-58-33.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2023-02-23-19-00-33.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2023-02-23-19-00-33.jpeg new file mode 100644 index 00000000..de8175d9 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2023-02-23-19-00-33.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2024-03-16-21-12-48.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2024-03-16-21-12-48.jpg new file mode 100644 index 00000000..ab71773f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2024-03-16-21-12-48.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2_create.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2_create.jpeg new file mode 100644 index 00000000..38c8e78f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/2_create.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/3_build.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/3_build.jpeg new file mode 100644 index 00000000..7cdc28dd Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/3_build.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/4_visual_scripting.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/4_visual_scripting.jpeg new file mode 100644 index 00000000..a0837068 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/4_visual_scripting.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/5_physics_1.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/5_physics_1.jpeg new file mode 100644 index 00000000..3e163955 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/5_physics_1.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/6_physics_2.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/6_physics_2.jpeg new file mode 100644 index 00000000..cde60c83 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/6_physics_2.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/7_right_click_menu.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/7_right_click_menu.jpeg new file mode 100644 index 00000000..d23a2d7c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/7_right_click_menu.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/8_preview_mode.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/8_preview_mode.jpeg new file mode 100644 index 00000000..6f4cb7d6 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/8_preview_mode.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/9_end_preview.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/9_end_preview.jpeg new file mode 100644 index 00000000..ef6c5db7 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/9_end_preview.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Build-UI.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Build-UI.jpg new file mode 100644 index 00000000..53867bb4 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Build-UI.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Create-Space.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Create-Space.jpg new file mode 100644 index 00000000..558be429 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Create-Space.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/End-Preview.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/End-Preview.jpg new file mode 100644 index 00000000..b2331d31 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/End-Preview.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Invite.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Invite.jpg new file mode 100644 index 00000000..e1c6ec59 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Invite.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Itch-Search.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Itch-Search.jpg new file mode 100644 index 00000000..49554ba7 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Itch-Search.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Login.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Login.jpg new file mode 100644 index 00000000..b64ffbde Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Login.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/MainMenu.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/MainMenu.jpg new file mode 100644 index 00000000..c334db8b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/MainMenu.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Physics.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Physics.jpg new file mode 100644 index 00000000..727f2abb Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Physics.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Play.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Play.jpg new file mode 100644 index 00000000..9532ed75 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Play.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Preview-Mode.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Preview-Mode.jpg new file mode 100644 index 00000000..54c4f651 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Preview-Mode.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Publish-Space.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Publish-Space.jpg new file mode 100644 index 00000000..2ff251a3 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Publish-Space.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Right-Click.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Right-Click.jpg new file mode 100644 index 00000000..e6ff5e02 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Right-Click.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Scripting.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Scripting.jpg new file mode 100644 index 00000000..8696e311 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Scripting.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Space-Name.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Space-Name.jpg new file mode 100644 index 00000000..4e1b2c2c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Space-Name.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Template.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Template.jpg new file mode 100644 index 00000000..fe549bd3 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Template.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Welcome.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Welcome.jpg new file mode 100644 index 00000000..b2f4eb9f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/Welcome.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/_category_.json new file mode 100644 index 00000000..7d821340 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Assets", + "position": 3, + "link": { + "type": "generated-index", + "description": "Assets are key building blocks of The Mirror, such as a mesh, image/texture, material, audio, and more. Assets can be imported and instanced as Objects and programmed via scripts." + } +} \ No newline at end of file diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/applandingpage.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/applandingpage.png new file mode 100644 index 00000000..62006b06 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/applandingpage.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/applogin.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/applogin.png new file mode 100644 index 00000000..3999e053 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/applogin.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/buildwindows.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/buildwindows.png new file mode 100644 index 00000000..441e2b9d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/buildwindows.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/createnewspace.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/createnewspace.png new file mode 100644 index 00000000..1ddcf681 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/createnewspace.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/downloadbutton.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/downloadbutton.png new file mode 100644 index 00000000..5595a529 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/downloadbutton.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/installing.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/installing.png new file mode 100644 index 00000000..fa0e5b26 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/installing.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/maintoolbar.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/maintoolbar.png new file mode 100644 index 00000000..a679ea06 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/maintoolbar.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/namespace.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/namespace.png new file mode 100644 index 00000000..06484cd2 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/namespace.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/projectstart.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/projectstart.png new file mode 100644 index 00000000..a2fe22da Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/projectstart.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/signin.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/signin.png new file mode 100644 index 00000000..aec48a6b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/signin.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/signup.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/signup.png new file mode 100644 index 00000000..076fce9c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/signup.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/spacecreated.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/spacecreated.png new file mode 100644 index 00000000..0467423f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/assets/getting_started_guide/spacecreated.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-45-23.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-45-23.jpeg new file mode 100644 index 00000000..7688f3b8 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-45-23.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-45-53.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-45-53.jpeg new file mode 100644 index 00000000..28aac781 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-45-53.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-46-29.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-46-29.jpeg new file mode 100644 index 00000000..8a67736f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-46-29.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-46-46.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-46-46.jpeg new file mode 100644 index 00000000..9f549b78 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2022-06-18-14-46-46.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-02-20.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-02-20.jpg new file mode 100644 index 00000000..e04a624d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-02-20.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-10-16.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-10-16.jpeg new file mode 100644 index 00000000..63ca345e Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-10-16.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-10-57.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-10-57.jpeg new file mode 100644 index 00000000..332eacf2 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-10-57.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-13-13.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-13-13.jpeg new file mode 100644 index 00000000..fa0dfc12 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-13-13.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-13-34.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-13-34.jpeg new file mode 100644 index 00000000..b9d84524 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-13-34.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-16-18.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-16-18.jpeg new file mode 100644 index 00000000..a7dba084 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-16-18.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-19-33.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-19-33.png new file mode 100644 index 00000000..0f735dbd Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-19-19-33.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-27-01.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-27-01.jpg new file mode 100644 index 00000000..c4c7a968 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-27-01.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-27-10.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-27-10.jpg new file mode 100644 index 00000000..b3ba4d82 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-27-10.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-28-19.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-28-19.jpg new file mode 100644 index 00000000..b2084867 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-28-19.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-41-03.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-41-03.jpg new file mode 100644 index 00000000..6ae12e68 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-23-22-41-03.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-24-10-19-41.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-24-10-19-41.jpeg new file mode 100644 index 00000000..dd8ad720 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-02-24-10-19-41.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-03-21-18-04-56.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-03-21-18-04-56.png new file mode 100644 index 00000000..f0d5a856 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-03-21-18-04-56.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-03-21-18-07-43.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-03-21-18-07-43.png new file mode 100644 index 00000000..c39a45b8 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-03-21-18-07-43.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-07-16-23-08-04.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-07-16-23-08-04.png new file mode 100644 index 00000000..cb67ea6a Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/2023-07-16-23-08-04.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/3d-models.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/3d-models.mdx new file mode 100644 index 00000000..a86f8bfd --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/3d-models.mdx @@ -0,0 +1,44 @@ +--- +sidebar_position: 1.81 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# 3D Models & Equipables + +## 3D Models + +- **Formats**: GLB and GLTF with more types planned for the future. + +- **File Size**: The maximum allowed file size for 3D models is 15MB per file. This limitation is due to automatic compression isn't available at the moment. This limitation will increase in the future. + +- **Texture Size**: This is platform dependent: + + - Mid-range+ GPU: maximum size of 2k (2048x2048 pixels). + - VR or Low-range GPU (such as mobile): maximum size of 1k (1024x1024 pixels). + +:::note +We recommend adhering to the power of two rule when creating textures. You can learn more [here](https://www.katsbits.com/tutorials/textures/make-better-textures-correct-size-and-power-of-two.php#:~:text=What%20is%20the%20power%20of,%2Ddown%20by%20%222%22.) +::: + +- **Trim Sheets**: For large objects such as buildings, it is recommended to use trim sheets. Trim sheets optimize texture usage and improve performance. + +- **Style**: While The Mirror itself adheres to a semi-realistic style, there are no limits on what style you can achieve in The Mirror. You have complete freedom in choosing whichever style, The Mirror will support it. + +- **Vertex Count**: For optimial performance it is recommended models are below 30K vertices. + +:::note +Budgeting your polygon or vertex count is generally tricky; it depends on the platform the game is running on, where the model is in the scene compared to the camera, how many of said model is in the scene, etc... For example, a sword model in an FPS game may have the same vertex count as a house in the far distance of a map that the player will never reach or get close to. +::: + +- **GPU Compatibility**: The Mirror supports mid-range GPUs that are compatible with Vulkan or higher graphics APIs. For example, an Nvidia GTX 1650 should be capable of running the game at 1080p resolution with a stable 60 FPS. + +- **Custom Shaders**: Currently, custom shaders are not supported. Please utilize the default shaders provided by the game. We plan to allow for this in the future. + +## Equipables + +Info coming soon. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/Character.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/Character.mdx new file mode 100644 index 00000000..e8d84ed7 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/Character.mdx @@ -0,0 +1,50 @@ +--- +sidebar_position: 0.1 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; + +Characters come out-of-the-box in The Mirror, saving you time from building your own player controller. If you're coming from a traditional game engine background, you may be accustomed to building your own player (character) object from scratch. + +The Mirror is different from game engines. Similar to Garry's Mod, The Mirror gives you a player controller out-of-the-box. When you begin, you have control of a physical character in the world with smooth controls. This is a fully functional player object that you can use to navigate the game world. + +In the future, you'll be able to completely replace this physical character with custom player controllers of your choosing, such as camera adjustments for a top-down strategy game. + +# Controlling Your Character + +By default, your spawned character follows default FPS (First Person Shooter) and TPS (Third Person Shooter) controls: + +![](2023-02-23-19-02-20.jpg) + + + +# Changing Your Character + +You can change the character model and even import your own into The Mirror. + +- Press `Escape` to open the main menu. + +![MainMenu](./mainmenu.png) + +- On the top right, click the "Avatar" tab. + +![AvatarTab](./avatartab.png) + +- Currently, The Mirror has two default avatars as seen above. However, you are able to import your own avatar by clicking on the "Import Avatar" button and following the step by step instructions on screen. Alternatively, you can follow the guide [here](/docs/users/ready-player-me) + +- Once you've chosen your avatar or imported your own, you'll need to reconnect to your Space for the change to take effect. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/_category_.json new file mode 100644 index 00000000..8a497c06 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Build", + "position": 2, + "link": { + "type": "generated-index", + "description": "There are 2 main modes in The Mirror: Build and Play. Build Mode has the power of a full-blown game engine for whatever you can imagine, developed in real-time with your fellow builders." + } +} \ No newline at end of file diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/applandingpage.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/applandingpage.png new file mode 100644 index 00000000..ab636f36 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/applandingpage.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/assetdrawerimport.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/assetdrawerimport.png new file mode 100644 index 00000000..5b196a9c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/assetdrawerimport.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/assetsdrawer.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/assetsdrawer.png new file mode 100644 index 00000000..9d95ae2d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/assetsdrawer.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/audio.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/audio.mdx new file mode 100644 index 00000000..56227d27 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/audio.mdx @@ -0,0 +1,14 @@ +--- +sidebar_position: 1.82 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# Audio + +- **Format**: We currently support .WAV and .MP3 file extension. Support for .OGG is coming soon. +- **File Size**: The maximum allowed file size for audio files is 15MB per file. This limitation will increase in the future. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/avatartab.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/avatartab.png new file mode 100644 index 00000000..e0294b80 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/avatartab.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/build-ui.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/build-ui.mdx new file mode 100644 index 00000000..9825873a --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/build-ui.mdx @@ -0,0 +1,195 @@ +--- +sidebar_position: 1 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; + +# Build UI + +## What Is the Build UI? + +Building is at the heart of The Mirror. It is a collection of tools that allows you to manipulate your Space and aid you in brining your imaginations to the virtual world. + +You can activate the _Build UI_ by pressing `B` on your keyboard. + +![BuildMode](./buildwindows.png) + +## Controls In Build UI + +When you're in the _Build UI_ you no longer control your character and it remains stationary. The controls for moving around are slightly different: + + +{[ +{label: "Windows", value: "windows", cmdCtrlKey: "CTRL"}, +{label: "Mac", value: "mac", cmdCtrlKey: "CMD"}, +{label: "Linux", value: "linux", cmdCtrlKey: "CTRL"} +] +.map((os) => { + {/* React MDX isn't working here for some reason. Should be able to use the below */} + const cmdCtrlKey = os.cmdCtrlKey + const headers = [`Input`, `Action`]; + const data = [ + [`Hold Right Mouse Button`, `Look around`], + [`W + Hold Right Mouse Button`, `Move forwards`], + [`S + Hold Right Mouse Button`, `Move backwards`], + [`A + Hold Right Mouse Button`, `Move left`], + [`D + Hold Right Mouse Button`, `Move right`], + [`Mouse Wheel Scroll + Hold Right Mouse Button`, `Increase/decrease movement speed`], + [`Mouse Wheel Scroll`, `Zoom in/out`], + [`Right Mouse Button`, `Open context menu`], + [`${cmdCtrlKey} + D`, `Duplicate object`], + [`Move object + Hold Shift`, `Duplicate object`], + ]; + return +
+ +})} + + + +:::note Coming Soon +VR is next on our list! Let us know if it's something you're interested in. + +[Feature Board!](https://in.themirror.space/feedback) + +::: + + + + +:::note Future +Mobile apps aren't ready yet, but let us know if you'd like this! + +[Feature Board!](https://in.themirror.space/feedback) + +::: + + + + +-- + +The _Build UI_ is divided into three different panes: + +1. The "Main Toolbar" is at the top of the screen. +2. The "Assets Window" is on the left side of the screen. +3. The "Entities & Inspector Window" is on the right side of the screen. + +## The Main Toolbar + +On the left side of the main toolbar, there are three buttons that allows you to switch between _Terrain_ manipulation, _Map_ and _Primitive Builder_. + +![ModeSwitch](./terrainmapprimitivebuttons.png) + +By default you're in _Terrain_ manipulation mode when you are in the _Build UI_. At the moment, terrains can't be manipulated directly in The Mirror -- we're currently working on this feature and will be available soon. That said, you can import terrains from 3rd party programs like [Gaea](https://quadspinner.com/). + +The second button in the main toolbar is the "Map" button. Clicking it will activate _Map Mode_. A map in The Mirror refers to the ground objects in a Space (terrain is an example). Activating _Map Mode_ allows you to create a new map and duplicate the current active one. + +![MapMode](./mapmode.png) + +The third button is the Primitive Builder button. Clicking it will activate the _Primitive Builder_. In this mode you can create objects using simple primitive shapes similar to 3D graphics manipulation softwares such as Blender. + +![PrimitiveBuilderMode](./primiteivebuildermode.png) + +On the right of the aforementioned three buttons, the transformation tools will allow you to manipulate any object in your Space. + +![TransformationTools](./2023-02-23-22-28-19.jpg) + +- The first icon is the selection tool that allows you to select different objects. Shortuct `Q`. +- The second icon is the translate tool that allows you to move objects in 3D. Shortuct `W`. +- The third icon is the rotate tool that allows you to rotate objects in 3D. Shortuct `E`. +- The fourth icon is the scale tool that allows you to change the size of objects in 3D. Shortuct `R`. + +Next to the above buttons there are helper options you can choose to enable to help you transform objects easier. + +![TransformationHelpers](./transformationhelpers.png) + +- The "Relative" checkbox will toggle between world and local Space. When unchecked, whenever you move, rotate or scale an object, you do so independent of the orientation of the object and do it based on the absolute world axes. However, when you enable relative, you will be moving, rotating or scaling the object based on its own orientation and axes. +- The "Snap" checkbox will enable snaping while the drop down menu next to it will allow you to choose the snap iteration amount. +- The "Show Colliders" is currently a work in progress; we're working on making it available soon. +- The "Visible Tris" will display how many tris are currently drawn in your current view as well as your maximum tris budget. + +On the right side of the main toolbar you'll find the below buttons: + +![MainToolbarRightSide](./rightsidemaintoolbar.png) + +- The `Variables` button will display all the available variables and you can add, edit and remove them. By default The Mirror has a few already made variables you can leverage such as player health, location and more. + +![VariableView](./variablesview.png) + +- The `Teams` button will display the list of teams available. This is useful in many multiplayer game types. By default there are two teams; red and blue. This view allows you to add or delete teams. + +![TeamsView](./teamsview.png) + +- The `Users` button will display a list of users that are currently located in your Space. + +![UsersView](./usersview.png) + +- The `Teleport` button will help unstuck and teleport your character. +- The `Preview` button will allow you to test your game by running it as if it is fully published without having to compile or publish your Space. + +:::note + +To exit _preview mode_, press `Escape` and then click on the `End Preview` button at the bottom left of the screen + +::: + +Next to the `Preview` button there are three helper buttons: + +![HelperButtons](./miscbuttons.png) + +- The `?` button will open the on-screen quick tutorial. +- Next to the help button there is the `Share` button. This will allow you to share your Space with others via a link to make it easier to collaborate and work with others in the same Space. +- The `Options` button denoted by a cog will bring up Basic Space Settings as well as access to the main menu. + +![OptionsButton](./optionsbutton.png) + +## The Assets Drawer + +The Assets Drawer is located on the left pane in the _Build UI_ this has a list of all the assets (3D models, textures, etc...) available in your library. These assets could be custom created, imported or provided by The Mirror. This is similar to the project view in other engines. + +The Assets Drawer is divided into two sections; the "Libarry" and the "My Assets" section. The library is basically any assets that The Mirror provided or shared by users publicly. The my assets section (found at the bottom) will only display the assets you've created or imported into The Mirror yourself. + +![AssetsDrawer](./assetsdrawer.png) + +## Entities View + +The Entities View is located on the right side in the _Build UI_ and it lists all the available entities in your Space. From maps to global scripts. + +![EntitiesView](./entitiesview.png) + +The Entities View is divide into four main categories: + +- World Entities; these are entities you've placed in your world such as a health kit, a weapon or even a staircase. You are able to toggle these entities visible or not (eye icon on the right side of the entity) or lock it to prevent accidental selection or transformation of said object (checkbox next to the visibilty toggle). + +![WorldEntities](./worldentities.png) + +- Global Scripts; these are scripts that apply to your entire game, they are not attached to an object and are always active. An example of this is a script that checks the score in a game to see if it reached a certain threshold as a win condition. All global scripts have the option to be toggled active or inactive (checkbox next to script's name). You can delete a global script by clicking the trashcan icon next to it. + +![GlobalScripts](./globalscripts.png) + +:::note +Instanced scripts -- unlike global scripts, require that they are attached to an object and their scope is local to said object. You can learn more about scripting [here](../script/getting_started.mdx) +::: + +- Maps; this lists the current map used in your Space. A map in The Mirror is the terrain or ground used as the base for your level. You are able to toggle these entities visible or not (eye icon on the right side of the entity) or lock it to prevent accidental selection or transformation of said object (checkbox next to the visibilty toggle). + +![Maps](./maps.png) + +- Environment; these are global environment objects that affect the entire Space. The sun is an example of this. You are able to toggle these entities visible or not (eye icon on the right side of the entity). + +![Environment](./environment.png) + +## Inspector View + +The Inspector View is where all the properties and options of a selected object will be displayed. Through the inspector you will be able to modify the different properties of the objects, from position and scale to collision and any scripts that may affect it. +When selecting an object three main tabs will appear; properties, scripts and nodes. The properties tab will offer basic information and allow you to modify them. The nodes tab will allow you to add or remove any nodes available for the object. Finally the scripts tab will allow you to attach, edit or delete any scripts available for the object. + +![](./inspectorproperties.png) ![](./inspectorscripting.png)![](./inspectornodes.png) + +:::note +Nodes is a concept inherited from Godot. For more information about what they are, please check out [Godot's documentation article about them](https://docs.godotengine.org/en/stable/getting_started/step_by_step/nodes_and_scenes.html) +::: diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/buildmode.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/buildmode.png new file mode 100644 index 00000000..8509a10b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/buildmode.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/buildwindows.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/buildwindows.png new file mode 100644 index 00000000..441e2b9d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/buildwindows.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/chat.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/chat.png new file mode 100644 index 00000000..2072d1e5 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/chat.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/cinemamode.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/cinemamode.png new file mode 100644 index 00000000..fb463e5e Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/cinemamode.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/createnewspace.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/createnewspace.png new file mode 100644 index 00000000..1ddcf681 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/createnewspace.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/droporbrowse.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/droporbrowse.png new file mode 100644 index 00000000..4abddebb Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/droporbrowse.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/entitiesview.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/entitiesview.png new file mode 100644 index 00000000..3f01facd Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/entitiesview.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/environment.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/environment.png new file mode 100644 index 00000000..5481118e Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/environment.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/filebrowser.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/filebrowser.png new file mode 100644 index 00000000..2c7d9f13 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/filebrowser.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/globalscripts.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/globalscripts.png new file mode 100644 index 00000000..a331db7a Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/globalscripts.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/godot-plugin.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/godot-plugin.mdx new file mode 100644 index 00000000..4f8d09c5 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/godot-plugin.mdx @@ -0,0 +1,15 @@ +--- +sidebar_position: 1.84 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# Godot Plugin (Coming Soon) + +We understand that many developers prefer using the Godot engine for their game development needs. To accommodate this, we are actively working on adding a dedicated plugin to work Godot side-by-side with The Mirror in real-time. This will allow you to seamlessly integrate your Godot assets and projects into our game environment. Stay tuned for updates on how to import and use Godot assets in our API. + +We are continuously expanding and improving our API to provide you with a comprehensive set of features and tools for game development. Your feedback is invaluable to us, so if you have any specific requests or suggestions regarding heightmaps, audio, particles, Godot import, or any other features, please don't hesitate to submit them on our [Feature Board.](https://in.themirror.space/feedback). diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/import-heightmaps.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/import-heightmaps.mdx new file mode 100644 index 00000000..7170f440 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/import-heightmaps.mdx @@ -0,0 +1,22 @@ +--- +sidebar_position: 1.81 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# Heightmaps + +- **Format**: We recommend EXR for highest quality. + +- **File Size**: The maximum allowed file size for heightmaps is 15MB per file. This limitation is due to automatic compression isn't available at the moment. This limitation will increase in the future. + +- **Texture Size**: Maximum size of 4K (4096x4096). + +:::note +Similar to other texture files, we recommend adhering to the power of two rule when creating heightmaps. You can learn more [here](https://www.katsbits.com/tutorials/textures/make-better-textures-correct-size-and-power-of-two.php#:~:text=What%20is%20the%20power%20of,%2Ddown%20by%20%222%22.) +::: + + diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importing-assets.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importing-assets.mdx new file mode 100644 index 00000000..9419ad16 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importing-assets.mdx @@ -0,0 +1,62 @@ +--- +sidebar_position: 1.80 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# How to Import + +The Mirror allows you to import custom assets to create your games, such as 3D models, audio files, textures, height maps, and more. + +It's important to understand the requirements to ensure a smooth importing experience. The Mirror is built on top of Godot, which means it inherits many of the requirements that Godot would expect when importing the asset. + +NOTE: We strongly suggest importing .GLB files as they include all materials and other dependencies in a single file, similar to a .ZIP file. + + + +## How To Import an Asset + +- Enter Build Mode: In a Space, press `B` on your keyboard to open _Build Mode_. + +![BuildMode](./buildmode.png) + +- On the left side, you'll find the Assets Drawer. Click on the switch next to "Upload Asset". + +![AssetsDrawer](./assetdrawerimport.png) + +- Drag your file from your system's folder into the drop area or click "Browse". + +![DropOrBorwseArea](./droporbrowse.png) + +- If you clicked "Browse", navigate to its location, select it, and click "Open" button. + +![OpenButton](./filebrowser.png) + +- A message will popup to notify you with the import process status. + +![MessageStatus](./importsuccess.png) + +You'll find your imported asset under "My Assets" in the Assets Drawer. + +![AssetLocation](./importmyassets.png) + +## Import on the Web App: [in.themirror.space](https://in.themirror.space) + +1. Click "My Assets" on the sidebar + ![](2022-06-18-14-45-23.jpeg) + +2. Click "+ New Asset" on the top-right of the screen. + +![](2022-06-18-14-45-53.jpeg) + +3. Enter the information about your asset. + +![](2022-06-18-14-46-29.jpeg) + +4. Upload the asset's file + +![](2022-06-18-14-46-46.jpeg) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importmyassets.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importmyassets.png new file mode 100644 index 00000000..c3a96390 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importmyassets.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importsuccess.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importsuccess.png new file mode 100644 index 00000000..f4f3dbe4 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/importsuccess.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectornodes.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectornodes.png new file mode 100644 index 00000000..056522be Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectornodes.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectorproperties.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectorproperties.png new file mode 100644 index 00000000..1439c38c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectorproperties.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectorscripting.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectorscripting.png new file mode 100644 index 00000000..f684ea8c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/inspectorscripting.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mainmenu.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mainmenu.png new file mode 100644 index 00000000..15b1ba13 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mainmenu.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mapmode.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mapmode.png new file mode 100644 index 00000000..cab17caa Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mapmode.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/maps.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/maps.png new file mode 100644 index 00000000..8bf31b4a Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/maps.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mirror_white_logo.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mirror_white_logo.png new file mode 100644 index 00000000..9c8c710d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/mirror_white_logo.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/miscbuttons.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/miscbuttons.png new file mode 100644 index 00000000..233960bb Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/miscbuttons.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/namespace.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/namespace.png new file mode 100644 index 00000000..06484cd2 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/namespace.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/objects.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/objects.mdx new file mode 100644 index 00000000..14cd3724 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/objects.mdx @@ -0,0 +1,44 @@ +--- +sidebar_position: 1.82 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# Objects + +# Create an Object + +An object is simply an Asset that's in a Space. You can place as many Objects as you wish in-world, and they can all reference the same Asset. + +## In-World + +Assets can be uploaded by clicking "Click Here to Upload Asset" from the Asset Drawer. + +Any Object created in-world will automatically show up on https://in.themirror.space. + +![](upload_asset.png) + +## Shift+Drag Duplicate Objects + +You can duplicate an object by Shift + Dragging on a gizmo. + +![](2023-02-23-22-27-10.jpg) + +![](2023-02-23-22-27-01.jpg) + +## Copy/Paste Objects + +When an object or group of objects is selected, press CTRL/CMD+C and CTRL/CMD+V to copy and paste an object. The pasted object will appear where your mouse is. + +## Right Click Menu + +Right-click on an Object to open the context menu. +![](2023-02-23-22-41-03.jpg) + +## Web: [in.themirror.space](https://in.themirror.space) + +Placing an Object is currently only possible in-world. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/optionsbutton.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/optionsbutton.png new file mode 100644 index 00000000..3921f494 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/optionsbutton.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/particles.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/particles.mdx new file mode 100644 index 00000000..521523b4 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/particles.mdx @@ -0,0 +1,13 @@ +--- +sidebar_position: 1.83 +--- + +import Tabs from '@theme/Tabs'; +import Table from '/src/components/Table'; + +import TabItem from '@theme/TabItem'; +import YouTube from 'react-youtube'; + +# Particles (Coming Soon) + +We're excited for particles and are actively working on them! Join our Discord to stay posted; we will provide documentation on how to import and utilize particle effects in The Mirror in the not-too-distant future. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/preview-mode.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/preview-mode.mdx new file mode 100644 index 00000000..d1435528 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/preview-mode.mdx @@ -0,0 +1,29 @@ +--- +sidebar_position: 1.1 +--- + +import Tabs from '@theme/Tabs'; + +import TabItem from '@theme/TabItem'; + +# Preview Mode + +Preview mode is _preview_ of Play Mode: exactly what a player experiences when they play your game. + +We've designed Preview Mode to allow you to quickly swap between building and playing while co-building with your team without having to fully publish a game and start from the beginning. + +Why? + +- No need to enter "cheat codes" to jump to a certain part of your game when testing. +- No need to worry about long compile steps: Just hit "Preview" and experience your Space instantaneously. +- Save time from building your game to testing it and back. + +Preview can be activated by clicking the "Preview" button in the top-right of the Build UI. + +![](2023-03-21-18-04-56.png) + +## Exit Preview + +To exit the preview, press `ESC` and click "End Preview" in the bottom-left corner of the screen. + +![](2023-07-16-23-08-04.png) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/primiteivebuildermode.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/primiteivebuildermode.png new file mode 100644 index 00000000..3f0bab43 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/primiteivebuildermode.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/projectstart.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/projectstart.png new file mode 100644 index 00000000..a2fe22da Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/projectstart.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/quick-start.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/quick-start.md new file mode 100644 index 00000000..37bac9be --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/quick-start.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 0.05 +--- + +# Quick Start + +In-game, press `B` to open the Build UI. Everything is no-code drag-and-drop. + +![Build UI](../Build-UI.jpg) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/rightsidemaintoolbar.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/rightsidemaintoolbar.png new file mode 100644 index 00000000..24e6544c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/rightsidemaintoolbar.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/scoreboard.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/scoreboard.png new file mode 100644 index 00000000..65fecb3f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/scoreboard.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/scripteditorparts.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/scripteditorparts.png new file mode 100644 index 00000000..8c7be35b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/scripteditorparts.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/spacecreated.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/spacecreated.png new file mode 100644 index 00000000..0467423f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/spacecreated.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/spaces.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/spaces.md new file mode 100644 index 00000000..d7b57881 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/spaces.md @@ -0,0 +1,78 @@ +--- +sidebar_position: 0.06 +--- + +# Spaces + +Spaces in The Mirror means two things; a fully functional game published and ready for players to enjoy or a project that a user is currently developing. In other words, it is a game that can be modified or published. + +When you launch the app and log in you're greeted with the landing page. + +![Landingpage](./applandingpage.png) + +There are four main tabs at the top of the page as shown above; **Home**, **My Spaces**, **Build**, **Play**, **Avatar** and the cogwheel icon representing the settings menu. + +- **Home** page is where you land by default after logging in, it displays the recent Spaces you've visited as well as the ability to create new ones. + +:::note +In The Mirror, projects, games, worlds are called Spaces. You'll find a list of all the Spaces you've worked on under **My Spaces** tab. +::: + +- **Build** will list all the Spaces you or other people created and made public for anyone to check out. Spaces have various default permissions: Observer, Contributor, or Manager. +- **Play** will showcase all the current published games available for anyone to play and enjoy. +- **Avatar** will allow you to customize your in-game avatar that will be used across the different Spaces. For more information check the [Changing your character](/docs/build/Character) section. +- In **Settings** you can change and customize the way The Mirror works, from graphics settings to controls. + +# Creating A Space + +- Navigate back to **Home** page and then click on "Create New Space". +- **My Spaces** page will load the "Create New Space" page which lists all the available templates as shown below. + +![CreateSpace](./createnewspace.png) + +:::note +Templates save you time during game development. Each of the templates offered has a basic terrain and suitable lighting to help you create your game faster. Instead of you hunting down for hours and looking for assets to create a test desert level or an oasis to help set up your lighting, it is there ready and set up for you. + +Right now, The Mirror has 6 different environments to get you started; Badlands, Canyon, Desert, Mars, Mountains and Winter. +::: + +- For this example, we'll choose the "Empty Template". + +- A dialogue box will show up asking you to give your Space a name. We'll call it "My First Space" but you're free to call yours whatever you want. Click on "Create" + +![NameSpace](./namespace.png) + +- In a few seconds you should see your Space created and is available for editing and is fully playable. + +![SpaceCreated](./spacecreated.png) + +- Click on the round orange button at the bottom left of the Space card titled "Build" as shown above to start editing the Space. + +:::note +Clicking on the card itself instead of the "Build" button will open the project settings. +::: + +- After loading in, this is what you should see: + +![ProjectStart](./projectstart.png) + +When creating any new Space, The Mirror will automatically provide you with a few tools to get you started on your creative adventure: + +1. A fully functional player object that allows you to explore the Space and acts as your main character during the building and testing processes. You can read more about characters [here](/docs/build/Character) +2. A scoreboard in case your Space needs one. + +![Scoreboard](./scoreboard.png) + +3. Given The Mirror is built with multiplayer in mind, your Space is created with the ability to have different teams and your character will belong to one of them by default. + +![Teams](./teams.png) + +4. A chat system so you can chat with other players and your co-creators. + +![Chat](./chat.png) + +5. Cinema mode to allow you to capture beautiful screenshots to showcase your creation. + +![CinemaMode](./cinemamode.png) + +Now that you have a created Space, the sky is the limit: build the world and games you've been dreaming of. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/teams.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/teams.png new file mode 100644 index 00000000..ded7d068 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/teams.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/teamsview.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/teamsview.png new file mode 100644 index 00000000..200259f2 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/teamsview.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/terrainmapprimitivebuttons.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/terrainmapprimitivebuttons.png new file mode 100644 index 00000000..8217ecb7 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/terrainmapprimitivebuttons.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/transformationhelpers.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/transformationhelpers.png new file mode 100644 index 00000000..c025b0e7 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/transformationhelpers.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/upload_asset.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/upload_asset.jpeg new file mode 100644 index 00000000..c931568e Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/upload_asset.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/upload_asset.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/upload_asset.png new file mode 100644 index 00000000..1585a582 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/upload_asset.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/usersview.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/usersview.png new file mode 100644 index 00000000..16176cc8 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/usersview.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/variablesview.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/variablesview.png new file mode 100644 index 00000000..80c0ac82 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/variablesview.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/worldentities.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/worldentities.png new file mode 100644 index 00000000..02dc674d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/build/worldentities.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/get-started.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/get-started.md new file mode 100644 index 00000000..a5c6b904 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/get-started.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 0 +--- + +# Быстрый старт + +:::info +Обратите, пожалуйста, внимание, что основная документация The Mirror написана на английском языке. Документация The Mirror на русском языке может быть не полностью переведена с английского языка, а также учитывайте, что документация по The Mirror регулярно обновляется, и актуализация документации на русском языке занимает время. Если вы хотите получить всегда самую актуальную документацию, используйте, пожалуйста, документацию на английском языке. +::: + +[_Looking for the open-source docs?_](/docs/open-source-code/get-started) + +## Mirror Official App + +**Welcome!** The Mirror is an open-source Roblox & UEFN alternative: an all-in-one app to build and play, giving you the freedom to own what you create. + +### Itch Desktop + +We recommend using the [Itch.io desktop app](https://itch.io/app). We push updates regularly and the Itch app will automatically update The Mirror for you. + +
+ + Download Itch Desktop + +
+ +Once you've downloaded Itch Desktop and logged in, paste this direct link into the Itch desktop app URL bar: https://themirrorgdp.itch.io/the-mirror + +![](2024-03-16-21-12-48.jpg) + +### Direct Download + +Alternatively, you can download the client directly from our [Itch.io page](https://themirrorgdp.itch.io/the-mirror). + +
+ + Download Directly on Itch + +
+
+ +Need help? Chat with us on our [Discord #help channel](https://themirror.space/discord). + +## Create an Account + +You'll need an account since everyting is multiplayer. Go to [In The Mirror](https://in.themirror.space) and click **Sign In**. + +![SignIn](assets/getting_started_guide/signin.png) + +Click **Sign Up Here** on the dialogue box. + +![SignUp](assets/getting_started_guide/signup.png) + +Complete the sign up form to create an account. + +When you run the app, login using these credentials. + +![Login](Login.jpg) + +Congratulations, you're in The Mirror. Head to the [Tutorial](/docs/tutorial) next. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/_category_.json new file mode 100644 index 00000000..53a6f9a6 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Monetize", + "position": 7, + "link": { + "type": "generated-index", + "description": "Easily monetize your game with in-Space transactions, buy/sell assets, perks, power-ups, levels, quests, items, skins, and much more" + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/godot-donations.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/godot-donations.md new file mode 100644 index 00000000..9a36a518 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/godot-donations.md @@ -0,0 +1,11 @@ +--- +sidebar_position: 2 +--- + +import YouTube from 'react-youtube'; + +# Godot Sponsorship + +We regularly partner with the non-profit Godot Foundation via sponsorships, such as the Nov 2023 GodotCon in Munich and GDC 2024. Watch our 2023 GodotCon video here: + + diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/in-space-purchases.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/in-space-purchases.md new file mode 100644 index 00000000..d01cd8f0 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/in-space-purchases.md @@ -0,0 +1,9 @@ +--- +sidebar_position: 1 +--- + +# In-Space Purchases + +:::note Coming Soon +In-Space purchases are coming soon to offer to users who play your game. Let us know if you'd like them sooner! [Tweet at us @themirrorgdp](https://twitter.com/themirrorgdp). +::: diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/marketplace.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/marketplace.md new file mode 100644 index 00000000..ce130bc4 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/monetize/marketplace.md @@ -0,0 +1,15 @@ +--- +sidebar_position: 0 +--- + +import YouTube from 'react-youtube'; + +# Marketplace + +:::note Coming Soon +The Marketplace is coming soon. Let us know if you'd like it sooner! [Tweet at us @themirrorgdp](https://twitter.com/themirrorgdp). +::: + +Here's a sneak peek: + + diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/2024-03-16-15-47-58.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/2024-03-16-15-47-58.jpg new file mode 100644 index 00000000..13b08ad2 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/2024-03-16-15-47-58.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/_category_.json new file mode 100644 index 00000000..07344417 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Open-Source Code", + "position": 10, + "link": { + "type": "generated-index", + "description": "Documentation for The Mirror's open-source monorepo: https://github.com/the-mirror-gdp/the-mirror" + } +} \ No newline at end of file diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/architecture.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/architecture.mdx new file mode 100644 index 00000000..18a70cf5 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/architecture.mdx @@ -0,0 +1,42 @@ +--- +sidebar_position: 2 +--- + +# Architecture + +## [`mirror-web-server`](https://github.com/the-mirror-gdp/the-mirror/tree/dev/mirror-web-server) + +As mentioned in our [open-source announcement blog post](https://www.themirror.space/blog/freedom-to-own-open-sourcing-the-mirror), one of the key things missing from typical game development is an out-of-the-box web server that handles everything, which `mirror-web-server` provides in a stable, highly-efficient, and scalable manner: + +- Authentication via Firebase +- MongoDB: NoSQL Database +- Mongoose: Flexible ODM (Object Document Mapper, the document DB version of an ORM from SQL) +- HTTP requests +- Websockets +- Modular and extendable architecture +- Pub/sub functionality via Redis +- Type safety with Typescript +- Dockerized +- All neatly bundled with OpenAPI Swagger documentation + +The Mirror's web server is built on [NestJS](https://nestjs.com/), arguably the best thing to happen to NodeJS since [Express](https://expressjs.com/). It uses TypeScript, which is a superset of JavaScript that compiles to plain JavaScript. + +### Database: MongoDB + +The Mirror uses MongoDB: a NoSQL database that stores data in flexible, JSON-like documents. It is a popular choice for many modern web applications because it can store data of any structure, which is particularly useful when the data is not known in advance. + +### Why MongoDB and Mongoose? + +We get this question a lot and especially "Why not SQL?"". Here are the reasons: + +- **Flexibility**: The schemaless of MongoDB nature allow for maximum flexibility. For example, if the text you need to store is 1000 characters instead of 64, you don't need to run a migration. In fact, you could have just set the field (a SQL column) to "text" and that's it; no need to specify character limits ahead of time. It saves you tons of time with architecture so you can get up and running quickly +- **Application-level schema**: Mongoose keeps the schema at the application level instead of DB level, allowing for faster development iterations with minimal (or zero) migration +- **JSON Data Format**: The data format is quite close to JSON (BSON), which is the primary data transfer format of the web. The saves you from needing extra serialization +- **JSON & TS/JS**: JSON and Typescript/Javascript go hand-in-hand, so this allows for rapid development on the web dev side +- **Open-Source**: MongoDB is open-source and has a huge community behind it +- **Scalable**: MongoDB is horizontally scalable, which means you can add more servers to your MongoDB database to handle more traffic. You can also use sharding to distribute data across multiple servers +- **Minimal migration headaches**: Migrations technically aren't required _**at all**_ with MongoDB. You can just add a new field to your schema and start using it immediately, a massive time saver + +--- + +_More architecture details coming soon!_ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/contribute.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/contribute.mdx new file mode 100644 index 00000000..ecdb3a6c --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/contribute.mdx @@ -0,0 +1,27 @@ +--- +sidebar_position: 10 +--- + +# Contribute + +The Mirror is a **community-driven** project, literally created by open-source contributors. We'd love for you to consider contributing to The Mirror! We _**greatly appreciate**_ feedback, suggestions, and additions to the code. + +## How to Contribute + +### Discussion, Idea, or Proposal + +Open an issue on Github and use the `discussion/idea/proposal` label. + +### Code + +Open a PR on Github and we'd be happy to review. + +# Mission & Vision + +Read our open-source announcement here: https://www.themirror.space/blog/freedom-to-own-open-sourcing-the-mirror + +[![](freedom-to-own-the-mirror.jpg)](https://www.themirror.space/blog/freedom-to-own-open-sourcing-the-mirror) + +The Mirror is an open-source all-in-one game development platform, providing everything you need out-of-the-box to make a game/3D experiences, even if you've never written code in your life. The impetus behind labeling it an "open-source Roblox & UEFN alternatve" is because these are the two closest examples. Frankly, we're surprised there aren't more examples, especially with good graphics instead defaulting to cartoony styles. + +We hope to change that! :) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/freedom-to-own-the-mirror.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/freedom-to-own-the-mirror.jpg new file mode 100644 index 00000000..1bdb712d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/freedom-to-own-the-mirror.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/get-started.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/get-started.mdx new file mode 100644 index 00000000..c36737db --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/open-source-code/get-started.mdx @@ -0,0 +1,124 @@ +--- +sidebar_position: 1 +--- + +# Быстрый старт + +:::info +Обратите, пожалуйста, внимание, что основная документация The Mirror написана на английском языке. Документация The Mirror на русском языке может быть не полностью переведена с английского языка, а также учитывайте, что документация по The Mirror регулярно обновляется, и актуализация документации на русском языке занимает время. Если вы хотите получить всегда самую актуальную документацию, используйте, пожалуйста, документацию на английском языке. +::: + +**Простейший подход:**: We'll walk you through how to get started developing **with the Godot app** and plug into the Mirror Official server (our deployed `mirror-web-server`). This gives you access to your full accounts, assets, Spaces, etc. [In The Mirror](https://in.themirror.space) (our web app). With it, you can start developing without needing to run the full stack locally. + +1. Git clone the repository: `git clone https://github.com/the-mirror-gdp/the-mirror.git` (you do **not** need to clone with submodules; they are optional) +2. Download the precompiled Mirror fork of Godot engine (required to use) + +- **Windows: [Download](https://storage.googleapis.com/mirror_native_client_builds/Engine/41ba769a/MirrorGodotEditorWindows.exe)** +- **Mac: [Download](https://storage.googleapis.com/mirror_native_client_builds/Engine/41ba769a/MirrorGodotEditorMac.app.zip)** **Note: very buggy**; taking contributions for fixes :) On Mac you will see a zip file; extract it and open the editor binary with CMD + Right-Click then select the Open option. +- **Linux: [Download](https://storage.googleapis.com/mirror_native_client_builds/Engine/41ba769a/MirrorGodotEditorLinux.x86_64)** + +3. Open the Godot editor (The Mirror fork you downloaded in step 2), click import, and choose the `project.godot` from the `/mirror-godot-app` folder. +4. Hit play once it loads! + +# Docker Approach + +:::info +**You don't need Docker if you're only running `mirror-godot-app` locally**. You can still hit our deployed Mirror Official server instance via the top-right environment dropdown (select `official`; see pic below) and login with your Mirror account to manage assets, saved data, etc. **The Docker approach is for running the full stack yourself (including `mirror-web-server` locally, not just the `mirror-godot-app`).** +::: + +![Official env](2024-03-16-15-47-58.jpg) + +Docker isn't required, but is recommended for ease to run the web server and other dependencies in a consistent environment across different hardware. + +## How to Run the Full Stack with Docker (Windows) + +1. Install Docker for Windows + +Download and proceed with instructions from: https://docs.docker.com/desktop/install/windows-install/ +Setup was tested with WSL2 (defualt for not Professional versions of Windows) + +2. Clone mthe main repo: `git clone git@github.com:the-mirror-gdp/the-mirror.git`. + +3. Configure your `./mirror-web-server/.env` + +Use these settings. For the rest, I used defaults but these docs need to be updated. + +``` +MONGODB_URL=mongodb://root:example@mongo:27017/themirror?retryWrites=true&w=majority&authSource=admin +# Do not change paths here since they are relative to docker container +GOOGLE_APPLICATION_CREDENTIALS=/app/the-mirror-backend-dev-firebase-admin.json # <- You'll supply this in the next step +``` + +4. Configure your `the-mirror-backend-dev-firebase-admin.json` to plug in your own Firebase instance. This is required if you're running `mirror-web-server` locally since `mirror-web-server` requires admin permissions. + +5. Launch WSL2 terminal and go to your project directory `cd /YOUR_PROJECT_DIR` + +6. Run `docker compose up` + +:::tip +If you run into an error like this: +`ERROR: for the_mirror_server Cannot start service mirror-server: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./auto-migrate.sh": permission denied: unknown` + +Try running `chmod +x auto-migrate.sh` from the `mirror-web-server` directory. +::: + +7. Use your godot-app with `local` preset in top right corner of Godot editor. + +8. Localhost Space should load with terrain and environment + +## Troubleshooting + +1. I messed up & I can't login + +Probably issue with mirror-server configuration files +Rember to run `docker compose build` after every change to configs! + +2. My localhost space is empty (not even a terrrain and environment) + +Something went wrong with your migration of DB. After fixes to your dump file make sure to rm container running mongodb (otherwise init script restoring dump will not launch) + +3. My database is not empty even though it should be. + +Your mongo container maybe stopped but it is not removed. Try `docker rm mongo_container_id`. If this does not help try `docker system prune` + +## Other + +### Connection String for MongoDB Compass (the GUI for MongoDB): + +`mongodb://root:example@localhost:27017/themirror?retryWrites=true&w=majority&authSource=admin` + +Download MongoDB Compass [here](https://www.mongodb.com/try/download/compass). + +### Creating a New Dump of the Database + +1. Find container ID for Mongo: + +`docker ps` + +2. Enter the container bash: + +`docker exec -it CONATAINER_ID /bin/bash` + +3. Inside container: + +`cd / && mongordump --uri="mongodb://root:example@localhost:27017/themirror?retryWrites=true&w=majority&authSource=admin" -d themirror --archive=/database_dump/dump.archive +` + +4. Now we have a dump but it's inside a container. Run in other WSL shell: + +`docker cp CONTAINER_ID:dump.archive .` + +Your dump should be in current dir called `dump.archive` + +5. Connecting to different localhost space in godot-app + +In the main folder of godot-app find `project.godot` and edit: + +``` +[editor] + +run/main_run_args="%command% --server --space NEW_SPACE_ID --mode edit --uuid localhost" +``` + +You can also edit it using godot editor. Go to `Project` -> `Project Settings` . Enable `Advanced Settings` Checkbox. +Go to `Editor` -> `Run` Category and change Space ID in `Main Run Args` field. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObjcet-Networking.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObjcet-Networking.gif new file mode 100644 index 00000000..4974eb84 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObjcet-Networking.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-BodyType.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-BodyType.png new file mode 100644 index 00000000..9b04b663 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-BodyType.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-ConvexConcave.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-ConvexConcave.png new file mode 100644 index 00000000..9163ff35 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-ConvexConcave.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Dynamic.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Dynamic.gif new file mode 100644 index 00000000..de0cd116 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Dynamic.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Mass.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Mass.gif new file mode 100644 index 00000000..646dc75c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Mass.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-MassAndGravityScale.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-MassAndGravityScale.png new file mode 100644 index 00000000..148a0cfc Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-MassAndGravityScale.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-MovingOnTop.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-MovingOnTop.gif new file mode 100644 index 00000000..2bc665f3 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-MovingOnTop.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-ShapeType.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-ShapeType.png new file mode 100644 index 00000000..d31a2b7a Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-ShapeType.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Spawning-DetailPanelNavigation.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Spawning-DetailPanelNavigation.gif new file mode 100644 index 00000000..63886298 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Spawning-DetailPanelNavigation.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Static.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Static.gif new file mode 100644 index 00000000..59568e76 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/SpaceObject-Static.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/_category_.json new file mode 100644 index 00000000..85b31e8c --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Physics", + "position": 4, + "link": { + "type": "generated-index", + "description": "The Mirror includes Jolt physics, an advanced physics engine. Everything is exposed with a high-level API and is networked out of the box." + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/getting_started.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/getting_started.mdx new file mode 100644 index 00000000..20e3233d --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/physics/getting_started.mdx @@ -0,0 +1,101 @@ +--- +sidebar_position: 0 +--- + +import Tabs from "@theme/Tabs"; +import Table from "/src/components/Table"; + +import TabItem from "@theme/TabItem"; +import YouTube from "react-youtube"; + +# Getting Started + +Working with physics in The Mirror is easy. Everything is exposed using high-level APIs. Even beginners can quickly create complex scenes with physics simulations and physics-enabled gameplay. + +The Mirror includes a custom implementation of [Jolt Physics](https://github.com/jrouwe/JoltPhysics), an advanced physics engine. All physics features are networked out of the box, such that all of the physics is synced between the server and all clients. + +This article explains the most essential features of The Mirror's physics, including `SpaceObject`s, body types, shape types, importing shapes from models, and how to apply forces and impulses. + +## The SpaceObject + +The `SpaceObject` is any object that can be placed into the space, like an imported asset. They are usually instances of 3D models from glTF files, but can also be instances of other asset types. `SpaceObject` has a transform and properties to define its physical behavior. Objects can be spawned by dragging and dropping an asset from the asset library. Objects can be deleted by selecting them and pressing the Delete key. + +![SpaceObject spawning and Detail panel navigation.](SpaceObject-Spawning-DetailPanelNavigation.gif) + +## SpaceObject's Physical Properties + +You can manipulate the position and rotation of a `SpaceObject` by dragging it using one of the colored arrows with their tails at the object's origin. The arrows are part of a tool called the Gizmo. You can change the object's physical behavior by modifying the physics properties in the inspector panel. Only objects with collision enabled will interact with the physics engine. + +### Shape Type + +All SpaceObjects with collision enabled have a shape type. The shape type defines the shape of the object's collision bounds. The available options depend on the model you imported. + +- **Concave** is the most accurate collision shape, but it is the slowest, and can only be used with static objects. In a concave shape, each triangle from the model's meshes are used for collision. Concave is useful for meshes representing objects you can go inside of, like houses. +- **Convex** is much faster than Concave. Convex simplifies the shape to be a convex hull with no holes or dips. Convex shapes are "filled in", they are not hollow. Non-concave shapes like Convex can be used for moving objects and triggers. Convex is suitable for most dynamic props, like barrels. +- **Model Shapes** allows glTF 3D model files to provide their own collision shapes using the [`OMI_physics_shape`](https://github.com/omigroup/gltf-extensions/tree/main/extensions/2.0/OMI_physics_shape) extension. When this data is present in the file, this is usually the best option. Having a glTF 3D model file provide its own physics shapes is the only way to have boxes, spheres, capsules, and cylinders, which are simple primitives that are faster than both Concave and Convex. You can make a glTF file that uses `OMI_physics_shape` by exporting a .glb file from [Godot Engine](https://godotengine.org/) version 4.3 or later. +- **Multi Bodies** is an advanced option available for glTF 3D model files that provide multiple bodies using the [`OMI_physics_body`](https://github.com/omigroup/gltf-extensions/tree/main/extensions/2.0/OMI_physics_body) extension. This option is useful for including many independently moving parts in one model, like a rube goldberg machine, a ball pit, a hanging rope, etc. +- **Auto** is the default shape type. It will automatically select the best option for the model. It will try to use Model Shapes if available and suitable, otherwise it will use Concave for static objects and Convex for non-static objects. + +![Alt text](SpaceObject-ConvexConcave.png) + +If your asset does not provide its own physics shapes, you will not see Model Shapes or Multi Bodies as available options in the dropdown. For most objects, the dropdown will look like this: + +![Shape type](SpaceObject-ShapeType.png) + +### Body Type + +All SpaceObjects with collision enabled have a body type. The body type defines how the object moves and interacts with other objects. There are four body types: Static, Dynamic, Kinematic, and Trigger. + +![BodyType](SpaceObject-BodyType.png) + +#### Static + +The **Static** body type is for objects that don't move. This type is used for things like terrain, buildings, and props that are intended to be fixed in place. Static bodies can be teleported with scripts, but do not support smooth motion. + +![Static space object](SpaceObject-Static.gif) + +#### Dynamic + +The **Dynamic** body type is for objects that move via forces. This is often referred to as rigid body dynamics. This type is used for moving objects, like barrels. Dynamic bodies are affected by gravity. Dynamic bodies can be pushed or stopped by all other solid objects, including other dynamic bodies, static bodies, kinematic bodies, and characters. + +The ideal way to move a dynamic body in user script is to apply forces to it with the [Apply Force Over Time](/docs/script/vs_api_reference#apply-force-over-time) or [Apply Force Impulse](/docs/script/vs_api_reference#apply-force-impulse) script blocks. This can be used to push around objects realistically, simulate impacts or explosions, etc. + +![Dynamic space object](SpaceObject-Dynamic.gif) + +#### Kinematic + +The **Kinematic** body type is for objects that move via scripts. This type is used for finely controlled movement such as a moving platform. Kinematic bodies are not affected by gravity. The ideal way to move a kinematic body in user script is to [set its velocity](/docs/script/vs_api_reference#properties), either Linear Velocity or Angular Velocity, or use the [Move And Collide](/docs/script/vs_api_reference#move-and-collide) script block. + +#### Trigger + +The **Trigger** body type is for non-solid objects that can be used to detect when other objects enter or exit them. This type is used for things like checkpoints or traps. Triggers are not affected by gravity. Triggers may have a velocity specified like with Kinematic. Triggers are not solid and will pass through all other bodies. + +You can detect when a body enters a trigger using the [On Body Entered Trigger](/docs/script/vs_api_reference#on-body-entered-trigger) signal in visual scripting. Note that this signal is only available if the Body Type is Trigger, or if there is a Trigger subnode. Similarly, you can detect when a body exits a trigger using the [On Body Exited Trigger](/docs/script/vs_api_reference#on-body-exited-trigger) signal in visual scripting. + +### Mass and Gravity scale + +Mass and gravity scale are additional physics properties available for dynamic objects (objects that move with forces). + +![Mass and Gravity Scale](SpaceObject-MassAndGravityScale.png) + +#### Mass + +The mass property controls the mass of the object in Kilograms. This is useful to change the weight of a dynamic object, which includes how the body responds to forces and how easily it can be pushed around. A heavier object will take more effort to be pushed. + +![Mass](SpaceObject-Mass.gif) + +#### Gravity scale + +The gravity scale changes the falling acceleration, and allows to create floating objects. A positive gravity scale will have objects fall in the direction of gravity (usually down). A negative gravity scale will have objects fall in the opposite direction of gravity (usually up). A zero gravity scale will cause the object to be not affected by gravity. + +## Move on top of objects + +The charcter can walk on top of moving objects. You can use this property to your advantage. + +![Moving on top of space objects](SpaceObject-MovingOnTop.gif) + +## Networked physics + +The physics is networked out of the box, you can enjoy using it with your friends in real time! + +![Space object networking](SpaceObjcet-Networking.gif) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-19-02-20.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-19-02-20.jpg new file mode 100644 index 00000000..e04a624d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-19-02-20.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-27-01.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-27-01.jpg new file mode 100644 index 00000000..c4c7a968 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-27-01.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-27-10.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-27-10.jpg new file mode 100644 index 00000000..b3ba4d82 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-27-10.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-28-19.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-28-19.jpg new file mode 100644 index 00000000..b2084867 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-28-19.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-41-03.jpg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-41-03.jpg new file mode 100644 index 00000000..6ae12e68 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/2023-02-23-22-41-03.jpg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/_category_.json new file mode 100644 index 00000000..e43bed3b --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Play", + "position": 5, + "link": { + "type": "generated-index", + "description": "There are 2 main modes in The Mirror: Build and Play. Play Mode is where your published games take flight and can be played by anyone in the world." + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/buildmode.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/buildmode.png new file mode 100644 index 00000000..8509a10b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/buildmode.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/homepage.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/homepage.png new file mode 100644 index 00000000..a66b9ef9 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/homepage.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/myspaces.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/myspaces.png new file mode 100644 index 00000000..537bdaea Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/myspaces.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/myspacespublishing.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/myspacespublishing.png new file mode 100644 index 00000000..8315a230 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/myspacespublishing.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/play-mode.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/play-mode.mdx new file mode 100644 index 00000000..1a3876f0 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/play-mode.mdx @@ -0,0 +1,43 @@ +--- +sidebar_position: 3 +--- + +import Tabs from '@theme/Tabs'; + +import TabItem from '@theme/TabItem'; + +# Play Mode + +When a Space is published, it becomes available for everyone to experience as a fully functional game -- this is called Play Mode. In other engines, this is equivalent to exporting your project and uploading it to any platform. However, everything in The Mirror is in real-time, so no need to worry about long builds and exports. + +## How To Publish Your Space + +- Launch The Mirror and login using your account. You should see the landing page: + +![Homepage](./homepage.png) + +- Switch to the **My Spaces** tab + +![MySpacesTab](./myspaces.png) + +- Click on the Space card you would like to publish. + +![MySpacePublishing](./myspacespublishing.png) + +- Click the "Publish" button. + +- The "Publish" button will change into "Play" instead and you'll get a message notifying you that the Space is published. + +![Published](./published.png) + +If you're connected to a Space and you want to publish it press `B` on your keyboard to open _Build Mode_ + +![BuildMode](./buildmode.png) + +- Click on the cog wheel icon at the top right of the Main Toolbar. This will open the settings menu + +![SettingsMenu](./settingsmenu.png) + +- Scroll to the bottom and click on the "Publish Game" button. + +![PublishGame, button](./publishgame.png) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/published.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/published.png new file mode 100644 index 00000000..5cc592ab Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/published.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/publishgame.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/publishgame.png new file mode 100644 index 00000000..955d8d5d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/publishgame.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/settingsmenu.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/settingsmenu.png new file mode 100644 index 00000000..3150d552 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/play/settingsmenu.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/rest-api/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/rest-api/_category_.json new file mode 100644 index 00000000..70b79eea --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/rest-api/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "REST API", + "position": 8, + "link": { + "type": "generated-index", + "description": "The Mirror exposes a REST API to query Spaces, Objects, Assets, and more." + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/rest-api/getting-started.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/rest-api/getting-started.md new file mode 100644 index 00000000..94225749 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/rest-api/getting-started.md @@ -0,0 +1,5 @@ +# Coming Soon + +:::note Coming Soon +The REST API is coming soon. Let us know if you're a developer and would like to integrate with The Mirror! [Tweet at us @themirrorspace](https://twitter.com/themirrorspace). +::: diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/_category_.json new file mode 100644 index 00000000..798fb215 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Scripting", + "position": 3, + "link": { + "type": "generated-index", + "description": "Bring your games to life with The Mirror's high-level visual scripting. Coding can be daunting, which is why The Mirror provides no-code visual scripting out-of-the-box to make it easy for people of any skill level to build in The Mirror. Visual scripting is still programming, but high-level, and without needing to write code as text. Full support for GDScript is also available if you prefer writing text-based code." + } +} \ No newline at end of file diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/gdscript.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/gdscript.mdx new file mode 100644 index 00000000..665ce450 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/gdscript.mdx @@ -0,0 +1,73 @@ +--- +sidebar_position: 3.6 +title: 'Mirror-Flavored GDScript' +sidebar_label: GDScript +--- + +# GDScript + +The Mirror provides access to the power of Godot's GDScript. This is like normal GDScript, but supports multiple scripts per object, and includes access to The Mirror's API. + +The Mirror provides GDScript primarily for existing Godot users, and as such, The Mirror's documentation will not cover every aspect of the GDScript language. For more information on GDScript, please refer to [the Godot documentation](https://docs.godotengine.org/en/stable/getting_started/scripting/gdscript/gdscript_basics.html). + +## Mirror-Flavored GDScript + +You may use functions and variables just like you would in normal GDScript. As a part of The Mirror's support for multiple scripts per object, you can use members of SpaceObject the same way you use inherited members in Godot. For example, `print(position)` will print a SpaceObject's position. In this way, your GDScript code behaves as if it were directly in a script attached to the SpaceObject, without actually being attached to it. + +If you need to refer to the object the script is attached to, use the `target_object` variable. The `self` variable refers to the script itself. The `target_object` variable can either be a SpaceObject or the global scripts singleton. + +You must not write `class_name` or `extends` in your script. The Mirror's support for multiple scripts per object means that scripts act more like "components", so they do not extend the object they are attached to. + +## Entries + +Entry points can be added to a script by clicking the "Add Entry" button in the script editor. This is the same as the "Entry" section of the "Add Script Block" menu in visual scripting. These use Godot signals under the hood, but The Mirror handles the connection for you. + +import AddEntry from './img/gdscript/add_entry.webp'; + + + +When an entry is connected, it will show a green arrow icon to the left of the function signature. If you do not see a green arrow, then the entry is not connected, and you may need to add it from the Add Entry menu again. To delete an entry, erase the function text, and then the signal will automatically be disconnected. + +The callback functions `_ready`, `_process`, and `_physics_process` are available, however others such as the input callbacks are not available. When detected, they will show a blue arrow. These are provided for convenience and compatibility with regular GDScript. Generally, the entry points added through "Add Entry" are the preferred way to receive signals from The Mirror. + +import EntryIcons from './img/gdscript/entry_icons.webp'; + +GDScript Editor with Entry Icons + +## API + +You can print to the notification area using `Notify.info(title, message)`. You can also use `Notify.success`, `Notify.warning`, and `Notify.error`. + +Many helper functions for functionality present in visual scripting are available via the `Mirror` singleton. For example, functions for accessing and modifying variables are here. + +## Example: Counter + +Here is a simple script that counts every frame and prints to the notification area with `Notify.info`. + +import CounterMember from './img/gdscript/counter_member.webp'; + +Counter Member Example Script + +However, the above uses a member variable. This is useful for its own reasons, but it is not accessible by other scripts, it is not persistent and so will reset if the server restarts, and will reset any time you change the script. If you want a variable that is persistent, or something that can share data between scripts, you can use an object variable. You can use the `get_object_variable` and `set_object_variable` functions to access these. + +import CounterObjVar from './img/gdscript/counter_obj_var.webp'; + +Counter Object Variable Example Script + +The Mirror's object and global variables behave the same way in GDScript as they do in visual scripting. + +## Example: Has Red Key + +Aside from setting variables on yourself, you can also use the `Mirror.get_object_variable` and `Mirror.set_object_variable` functions to access variables on other objects. These functions work on any node, including SpaceObjects, model subnodes, and even players. By itself, `get_object_variable(...)` is a shorthand for `Mirror.get_object_variable(target_object, ...)`. You can also use `Mirror.get_global_variable` and `Mirror.set_global_variable` to access global variables. + +import HasRedKey from './img/gdscript/has_red_key.webp'; + +Has Red Key Example Script + +By default, the above script will show an "Access Denied" message if the `"has_red_key"` variable is null or false, indicating that the player does not have the red key. If another script granted the player the red key by setting `"has_red_key"` to true, then it will show an "Access Granted" message instead. + +Note that variable names are `String`, not `StringName`. This is because The Mirror's variables support JSON paths separated by either dots or forward slashes, and so are not limited to simple names. For example, `"a/b"` and `"a.b"` both refer to the same variable `"b"` inside of a `Dictionary` variable `"a"`. If desired, you could instead use the variable path `"door_keys/has_red"` to store the variable `"has_red"` inside of a `Dictionary` variable `"door_keys"`. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/getting_started.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/getting_started.mdx new file mode 100644 index 00000000..88518fc9 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/getting_started.mdx @@ -0,0 +1,275 @@ +--- +sidebar_position: 3.1 +title: Visual Scripting Getting Started +sidebar_label: Getting Started +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import Table from '/src/components/Table'; +import YouTube from 'react-youtube'; + +# Visual Scripting + +Coding can be daunting, which is why The Mirror provides no-code visual scripting out-of-the-box to make it easy for people of any skill level to build in The Mirror. Visual scripting is still programming, but high-level, and without needing to write code as text. Full support for GDScript is also available if you prefer writing text-based code, but we recommend learning the Mirror through visual scripting first so that you can learn the API. + +The original idea was inspired by Godot's own visual scripting that was present in the engine prior to version 4.0 before it was discontinued. Visual Scripting in Godot was a key reason we chose Godot; we were sad to see it removed from Godot 4 and are excited to bring it back to you in The Mirror. + +You can check out the announcement video and a quick note about visual scripting on our Youtube channel: + + +
+ +## Global vs Object Scripts + +Scripts in The Mirror can be attached globally to the whole Space, or attached to a specific object in your Space. + +Global scripts are used to affect the game on a global level. For example, you can use them to make a score tracker that gives points when a player kills an enemy. + +Object scripts can be attached to any Object. Their execution Space is local to the object they are attached to. For example, you can make a medkit that heals the player when they interact with it. + +## Your First Global Script + +import GlobalScripts from './img/getting_started/global_scripts.webp'; + +Global scripts + +Creating a global script is simple: + +- Open _Build Mode_ by pressing B on your keyboard. + +- On the right side, under Entities, next to the "GLOBAL SCRIPTS" category, click on the "+" sign. The "Create Script" popup will appear. + +- Click on "New Visual Script" to make a new visual script. The visual scripting editor will appear, filling the bottom half of the 3D viewport. + +- The "Create Script Entry" dialog will appear, prompting you to pick an entry point for your script. Entry blocks determine when the script runs, such as when an event happens. You can add more entry blocks later. + +import NewGlobalScript from './img/getting_started/new_global_script.webp'; + +Script editor and Create Script Entry dialog after making a new global script + +For experimenting with scripts, a simple entry to use is the "Timeout" signal under "New Timer". Select it, and either double-click on it, or click "Create" to add this entry to your script. + +### Canvas Controls + +Now that you have a script created, you will need to be able to navigate the script editor. Take note of these controls, practice panning around. + + +{[ +{label: "Windows", value: "windows", cmdCtrlKey: "CTRL", deleteKeys: "Delete or Backspace"}, +{label: "Mac", value: "mac", cmdCtrlKey: "CMD", deleteKeys: "Delete or ⌦"}, +{label: "Linux", value: "linux", cmdCtrlKey: "CTRL", deleteKeys: "Delete or Backspace"} +] +.map((os) => { + {/* React MDX isn't working here for some reason. Should be able to use the below */} + const cmdCtrlKey = os.cmdCtrlKey + const deleteKeys = os.deleteKeys + const headers = [`Input`, `Action`]; + const data = [ + [`Left Mouse Button`, `Click on a block to select it`], + [`Hold Left Mouse On Empty`, `Drag a box to select blocks`], + [`Hold Left Mouse On Block`, `Drag to move selection`], + [`Hold Left Mouse On Port`, `Drag to connect port`], + [`Mouse Wheel Scroll`, `Zoom in/out`], + [`Hold Middle Mouse Button`, `Pan view`], + [`Hold Right Mouse Button`, `Pan view`], + [`Quick Press Right Mouse`, `Create script block`], + [`N key`, `Create comment`], + [`${deleteKeys}`, `Delete selection`], + [`${cmdCtrlKey} + C`, `Copy selection`], + [`${cmdCtrlKey} + V`, `Paste selection`], + [`${cmdCtrlKey} + D`, `Duplicate selection`], + ]; + return +
+ +})} + + + +:::important +Visual scripting is not available in VR. This is because Build mode is not available in VR. +::: + + + + +You can also left-click on the script canvas minimap at the bottom right of the script canvas to pan. + +:::note +Entry blocks cannot be copy-pasted (like the "On Timer Timeout" block we just created). For safety reasons, only regular script blocks can be copy-pasted. For more information on copy-pasting, see the [Saving Scripts](./saving_scripts.mdx) page. +::: + +### Creating Script Blocks + +Now that you have familiarized yourself with the script editor, let's add some blocks to your first global script. As a minimal test, let's print "Hello World" to the notification area (or whatever text you'd like). + +We can create blocks in one of three ways: + +1. Click "Add Script Block" in the top of the script editor to open the Create Script Block dialog. This will show all blocks. + +2. Right-click in an empty spot in the script editor to open the Create Script Block dialog. This will show all blocks. + +3. Drag from one of the colored circles on the sides of the blocks. This will show only blocks that can be connected to the block you are dragging from, by setting the "Show" filter to match where you dragged from. + +import CreateScriptBlockDrag from './img/getting_started/create_script_block_drag.webp'; + +Create Script Block dialog after dragging from a block + +Using any method, create a "Print Notify" block. In the screenshot above, we dragged from the "On Timer Timeout" block's run port, so the "Show" filter is set to "Run Blocks". You can also get to "Print Notify" with "Show" set to "All blocks", which is the default filtering when clicking "Add Script Block", or when right-clicking an empty spot. + +:::note +The script editor automatically saves your progress in real time. You don't have to manually save when making changes. +::: + +Each block has a set of ports. The white arrow ports determine the direction of flow and how the script is run. All other colors are for data. Ensure the "On Player Interact" block is connected to the new "Print Notify" block. If not, drag from one white port to the other white port. Clicking on the ports can sometimes be finicky, just keep trying if you mis-click the first time. Once the white line is connected, this tells The Mirror that after the "On Player Interact" block is executed, the "Print Notify" block should be executed. + +Next, click on the value button for the "Message" field to edit the message. Type "Hello World", or any text you'd like. You can either press Enter to save, or click the "Save" button. + +import PrintEditMessage from './img/getting_started/print_edit_message.webp'; + +Print Notify block with the message field selected + +After you do this, you will see this message printed in the notification area at the top-right of the screen. Note that the most recent notification is shown at the top. + +import HelloWorldNotification from './img/getting_started/hello_world_notification.webp'; + +Notification area with the Hello World message + +If you want to change the frequency in which the message is printed, we can change the timer's duration. + +import GlobalScriptTimerDuration from './img/getting_started/global_script_timer_duration.webp'; + +Timer block with the duration field selected + +Next, on your own, take a few moments to try out other blocks. See if you can figure out how to Add two numbers and print the result. Hint: You will need to make a new block and connect it to the Message port by dragging a line. + +## Your First Object Script + +After you are familiar with global scripts, let's learn how to make object scripts. First, if you have not already, create a Object. You can search for models in the asset library by typing in the search bar, or clicking "view all". + +import SearchForAssets from './img/getting_started/search_for_assets.webp'; + +Search bar in the asset library + +### Candles + +For this first example we will create candles that damage players when they interact with it. You can do this by searching for the desired asset and dragging-and-dropping from the asset library. + +import CreateCandles from './img/getting_started/create_candles.webp'; + +Diagram showing how to drag to create candles Object + +Next, with the object selected (either in the 3D view or in the hierarchy), click on the "Scripting" tab in the inspector. Then click "Add Script" and create a new visual script. + +import ObjectScriptCreate from './img/getting_started/object_script_create.webp'; + +Red boxes showing how to create a new object script + +Using the same skills you learned making global scripts, create a "Player Interact" entry, create a "Damage" block, and connect them together. You need to drag from one block's port to another port of a compatible type (usually the same color). You need to connect the white sequence ports, and connect the "Player" `obj` port to the "On Object" `obj` port. You should also give the script a meaningful name so you can easily identify it later. The end result should look like this. Pay attention to the lines boxed in red, and the amount of damage. + +import ObjectScriptHurtPlayer from './img/getting_started/object_script_hurt_player.webp'; + +Script that hurts the player when E is pressed + +Exit _Build Mode_ by pressing B on your keyboard. With your character, walk up to the candles and look at them. You should see a text that says "Interact (E)". + +import ObjectScriptCandlesInteract from './img/getting_started/object_script_candles_interact.webp'; + +Interacting with the scripted candles object + +Now you can press E on your keyboard to use the candles. Note how your character's health is `100` to start. Interact with the object by pressing E on your keyboard and your health will be reduced by `20`, the amount specified in the Damage script block. If you press E many times, you will die. + +### Medkit + +Next, let's make a medkit that can heal players. Open _Build Mode_ by pressing B on your keyboard. Similarly to before, let's drag-and-drop a medkit model from the asset library. + +import CreateMedkit from './img/getting_started/create_medkit.webp'; + +Diagram showing how to drag to create a medkit Object + +Using the same procedure as with the candles, create a "Player Interact" entry, create a "Heal" block, and connect them together. Don't forget to give your script a meaningful name, it's a good habit to get into, otherwise your Space will be full of "New Script 7" scripts. The end result should look like this. + +import ObjectScriptHealPlayer from './img/getting_started/object_script_heal_player.webp'; + +Script that heals the player when E is pressed + +Exit _Build Mode_ by pressing B on your keyboard. With your character, walk up to the medkit and look at it. You should see a text that says "Interact (E)". + +import ObjectScriptMedkitInteract from './img/getting_started/object_script_medkit_interact.webp'; + +Interacting with the scripted medkit object + +Now you can press E on your keyboard to use the medkit. Note that if you have full health, the Heal block will not do anything. To test it, you will need to damage yourself, such as by interacting with the candles, or getting a friend to shoot you with a gun. + +### Cactus + +Next, let's make something more advanced, a cactus with a timer that hurts a Player if they get very close to the cactus. We want to keep hurting them until they get away from the cactus, so we will use an "On Timer Timeout" entry to run the script frequently. We will set the duration to 0.2 to make it run every 0.2 seconds (5 times per second). We need to get a player within a short distance, but only run the hurt block if we found a player. + +Take a look at the script below and replicate it in your Space, then try standing next to the cactus. If you did it right, it will hurt you. You may need to tweak the "Range" depending on the size of your objects. Note that "Range" is in meters, as are all distances in The Mirror. + +import ObjectScriptPricklyCactus from './img/getting_started/object_script_prickly_cactus.webp'; + +Script that hurts the player if they get too close to the cactus + +You can control when the script is allowed to run using the "Enabled" and "Run In Build Mode" checkboxes in the script inspector. This allows you to temporarily disable a script for testing, or to ensure a script only runs when playing the game. By default, scripts will run in Build mode, while you are building your Space. Perhaps you don't want a cactus to hurt you while you are building your Space, so you can uncheck "Run In Build Mode" to disable it while building. + +import ScriptRunCheckboxes from './img/getting_started/script_run_checkboxes.webp'; + +Script inspector showing the Enabled and Run In Build Mode checkboxes diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/create_script.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/create_script.webp new file mode 100644 index 00000000..11032213 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/create_script.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/add_entry.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/add_entry.webp new file mode 100644 index 00000000..d340554f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/add_entry.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/counter_member.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/counter_member.webp new file mode 100644 index 00000000..283a6b8c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/counter_member.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/counter_obj_var.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/counter_obj_var.webp new file mode 100644 index 00000000..486834ff Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/counter_obj_var.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/entry_icons.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/entry_icons.webp new file mode 100644 index 00000000..3d51c817 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/entry_icons.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/has_red_key.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/has_red_key.webp new file mode 100644 index 00000000..9cb30581 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/gdscript/has_red_key.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_candles.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_candles.webp new file mode 100644 index 00000000..e196ff7b Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_candles.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_medkit.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_medkit.webp new file mode 100644 index 00000000..673b4f82 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_medkit.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_script_block_drag.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_script_block_drag.webp new file mode 100644 index 00000000..134750f5 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/create_script_block_drag.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/global_script_timer_duration.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/global_script_timer_duration.webp new file mode 100644 index 00000000..424f3f9c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/global_script_timer_duration.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/global_scripts.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/global_scripts.webp new file mode 100644 index 00000000..6b7a809c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/global_scripts.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/hello_world_notification.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/hello_world_notification.webp new file mode 100644 index 00000000..a4d9de27 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/hello_world_notification.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/new_global_script.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/new_global_script.webp new file mode 100644 index 00000000..c89e5262 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/new_global_script.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_candles_interact.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_candles_interact.webp new file mode 100644 index 00000000..55375660 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_candles_interact.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_create.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_create.webp new file mode 100644 index 00000000..72a08bcc Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_create.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_heal_player.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_heal_player.webp new file mode 100644 index 00000000..957f2c2f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_heal_player.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_hurt_player.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_hurt_player.webp new file mode 100644 index 00000000..aff533e6 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_hurt_player.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_medkit_interact.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_medkit_interact.webp new file mode 100644 index 00000000..19cfdbf1 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_medkit_interact.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_prickly_cactus.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_prickly_cactus.webp new file mode 100644 index 00000000..03729df9 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/object_script_prickly_cactus.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/print_edit_message.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/print_edit_message.webp new file mode 100644 index 00000000..d65c9a8d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/print_edit_message.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/script_run_checkboxes.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/script_run_checkboxes.webp new file mode 100644 index 00000000..8b83a2d0 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/script_run_checkboxes.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/search_for_assets.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/search_for_assets.webp new file mode 100644 index 00000000..289860e3 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/getting_started/search_for_assets.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill.webp new file mode 100644 index 00000000..30b3c1b5 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill_handle_ff.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill_handle_ff.webp new file mode 100644 index 00000000..bb830ea5 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill_handle_ff.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill_if_value.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill_if_value.webp new file mode 100644 index 00000000..83c2e1da Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_score_kill_if_value.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_setup_and_weapon.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_setup_and_weapon.webp new file mode 100644 index 00000000..9c3fcff6 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/match/match_setup_and_weapon.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_add_equipable.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_add_equipable.png new file mode 100644 index 00000000..d3548245 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_add_equipable.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_add_script.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_add_script.png new file mode 100644 index 00000000..37acda7f Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_add_script.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_audio_clip_node.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_audio_clip_node.png new file mode 100644 index 00000000..9505b9ca Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_audio_clip_node.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_copy_asset_id.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_copy_asset_id.png new file mode 100644 index 00000000..41d90e41 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_copy_asset_id.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_drag_and_drop.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_drag_and_drop.png new file mode 100644 index 00000000..154891b9 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_drag_and_drop.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_interaction.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_interaction.gif new file mode 100644 index 00000000..75b5dcb6 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_interaction.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_paste_asset_id.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_paste_asset_id.png new file mode 100644 index 00000000..a1a748ed Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_paste_asset_id.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_play_animation.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_play_animation.png new file mode 100644 index 00000000..e8a2a4b3 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_play_animation.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_player_interact_script.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_player_interact_script.png new file mode 100644 index 00000000..e7af5334 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_basic/npc_basic_player_interact_script.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/move_to_node.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/move_to_node.png new file mode 100644 index 00000000..77facc42 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/move_to_node.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/npc_capsule.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/npc_capsule.gif new file mode 100644 index 00000000..146d8441 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/npc_capsule.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/npc_physical_properties.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/npc_physical_properties.png new file mode 100644 index 00000000..4795bf6c Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/npc_physical_properties.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/process_every_frame.png b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/process_every_frame.png new file mode 100644 index 00000000..5e806bec Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/process_every_frame.png differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/zombie.gif b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/zombie.gif new file mode 100644 index 00000000..103251c4 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/npc_walking/zombie.gif differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_edit.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_edit.webp new file mode 100644 index 00000000..13dc2ada Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_edit.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_instance.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_instance.webp new file mode 100644 index 00000000..2ce3916d Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_instance.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_save.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_save.webp new file mode 100644 index 00000000..4a80aa19 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_save.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_sidebar.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_sidebar.webp new file mode 100644 index 00000000..41c70a40 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_asset_sidebar.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_set_name_editor.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_set_name_editor.webp new file mode 100644 index 00000000..19baa310 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_set_name_editor.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_set_name_inspector.webp b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_set_name_inspector.webp new file mode 100644 index 00000000..2c854929 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/img/saving/script_set_name_inspector.webp differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/match_round_system.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/match_round_system.mdx new file mode 100644 index 00000000..c1d855d3 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/match_round_system.mdx @@ -0,0 +1,115 @@ +--- +sidebar_position: 3.3 +--- + +# Match/Round System + +The Mirror includes a high-level system for match-based games, with optional rounds. + +## Matches + +Matches represent the overall game loop for match-based games. If your Space is just a place for people to hang out, or your Space is a game with no way to achieve victory, you don't need to use matches. + +You can set the match settings using the Set Match Settings script block. You can run this when the game starts, or just run it once in Build mode. This block does not necessarily need to be present in the final game, you can run it once in Build mode, and then the match settings will be saved in the Space Variables. You can start a match by using the Start Match block. + +When a new match starts, all Space Variables are reset to the values they had when the Space was published, and all players will respawn. Matches can be ended manually or by achieving victory (see the "Victory" section below). + +## Rounds + +Rounds are optional. A match may have many rounds, or no rounds at all. + +A game using rounds is like Counter-Strike. The team's score is the number of rounds the team has won. You can end a round in script using the End Round block, which will add 1 to the winning team's score. By default, the End Round block will also start the next round after a short delay; this can be configured by adjusting the block's inputs. When the next round starts, all players will respawn. Variables will not be reset between rounds, so the game state is preserved. For example, in a game like Counter-Strike, money can be preserved between rounds. + +A game not using rounds is like Team Fortress. In script, you can add to the team's score when the team completes an objective. The objective could be something simple like "capture a flag" or "kill an enemy player", or it can be as elaborate as you'd like, regardless it is all determined by your script. + +## Victory + +The match can end in one of three ways: + +- For round-based games, you can end a round using an End Round script block. This will add 1 to the winning team's score. When the team's score reaches the win score, that team is declared the winner and the match ends. +- For non-round-based games, you can add points using an Add Score To Team script block. When the team's score reaches the win score, that team is declared the winner and the match ends. +- You can end the match at any time in script using either an End Match block or a Terminate Match block. + +When a match ends, the scoreboard will be force-shown on the screen. The scoreboard will have the winning team's name displayed and will have a button at the bottom to start a new match. + +You can also terminate the match, which will end the match without declaring a winner or showing the scoreboard. You can use this to implement your own system for showing the winner and restarting the match. For example, you may want to teleport the players to an open field and set off red fireworks if the red team wins, or blue fireworks if the blue team wins. Then to restart the match, you could have it do so after a few seconds, or provide a button on a pedestal that users can press to restart. + +## Example: Team Deathmatch + +Here is an example of a simple team deathmatch game. This example uses matches but not rounds, so we want to add to the score directly when a player killed another. + +First, we will make a script that runs when a player kills a player. This script will add 1 to the killer's team's score. Then to make sure it's working, we will print a message with the team's score. + +import MatchScoreKill from './img/match/match_score_kill.webp'; + +Script that gives 1 point to the killer + +Next, we will make a script that handles the rest of the game. When the game starts, we want to start a match and set the match settings. Remember that starting a match will reset all Space Variables, so if you want to set custom settings it needs to be done after the Start Match block. And of course, we need to give players guns when they spawn so they can kill each other. + +import MatchSetupAndWeapon from './img/match/match_setup_and_weapon.webp'; + +Script that starts a match, sets the match settings, and gives players guns + +Note: In the above example we disabled friendly fire in the match settings because the first script does not handle friendly fire. Here is a similar script that handles friendly fire. It subtracts 1 (add -1) from the team score and print "Friendly Fire!" when a player kills a player on the same team. + +import MatchScoreKillHandleFF from './img/match/match_score_kill_handle_ff.webp'; + +Script that gives 1 point to the killer, or subtracts 1 if the killer and victim are on the same team + +Furthermore, the logic in this script seems quite big due to all of the printing. If we did not print anything, we could simplify this a lot by using an If Value script block. The below script can be read as "When a player is killed, add points to the killer's team, -1 if friendly fire or 1 if not friendly fire". + +import MatchScoreKillIfValue from './img/match/match_score_kill_if_value.webp'; + +Script that add points to the killer's team, -1 if friendly fire or 1 if not friendly fire + +## GDScript + +The match/round system API can also be accessed from GDScript via the `Zone.match_system` singleton. You can access them like this: + +```gdscript +Zone.match_system.add_score_to_team(team_name, score_to_add) +Zone.match_system.end_match(winning_team_name) +Zone.match_system.end_round(winning_team_name, auto_start_next, auto_start_wait_time, auto_start_freeze_time) +Zone.match_system.get_score_for_team(team_name) +Zone.match_system.get_team_names() +Zone.match_system.is_match_running() +Zone.match_system.is_round_running() +Zone.match_system.set_score_for_team(team_name, new_score) +Zone.match_system.start_match(freeze_time) +Zone.match_system.start_round(freeze_time) +Zone.match_system.terminate_match() +Zone.match_system.terminate_round() +``` + +Here are the function signatures: + +```gdscript +func add_score_to_team(team_name: String, score_to_add: int) -> bool: +func end_match(winning_team_name: String) -> void: +func end_round(winning_team_name: String, auto_start_next: bool, auto_start_wait_time: float, auto_start_freeze_time: float) -> void: +func get_score_for_team(team_name: String) -> int: +func get_team_names() -> Array[String]: +func is_match_running() -> bool: +func is_round_running() -> bool: +func set_score_for_team(team_name: String, new_score: int) -> bool: +func start_match(freeze_time: float = -1.0) -> void: +func start_round(freeze_time: float = -1.0) -> void: +func terminate_match() -> void: +func terminate_round() -> void: +``` diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/npc_basic.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/npc_basic.mdx new file mode 100644 index 00000000..c7d962c2 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/npc_basic.mdx @@ -0,0 +1,60 @@ +--- +sidebar_position: 3.4 +--- + +# NPC Basic + +The Mirror provides a method for creating NPCs using Visual Scripting. In this tutorial, we will create a humanoid NPC that gives a weapon to the player each time they interact with it. + +## The NPC Model + +The initial requirement is to create the NPC model, rig it, animate it, and finally export it as a GLB file. Once the GLB file is ready, you can easily import it into The Mirror by drag and drop. +At this stage, the NPC is prepared, and all that is necessary is to drag and drop it into the scene. + +![Drag and drop](img/npc_basic/npc_basic_drag_and_drop.png) + +## Interact + +At this stage, we can proceed with the script creation. Select the NPC model, open the script tab, and click the 'Add Script' button. + +![Add script](img/npc_basic/npc_basic_add_script.png) + +Select 'New Script' and create a Player Interact script. + +![Create player interact script](img/npc_basic/npc_basic_player_interact_script.png) + +## Animate the NPC + +The concept is to animate the NPC every time the player interacts. To achieve this, you'll utilize the PlayAnimation node, illustrated below. + +![Play animation](img/npc_basic/npc_basic_play_animation.png) + +Interacting with the NPC will cause the NPC model to animate. + +## Let's make the NPC talk. + +We want our NPC to talk or emit a sound when the player interacts, to make it alive. To accomplish this, we can use the PlayAudioClip node. + +![Play Audio Clip](img/npc_basic/npc_basic_audio_clip_node.png) + +This node plays the audio clip we specify using the AssetID. The first step is to import our audio clip; you can simply drag and drop a WAV file. Then, select the audio file to open the detail menu and use the button to copy the asset ID. + +![NPC copy asset ID](img/npc_basic/npc_basic_copy_asset_id.png) + +Then, paste the asset ID into the asset ID parameter, on the PlayAudioClip node. + +![NPC paste asset ID](img/npc_basic/npc_basic_paste_asset_id.png) + +## Add Equipable + +The final part of our script involves instructing the NPC to equip the weapon to the player. This can be accomplished using the AddEquipable node. + +![NPC paste asset ID](img/npc_basic/npc_basic_add_equipable.png) + +Please ensure that you specify the Weapon asset ID, which you can copy as we did for the Audio Clip above. Additionally, you can utilize the ClearEquipable node to remove any equipable item from the player before assigning a new one. + +# Conclusion + +![NPC Interaction](img/npc_basic/npc_basic_interaction.gif) + +Interacting with an NPC grants the player a weapon. This script serves as a simple template that can be expanded to create more intricate NPCs, such as companions who assist the player throughout their journey. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/npc_walking.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/npc_walking.mdx new file mode 100644 index 00000000..9166613e --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/npc_walking.mdx @@ -0,0 +1,49 @@ +--- +sidebar_position: 3.5 +--- + +# NPC Walking + +We have already covered the creation of a basic NPC in the previous article, where it gives a weapon to the player upon interaction. In this article, we will expand on that by creating a script to make the NPC move to a specific location. + +## The SpaceObject properties + +The prerequisite for enabling NPC movement is to set the Body Type to Kinematic and the Shape Type to Capsule. + +![Drag and drop](img/npc_walking/npc_physical_properties.png) +![Drag and drop](img/npc_walking/npc_capsule.gif) + + +## Script + +Now that the NPC is prepared for movement, add a Player Interact Script (as done in the previous article), and then add a MoveTo node. +The MoveTo node instructs the SpaceObject to move to the specified location while avoiding obstacles. + +![Drag and drop](img/npc_walking/move_to_node.png) + +Following is the list of properties it accepts: +- OnObject: The SpaceObject to move. +- Location: The destination location. +- Acceleration: The change in velocity the capsule takes when moving. +- Deceleration: The change in velocity the capsule takes when stopping. +- MaxSpeed: The speed the SpaceObject tries to maintain. +- StepHeight: The height the SpaceObject can step up. It's useful for walking up stairs. +- MaxPushForce: The maximum amount of pushing force this SpaceObject can generate when touching another SpaceObject. +- SupportingHeight: Starting from the ground, indicates the part of the capsule that supports the SpaceObject even on steep slopes. +- Gravity: The constant downward acceleration. +- MinDistanceFromTarget: Specifies the distance that the SpaceObject tries to maintain from the target. +- MaxDistanceFromTarget: When it's more than 0 and the distance from the target is greater, the SpaceObject moves toward the BaseLocation instead of toward the TargetLocation. +- BaseLocation: The location the SpaceObject moves toward if the target is too far. +- SteeringRayOffset: The ray casted by the steering algorithm is offset. +- SteeringRayLength: The ray length used for steering. The longer it is, the sooner the SpaceObject will react to obstacles. +- SteeringRayRadius: The ray thickness. +- SteeringIgnore: The array containing all the SpaceObjects/Players the steering has to ignore. +- RotationOffset: The model rotation offset, used to re-orient the model. + +# Conclusion + +In combination with the MoveTo node, it is possible to use the PlayAnimation node (as explained in the previous article) to make the NPC walk around. +You can use the MoveTo node in conjunction with the ProcessEveryFrame node to create complex NPCs, such as zombies. + +![Drag and drop](img/npc_walking/process_every_frame.png) +![Drag and drop](img/npc_walking/zombie.gif) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/saving_scripts.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/saving_scripts.mdx new file mode 100644 index 00000000..c69f9219 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/saving_scripts.mdx @@ -0,0 +1,133 @@ +--- +sidebar_position: 3.2 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import Table from '/src/components/Table'; +import YouTube from 'react-youtube'; + +# Saving Scripts + +Once you have made a script, a common desire is to save it for later use. The Mirror provides 2 ways to do this: Saving as a script asset, and copying the script contents as JSON. + +Before saving a script for later, you should first give the script a meaningful name. This can either be done from in the script editor or in the inspector. + +import ScriptSetNameEditor from './img/saving/script_set_name_editor.webp'; +import ScriptSetNameInspector from './img/saving/script_set_name_inspector.webp'; + +Script editor set name field in a red box +Script inspector set name field in a red box + +## Script Assets + +When you have a script that you want to save for later, you can click the "Save As New Script" button to save the script as a new script asset. + +import ScriptAssetSave from './img/saving/script_asset_save.webp'; + +Script editor save as new script button in a red box + +This will create a new script asset and place it in "MY ASSETS", which you can find in the sidebar. + +import ScriptAssetSidebar from './img/saving/script_asset_sidebar.webp'; + +Script asset sidebar hovering over the new script asset to show its name + +You can click on a script asset to edit the name, edit the description, delete the asset, and view its contents. When viewing the script asset, entry blocks will be surrounded with a yellow outline, indicating that it is not active. If you hover over it, there will be an explanation of why it is not active. + +import ScriptAssetEdit from './img/saving/script_asset_edit.webp'; + +Script editor editing a script asset with a yellow outline around the entry block + +When you want to instance a script asset, drag-and-drop the script into the hierarchy. Scripts can be either attached globally to the Space (drag onto "GLOBAL SCRIPTS") or to a specific object (drag onto that object). + +import ScriptAssetInstance from './img/saving/script_asset_instance.webp'; + +Script asset instance process with red arrows pointing from the asset sidebar to the scene hierarchy + +In the future, we will add the ability for users to publish assets for other people to use, including script assets. + +## Copying Scripts + +You can select script blocks and copy them using the shortcut below. This will copy the selected script blocks into your OS clipboard. You can paste back into the script editor, or paste anywhere else you'd like. + + + {[ + { label: 'Windows', value: 'windows', cmdCtrlKey: 'CTRL' }, + { label: 'Mac', value: 'mac', cmdCtrlKey: 'CMD' }, + { label: 'Linux', value: 'linux', cmdCtrlKey: 'CTRL' }, + ].map((os) => { + { + /* React MDX isn't working here for some reason. Should be able to use the below */ + } + const cmdCtrlKey = os.cmdCtrlKey; + const headers = [`Input`, `Action`]; + const data = [ + [`${cmdCtrlKey} + C`, `Copy selection`], + [`${cmdCtrlKey} + V`, `Paste selection`], + [`${cmdCtrlKey} + D`, `Duplicate selection`], + ]; + return ( + +
+ + ); + })} + + +The copied data will be the selected script blocks encoded as JSON, it will look like this: + +```json +{ + "blocks": [ + { + "flows": [-1], + "inputs": [ + ["Title", 4, "Script Notification"], + ["Message", 0, "Hello World!"], + ["Notify Status", 4, "Info"] + ], + "name": "Print Notify", + "type": "print_notify" + } + ], + "name": "Example", + "type": "MirrorVisualScript" +} +``` + +You can paste this data into a variety of places: + +- Paste it back into The Mirror's script editor to load the JSON data as script blocks. +- Paste it into a text editor and save it as a file (suggested file extension: `.vs.json`). +- Paste it in Discord and share it with your friends (surround with ``` characters to format as code). + +Note that, for safety reasons, you cannot paste entry blocks. This ensures that pasting will never result in the pasted blocks immediately running. Nothing you paste will run until you connect the pasted blocks to an entry or click the white triangle, you have control over when blocks run. + +When pasting, your existing selection is preserved, and the pasted blocks will be added to the selection. The paste position will be relative to the mouse. + +When copy-pasting data within the same script, prefer using Duplicate instead. When duplicating, only the new blocks will be selected, so you can drag them elsewhere. The blocks will be initially placed in nearly the same position as the original blocks, but will be offset to the bottom-right by 100 pixels. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/vs_api_reference.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/vs_api_reference.mdx new file mode 100644 index 00000000..a7541605 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/script/vs_api_reference.mdx @@ -0,0 +1,2562 @@ +--- +sidebar_position: 3.9 +title: Visual Scripting API Reference +sidebar_label: VS API Reference +note: This page is auto-generated from the script API, do not manually edit it. See res://addons/mirror_internal/script_api_dumper/script_api_dumper.gd in the Godot app. +--- + +# Visual Scripting API Reference + +This page contains a reference of the entire visual scripting API available to you in The Mirror. + +## Entry Signals + +These signals can be used as entry points for your script (the first run blocks that are executed). Some come from SpaceObject, some come from subnodes, and some are global signals. Global scripts may only use global signals. Object scripts may use all signals. + +### SpaceObject + +Signals emitted when a player interacts with a SpaceObject. + +#### On Player Interact + +Emitted when a player interacts with a SpaceObject. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +### Trigger + +Signals emitted when physics trigger events happen, like bodies entering triggers. + +#### On Player Interact + +Emitted when a player interacts with a trigger. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### On Body Entered Trigger + +Emitted when a physics body is of type Trigger and another body enters it. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### On Body Exited Trigger + +Emitted when a physics body is of type Trigger and another body exits it. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +### Animation + +Signals emitted when an AnimationPlayer node finishes playing an animation. + +#### On Animation Animation Finished + +Emitted when an AnimationPlayer node finishes playing an animation. This signal requires an AnimationPlayer subnode. + +| Output Name | Data Type | +| -------------- | -------------------------------------------------------------------------- | +| Animation Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +### Audio + +Signals emitted when an audio player node finishes playing its audio. + +#### On Audio Finished + +Emitted when an audio player node finishes playing an audio file. This signal requires an AudioStreamPlayer(3D) subnode. + +### Timer + +Signals emitted when a Timer node finishes counting down. + +#### On Timer Timeout + +Emitted when a Timer node finishes counting down. This signal requires a Timer subnode. Note: The duration is an input that you can adjust in the inspector, it is not supplied by the signal. + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +### Player + +Global signals emitted when events happen to players. + +#### On Player Connected + +Emitted when a player connects to the server. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### On Player Disconnected + +Emitted when a player disconnects from the server. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### On Player Killed By Player + +Emitted when a player is killed by another player. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ------------- | -------------------------------------------------------------------------- | +| Victim Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Killer Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Victim Team | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Killer Team | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Friendly Fire | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### On Player Spawned + +Emitted when a player spawns. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +### Variables + +Global signals emitted when variables are changed. + +#### On Global Variable Changed + +Emitted when any global variable is changed. To avoid infinite loops, this is deferred until the end of the frame. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| -------------- | ---------------------------------------------------------------------------- | +| Variable Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Variable Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### On Global Variable Tweened + +Emitted when any global variable is tweened. To avoid infinite loops, this is deferred until the end of the frame. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ------------- | ---------------------------------------------------------------------------- | +| Variable Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| From Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | +| To Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### On Object Variable Changed + +Emitted when any object variable is changed. To avoid infinite loops, this is deferred until the end of the frame. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| -------------- | ---------------------------------------------------------------------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Variable Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Variable Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### On Object Variable Tweened + +Emitted when any object variable is tweened. To avoid infinite loops, this is deferred until the end of the frame. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ------------- | ---------------------------------------------------------------------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Variable Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| From Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | +| To Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +### Match + +Global signals emitted when a match or round starts or ends. + +#### On Match Start + +Emitted when a match starts. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Freeze Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### On Match End + +Emitted when a match ends (but not when it's terminated). This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------------- | -------------------------------------------------------------------------- | +| Winning Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### On Round Start + +Emitted when a round starts. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Freeze Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### On Round End + +Emitted when a round ends (but not when it's terminated). This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------------- | -------------------------------------------------------------------------- | +| Winning Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### On Team Score Changed + +Emitted when a team's score changes. This signal will only emit for valid teams. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Team Score | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +### Global + +Misc global signals not covered by other categories. + +#### On Game Start + +Emitted when the game starts after all SpaceObjects have loaded. This is a global signal, it can be used from any script. + +#### On Process Every Frame + +Emitted every frame. Please avoid using this signal if possible, as it can be very expensive. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Delta Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### On Death + +Emitted when a player dies. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ------------- | -------------------------------------------------------------------------- | +| Target Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Event Origin | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### On Server Revive + +Emitted when a player is revived by the server. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ------------- | -------------------------------------------------------------------------- | +| Target Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Event Origin | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### On Health Changed + +Emitted when a player's health changes. This is a global signal, it can be used from any script. + +| Output Name | Data Type | +| ------------- | -------------------------------------------------------------------------- | +| Target Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| New Health | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Old Health | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Event Origin | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +### OMI_seat + +Signals emitted from a seat as defined by [OMI_seat](https://github.com/omigroup/gltf-extensions/tree/main/extensions/2.0/OMI_seat). + +#### On OMI_seat Player Sit Here + +Emitted when a player sits on a seat as defined by OMI_seat. This signal requires an OMI_seat subnode. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### On OMI_seat Player Unsit Here + +Emitted when a player stops sitting on a seat as defined by OMI_seat. This signal requires an OMI_seat subnode. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +### OMI_spawn_point + +Signals emitted from a spawn point as defined by [OMI_spawn_point](https://github.com/omigroup/gltf-extensions/tree/main/extensions/2.0/OMI_spawn_point). + +#### On OMI_spawn_point Player Spawned Here + +Emitted when a player spawns at a spawn point as defined by OMI_spawn_point. This signal requires an OMI_spawn_point subnode. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +## Script Blocks + +Regular script blocks. These allow you to perform actions (run blocks) or gather information (data blocks). + +### Misc + +These blocks are very important, and so are top-level in the script block creation dialog, not tucked away in a category. + +#### Print In Chat (Say/Shout/Global) + +Prints a Message to the chat. If ran on a script attached to an object, it will make that object "talk". If the Range is 0 or less, it will be global. If the range is less than 2, it will be a whisper. If the range is less than 40, it will be a say. If the range is 40 or greater, it will be a shout. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Message | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Range | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 20.0 | + +#### Print Notify + +Prints a Message to the notification area. The Notify Status can be Info, Success, Warning, or Error. + +| Input Name | Data Type | Default Value | +| ------------- | ---------------------------------------------------------------------------- | --------------------- | +| Title | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Script Notification" | +| Message | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Notify Status | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Info" | + +#### Emit Signal + +Emits a custom user-defined signal on an object. The Signal Name must be a signal with an entry block already defined elsewhere in your Space. If the Object is null, the signal will emit on the object the script is attached to. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| Signal Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +### Flow + +Flow blocks control the flow of execution in your script. They are used to run code in a specific order, or to run code when a condition is met. + +#### Branch + +Branches the flow of execution based on a Condition. If the Condition is true, it will execute the True flow. If the Condition is false, it will execute the False flow. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------- | ------------- | +| Condition | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +#### If + +Executes the True flow if the Condition is true. If the Condition is false, it will execute the False flow. After executing the True or False flow, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------- | ------------- | +| Condition | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +#### If Equals + +Executes the True flow if the Left value equals the Right value. If the values are not equal, it will execute the False flow. This is equivalent to `if Left == Right:` in GDScript. After executing the True or False flow, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Left | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Right | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +#### Loop + +Loops the given number of Times and executes Action each time. Index starts at 0 and is exclusive at the end (if Times is 3, Index will be 0, 1, then 2). The Action flow may only run at most 1000 times. This is equivalent to `for i in range(times)` in GDScript. After finishing the loop, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------- | ------------- | +| Times | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 5 | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------- | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### While + +Loops while the Condition is true. This is equivalent to `while Condition:` in GDScript. The True flow may only run at most 1000 times. After finishing the loop, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------- | ------------- | +| Condition | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +#### Match Flow + +If the Input matches a Case, the Flow with the same number will be executed. If no flow matches, it will execute the Default flow. After executing the matched or Default flow, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Input | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Case 1 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +#### Wait (Async) + +Pauses the script execution for the given number of seconds. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Seconds | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +### Logic + +Logic blocks are used to perform logic operations on data, like comparing numbers, matching values, or combining boolean values. + +#### If Value + +If Condition is true, Output is set to the True value. Otherwise, Output is set to the False value. This is equivalent to `Output = True if Condition else False` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Condition | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| True | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| False | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Output | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Match Value + +If Input matches a Case, the Value with the same number will be set as the Output. Otherwise, the Output will be set to Default. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Input | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Default | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Case 1 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Value 1 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Output | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### And + +If both Left and Right are true, Result will be true. Otherwise, Result will be false. This is equivalent to `Left and Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------- | ------------- | +| Left | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Right | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Equals + +If Left equals Right, Result will be true. Otherwise, Result will be false. This is equivalent to `Left == Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Left | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Right | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Greater Than + +If Left is greater than Right, Result will be true. Otherwise, Result will be false. This is equivalent to `Left > Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Left | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Right | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Less Than + +If Left is less than Right, Result will be true. Otherwise, Result will be false. This is equivalent to `Left < Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Left | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Right | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Not + +If Input is true, Result will be false. If Input is false, Result will be true. This is equivalent to `not Input` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------- | ------------- | +| Input | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Or + +If either Left or Right is true, Result will be true. Otherwise, Result will be false. This is equivalent to `Left or Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------- | ------------- | +| Left | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Right | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +### Math + +Math blocks are used to perform math operations on numbers, like adding, subtracting, multiplying, or dividing. + +#### Add + +Adds Left and Right together. This is equivalent to `Left + Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | --------- | ------------- | +| Value 1 | Math | 0.0 | +| Value 2 | Math | 0.0 | + +| Output Name | Data Type | +| ----------- | --------- | +| Result | Math | + +#### Clamp + +Clamps Value between Minimum and Maximum. This is equivalent to `clamp(Value, Minimum, Maximum)` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | --------- | ------------- | +| Value | Math | 0.0 | +| Minimum | Math | 0.0 | +| Maximum | Math | 1.0 | + +| Output Name | Data Type | +| ----------- | --------- | +| Result | Math | + +#### Divide + +Divides Left by Right. This is equivalent to `Left / Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | --------- | ------------- | +| Left | Math | 0.0 | +| Right | Math | 0.0 | + +| Output Name | Data Type | +| ----------- | --------- | +| Result | Math | + +#### Modulus + +Returns the modulus of Left and Right. For integers, this is equivalent to `posmod(Left, Right)` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | --------- | ------------- | +| Left | Math | 0.0 | +| Right | Math | 0.0 | + +| Output Name | Data Type | +| ----------- | --------- | +| Result | Math | + +#### Multiply + +Multiplies Left and Right together. This is equivalent to `Left * Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | --------- | ------------- | +| Left | Math | 0.0 | +| Right | Math | 0.0 | + +| Output Name | Data Type | +| ----------- | --------- | +| Result | Math | + +#### Subtract + +Returns Left minus Right. This is equivalent to `Left - Right` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | --------- | ------------- | +| Left | Math | 0.0 | +| Right | Math | 0.0 | + +| Output Name | Data Type | +| ----------- | --------- | +| Result | Math | + +#### Constant Math Expression + +Evaluates the given math expression at compile time, using the Expression class provided by Godot. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Expression | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "TAU / 4" | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Result | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Random Number + +Returns a random number between Minimum and Maximum, with a multiple of Step. This is inclusive on both sides, so it may return Minimum or Maximum. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Minimum | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Maximum | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Step | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Number | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Rotation Looking At + +Returns a rotation such that the +Z axis points towards Positive and the -Z axis points towards Negative. Positive and Negative may not be equal or vertically on top of each other. + +| Input Name | Data Type | Default Value | +| ------------ | ---------------------------------------------------------------------------- | ------------- | +| Positive | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Negative | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Up Direction | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 1, 0) | + +| Output Name | Data Type | +| -------------------- | ---------------------------------------------------------------------------- | +| Euler Angles Degrees | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +### Time + +Time blocks are used to get the current time, convert between time formats, and format time values. + +#### Get Current Unix Time In UTC + +Returns the current Unix timestamp in seconds based on the system time in UTC. This method always returns the time in UTC. + +| Output Name | Data Type | +| -------------- | ------------------------------------------------------------------------ | +| Unix Timestamp | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Date/Time String To Unix Timestamp + +Converts the given ISO 8601 date and/or time string to a Unix timestamp. The string can contain a date only, a time only, or both. + +| Input Name | Data Type | Default Value | +| ------------------ | -------------------------------------------------------------------------- | ------------- | +| ISO 8601 Date/Time | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| -------------- | -------------------------------------------------------------------- | +| Unix Timestamp | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Date/Time Values To Unix Timestamp + +Converts the given date/time values to a Unix timestamp. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------- | ------------- | +| Year | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 1970 | +| Month | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 1 | +| Day | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 1 | +| Hour | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | +| Minute | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | +| Second | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | + +| Output Name | Data Type | +| -------------- | -------------------------------------------------------------------- | +| Unix Timestamp | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Unix Timestamp To Date/Time String + +Converts the given Unix timestamp to an ISO 8601 date/time string. + +| Input Name | Data Type | Default Value | +| -------------- | -------------------------------------------------------------------- | ------------- | +| Unix Timestamp | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | + +| Output Name | Data Type | +| ------------------ | -------------------------------------------------------------------------- | +| ISO 8601 Date/Time | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Unix Timestamp To Date/Time Values + +Converts the given Unix timestamp to date/time values. + +| Input Name | Data Type | Default Value | +| -------------- | -------------------------------------------------------------------- | ------------- | +| Unix Timestamp | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------- | +| Year | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Month | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Day | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Hour | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Minute | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Second | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +### String + +String blocks are used to perform string operations, like concatenating strings and formatting strings. + +#### String Case Insensitive Equals + +Performs a case-insensitive equality check on the given Strings. For example, "RED", "red", and "Red" would all be considered equal to each other. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Left | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Right | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Result | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Concatenate Strings + +Concatenates the given strings together (also known as adding or appending the strings). + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Value 1 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value 2 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Result | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Join Strings + +Joins the given strings together with the given Joiner in between each string. This is equivalent to `Joiner.join(PackedStringArray([Value1, Value2]))` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Joiner | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | ", " | +| Value 1 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value 2 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Result | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Convert To String + +Converts the given Input value to a string. This is equivalent to `str(Input)` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Input | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| String | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Convert To JSON + +Converts the given Key and Value to JSON as `{Key: Value}`. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "name" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| JSON | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Format String Using Array + +Formats the given Template string using the given Values array. This is equivalent to `Template % Values` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Template | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Values | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| String | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Format String Using JSON + +Formats the given Template string using the given JSON. This is equivalent to `Template.format(JSON)` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| JSON | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "{}" | +| Template | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| String | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Get JSON key Value + +Returns the Value for the given Key in the given JSON. If the Key does not exist, it will return null. This is equivalent to `JSON.get(Key)` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| JSON | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "{}" | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Merge JSONs + +Merges the given JSONs together. If the same key exists in both, the value from JSON1 will be used. This is equivalent to `JSON1.merge(JSON2)` in GDScript. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| JSON1 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "{}" | +| JSON2 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "{}" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Output | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### String Length + +Returns the amount of characters in the given string. The input data is passed through unchanged for convenience. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| String | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Length | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +### Color + +Color blocks are used to perform color operations, like constructing colors and converting colors to strings. + +#### Color Construct + +Constructs a Color from the given Red, Green, Blue, and Opacity values, on a range of 0 to 1. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Red | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Green | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Blue | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Opacity | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | + +#### Color From HSV + +Constructs a Color from the given Hue, Saturation, Value, and Opacity values, on a range of 0 to 1. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Hue | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Saturation | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Value | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Opacity | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | + +#### Color From String + +Constructs a Color from the given String. The String can be a friendly name (like red) or a hex color code (like #f00 or #ff0000). Returns Default if the String cannot be converted into a color. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| String | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Default | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | + +#### Color Split + +Splits the given Color into its Red, Green, Blue, and Opacity values, on a range of 0 to 1. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Red | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Green | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Blue | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Opacity | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Color Clamp + +Clamps the given input between the given minimum and maximum. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | +| Minimum | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | +| Maximum | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (1, 1, 1, 1) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Clamped | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | + +### Vector2 + +Vector2 blocks are used to perform 2D vector math operations. + +#### Vector2 Construct + +Constructs a Vector2 from the given X and Y values. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| X | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Y | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Vector | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | + +#### Vector2 From Angle (Sin/Cos) + +Constructs a Vector2 from the given angle in degrees. The X value will be the cosine of the angle, and the Y value will be the sine of the angle. The X and Y values are also provided separately, so this script block can be used as Sin and Cos as well, or the values can be wired into a Vector3 Construct block. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Degrees | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Vector | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | +| X (Cos) | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Y (Sin) | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector2 Split + +Splits the given Vector2 into its X and Y values. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| X | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Y | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector2 Angle To + +Returns the angle between two vectors, in degrees. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector2 | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| To | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Degrees | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector2 Clamp + +Clamps the given input between the given minimum and maximum. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector2 | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| Minimum | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| Maximum | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Clamped | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | + +#### Vector2 Distance To + +Returns the distance between two vectors. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector2 | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| To | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Distance | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector2 Length + +Returns the magnitude of the given vector. The input data is passed through unchanged for convenience. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector2 | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Pass | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | +| Length | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector2 Move Toward + +Moves the first vector towards the given To target by the given amount. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector2 | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| To | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| Delta | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Moved | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | + +#### Vector2 Project + +Projects the first vector onto the Onto vector. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector2 | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | +| Onto | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Projected | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | + +### Vector3 + +Vector3 blocks are used to perform 3D vector math operations. + +#### Vector3 Construct + +Constructs a Vector3 from the given X, Y, and Z values. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| X | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Y | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Z | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Vector | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +#### Vector3 Split + +Splits the given Vector3 into its X, Y, and Z values. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| X | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Y | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Z | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector3 Angle To + +Returns the angle between two vectors, in degrees. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector3 | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| To | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Degrees | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector3 Clamp + +Clamps the given input between the given minimum and maximum. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector3 | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Minimum | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Maximum | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Clamped | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +#### Vector3 Distance To + +Returns the distance between two vectors. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector3 | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| To | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Distance | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector3 Length + +Returns the magnitude of the given vector. The input data is passed through unchanged for convenience. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector3 | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Pass | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | +| Length | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Vector3 Move Toward + +Moves the first vector towards the given To target by the given amount. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector3 | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| To | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Delta | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Moved | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +#### Vector3 Project + +Projects the first vector onto the Onto vector. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Vector3 | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Onto | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Projected | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +### Array + +Array blocks are used to perform operations on lists of values. + +#### Array Construct + +Constructs an Array from the given values. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Index 0 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Index 1 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Array Get + +Returns the Value at the given Index in the given Array. If the Index is out of bounds, Value will be set to the default for the selected data type. The input array is passed through unchanged for convenience. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Pass | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Array Set + +Sets the Value at the given Index in the given Array. If the Index is out of bounds, the Array will be extended to fit the Index, up to a maximum size of 1000. The input array is passed through for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Pass | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Array Contains / Find + +If the given Array contains the given Value, Found will be true, and Index will be set to the index of the first occurrence. If Value is not in the Array, Found will be false and Index will be -1. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Pass | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | +| Found | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Array For Each + +Loops through each value in the given Array. This is equivalent to `for value in array:` in GDScript. After finishing the loop, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Array Pick Random + +Picks a random Value from the given Array and its Index. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Array Duplicate + +Duplicates the given collection. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Deep | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Duplicated | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Array Is Empty + +Returns true if the given collection is empty. The input data is passed through unchanged for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Pass | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | +| Is Empty | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Array Size + +Returns the size of the given collection. The input data is passed through unchanged for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Pass | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | +| Size | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Array Sort + +Sorts the given collection. This sorts the original data, and passes it through for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Sorted | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Array Shuffle + +Shuffles the array such that the items will be in a random order. This shuffles the original data, and passes it through for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ------------- | +| Array | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Shuffled | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +### Dictionary + +Dictionary blocks are used to perform operations on key/value pairs. + +#### Dictionary Construct + +Constructs a Dictionary from the given Key and Value pairs. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Key 2 | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value 2 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | + +#### Dictionary Get + +Returns the Value at the given Key in the given Dictionary. If the Key does not exist, Value will be set to the default for the selected data type. The input dictionary is passed through unchanged for convenience. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Pass | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Dictionary Set + +Sets the Value at the given Key in the given Dictionary. The input dictionary is passed through for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Pass | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | + +#### Dictionary For Each + +Loops through each key and value in the given Dictionary. This is equivalent to `for key in dictionary: var value = dictionary[key]` in GDScript. After finishing the loop, it will execute the Done flow. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Dictionary Pick Random + +Picks a random Key and Value from the given Dictionary. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Key | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Dictionary Duplicate + +Duplicates the given collection. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | +| Deep | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Duplicated | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | + +#### Dictionary Is Empty + +Returns true if the given collection is empty. The input data is passed through unchanged for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Pass | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | +| Is Empty | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Dictionary Size + +Returns the size of the given collection. The input data is passed through unchanged for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Pass | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | +| Size | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Dictionary Sort + +Sorts the given collection. This sorts the original data, and passes it through for convenience (this is not a copy). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------------- | ------------- | +| Dictionary | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | { } | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------------- | +| Sorted | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | + +### SpaceObject + +SpaceObject blocks are used to control SpaceObjects. All objects in your Space are SpaceObjects. + +#### Get Self + +Returns the SpaceObject that this script is attached to, or the global scripts singleton if a global script. Note that you usually do not need this script block, as you can leave the Object port blank on most script blocks and it will use Self automatically. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Self | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Create Space Object (Async) + +Creates a new SpaceObject with the given parameters. By default, the transform parameters are relative, the new object will spawn near the object the script is on. The new object will appear in the Space after a very short delay (a fraction of a second). This script block is async, it will pause execution until the SpaceObject finishes being created. + +| Input Name | Data Type | Default Value | +| ---------------- | ---------------------------------------------------------------------------- | ------------- | +| Asset ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Position | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 1, 0) | +| Rotation Degrees | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Relative | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Scale | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (1, 1, 1) | +| Offset | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Collision | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Shape Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Auto" | +| Body Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Static" | +| Mass | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Gravity Scale | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Damageable | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| SpaceObject | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Delete Space Object + +Deletes the given SpaceObject. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| SpaceObject | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +#### Get Space Object + +Gets the SpaceObject with the given Name or ID. If no object is found, it will return null. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Name or ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| SpaceObject | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Is Other Space Object + +If the given Object is a SpaceObject and is not the current SpaceObject, Is Other will be true and SpaceObject will be set to the object. If the given Object is not a SpaceObject or is the current SpaceObject, Is Other will be false and SpaceObject will be set to null. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ------------ | -------------------------------------------------------------------------- | +| Is Other | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | +| Space Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### BBCode To SpaceObject Texture (Async) + +Takes the given SpaceObject (On Object) and renders a texture with the given BBCode and background color. The texture will be rendered after a very short delay (a few frames). + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| BBCode | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| BG Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | + +#### Scroll Texture + +Scrolls the texture on the given SpaceObject (On Object) by the given Scroll Offset over the given Duration with the specified Transition and Easing. + +| Input Name | Data Type | Default Value | +| ------------- | ---------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Scroll Offset | [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html) | (1, 0) | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 2.0 | +| Transition | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Linear" | +| Easing | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "In Out" | + +#### NPC Move to + +Move the NPC toward the specified location. Returns: ON_TARGET, MOVING_TO_TARGET, MOVING_TO_BASE, ON_BASE + +| Input Name | Data Type | Default Value | +| ------------------------ | ---------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Target Location | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Acceleration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 40.0 | +| Deceleration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 25.0 | +| Max Speed | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 9.0 | +| Step Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.2 | +| Max Push Force | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 5000000.0 | +| Supporting Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.2 | +| Gravity | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 9.8 | +| Min Distance From Target | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 2.0 | +| Max Distance From Target | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | -1.0 | +| Base Location | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Steering Ray Offset | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 1, 0) | +| Steering Ray Length | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 10.0 | +| Steering Ray Radius | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.5 | +| Steering Ignore | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Rotation offset | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Result | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Damage Using Capsule + +Cast a capsule and damage anything within that capsule. + +| Input Name | Data Type | Default Value | +| ---------------- | ---------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Damage | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 10.0 | +| Impulse | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Can Damage Teams | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Can Damage Self | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Ignore | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | +| Collider Offset | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 2.0 | +| Radius | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Damaged | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Is Dead + +Returns true when the SpaceObject or Character is dead. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Is Dead | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Get Model Node By Name + +Gets a model node of the SpaceObject by name. These are nodes imported from the GLTF file. Model nodes are guaranteed to have a unique name. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Node Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ------------ | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Node Or Null | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Get Model Node By Type + +Gets a model node of the SpaceObject by type. These are nodes imported from the GLTF file. If multiple nodes of the same type exist, the first one found is returned. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Node Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ------------ | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Node Or Null | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Center Model Offset + +Adjusts the model offset of the SpaceObject so that the model's center is at the origin of the SpaceObject. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Get Space Object Asset Id + +Gets the asset ID of the SpaceObject. This is the ID of the asset that was used to create the SpaceObject. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Asset ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Queue Update Network Object + +Queues an update to the SpaceObject's network object. Many operations will automatically queue an update, but this can be used to force an update. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +### Player + +Player blocks are used to perform operations on Players. + +#### Get All Players + +Gets all Players in the Space as an Array. You can loop over this with the Array For Each script block. + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Players | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Get Players On Team + +Gets all Players on the given Team as an Array. You can loop over this with the Array For Each script block. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Players | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Get Local Player (Client-Side) + +Gets the local Player. This script block may only be run on client-side scripts. If ran on the server, an error will be printed. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Get Player By ID + +Gets a player by their User ID. If found, it is set to Player, and Is Valid will be true. If no player is found, Player will be null, and Is Valid will be false. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| User ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Is Valid | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Get Players In Range + +Gets players in a given range. If multiple players are in range, Closest Player will be the nearest one. If no players are in range, Closest Player will be null and the array will be empty. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| Relative To | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Range | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 5.0 | + +| Output Name | Data Type | +| ---------------- | -------------------------------------------------------------------------- | +| Closest Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Players In Range | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +#### Get Player Role For Space + +Gets the role of the given Player. Return values include but are not limited to OWNER, MANAGER, CONTRIBUTOR, and OBSERVER. Role ID is a number from 0 to 1000 that reflects the permissions level, 1000 means all permissions and 0 means no permissions. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Role Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | +| Role ID | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Get Player Inventory + +Gets the inventory of the given Player. This includes the currently held item and all items. The inventory array is a copy, any writes will not affect the player. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Inventory | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | +| Held Item | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Get Player Head + +Gets the head of the given Player. This can be used to get the position or rotation of the player's viewpoint. This node's transform may only be read, any writes will be ignored and overwritten. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Head | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Get Player Height + +Gets the height of the given Player. The height can either be retrieved in Meters or as a Multiplier of the player's model height. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Height Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Meters" | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Set Player Height + +Sets the height of the given Player. This can be used to make the player tiny or giant. The height can either be set in Meters or as a Multiplier of the player's model height. For competitive games, you would likely want to set all players to the same height in meters. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.75 | +| Height Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Meters" | + +#### Set Player Avatar + +Sets the Player's avatar to the specified URL. This can be used to create an avatar world where users interact +with objects to switch to avatars, or to enforce a specific appearance in competitive or class-based games. +The Avatar input must be a URL to the avatar GLB file, such as an avatar from Ready Player Me. + +For competitive or class-based games, set Lock to true to prevent players from switching to another avatar in their menu. +If your game is not competitive but you still want to ensure players are a similar size, consider using Set Player Height +instead, as custom avatars are a very fun form of self-expression; most users want to play as themselves. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Avatar | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Lock | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Height Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Multiplier" | + +#### Tween Player Height + +Tweens the height of the given Player. The height can either be tweened in Meters or as a Multiplier of the player's model height. + +| Input Name | Data Type | Default Value | +| ----------- | -------------------------------------------------------------------------- | ------------- | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Height | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.75 | +| Height Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Meters" | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Transition | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Linear" | +| Easing | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "In Out" | + +#### Is Valid Player + +If the given Object is a Player, Is Valid will be true and Player will be set to the player. If the given Object is not a Player, Is Valid will be false and Player will be set to null. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Is Valid | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | +| Player | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### User Profile Request (Async) + +Requests the user profile for the given User ID. The profile will be returned after a short delay (a fraction of a second). + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| User ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| JSON | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Respawn Player + +Respawns the player. This will teleport the player to a random spawn point on the player's team. If no spawn point for this team is found, a random spawn point for a different team will be picked. If the Space has no spawn points, the player will be teleported to the global world origin. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Get Player Team + +Gets the player's team name. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Team | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Set Player Team + +Sets the player's team using the team name and team color. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Team | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Set Player Input Allowed + +Sets whether the player is allowed to move and look around. Setting this to false will disallow and disable input. Setting this to true will allow but not necessarily enable input, because the player may have input disabled for other reasons, like being in a menu. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Is Allowed | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Is Player Input Allowed + +Gets whether the player is allowed to move and look around. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Is Allowed | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Add Equipable + +Adds an equipable to the player's hotbar. Asset ID must point to an asset with `MIRROR_equipable` metadata defined in the GLTF file. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Asset ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Clear Equipables + +Clears the player's hotbar of all equipables. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +### Animation + +Animation blocks are used to control playing animations imported from GLTF files. + +#### Play Animation + +Plays the given animation on the given Node with the given speed. The node can either be an AnimationPlayer or the ancestor of one; this allows you to play an animation on a SpaceObject and it will automatically find the AnimationPlayer for you. The animation name can be one of the animations supplied by the GLTF model file, or it can be special names `stop` or `pause` to stop or pause the animation. If the animation does not exist, it will print an error and script execution will be stopped. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "stop" | +| Speed | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +#### Is Animation Playing + +Returns true if the given animation is playing on the given Node. The animation name can be one of the animations supplied by the GLTF model file, or it can be empty to check for any animation playing. The node can either be an AnimationPlayer or the ancestor of one; this allows you to check if an animation is playing on a SpaceObject and it will automatically find the AnimationPlayer for you. + +| Input Name | Data Type | Default Value | +| ------------- | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Name Or Empty | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Is Playing | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Get Animation Speed + +Returns the speed of animation playback on the given Node. The node can either be an AnimationPlayer or the ancestor of one; this allows you to get the speed of an animation playing on a SpaceObject and it will automatically find the AnimationPlayer for you. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Speed | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +### Audio + +Audio blocks are used to control playing audio clips and audio nodes. + +#### Play Audio Clip + +Plays the given Asset ID containing audio as a one-shot audio clip with the given settings. Audio clips are not connected to a persistent audio player node, they are for when you 'just want to play audio' without worrying about nodes. Audio clips cannot be tracked or stopped once started, and may have multiple playing at once, they are best used for short sound effects. + +| Input Name | Data Type | Default Value | +| ------------------ | -------------------------------------------------------------------------- | ------------- | +| Asset ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Volume | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 100.0 | +| Speed | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Speed Randomness | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Is Spatial | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Spatial Range | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Spatial Max Volume | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 150.0 | + +#### Play Audio Node (Same Settings) + +Plays the given audio player node with the same settings as it was last played with. Audio player nodes allow you to persistently keep track of audio playback, including stopping it later, or running a signal when it finishes. Audio nodes may only have one audio playback playing at a time, they are best used for music or game-critical audio like performing an action when the final boss's monologue ends. The node can either be an audio player or the ancestor of one; this allows you to play audio on a SpaceObject and it will automatically find the audio player node for you. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +#### Play Audio Node (Custom Settings) + +Plays the given audio player node with the given settings. Audio player nodes allow you to persistently keep track of audio playback, including stopping it later, or running a signal when it finishes. Audio nodes may only have one audio playback playing at a time, they are best used for music or game-critical audio like performing an action when the final boss's monologue ends. The node can either be an audio player or the ancestor of one; this allows you to play audio on a SpaceObject and it will automatically find the audio player node for you. + +| Input Name | Data Type | Default Value | +| ------------------ | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Loop | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Volume | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 100.0 | +| Speed | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Speed Randomness | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Is Spatial | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Spatial Range | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Spatial Max Volume | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 150.0 | + +#### Is Audio Node Playing + +Returns true if the given audio player node is currently playing audio. The node can either be an audio player or the ancestor of one; this allows you to check if a SpaceObject is playing audio and it will automatically find the audio player node for you. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Is Playing | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Stop Playing Audio Node + +Stops the given audio player node from playing audio. The node can either be an audio player or the ancestor of one; this allows you to stop playing audio on a SpaceObject and it will automatically find the audio player node for you. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Node | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +### Physics + +Physics blocks are used to manipulate physics objects. + +#### Apply Force Impulse + +Applies an Impulse force to the given Physics Body. This is a one-time force with a unit of Newton-seconds (kg⋅m/s). The physics body must be set to Dynamic to use this block. + +| Input Name | Data Type | Default Value | +| ------------ | ---------------------------------------------------------------------------- | ------------- | +| Physics Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Impulse | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +#### Apply Force Over Time + +Applies a Force to the given Physics Body over a period of time specified by Duration. This is a continuous force with a unit of Newtons (kg⋅m/s²). The physics body must be set to Dynamic to use this block. + +| Input Name | Data Type | Default Value | +| ------------ | ---------------------------------------------------------------------------- | ------------- | +| Physics Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Force | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +#### Move And Collide + +Moves the given Physics Body by the given Movement Amount. This is not recommended if other blocks will work in its place, but is useful for moving a SpaceObject in well-defined steps when you want to have fine control over movement. The physics body must not be Static, but may be Kinematic, Dynamic, or Trigger. + +| Input Name | Data Type | Default Value | +| --------------- | ---------------------------------------------------------------------------- | ------------- | +| Physics Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Movement Amount | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +#### Get Physics Material Properties + +Gets the Physics Material Properties of the given Physics Body: Friction and Bounciness (also known as restitution). + +| Input Name | Data Type | Default Value | +| ------------ | -------------------------------------------------------------------------- | ------------- | +| Physics Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | ------------------------------------------------------------------------ | +| Friction | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Bounciness | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | + +#### Set Physics Material Properties + +Sets the Physics Material Properties of the given Physics Body: Friction and Bounciness (also known as restitution). + +| Input Name | Data Type | Default Value | +| ------------ | -------------------------------------------------------------------------- | ------------- | +| Physics Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Friction | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.2 | +| Bounciness | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | + +#### Physics Raycast + +Performs a raycast from the From vector in the Direction vector. If Length is negative, the size of Direction is used as the length. If Sphere Radius is 0 then perform a raycast, otherwise this is the radius of the sphere to use as a shape cast. Hit Triggers allows controlling if the raycast hits triggers, if false only solid objects will be hit. The Ignore inputs allow ignoring self or other objects. + +The outputs correspond to the closest hit object. Body is the node that was hit. One of Depth or Fraction will be zero. If the cast started inside of the hit shape, Depth will correspond to the amount of penetration depth. If the cast started outside of the hit shape, Fraction is the ratio of the cast distance which the cast travels to hit it. Normal is the direction of contact, and Position is the location of contact, both in global world space. + +All Hits is an Array of Dictionaries that contains "body", "depth", "fraction", "normal", and "position" like the other outputs, but for all hits. When Has Hit is false, All Hits is empty. When Has Hit is true, index 0 is the same data as the outputs. All Hits may zero or one result for raycasts. All Hits may have zero, one, or many results for shape casts. + +| Input Name | Data Type | Default Value | +| -------------- | ---------------------------------------------------------------------------- | ------------- | +| From | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Direction | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Length | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | -1.0 | +| Sphere Radius | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.0 | +| Hit Triggers | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Ignore Self | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Ignore Objects | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | [] | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Has Hit | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | +| Body | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Depth | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Fraction | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | +| Normal | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | +| Position | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | +| All Hits | [Array](https://docs.godotengine.org/en/stable/classes/class_array.html) | + +### Environment + +Environment blocks are used to control the environment, like the sky, fog, and lighting. + +#### Get Environment Sun + +Gets the sun with the given index from the environment. You may have between 0 and 4 suns in your game. If the requested index does not exist, the script block will show error. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------- | ------------- | +| Index | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Sun | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Set Environment Fog + +Sets the environment's fog settings to the given parameters. + +| Input Name | Data Type | Default Value | +| ---------- | ------------------------------------------------------------------------ | ---------------- | +| Enabled | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Volumetric | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Density | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 0.01 | +| Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0.8, 0.9, 1, 1) | + +#### Set Environment Properties + +Sets the environment's Sun Count and Global Illumination to the given values. You may have between 0 and 4 suns in your game. + +| Input Name | Data Type | Default Value | +| ------------------- | ---------------------------------------------------------------------- | ------------- | +| Sun Count | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 1 | +| Global Illumination | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +#### Set Environment Sky Color + +Sets the environment's sky colors to the given colors. + +| Input Name | Data Type | Default Value | +| ------------- | ------------------------------------------------------------------------ | --------------------- | +| Top Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0.38, 0.45, 0.55, 1) | +| Horizon Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0.65, 0.65, 0.67, 1) | +| Bottom Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0.2, 0.17, 0.13, 1) | + +### Variables + +Variable blocks are used to store and retrieve values. Variables may be global or per-object. All variables are reset when starting a new match. + +#### Get Global Variable + +Gets the value of the global variable with the given name or path. The variable will be of the type specified by the script block. Variables may be accessed by name or by JSON pointer path. For example, `a/b` and `a.b` both refer to `"a": {"b": "this value"}`. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Has Global Variable + +Returns true if the global variable with the given name or path exists, false otherwise. Variables may be accessed by name or by JSON pointer path. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ------------ | ---------------------------------------------------------------------- | +| Has Variable | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Set Global Variable + +Sets the value of the global variable with the given name or path. Variables may be accessed by name or by JSON pointer path. For example, `a/b` and `a.b` both refer to `"a": {"b": "this value"}`. If the path does not exist, it will be created. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +#### Tween Global Variable + +Tweens the global variable with the given name or path with the given settings. Variables may be accessed by name or by JSON pointer path. For example, `a/b` and `a.b` both refer to `"a": {"b": "this value"}`. If the path does not exist, it will be created. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Transition | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Linear" | +| Easing | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "In Out" | + +#### Get Object Variable + +Gets the value of the object variable with the given name or path. Variables may be accessed by name or by JSON pointer path. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### Has Object Variable + +Returns true if the object variable with the given name or path exists, false otherwise. Variables may be accessed by name or by JSON pointer path. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ------------ | ---------------------------------------------------------------------- | +| Has Variable | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Set Object Variable + +Sets the value of the object variable with the given name or path. Variables may be accessed by name or by JSON pointer path. If the path does not exist, it will be created. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | + +#### Tween Object Variable + +Tweens the object variable with the given name or path with the given settings. Variables may be accessed by name or by JSON pointer path. If the path does not exist, it will be created. Variables are for user-defined data and are automatically synced over the network. + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Value | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | "" | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Transition | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Linear" | +| Easing | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "In Out" | + +### Match + +Match blocks are used to control the match and rounds, like starting/ending the match, or adding points to a team. + +#### Start Match + +Start a new match and freeze players for the given time. If a match is already running, a new match will override the old one. + +| Input Name | Data Type | Default Value | +| ----------- | ------------------------------------------------------------------------ | ------------- | +| Freeze Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +#### End Match + +Ends the current match, declares the given team as the winner, and force-shows the scoreboard. If no match is running, a warning will be shown and the block will do nothing. + +| Input Name | Data Type | Default Value | +| ----------------- | -------------------------------------------------------------------------- | ------------- | +| Winning Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +#### Terminate Match + +Terminates the current match and does not declare a winner. This block will work even when no match is running. + +#### Is Match Running + +Returns true if a match is currently running. + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Is Running | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Start Round + +Start a new round and freeze players for the given time. If a round is already running, a new round will override the old one. If no match is running, a warning will be shown and the block will do nothing. + +| Input Name | Data Type | Default Value | +| ----------- | ------------------------------------------------------------------------ | ------------- | +| Freeze Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +#### End Round + +Ends the current round and adds 1 point to this round's winning team. If no round is running, a warning will be shown and the block will do nothing. + +| Input Name | Data Type | Default Value | +| ---------------------- | -------------------------------------------------------------------------- | ------------- | +| Winning Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Auto Start Next | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Auto Start Wait Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 3.0 | +| Auto Start Freeze Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | + +#### Terminate Round + +Terminates the current round without declaring a winner. The next round will not automatically start and no On Round End signal will be emitted. For normal gameplay loops, use End Round instead. If no match is running, a warning will be shown and the block will do nothing. + +#### Is Round Running + +Returns true if a round is currently running, false otherwise. + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Is Running | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Set Match Settings + +Sets the match settings for the current match to the given Freeze Time, Friendly Fire, and Win Score settings. The settings will be saved to Space Variables. Friendly Fire may be set to "Enabled", "Disabled", "No Kills", or "Reflect". + +| Input Name | Data Type | Default Value | +| ------------- | -------------------------------------------------------------------------- | ------------- | +| Freeze Time | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Friendly Fire | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Enabled" | +| Win Score | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 3 | + +#### Add Score To Team + +Adds the given Score to the given team's score. If the Team Name does not correspond to any team, no score will be set on a team, but if the score is high enough a victory will be triggered anyway. If no match is running, a warning will be shown and the block will do nothing. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Score | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 1 | + +#### Get Score For Team + +Gets the score of the given team. If the Team Name does not correspond to any team, -1 will be returned. This block may run even if no match is running. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------- | +| Score | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | + +#### Set Score For Team + +Sets the given team's score to the given New Score. If the Team Name does not correspond to any team, no score will be set on a team, but if the score is high enough a victory will be triggered anyway. If no match is running, a warning will be shown and the block will do nothing. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Team Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| New Score | [int](https://docs.godotengine.org/en/stable/classes/class_int.html) | 0 | + +#### Set Scoreboard Title + +Sets the title of the scoreboard to the given text. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Title | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Scoreboard" | + +#### Show Scoreboard + +Shows the scoreboard for players. If Player Or All is not specified, the scoreboard is shown for all players. Note: In Build mode, at least one button will always be shown, to prevent soft-locking yourself. + +| Input Name | Data Type | Default Value | +| --------------- | -------------------------------------------------------------------------- | ------------- | +| Player Or All | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Allow Close | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Allow New Match | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | + +#### Hide Scoreboard + +Hides the scoreboard for players. If Player Or All is not specified, the scoreboard is hidden for all players. + +| Input Name | Data Type | Default Value | +| ------------- | -------------------------------------------------------------------------- | ------------- | +| Player Or All | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +### Space + +Space blocks are for getting information about the Space. + +#### Get Space ID + +Gets the ID of the current Space. This is a unique identifier that can be used to identify the Space. + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Space ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +### Rotation Degrees + +Rotation Degrees blocks are used to perform operations on Euler angle rotations in degrees. + +#### Get Rotation Degrees + +Gets the rotation in the form of Euler angles in degrees. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ---------------- | ---------------------------------------------------------------------------- | +| Rotation Degrees | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +#### Set Rotation Degrees + +Sets the rotation in the form of Euler angles in degrees. + +| Input Name | Data Type | Default Value | +| ---------------- | ---------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Rotation Degrees | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +#### Tween Rotation Degrees + +Tweens the rotation in the form of Euler angles in degrees over the given Duration with the given Transition and Easing. + +| Input Name | Data Type | Default Value | +| ---------------- | ---------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Rotation Degrees | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | +| Duration | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | +| Transition | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Linear" | +| Easing | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "In Out" | + +### Advanced + +Advanced blocks are used to perform advanced operations. + +#### Get Friendly Name + +Gets the friendly name of the given Object. For SpaceObject, this will get the name shown in the inspector. For Player, this will get the player's display name. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ------------- | -------------------------------------------------------------------------- | +| Friendly Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Get Node Name Or ID + +Gets the raw name of the given node. For SpaceObject and Player, this will return their unique ID. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| --------------- | -------------------------------------------------------------------------- | +| Node Name or ID | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | + +#### Attach Script + +Attaches the given Space script entity to the given SpaceObject. The Script Name must be the name of a script already present in the Space. If the script is already attached, this block will silently exit and do nothing. + +| Input Name | Data Type | Default Value | +| ----------------- | -------------------------------------------------------------------------- | ------------- | +| Space Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Script Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | +| Run In Build Mode | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | +| Run On Client | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | false | +| Run On Server | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | + +#### Is Server + +Returns true if the script is running on the server, false otherwise. + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------- | +| Is Server | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | + +#### Evaluate Now + +Evaluates the given data script block(s) immediately. This is useful for controlling the evaluation order of data blocks. The connected input must be data block, not a run block. All inputs must be connected. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------- | ------------- | +| Input 1 | Connection (special) | null | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Output 1 | [Variant](https://docs.godotengine.org/en/stable/classes/class_variant.html) | + +#### To Global + +Converts a local vector (relative to this node) to a global vector (relative to the world origin). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Local | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Global | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +#### To Local + +Converts a global vector (relative to the world origin) to a local vector (relative to this node). + +| Input Name | Data Type | Default Value | +| ---------- | ---------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Global | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | + +| Output Name | Data Type | +| ----------- | ---------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | +| Local | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | + +### Damageable + +Damageable blocks are used to hurt or heal damageable objects and players. + +#### Damage + +Damage the target object by the given amount. The object may be a SpaceObject or a Player. Amount should be positive, if you use a negative amount that will heal instead. + +| Input Name | Data Type | Default Value | +| ---------------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Amount | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 20.0 | +| Source Of Damage | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "scripting" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Heal + +Heal the target object by the given amount. The object may be a SpaceObject or a Player. Amount should be positive, if you use a negative amount that will damage instead. + +| Input Name | Data Type | Default Value | +| ----------------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | +| Amount | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 20.0 | +| Source Of Healing | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "scripting" | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +#### Revive + +Revive the target object from death. + +| Input Name | Data Type | Default Value | +| ---------- | -------------------------------------------------------------------------- | ------------- | +| On Object | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | + +| Output Name | Data Type | +| ----------- | -------------------------------------------------------------------------- | +| Pass | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | + +## Properties + +Properties all share a similar API. Properties can be get, set, and sometimes tweened, added to, and multiplied. If properties are set on the server, they will be synced to clients. + +| Property Name | Data Type | Default Value | Valid Values | +| --------------------- | ---------------------------------------------------------------------------- | ------------- | ----------------------------------------------------------- | +| Collision Enabled | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | | +| Physics Shape Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Auto" | "Auto", "Convex", "Concave", "Model Shapes", "Multi Bodies" | +| Physics Body Type | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "Static" | "Static", "Kinematic", "Dynamic", "Trigger" | +| Mass | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | Greater than zero | +| Gravity Scale | [float](https://docs.godotengine.org/en/stable/classes/class_float.html) | 1.0 | | +| Angular Velocity | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | | +| Linear Velocity | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | | +| Model Offset | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | | +| Model Scale | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (1, 1, 1) | Non-zero | +| Space Object Name | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | | +| Object Color | [Color](https://docs.godotengine.org/en/stable/classes/class_color.html) | (0, 0, 0, 1) | | +| Object Local Texture | [Object](https://docs.godotengine.org/en/stable/classes/class_object.html) | null | | +| Material Id | [String](https://docs.godotengine.org/en/stable/classes/class_string.html) | "" | Valid ID | +| Object Texture Size | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | Greater than zero | +| Object Texture Offset | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | | +| Position | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | | +| Global Position | [Vector3](https://docs.godotengine.org/en/stable/classes/class_vector3.html) | (0, 0, 0) | | +| Visible | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | true | | diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/spaces/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/spaces/_category_.json new file mode 100644 index 00000000..4312dbca --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/spaces/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Spaces", + "position": 1, + "link": { + "type": "generated-index", + "description": "Spaces are your game, your world, your playground, your digital reality." + } +} \ No newline at end of file diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/tutorial.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/tutorial.md new file mode 100644 index 00000000..dc7fabda --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/tutorial.md @@ -0,0 +1,124 @@ +--- +sidebar_position: 0 +sidebar_label: Tutorial +--- + +# Tutorial + +## How is The Mirror different? + +**Everything in The Mirror is in real-time**. In nearly every other game development platform or engine, you'll need to tediously build and compile your game and wait for it to load, which leads to long feedback cycles. + +In The Mirror, you can build your game and play **_instantly_** in real-time with friends, colleagues, and players. Check out a comparison of features to other game engines and platforms [here](https://themirror.space/features). + +On this page, we'll walk you through how to get started creating your first Space (game) in The Mirror. + +:::info Alpha +The Mirror is in Alpha, so you may encounter bugs or issues. + +Join our [Discord](https://themirror.space/discord) community to get support and provide feedback. +::: + +### Main Menu + +When you first open The Mirror, you'll be greeted with the Main Menu. From here, you can create a new Space, play a Space, or join a Space. + +![Main Menu](MainMenu.jpg) + +### Create Your First Space + +A Space is a game or experience in The Mirror. To create your first Space, click the **Create Space** button on the home screen. + +![Create Your First Space](Create-Space.jpg) + +### Choose a Template + +The Mirror offers a variety of templates to help you get started. You can also start from scratch by choosing the **Empty** template. + +![Choose a Template](Template.jpg) + +### Name Your Space + +Give your Space a name and click **Create**. Don't worry, you can change the name later. + +![Name Your Space](Space-Name.jpg) + +## Build Your Space + +After you create your Space, you'll be taken inside! From there, begin building via the Build UI by pressing `B`. + +### Build UI + +Press `B` to open The Build UI, the "Editor" for your Space, similar to the editor for a game engine. The Mirror has the full power of a game engine while providing **everything** you need to make a game in a simple and intuitive interface. + +![Build UI](Build-UI.jpg) + +### Invite a Friend + +Since everything's in real-time, you can invite a friend to join you in your Space. To invite a friend, click Share on the top-right of the screen and copy the link. Send the link to a friend and they'll be able to join you in your Space. + +![Invite a Friend](Invite.jpg) + +### Physics + +Physics are at the heart of The Mirror. You can enable physics for any Object in your Space by clicking on the Object, scrolling down to Physics, and changing the Body Type. + +You can also right-click on the Object and select "Enable Physics". + +![Physics](Physics.jpg) + +### Right-Click + +Right click on any Object to open the context menu. The context menu allows you to perform actions on Objects, such as focusing, locking, toggling physics, modifying properties, and more. + +![Right Click](Right-Click.jpg) + +### Preview Mode + +Preview Mode allows you to test your Space without having to publish it. It's an exact **_preview_** of you're Space when you publish it and it's played in Play Mode. You can also invite friends to join you in Preview Mode. + +![Preview Mode](Preview-Mode.jpg) + +### End Preview Mode + +To end the preview, press `ESC` and click the **End Preview** button in the bottom left corner of the screen. + +![End Preview Mode](End-Preview.jpg) + +### Publish Your Space + +Publishing your Space makes it available to play in Play Mode. To publish, open the Build UI with `B`. + +You can choose to publish the current version of your Space or a saved version. Select a version and click **Publish**. + +Any player will now be able to play your Space by clicking **Play** on the Space Details page. + +:::info Versioning +Versioning can be thought of similar to Google Docs and other version-based software. + +You can modify your Space without affecting the published version of your Space. This allows you to work on the next version of your Space while players play the current version. +::: + +![Publish Space](Publish-Space.jpg) + +### Play a Published Space + +To play a published Space, simply click **Play**. This will join the first available server. + +You can also create a new server by clicking **Create Server**. + +![Play Space](Play.jpg) + +### Visual Scripting + +Visual Scripting is one of the most powerful features of The Mirror. It allows you to create interactive experiences without writing a single line of code, even if you've never written a line of code in your life. + +If you prefer to write code, we'll be releasing in-world GDScript and shaders in the future! + +Check out our [Visual Scripting](/docs/category/scripting) documentation for more information. + +![Visual Scripting](Scripting.jpg) + +## Next Steps + +Now that you've created your first Space, you can start building your own worlds. Head to the [Build section](/docs/category/build) next. diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-10-16.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-10-16.jpeg new file mode 100644 index 00000000..63ca345e Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-10-16.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-10-57.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-10-57.jpeg new file mode 100644 index 00000000..332eacf2 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-10-57.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-13-13.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-13-13.jpeg new file mode 100644 index 00000000..fa0dfc12 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-13-13.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-13-34.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-13-34.jpeg new file mode 100644 index 00000000..b9d84524 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-13-34.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-16-18.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-16-18.jpeg new file mode 100644 index 00000000..a7dba084 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-23-19-16-18.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-24-10-19-41.jpeg b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-24-10-19-41.jpeg new file mode 100644 index 00000000..dd8ad720 Binary files /dev/null and b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/2023-02-24-10-19-41.jpeg differ diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/_category_.json b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/_category_.json new file mode 100644 index 00000000..a6fb59d8 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Users", + "position": 6, + "link": { + "type": "generated-index", + "description": "Showcase your Mirror Image and interact with other people in The Mirror." + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/change-your-avatar.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/change-your-avatar.md new file mode 100644 index 00000000..cdaee68d --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/change-your-avatar.md @@ -0,0 +1,15 @@ +--- +sidebar_position: 1 +--- + +# Change Your Avatar + +In game, press ESC and click Avatar on the top navbar. + +![](2023-02-23-19-13-13.jpeg) + +From here, you can choose two of our default avatars or import a [Ready Player Me](https://readyplayer.me/) avatar. + +Be sure to click "Continue with Avatar" after making your choice. + +![](2023-02-23-19-13-34.jpeg) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/ready-player-me.mdx b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/ready-player-me.mdx new file mode 100644 index 00000000..cb0ad421 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/ready-player-me.mdx @@ -0,0 +1,11 @@ +--- +sidebar_position: 1 +--- + +# Ready Player Me + +To use a [Ready Player Me](https://readyplayer.me/) avatar, get the .glb URL from the [Ready Player Me](https://readyplayer.me/) website and paste the URL. + +![](2023-02-24-10-19-41.jpeg) + +![](2023-02-23-19-16-18.jpeg) diff --git a/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/update-your-profile.md b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/update-your-profile.md new file mode 100644 index 00000000..c857d5ef --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-plugin-content-docs/current/users/update-your-profile.md @@ -0,0 +1,11 @@ +--- +sidebar_position: 1 +--- + +# Update Your Profile + +Head to https://in.themirror.space and click the top right icon to modify your profile. + +![](2023-02-23-19-10-16.jpeg) + +![](2023-02-23-19-10-57.jpeg) diff --git a/mirror-docs/i18n/ru/docusaurus-theme-classic/footer.json b/mirror-docs/i18n/ru/docusaurus-theme-classic/footer.json new file mode 100644 index 00000000..6e7dbeec --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-theme-classic/footer.json @@ -0,0 +1,58 @@ +{ + "link.title.Social": { + "message": "Social", + "description": "The title of the footer links column with title=Social in the footer" + }, + "link.title.Download": { + "message": "Download", + "description": "The title of the footer links column with title=Download in the footer" + }, + "link.title.About": { + "message": "About", + "description": "The title of the footer links column with title=About in the footer" + }, + "link.item.label.Discord": { + "message": "Discord", + "description": "The label of footer link with label=Discord linking to https://themirror.space/discord" + }, + "link.item.label.Reddit": { + "message": "Reddit", + "description": "The label of footer link with label=Reddit linking to https://reddit.com/r/themirrorspace" + }, + "link.item.label.Twitter": { + "message": "Twitter", + "description": "The label of footer link with label=Twitter linking to https://twitter.com/themirrorgdp" + }, + "link.item.label.Instagram": { + "message": "Instagram", + "description": "The label of footer link with label=Instagram linking to https://instagram.com/themirrorgdp" + }, + "link.item.label.LinkedIn": { + "message": "LinkedIn", + "description": "The label of footer link with label=LinkedIn linking to https://www.linkedin.com/company/the-mirror-megaverse" + }, + "link.item.label.Itch.io: The Mirror": { + "message": "Itch.io: The Mirror", + "description": "The label of footer link with label=Itch.io: The Mirror linking to https://themirrorgdp.itch.io/the-mirror" + }, + "link.item.label.Home": { + "message": "Home", + "description": "The label of footer link with label=Home linking to https://themirror.space" + }, + "link.item.label.Blog": { + "message": "Blog", + "description": "The label of footer link with label=Blog linking to https://themirror.space/blog" + }, + "link.item.label.Features": { + "message": "Features", + "description": "The label of footer link with label=Features linking to https://themirror.space/features" + }, + "link.item.label.Open-Source Licenses": { + "message": "Open-Source Licenses", + "description": "The label of footer link with label=Open-Source Licenses linking to https://www.notion.so/the-mirror/Open-Source-License-Credits-Public-8a3e0d75682b48d7bfaa3518f4b5caaf" + }, + "copyright": { + "message": "Copyright © 2024 The Mirror Megaverse, Inc. | We ❤️ Open-Source: Built with Docusaurus", + "description": "The footer copyright" + } +} diff --git a/mirror-docs/i18n/ru/docusaurus-theme-classic/navbar.json b/mirror-docs/i18n/ru/docusaurus-theme-classic/navbar.json new file mode 100644 index 00000000..2e488466 --- /dev/null +++ b/mirror-docs/i18n/ru/docusaurus-theme-classic/navbar.json @@ -0,0 +1,22 @@ +{ + "logo.alt": { + "message": "The Mirror Logo", + "description": "The alt text of navbar logo" + }, + "item.label.Docs: App": { + "message": "Docs: App", + "description": "Navbar item with label Docs: App" + }, + "item.label.Docs: Open-Source Code": { + "message": "Docs: Open-Source Code", + "description": "Navbar item with label Docs: Open-Source Code" + }, + "item.label.Github Monorepo": { + "message": "Github Monorepo", + "description": "Navbar item with label Github Monorepo" + }, + "item.label.In The Mirror": { + "message": "In The Mirror", + "description": "Navbar item with label In The Mirror" + } +} diff --git a/mirror-docs/package.json b/mirror-docs/package.json index ec068e93..63b9a0ab 100644 --- a/mirror-docs/package.json +++ b/mirror-docs/package.json @@ -5,6 +5,7 @@ "scripts": { "docusaurus": "docusaurus", "dev": "docusaurus start", + "start": "docusaurus start", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", diff --git a/mirror-docs/src/components/HomepageFeatures/index.tsx b/mirror-docs/src/components/HomepageFeatures/index.tsx index 087ca7ff..5db42b0d 100644 --- a/mirror-docs/src/components/HomepageFeatures/index.tsx +++ b/mirror-docs/src/components/HomepageFeatures/index.tsx @@ -1,46 +1,72 @@ -import React from 'react'; -import clsx from 'clsx'; -import styles from './styles.module.css'; +import React from "react"; +import clsx from "clsx"; +import styles from "./styles.module.css"; +import Translate, { translate } from "@docusaurus/Translate"; type FeatureItem = { title: string; - Svg: React.ComponentType>; + Svg: React.ComponentType>; description: JSX.Element; }; const FeatureList: FeatureItem[] = [ { - title: 'Physics Sandbox', - Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, + title: translate({ + message: "Physics Sandbox", + description: "The title for the Physics Sandbox feature", + }), + Svg: require("@site/static/img/undraw_docusaurus_mountain.svg").default, description: ( - <> - Building a multiplayer game is hard! The Mirror makes this easy. You're the creator, the developer, the designer, and the architect of your Mirror Space. - + + Building a multiplayer game is hard! The Mirror makes this easy. You're + the creator, the developer, the designer, and the architect of your + Mirror Space. + ), }, { - title: 'Co-Build with Friends', - Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, + title: translate({ + message: "Co-Build with Friends", + description: "The title for the Co-Build with Friends feature", + }), + Svg: require("@site/static/img/undraw_docusaurus_react.svg").default, description: ( - <> - With Godot, the Mirror offers real-time game development with seamless transitions between building and playing, knit together with out-of-the-box networking, payments, authentication, publishing, and more. - + + With Godot, the Mirror offers real-time game development with seamless + transitions between building and playing, knit together with + out-of-the-box networking, payments, authentication, publishing, and + more. + ), }, { - title: 'Monetize', - Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, + title: translate({ + message: "Monetize", + description: "The title for the Monetize feature", + }), + Svg: require("@site/static/img/undraw_docusaurus_tree.svg").default, description: ( - <> - The Mirror is your platform to make a living off your passion of game development and 3D modeling. Monetize interoperable creations with the click of a button. - + + The Mirror is your platform to make a living off your passion for game + development and 3D modeling. Monetize interoperable creations with the + click of a button. + ), }, ]; function Feature({ title, Svg, description }: FeatureItem) { return ( -
+
diff --git a/mirror-docs/src/pages/index.tsx b/mirror-docs/src/pages/index.tsx index c7c23d59..a7462fd8 100644 --- a/mirror-docs/src/pages/index.tsx +++ b/mirror-docs/src/pages/index.tsx @@ -1,38 +1,66 @@ -import React from 'react'; -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; +import React from "react"; +import clsx from "clsx"; +import Link from "@docusaurus/Link"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import Layout from "@theme/Layout"; +import HomepageFeatures from "@site/src/components/HomepageFeatures"; +import Translate, { translate } from "@docusaurus/Translate"; -import styles from './index.module.css'; -import { initPostHog } from '../analytics/posthog'; +import styles from "./index.module.css"; +import { initPostHog } from "../analytics/posthog"; // Init analytics -initPostHog() +initPostHog(); function HomepageHeader() { const { siteConfig } = useDocusaurusContext(); return ( -
+
-

Freedom to Own

-

The Open-Source Roblox & UEFN Alternative

+

+ + Freedom to Own + +

+

+ + The Open-Source Roblox & UEFN Alternative + +

- App Docs + to="/docs/get-started" + style={{ marginRight: "15px" }} + > + + App Docs + - Open-Source Docs + to="/docs/open-source-code/get-started" + > + + Open-Source Docs +
-
+
); } @@ -40,8 +68,17 @@ export default function Home(): JSX.Element { const { siteConfig } = useDocusaurusContext(); return ( + title={`${translate({ + id: "homepage.layoutTitle", + message: "Docs", + description: "The title tag for the homepage layout", + })}`} + description={translate({ + id: "homepage.layoutDescription", + message: "Game Development Platform: The Ultimate Sandbox", + description: "The description tag for the homepage layout", + })} + >
diff --git a/mirror-docs/yarn.lock b/mirror-docs/yarn.lock index 3008df13..4ac47276 100644 --- a/mirror-docs/yarn.lock +++ b/mirror-docs/yarn.lock @@ -5299,9 +5299,9 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -"license-checker@git+https://github.com/mwittig/license-checker#d546e3f738e14c62e732346fa355162d46700893": +"license-checker@git+https://github.com/mwittig/license-checker.git#d546e3f738e14c62e732346fa355162d46700893": version "1.0.0" - resolved "git+https://github.com/mwittig/license-checker#d546e3f738e14c62e732346fa355162d46700893" + resolved "git+https://github.com/mwittig/license-checker.git#d546e3f738e14c62e732346fa355162d46700893" dependencies: chalk "~0.5.1" mkdirp "^0.3.5"