Add 4.3 release page (#882)

- Web development by Adam Scott with help from Emilio Coppola
- Design template by Luis Carli
- Visuals by Adam Scott with speial thanks to GDQuest, Kenney, and FR3NKD
- Texts by Nathalie Galla & Adam Scott

Co-authored-by: Nathalie Galla <murderveggie@gmail.com>
Co-authored-by: luiscarli <git@luiscarli.com>
Co-authored-by: Emi <2206700+coppolaemilio@users.noreply.github.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
This commit is contained in:
Adam Scott
2024-08-15 06:57:38 -04:00
committed by GitHub
parent a5e6eb5508
commit b31ec62d03
89 changed files with 5165 additions and 23 deletions

View File

@@ -91,3 +91,8 @@ pagination:
category: "posts"
tag: ""
locale: ""
# .scss generation
sass:
sass_dir: _sass
style: compressed

View File

@@ -1,8 +1,12 @@
- name: "4.3"
flavor: "rc3"
release_date: "8 August 2024"
release_notes: "/article/release-candidate-godot-4-3-rc-3/"
flavor: "stable"
release_date: "15 August 2024"
release_notes: "/releases/4.3/"
featured: "4"
releases:
- name: "rc3"
release_date: "8 August 2024"
release_notes: "/article/release-candidate-godot-4-3-rc-3/"
- name: "rc2"
release_date: "1 August 2024"
release_notes: "/article/release-candidate-godot-4-3-rc-2/"
@@ -41,7 +45,6 @@
flavor: "stable"
release_date: "17 April 2024"
release_notes: "/article/maintenance-release-godot-4-2-2-and-4-1-4/"
featured: "4"
releases:
- name: "rc3"
release_date: "12 April 2024"

View File

@@ -26,12 +26,12 @@
{% if primary[0] == "linux" or primary[0] == "macos" or primary[0] == "windows" %}
{% assign platform_info = site.data.download_platforms | find: "name", primary[1] %}
<div class="download-platform">
<div class="download-platform platform-{{primary[0]}}">
<img width="24" height="24" src="/assets/images/platforms/{{ primary[0] | split: "_" | join: "-" }}.svg" title="{{ platform_info.title }}" alt="{{ platform_info.title }}" class="lightbox-ignore" />
{{ platform_info.title }}
</div>
<a href="{{ release_version | make_download: primary[1], false, "github_builds" }}" class="btn btn-download btn-download-primary">
<a href="{{ release_version | make_download: primary[1], false, "github_builds" }}" class="btn btn-download btn-download-primary platform-{{primary[0]}}">
<div class="download-title">
Standard
</div>
@@ -42,7 +42,7 @@
<div></div>
{% else %}
{% assign has_mono = true %}
<a href="{{ mono_download }}" class="btn btn-download btn-download-primary btn-download-primary--mono">
<a href="{{ mono_download }}" class="btn btn-download btn-download-primary btn-download-primary--mono platform-{{primary[0]}}">
<div class="download-title">
.NET
</div>

View File

@@ -24,8 +24,8 @@
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="/assets/css/main.css?113">
<link rel="stylesheet" href="/assets/css/tobii.min.css">
<link rel="preload" as="font" href="/assets/fonts/Montserrat-Bold.woff2" crossorigin>
<link rel="preload" as="font" href="/assets/fonts/Montserrat-ExtraBold.woff2" crossorigin>
<link rel="preload" as="font" href="/assets/fonts/Montserrat-Italic-VariableFont_wght.woff2" crossorigin>
<link rel="preload" as="font" href="/assets/fonts/Montserrat-VariableFont_wght.woff2" crossorigin>
<link rel="me" href="https://mastodon.gamedev.place/@godotengine">
</head>

13
_layouts/release.html Normal file
View File

@@ -0,0 +1,13 @@
---
layout: default
---
{% include header.html %}
<link rel="stylesheet" href="/assets/css/release.css" />
<div class="release-container">
{{ content }}
</div>
{% include footer.html %}

36
_sass/common/_colors.scss Normal file
View File

@@ -0,0 +1,36 @@
$color-godot-blue: #478CBF;
$color-code-symbol--light: #00009c;
$color-code-symbol--dark: #ABC9FF;
$color-code-keyword--light: #e62282;
$color-code-keyword--dark: #FF7085;
$color-code-controlflow--light: #bd1fcc;
$color-code-controlflow--dark: #FF8CCC;
$color-code-basetype--light: #009933;
$color-code-basetype--dark: #42FFC2;
$color-code-enginetype--light: #1c8c66;
$color-code-enginetype--dark: #8FFFDB;
$color-code-usertype--light: #2e7366;
$color-code-usertype--dark: #C7FFED;
$color-code-string--light: #996b00;
$color-code-string--dark: #FFEDA1;
$color-code-background--light: #ffffff;
$color-code-background--dark: #1D2229;
$color-code-text--light: #393939;
$color-code-text--dark: #CDCFD2;
$color-code-function--light: #0039e6;
$color-code-function--dark: #57B3FF;
$color-code-membervariable--light: #0066ad;
$color-code-membervariable--dark: #BCE0FF;
$color-code-gdscript-function--light: #009999;
$color-code-gdscript-function--dark: #66E6FF;
$color-code-gdscript-globalfunction--light: #5c2eb8;
$color-code-gdscript-globalfunction--dark: #A3A3F5;
$color-code-gdscript-nodepath--light: #2e8c00;
$color-code-gdscript-nodepath--dark: #B8C47D;
$color-code-gdscript-nodereference--light: #008000;
$color-code-gdscript-nodereference--dark: #63C259;
$color-code-gdscript-annotation--light: #cc5e00;
$color-code-gdscript-annotation--dark: #FFB373;
$color-code-gdscript-stringname--light: #cc8f73;
$color-code-gdscript-stringname--dark: #FFC2A6;

View File

@@ -0,0 +1,53 @@
@function offset-hue($color, $offset, $i: 1) {
@return adjust-hue($color, $offset * $i);
}
/**
* From a list $sections (video, foundation, outstanding, _2d),
* it will return a map of sections with the $base-category being assigned with
* a specific $base-color, and will $offset each section by n degrees.
*/
@function r-generate-sections($sections, $base-category, $base-color, $offset) {
$return-value: ();
$base-category-i: index($sections, $base-category);
@each $section in $sections {
$i: index($sections, $section);
$diff: $i - $base-category-i;
$base-color-top: offset-hue($base-color, $offset, $diff);
$base-color-bottom: adjust-color(offset-hue($base-color, $offset, $diff + 1), $lightness: -10);
$color-top: adjust-color($base-color-top, $saturation: -10);
$color-bottom: adjust-color($base-color-bottom, $saturation: -10);
$color-selection: adjust-color($base-color-bottom, $saturation: -30);
$color-invert: adjust-color($base-color-top, $hue: 180, $lightness: 0, $saturation: 30);
$color-highlight: adjust-color($base-color-top, $lightness: 0, $saturation: 30);
$color-highlight--dark: adjust-color($base-color-top, $lightness: 30, $saturation: 30);
$color-invert-highlight: adjust-color($color-invert, $lightness: 20, $saturation: 30);
$return-value: map-merge($return-value, (
#{$section}: (
color-top: $color-top,
color-bottom: $color-bottom,
color-selection: $color-selection,
color-invert: $color-invert,
color-highlight: $color-highlight,
color-highlight--dark: $color-highlight--dark,
color-invert-highlight: $color-invert-highlight
)
));
}
@return $return-value;
}
@function r-desktop-mobile($sizes...) {
@return (
"desktop": nth($sizes, 1),
"mobile": nth($sizes, 2)
);
}
@function r-get-desktop($value) {
@return map-get($value, "desktop");
}
@function r-get-mobile($value) {
@return map-get($value, "mobile");
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

630
assets/css/codicon.css Normal file
View File

@@ -0,0 +1,630 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
@font-face {
font-family: "codicon";
font-display: block;
src: url("../fonts/codicon.ttf") format("truetype");
}
.codicon[class*='codicon-'] {
font: normal normal normal 16px/1 codicon;
display: inline-block;
text-decoration: none;
text-rendering: auto;
text-align: center;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
/*---------------------
* Modifiers
*-------------------*/
@keyframes codicon-spin {
100% {
transform:rotate(360deg);
}
}
.codicon-sync.codicon-modifier-spin,
.codicon-loading.codicon-modifier-spin,
.codicon-gear.codicon-modifier-spin {
/* Use steps to throttle FPS to reduce CPU usage */
animation: codicon-spin 1.5s steps(30) infinite;
}
.codicon-modifier-disabled {
opacity: 0.5;
}
.codicon-modifier-hidden {
opacity: 0;
}
/* custom speed & easing for loading icon */
.codicon-loading {
animation-duration: 1s !important;
animation-timing-function: cubic-bezier(0.53, 0.21, 0.29, 0.67) !important;
}
/*---------------------
* Icons
*-------------------*/
.codicon-add:before { content: "\ea60" }
.codicon-plus:before { content: "\ea60" }
.codicon-gist-new:before { content: "\ea60" }
.codicon-repo-create:before { content: "\ea60" }
.codicon-lightbulb:before { content: "\ea61" }
.codicon-light-bulb:before { content: "\ea61" }
.codicon-repo:before { content: "\ea62" }
.codicon-repo-delete:before { content: "\ea62" }
.codicon-gist-fork:before { content: "\ea63" }
.codicon-repo-forked:before { content: "\ea63" }
.codicon-git-pull-request:before { content: "\ea64" }
.codicon-git-pull-request-abandoned:before { content: "\ea64" }
.codicon-record-keys:before { content: "\ea65" }
.codicon-keyboard:before { content: "\ea65" }
.codicon-tag:before { content: "\ea66" }
.codicon-git-pull-request-label:before { content: "\ea66" }
.codicon-tag-add:before { content: "\ea66" }
.codicon-tag-remove:before { content: "\ea66" }
.codicon-person:before { content: "\ea67" }
.codicon-person-follow:before { content: "\ea67" }
.codicon-person-outline:before { content: "\ea67" }
.codicon-person-filled:before { content: "\ea67" }
.codicon-git-branch:before { content: "\ea68" }
.codicon-git-branch-create:before { content: "\ea68" }
.codicon-git-branch-delete:before { content: "\ea68" }
.codicon-source-control:before { content: "\ea68" }
.codicon-mirror:before { content: "\ea69" }
.codicon-mirror-public:before { content: "\ea69" }
.codicon-star:before { content: "\ea6a" }
.codicon-star-add:before { content: "\ea6a" }
.codicon-star-delete:before { content: "\ea6a" }
.codicon-star-empty:before { content: "\ea6a" }
.codicon-comment:before { content: "\ea6b" }
.codicon-comment-add:before { content: "\ea6b" }
.codicon-alert:before { content: "\ea6c" }
.codicon-warning:before { content: "\ea6c" }
.codicon-search:before { content: "\ea6d" }
.codicon-search-save:before { content: "\ea6d" }
.codicon-log-out:before { content: "\ea6e" }
.codicon-sign-out:before { content: "\ea6e" }
.codicon-log-in:before { content: "\ea6f" }
.codicon-sign-in:before { content: "\ea6f" }
.codicon-eye:before { content: "\ea70" }
.codicon-eye-unwatch:before { content: "\ea70" }
.codicon-eye-watch:before { content: "\ea70" }
.codicon-circle-filled:before { content: "\ea71" }
.codicon-primitive-dot:before { content: "\ea71" }
.codicon-close-dirty:before { content: "\ea71" }
.codicon-debug-breakpoint:before { content: "\ea71" }
.codicon-debug-breakpoint-disabled:before { content: "\ea71" }
.codicon-debug-hint:before { content: "\ea71" }
.codicon-terminal-decoration-success:before { content: "\ea71" }
.codicon-primitive-square:before { content: "\ea72" }
.codicon-edit:before { content: "\ea73" }
.codicon-pencil:before { content: "\ea73" }
.codicon-info:before { content: "\ea74" }
.codicon-issue-opened:before { content: "\ea74" }
.codicon-gist-private:before { content: "\ea75" }
.codicon-git-fork-private:before { content: "\ea75" }
.codicon-lock:before { content: "\ea75" }
.codicon-mirror-private:before { content: "\ea75" }
.codicon-close:before { content: "\ea76" }
.codicon-remove-close:before { content: "\ea76" }
.codicon-x:before { content: "\ea76" }
.codicon-repo-sync:before { content: "\ea77" }
.codicon-sync:before { content: "\ea77" }
.codicon-clone:before { content: "\ea78" }
.codicon-desktop-download:before { content: "\ea78" }
.codicon-beaker:before { content: "\ea79" }
.codicon-microscope:before { content: "\ea79" }
.codicon-vm:before { content: "\ea7a" }
.codicon-device-desktop:before { content: "\ea7a" }
.codicon-file:before { content: "\ea7b" }
.codicon-file-text:before { content: "\ea7b" }
.codicon-more:before { content: "\ea7c" }
.codicon-ellipsis:before { content: "\ea7c" }
.codicon-kebab-horizontal:before { content: "\ea7c" }
.codicon-mail-reply:before { content: "\ea7d" }
.codicon-reply:before { content: "\ea7d" }
.codicon-organization:before { content: "\ea7e" }
.codicon-organization-filled:before { content: "\ea7e" }
.codicon-organization-outline:before { content: "\ea7e" }
.codicon-new-file:before { content: "\ea7f" }
.codicon-file-add:before { content: "\ea7f" }
.codicon-new-folder:before { content: "\ea80" }
.codicon-file-directory-create:before { content: "\ea80" }
.codicon-trash:before { content: "\ea81" }
.codicon-trashcan:before { content: "\ea81" }
.codicon-history:before { content: "\ea82" }
.codicon-clock:before { content: "\ea82" }
.codicon-folder:before { content: "\ea83" }
.codicon-file-directory:before { content: "\ea83" }
.codicon-symbol-folder:before { content: "\ea83" }
.codicon-logo-github:before { content: "\ea84" }
.codicon-mark-github:before { content: "\ea84" }
.codicon-github:before { content: "\ea84" }
.codicon-terminal:before { content: "\ea85" }
.codicon-console:before { content: "\ea85" }
.codicon-repl:before { content: "\ea85" }
.codicon-zap:before { content: "\ea86" }
.codicon-symbol-event:before { content: "\ea86" }
.codicon-error:before { content: "\ea87" }
.codicon-stop:before { content: "\ea87" }
.codicon-variable:before { content: "\ea88" }
.codicon-symbol-variable:before { content: "\ea88" }
.codicon-array:before { content: "\ea8a" }
.codicon-symbol-array:before { content: "\ea8a" }
.codicon-symbol-module:before { content: "\ea8b" }
.codicon-symbol-package:before { content: "\ea8b" }
.codicon-symbol-namespace:before { content: "\ea8b" }
.codicon-symbol-object:before { content: "\ea8b" }
.codicon-symbol-method:before { content: "\ea8c" }
.codicon-symbol-function:before { content: "\ea8c" }
.codicon-symbol-constructor:before { content: "\ea8c" }
.codicon-symbol-boolean:before { content: "\ea8f" }
.codicon-symbol-null:before { content: "\ea8f" }
.codicon-symbol-numeric:before { content: "\ea90" }
.codicon-symbol-number:before { content: "\ea90" }
.codicon-symbol-structure:before { content: "\ea91" }
.codicon-symbol-struct:before { content: "\ea91" }
.codicon-symbol-parameter:before { content: "\ea92" }
.codicon-symbol-type-parameter:before { content: "\ea92" }
.codicon-symbol-key:before { content: "\ea93" }
.codicon-symbol-text:before { content: "\ea93" }
.codicon-symbol-reference:before { content: "\ea94" }
.codicon-go-to-file:before { content: "\ea94" }
.codicon-symbol-enum:before { content: "\ea95" }
.codicon-symbol-value:before { content: "\ea95" }
.codicon-symbol-ruler:before { content: "\ea96" }
.codicon-symbol-unit:before { content: "\ea96" }
.codicon-activate-breakpoints:before { content: "\ea97" }
.codicon-archive:before { content: "\ea98" }
.codicon-arrow-both:before { content: "\ea99" }
.codicon-arrow-down:before { content: "\ea9a" }
.codicon-arrow-left:before { content: "\ea9b" }
.codicon-arrow-right:before { content: "\ea9c" }
.codicon-arrow-small-down:before { content: "\ea9d" }
.codicon-arrow-small-left:before { content: "\ea9e" }
.codicon-arrow-small-right:before { content: "\ea9f" }
.codicon-arrow-small-up:before { content: "\eaa0" }
.codicon-arrow-up:before { content: "\eaa1" }
.codicon-bell:before { content: "\eaa2" }
.codicon-bold:before { content: "\eaa3" }
.codicon-book:before { content: "\eaa4" }
.codicon-bookmark:before { content: "\eaa5" }
.codicon-debug-breakpoint-conditional-unverified:before { content: "\eaa6" }
.codicon-debug-breakpoint-conditional:before { content: "\eaa7" }
.codicon-debug-breakpoint-conditional-disabled:before { content: "\eaa7" }
.codicon-debug-breakpoint-data-unverified:before { content: "\eaa8" }
.codicon-debug-breakpoint-data:before { content: "\eaa9" }
.codicon-debug-breakpoint-data-disabled:before { content: "\eaa9" }
.codicon-debug-breakpoint-log-unverified:before { content: "\eaaa" }
.codicon-debug-breakpoint-log:before { content: "\eaab" }
.codicon-debug-breakpoint-log-disabled:before { content: "\eaab" }
.codicon-briefcase:before { content: "\eaac" }
.codicon-broadcast:before { content: "\eaad" }
.codicon-browser:before { content: "\eaae" }
.codicon-bug:before { content: "\eaaf" }
.codicon-calendar:before { content: "\eab0" }
.codicon-case-sensitive:before { content: "\eab1" }
.codicon-check:before { content: "\eab2" }
.codicon-checklist:before { content: "\eab3" }
.codicon-chevron-down:before { content: "\eab4" }
.codicon-chevron-left:before { content: "\eab5" }
.codicon-chevron-right:before { content: "\eab6" }
.codicon-chevron-up:before { content: "\eab7" }
.codicon-chrome-close:before { content: "\eab8" }
.codicon-chrome-maximize:before { content: "\eab9" }
.codicon-chrome-minimize:before { content: "\eaba" }
.codicon-chrome-restore:before { content: "\eabb" }
.codicon-circle-outline:before { content: "\eabc" }
.codicon-circle:before { content: "\eabc" }
.codicon-debug-breakpoint-unverified:before { content: "\eabc" }
.codicon-terminal-decoration-incomplete:before { content: "\eabc" }
.codicon-circle-slash:before { content: "\eabd" }
.codicon-circuit-board:before { content: "\eabe" }
.codicon-clear-all:before { content: "\eabf" }
.codicon-clippy:before { content: "\eac0" }
.codicon-close-all:before { content: "\eac1" }
.codicon-cloud-download:before { content: "\eac2" }
.codicon-cloud-upload:before { content: "\eac3" }
.codicon-code:before { content: "\eac4" }
.codicon-collapse-all:before { content: "\eac5" }
.codicon-color-mode:before { content: "\eac6" }
.codicon-comment-discussion:before { content: "\eac7" }
.codicon-credit-card:before { content: "\eac9" }
.codicon-dash:before { content: "\eacc" }
.codicon-dashboard:before { content: "\eacd" }
.codicon-database:before { content: "\eace" }
.codicon-debug-continue:before { content: "\eacf" }
.codicon-debug-disconnect:before { content: "\ead0" }
.codicon-debug-pause:before { content: "\ead1" }
.codicon-debug-restart:before { content: "\ead2" }
.codicon-debug-start:before { content: "\ead3" }
.codicon-debug-step-into:before { content: "\ead4" }
.codicon-debug-step-out:before { content: "\ead5" }
.codicon-debug-step-over:before { content: "\ead6" }
.codicon-debug-stop:before { content: "\ead7" }
.codicon-debug:before { content: "\ead8" }
.codicon-device-camera-video:before { content: "\ead9" }
.codicon-device-camera:before { content: "\eada" }
.codicon-device-mobile:before { content: "\eadb" }
.codicon-diff-added:before { content: "\eadc" }
.codicon-diff-ignored:before { content: "\eadd" }
.codicon-diff-modified:before { content: "\eade" }
.codicon-diff-removed:before { content: "\eadf" }
.codicon-diff-renamed:before { content: "\eae0" }
.codicon-diff:before { content: "\eae1" }
.codicon-diff-sidebyside:before { content: "\eae1" }
.codicon-discard:before { content: "\eae2" }
.codicon-editor-layout:before { content: "\eae3" }
.codicon-empty-window:before { content: "\eae4" }
.codicon-exclude:before { content: "\eae5" }
.codicon-extensions:before { content: "\eae6" }
.codicon-eye-closed:before { content: "\eae7" }
.codicon-file-binary:before { content: "\eae8" }
.codicon-file-code:before { content: "\eae9" }
.codicon-file-media:before { content: "\eaea" }
.codicon-file-pdf:before { content: "\eaeb" }
.codicon-file-submodule:before { content: "\eaec" }
.codicon-file-symlink-directory:before { content: "\eaed" }
.codicon-file-symlink-file:before { content: "\eaee" }
.codicon-file-zip:before { content: "\eaef" }
.codicon-files:before { content: "\eaf0" }
.codicon-filter:before { content: "\eaf1" }
.codicon-flame:before { content: "\eaf2" }
.codicon-fold-down:before { content: "\eaf3" }
.codicon-fold-up:before { content: "\eaf4" }
.codicon-fold:before { content: "\eaf5" }
.codicon-folder-active:before { content: "\eaf6" }
.codicon-folder-opened:before { content: "\eaf7" }
.codicon-gear:before { content: "\eaf8" }
.codicon-gift:before { content: "\eaf9" }
.codicon-gist-secret:before { content: "\eafa" }
.codicon-gist:before { content: "\eafb" }
.codicon-git-commit:before { content: "\eafc" }
.codicon-git-compare:before { content: "\eafd" }
.codicon-compare-changes:before { content: "\eafd" }
.codicon-git-merge:before { content: "\eafe" }
.codicon-github-action:before { content: "\eaff" }
.codicon-github-alt:before { content: "\eb00" }
.codicon-globe:before { content: "\eb01" }
.codicon-grabber:before { content: "\eb02" }
.codicon-graph:before { content: "\eb03" }
.codicon-gripper:before { content: "\eb04" }
.codicon-heart:before { content: "\eb05" }
.codicon-home:before { content: "\eb06" }
.codicon-horizontal-rule:before { content: "\eb07" }
.codicon-hubot:before { content: "\eb08" }
.codicon-inbox:before { content: "\eb09" }
.codicon-issue-reopened:before { content: "\eb0b" }
.codicon-issues:before { content: "\eb0c" }
.codicon-italic:before { content: "\eb0d" }
.codicon-jersey:before { content: "\eb0e" }
.codicon-json:before { content: "\eb0f" }
.codicon-kebab-vertical:before { content: "\eb10" }
.codicon-key:before { content: "\eb11" }
.codicon-law:before { content: "\eb12" }
.codicon-lightbulb-autofix:before { content: "\eb13" }
.codicon-link-external:before { content: "\eb14" }
.codicon-link:before { content: "\eb15" }
.codicon-list-ordered:before { content: "\eb16" }
.codicon-list-unordered:before { content: "\eb17" }
.codicon-live-share:before { content: "\eb18" }
.codicon-loading:before { content: "\eb19" }
.codicon-location:before { content: "\eb1a" }
.codicon-mail-read:before { content: "\eb1b" }
.codicon-mail:before { content: "\eb1c" }
.codicon-markdown:before { content: "\eb1d" }
.codicon-megaphone:before { content: "\eb1e" }
.codicon-mention:before { content: "\eb1f" }
.codicon-milestone:before { content: "\eb20" }
.codicon-git-pull-request-milestone:before { content: "\eb20" }
.codicon-mortar-board:before { content: "\eb21" }
.codicon-move:before { content: "\eb22" }
.codicon-multiple-windows:before { content: "\eb23" }
.codicon-mute:before { content: "\eb24" }
.codicon-no-newline:before { content: "\eb25" }
.codicon-note:before { content: "\eb26" }
.codicon-octoface:before { content: "\eb27" }
.codicon-open-preview:before { content: "\eb28" }
.codicon-package:before { content: "\eb29" }
.codicon-paintcan:before { content: "\eb2a" }
.codicon-pin:before { content: "\eb2b" }
.codicon-play:before { content: "\eb2c" }
.codicon-run:before { content: "\eb2c" }
.codicon-plug:before { content: "\eb2d" }
.codicon-preserve-case:before { content: "\eb2e" }
.codicon-preview:before { content: "\eb2f" }
.codicon-project:before { content: "\eb30" }
.codicon-pulse:before { content: "\eb31" }
.codicon-question:before { content: "\eb32" }
.codicon-quote:before { content: "\eb33" }
.codicon-radio-tower:before { content: "\eb34" }
.codicon-reactions:before { content: "\eb35" }
.codicon-references:before { content: "\eb36" }
.codicon-refresh:before { content: "\eb37" }
.codicon-regex:before { content: "\eb38" }
.codicon-remote-explorer:before { content: "\eb39" }
.codicon-remote:before { content: "\eb3a" }
.codicon-remove:before { content: "\eb3b" }
.codicon-replace-all:before { content: "\eb3c" }
.codicon-replace:before { content: "\eb3d" }
.codicon-repo-clone:before { content: "\eb3e" }
.codicon-repo-force-push:before { content: "\eb3f" }
.codicon-repo-pull:before { content: "\eb40" }
.codicon-repo-push:before { content: "\eb41" }
.codicon-report:before { content: "\eb42" }
.codicon-request-changes:before { content: "\eb43" }
.codicon-rocket:before { content: "\eb44" }
.codicon-root-folder-opened:before { content: "\eb45" }
.codicon-root-folder:before { content: "\eb46" }
.codicon-rss:before { content: "\eb47" }
.codicon-ruby:before { content: "\eb48" }
.codicon-save-all:before { content: "\eb49" }
.codicon-save-as:before { content: "\eb4a" }
.codicon-save:before { content: "\eb4b" }
.codicon-screen-full:before { content: "\eb4c" }
.codicon-screen-normal:before { content: "\eb4d" }
.codicon-search-stop:before { content: "\eb4e" }
.codicon-server:before { content: "\eb50" }
.codicon-settings-gear:before { content: "\eb51" }
.codicon-settings:before { content: "\eb52" }
.codicon-shield:before { content: "\eb53" }
.codicon-smiley:before { content: "\eb54" }
.codicon-sort-precedence:before { content: "\eb55" }
.codicon-split-horizontal:before { content: "\eb56" }
.codicon-split-vertical:before { content: "\eb57" }
.codicon-squirrel:before { content: "\eb58" }
.codicon-star-full:before { content: "\eb59" }
.codicon-star-half:before { content: "\eb5a" }
.codicon-symbol-class:before { content: "\eb5b" }
.codicon-symbol-color:before { content: "\eb5c" }
.codicon-symbol-constant:before { content: "\eb5d" }
.codicon-symbol-enum-member:before { content: "\eb5e" }
.codicon-symbol-field:before { content: "\eb5f" }
.codicon-symbol-file:before { content: "\eb60" }
.codicon-symbol-interface:before { content: "\eb61" }
.codicon-symbol-keyword:before { content: "\eb62" }
.codicon-symbol-misc:before { content: "\eb63" }
.codicon-symbol-operator:before { content: "\eb64" }
.codicon-symbol-property:before { content: "\eb65" }
.codicon-wrench:before { content: "\eb65" }
.codicon-wrench-subaction:before { content: "\eb65" }
.codicon-symbol-snippet:before { content: "\eb66" }
.codicon-tasklist:before { content: "\eb67" }
.codicon-telescope:before { content: "\eb68" }
.codicon-text-size:before { content: "\eb69" }
.codicon-three-bars:before { content: "\eb6a" }
.codicon-thumbsdown:before { content: "\eb6b" }
.codicon-thumbsup:before { content: "\eb6c" }
.codicon-tools:before { content: "\eb6d" }
.codicon-triangle-down:before { content: "\eb6e" }
.codicon-triangle-left:before { content: "\eb6f" }
.codicon-triangle-right:before { content: "\eb70" }
.codicon-triangle-up:before { content: "\eb71" }
.codicon-twitter:before { content: "\eb72" }
.codicon-unfold:before { content: "\eb73" }
.codicon-unlock:before { content: "\eb74" }
.codicon-unmute:before { content: "\eb75" }
.codicon-unverified:before { content: "\eb76" }
.codicon-verified:before { content: "\eb77" }
.codicon-versions:before { content: "\eb78" }
.codicon-vm-active:before { content: "\eb79" }
.codicon-vm-outline:before { content: "\eb7a" }
.codicon-vm-running:before { content: "\eb7b" }
.codicon-watch:before { content: "\eb7c" }
.codicon-whitespace:before { content: "\eb7d" }
.codicon-whole-word:before { content: "\eb7e" }
.codicon-window:before { content: "\eb7f" }
.codicon-word-wrap:before { content: "\eb80" }
.codicon-zoom-in:before { content: "\eb81" }
.codicon-zoom-out:before { content: "\eb82" }
.codicon-list-filter:before { content: "\eb83" }
.codicon-list-flat:before { content: "\eb84" }
.codicon-list-selection:before { content: "\eb85" }
.codicon-selection:before { content: "\eb85" }
.codicon-list-tree:before { content: "\eb86" }
.codicon-debug-breakpoint-function-unverified:before { content: "\eb87" }
.codicon-debug-breakpoint-function:before { content: "\eb88" }
.codicon-debug-breakpoint-function-disabled:before { content: "\eb88" }
.codicon-debug-stackframe-active:before { content: "\eb89" }
.codicon-circle-small-filled:before { content: "\eb8a" }
.codicon-debug-stackframe-dot:before { content: "\eb8a" }
.codicon-terminal-decoration-mark:before { content: "\eb8a" }
.codicon-debug-stackframe:before { content: "\eb8b" }
.codicon-debug-stackframe-focused:before { content: "\eb8b" }
.codicon-debug-breakpoint-unsupported:before { content: "\eb8c" }
.codicon-symbol-string:before { content: "\eb8d" }
.codicon-debug-reverse-continue:before { content: "\eb8e" }
.codicon-debug-step-back:before { content: "\eb8f" }
.codicon-debug-restart-frame:before { content: "\eb90" }
.codicon-debug-alt:before { content: "\eb91" }
.codicon-call-incoming:before { content: "\eb92" }
.codicon-call-outgoing:before { content: "\eb93" }
.codicon-menu:before { content: "\eb94" }
.codicon-expand-all:before { content: "\eb95" }
.codicon-feedback:before { content: "\eb96" }
.codicon-git-pull-request-reviewer:before { content: "\eb96" }
.codicon-group-by-ref-type:before { content: "\eb97" }
.codicon-ungroup-by-ref-type:before { content: "\eb98" }
.codicon-account:before { content: "\eb99" }
.codicon-git-pull-request-assignee:before { content: "\eb99" }
.codicon-bell-dot:before { content: "\eb9a" }
.codicon-debug-console:before { content: "\eb9b" }
.codicon-library:before { content: "\eb9c" }
.codicon-output:before { content: "\eb9d" }
.codicon-run-all:before { content: "\eb9e" }
.codicon-sync-ignored:before { content: "\eb9f" }
.codicon-pinned:before { content: "\eba0" }
.codicon-github-inverted:before { content: "\eba1" }
.codicon-server-process:before { content: "\eba2" }
.codicon-server-environment:before { content: "\eba3" }
.codicon-pass:before { content: "\eba4" }
.codicon-issue-closed:before { content: "\eba4" }
.codicon-stop-circle:before { content: "\eba5" }
.codicon-play-circle:before { content: "\eba6" }
.codicon-record:before { content: "\eba7" }
.codicon-debug-alt-small:before { content: "\eba8" }
.codicon-vm-connect:before { content: "\eba9" }
.codicon-cloud:before { content: "\ebaa" }
.codicon-merge:before { content: "\ebab" }
.codicon-export:before { content: "\ebac" }
.codicon-graph-left:before { content: "\ebad" }
.codicon-magnet:before { content: "\ebae" }
.codicon-notebook:before { content: "\ebaf" }
.codicon-redo:before { content: "\ebb0" }
.codicon-check-all:before { content: "\ebb1" }
.codicon-pinned-dirty:before { content: "\ebb2" }
.codicon-pass-filled:before { content: "\ebb3" }
.codicon-circle-large-filled:before { content: "\ebb4" }
.codicon-circle-large:before { content: "\ebb5" }
.codicon-circle-large-outline:before { content: "\ebb5" }
.codicon-combine:before { content: "\ebb6" }
.codicon-gather:before { content: "\ebb6" }
.codicon-table:before { content: "\ebb7" }
.codicon-variable-group:before { content: "\ebb8" }
.codicon-type-hierarchy:before { content: "\ebb9" }
.codicon-type-hierarchy-sub:before { content: "\ebba" }
.codicon-type-hierarchy-super:before { content: "\ebbb" }
.codicon-git-pull-request-create:before { content: "\ebbc" }
.codicon-run-above:before { content: "\ebbd" }
.codicon-run-below:before { content: "\ebbe" }
.codicon-notebook-template:before { content: "\ebbf" }
.codicon-debug-rerun:before { content: "\ebc0" }
.codicon-workspace-trusted:before { content: "\ebc1" }
.codicon-workspace-untrusted:before { content: "\ebc2" }
.codicon-workspace-unknown:before { content: "\ebc3" }
.codicon-terminal-cmd:before { content: "\ebc4" }
.codicon-terminal-debian:before { content: "\ebc5" }
.codicon-terminal-linux:before { content: "\ebc6" }
.codicon-terminal-powershell:before { content: "\ebc7" }
.codicon-terminal-tmux:before { content: "\ebc8" }
.codicon-terminal-ubuntu:before { content: "\ebc9" }
.codicon-terminal-bash:before { content: "\ebca" }
.codicon-arrow-swap:before { content: "\ebcb" }
.codicon-copy:before { content: "\ebcc" }
.codicon-person-add:before { content: "\ebcd" }
.codicon-filter-filled:before { content: "\ebce" }
.codicon-wand:before { content: "\ebcf" }
.codicon-debug-line-by-line:before { content: "\ebd0" }
.codicon-inspect:before { content: "\ebd1" }
.codicon-layers:before { content: "\ebd2" }
.codicon-layers-dot:before { content: "\ebd3" }
.codicon-layers-active:before { content: "\ebd4" }
.codicon-compass:before { content: "\ebd5" }
.codicon-compass-dot:before { content: "\ebd6" }
.codicon-compass-active:before { content: "\ebd7" }
.codicon-azure:before { content: "\ebd8" }
.codicon-issue-draft:before { content: "\ebd9" }
.codicon-git-pull-request-closed:before { content: "\ebda" }
.codicon-git-pull-request-draft:before { content: "\ebdb" }
.codicon-debug-all:before { content: "\ebdc" }
.codicon-debug-coverage:before { content: "\ebdd" }
.codicon-run-errors:before { content: "\ebde" }
.codicon-folder-library:before { content: "\ebdf" }
.codicon-debug-continue-small:before { content: "\ebe0" }
.codicon-beaker-stop:before { content: "\ebe1" }
.codicon-graph-line:before { content: "\ebe2" }
.codicon-graph-scatter:before { content: "\ebe3" }
.codicon-pie-chart:before { content: "\ebe4" }
.codicon-bracket:before { content: "\eb0f" }
.codicon-bracket-dot:before { content: "\ebe5" }
.codicon-bracket-error:before { content: "\ebe6" }
.codicon-lock-small:before { content: "\ebe7" }
.codicon-azure-devops:before { content: "\ebe8" }
.codicon-verified-filled:before { content: "\ebe9" }
.codicon-newline:before { content: "\ebea" }
.codicon-layout:before { content: "\ebeb" }
.codicon-layout-activitybar-left:before { content: "\ebec" }
.codicon-layout-activitybar-right:before { content: "\ebed" }
.codicon-layout-panel-left:before { content: "\ebee" }
.codicon-layout-panel-center:before { content: "\ebef" }
.codicon-layout-panel-justify:before { content: "\ebf0" }
.codicon-layout-panel-right:before { content: "\ebf1" }
.codicon-layout-panel:before { content: "\ebf2" }
.codicon-layout-sidebar-left:before { content: "\ebf3" }
.codicon-layout-sidebar-right:before { content: "\ebf4" }
.codicon-layout-statusbar:before { content: "\ebf5" }
.codicon-layout-menubar:before { content: "\ebf6" }
.codicon-layout-centered:before { content: "\ebf7" }
.codicon-target:before { content: "\ebf8" }
.codicon-indent:before { content: "\ebf9" }
.codicon-record-small:before { content: "\ebfa" }
.codicon-error-small:before { content: "\ebfb" }
.codicon-terminal-decoration-error:before { content: "\ebfb" }
.codicon-arrow-circle-down:before { content: "\ebfc" }
.codicon-arrow-circle-left:before { content: "\ebfd" }
.codicon-arrow-circle-right:before { content: "\ebfe" }
.codicon-arrow-circle-up:before { content: "\ebff" }
.codicon-layout-sidebar-right-off:before { content: "\ec00" }
.codicon-layout-panel-off:before { content: "\ec01" }
.codicon-layout-sidebar-left-off:before { content: "\ec02" }
.codicon-blank:before { content: "\ec03" }
.codicon-heart-filled:before { content: "\ec04" }
.codicon-map:before { content: "\ec05" }
.codicon-map-horizontal:before { content: "\ec05" }
.codicon-fold-horizontal:before { content: "\ec05" }
.codicon-map-filled:before { content: "\ec06" }
.codicon-map-horizontal-filled:before { content: "\ec06" }
.codicon-fold-horizontal-filled:before { content: "\ec06" }
.codicon-circle-small:before { content: "\ec07" }
.codicon-bell-slash:before { content: "\ec08" }
.codicon-bell-slash-dot:before { content: "\ec09" }
.codicon-comment-unresolved:before { content: "\ec0a" }
.codicon-git-pull-request-go-to-changes:before { content: "\ec0b" }
.codicon-git-pull-request-new-changes:before { content: "\ec0c" }
.codicon-search-fuzzy:before { content: "\ec0d" }
.codicon-comment-draft:before { content: "\ec0e" }
.codicon-send:before { content: "\ec0f" }
.codicon-sparkle:before { content: "\ec10" }
.codicon-insert:before { content: "\ec11" }
.codicon-mic:before { content: "\ec12" }
.codicon-thumbsdown-filled:before { content: "\ec13" }
.codicon-thumbsup-filled:before { content: "\ec14" }
.codicon-coffee:before { content: "\ec15" }
.codicon-snake:before { content: "\ec16" }
.codicon-game:before { content: "\ec17" }
.codicon-vr:before { content: "\ec18" }
.codicon-chip:before { content: "\ec19" }
.codicon-piano:before { content: "\ec1a" }
.codicon-music:before { content: "\ec1b" }
.codicon-mic-filled:before { content: "\ec1c" }
.codicon-repo-fetch:before { content: "\ec1d" }
.codicon-copilot:before { content: "\ec1e" }
.codicon-lightbulb-sparkle:before { content: "\ec1f" }
.codicon-robot:before { content: "\ec20" }
.codicon-sparkle-filled:before { content: "\ec21" }
.codicon-diff-single:before { content: "\ec22" }
.codicon-diff-multiple:before { content: "\ec23" }
.codicon-surround-with:before { content: "\ec24" }
.codicon-share:before { content: "\ec25" }
.codicon-git-stash:before { content: "\ec26" }
.codicon-git-stash-apply:before { content: "\ec27" }
.codicon-git-stash-pop:before { content: "\ec28" }
.codicon-vscode:before { content: "\ec29" }
.codicon-vscode-insiders:before { content: "\ec2a" }
.codicon-code-oss:before { content: "\ec2b" }
.codicon-run-coverage:before { content: "\ec2c" }
.codicon-run-all-coverage:before { content: "\ec2d" }
.codicon-coverage:before { content: "\ec2e" }
.codicon-github-project:before { content: "\ec2f" }
.codicon-map-vertical:before { content: "\ec30" }
.codicon-fold-vertical:before { content: "\ec30" }
.codicon-map-vertical-filled:before { content: "\ec31" }
.codicon-fold-vertical-filled:before { content: "\ec31" }
.codicon-go-to-search:before { content: "\ec32" }
.codicon-percentage:before { content: "\ec33" }
.codicon-sort-percentage:before { content: "\ec33" }
.codicon-attach:before { content: "\ec34" }
.codicon-git-fetch:before { content: "\f101" }

View File

@@ -194,26 +194,74 @@
}
}
/* Montserrat Bold */
/* Montserrat */
@font-face {
font-family: "Montserrat";
font-weight: 700;
font-style: normal;
font-display: swap;
src: url("../fonts/Montserrat-Bold.woff2") format("woff2"),
url("../fonts/Montserrat-Bold.woff") format("woff");
font-family: "Montserrat";
font-optical-sizing: auto;
font-weight: 100 900;
font-style: italic;
font-display: swap;
src: url("../fonts/Montserrat-Italic-VariableFont_wght.woff2") format("woff2"), url("../fonts/Montserrat-Italic-VariableFont_wght.ttf") format("truetype");
}
/* Montserrat ExtraBold */
@font-face {
font-family: "Montserrat";
font-weight: 800;
font-family: "Montserrat";
font-optical-sizing: auto;
font-weight: 100 900;
font-style: normal;
font-display: swap;
src: url("../fonts/Montserrat-ExtraBold.woff2") format("woff2"),
url("../fonts/Montserrat-ExtraBold.woff") format("woff");
font-display: swap;
src: url("../fonts/Montserrat-VariableFont_wght.woff2") format("woff2"), url("../fonts/Montserrat-VariableFont_wght.ttf") format("truetype");
}
/*
Godot icon.
Font made on https://fontello.com/, using
`/assets/press/icon_monochrome_light.svg` linted on
https://jakearchibald.github.io/svgomg/
*/
@font-face {
font-family: 'godot';
src: url("../fonts/godot.woff2") format("woff2");
font-weight: normal;
font-style: normal;
}
[class^="godot-icon-"]:before, [class*=" godot-icon-"]:before {
font-family: "godot";
font-style: normal;
font-weight: normal;
speak: never;
display: inline-block;
text-decoration: inherit;
width: 1em;
margin-right: .2em;
text-align: center;
/* opacity: .8; */
/* For safety - reset parent styles, that can break glyph codes*/
font-variant: normal;
text-transform: none;
/* fix buttons height, for twitter bootstrap */
line-height: 1em;
/* Animation center compensation - margins should be symmetric */
/* remove if not needed */
margin-left: .2em;
/* you can be more comfortable with increased icons size */
/* font-size: 120%; */
/* Font smoothing. That was taken from TWBS */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* Uncomment for 3D effect */
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
}
.godot-icon-godot:before { content: '\e003'; } /* '' */
*:focus {
/* More visible outline for better keyboard navigation. */
outline: 0.125rem solid hsl(220, 100%, 62.5%);
@@ -300,6 +348,10 @@ hr {
border-top: 2px solid var(--base-color-text);
}
main {
position: relative;
}
.intro-title {
margin-top: 48px;
margin-bottom: 48px;
@@ -1510,4 +1562,4 @@ section.sponsors .grid {
width: 100%;
border: none;
margin: 35px 0;
}
}

View File

@@ -0,0 +1,31 @@
/* fallback */
@font-face {
font-family: 'Material Symbols Outlined';
font-style: normal;
font-weight: 100 700;
src: url("../fonts/materialsymbolsoutlined.woff2") format('woff2');
}
.material-symbols-outlined {
font-family: 'Material Symbols Outlined';
font-weight: normal;
font-style: normal;
font-size: 24px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
-moz-font-feature-settings: 'liga';
-moz-osx-font-smoothing: grayscale;
}
.material-symbols-outlined {
font-variation-settings:
'FILL' 0,
'wght' 400,
'GRAD' 0,
'opsz' 24;
}

20
assets/css/release.scss Normal file
View File

@@ -0,0 +1,20 @@
---
---
@import "common/release";
html {
scroll-behavior: smooth;
@media (prefers-reduced-motion) {
scroll-behavior: auto;
}
}
footer {
margin-top: 0;
}
.release-container {
position: relative;
font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}

View File

@@ -0,0 +1,13 @@
---
---
#download-download {
.release-card-media {
.release-platform {
display: flex;
flex-direction: column;
align-items: center;
margin: 0 auto 40px;
}
}
}

1378
assets/css/releases/4.3.scss Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/fonts/codicon.ttf Normal file

Binary file not shown.

BIN
assets/fonts/godot.woff2 Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,85 @@
// https://github.com/julienetie/detect-browser
const navigatorErrorMessage = 'Could not find `userAgent` or `userAgentData` window.navigator properties to set `os`, `browser` and `version`'
const removeExcessMozillaAndVersion = /^mozilla\/\d\.\d\W/
const browserPattern = /(\w+)\/(\d+\.\d+(?:\.\d+)?(?:\.\d+)?)/g
const engineAndVersionPattern = /^(ver|cri|gec)/
const brandList = ['chrome', 'opera', 'safari', 'edge', 'firefox']
const unknown = 'Unknown'
const empty = ''
const { isArray } = Array
let userAgentData = window.navigator.userAgentData
let userAgent = window.navigator.userAgent
const mobiles = {
iphone: /iphone/,
ipad: /ipad|macintosh/,
android: /android/
}
const desktops = {
windows: /win/,
mac: /macintosh/,
linux: /linux/
}
const detectPlatform = (customUserAgent, customUserAgentData) => {
// Use a provided UA string instead of the browser's UA
userAgent = typeof customUserAgent === 'string' ? customUserAgent : userAgent
// Use a provided UA data string instead of the browser's UA data
userAgentData = typeof customUserAgentData === 'string' ? customUserAgentData : userAgentData
if (userAgent) {
const ua = userAgent.toLowerCase().replace(removeExcessMozillaAndVersion, empty)
// Determine the operating system.
const mobileOS = Object.keys(mobiles).find(os => mobiles[os].test(ua) && window.navigator.maxTouchPoints >= 1)
const desktopOS = Object.keys(desktops).find(os => desktops[os].test(ua))
const os = mobileOS || desktopOS
// Extract browser and version information.
const browserTest = ua.match(browserPattern)
const versionRegex = /version\/(\d+(\.\d+)*)/
const safariVersion = ua.match(versionRegex)
const saVesion = isArray(safariVersion) ? safariVersion[1] : null
const browserOffset = browserTest && (browserTest.length > 2 && !(engineAndVersionPattern.test(browserTest[1])) ? 1 : 0)
const browserResult = browserTest && browserTest[browserTest.length - 1 - (browserOffset || 0)].split('/')
const browser = browserResult && browserResult[0]
const version = saVesion ? saVesion : browserResult && browserResult[1]
return { os, browser, version }
} else if (userAgentData) {
const os = userAgentData.platform.toLowerCase()
let platformData
// Extract platform brand and version information.
for (const agentBrand of userAgentData.brands) {
const agentBrandEntry = agentBrand.brand.toLowerCase()
const foundBrand = brandList.find(brand => { //eslint-disable-line
if (agentBrandEntry.includes(brand)) {
return brand
}
})
if (foundBrand) {
platformData = { browser: foundBrand, version: agentBrand.version }
break
}
}
const brandVersionData = platformData || { browser: unknown, version: unknown }
return { os, ...brandVersionData }
} else {
// Log error message if there's a problem.
console
.error(navigatorErrorMessage)
return {
// Ignore the VSCode strikethough. Disable linting line if necessary. This is just a fallback
os: navigator.platform || unknown,
browser: unknown,
version: unknown
}
}
}
export default detectPlatform

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

338
assets/js/releases/4.3.mjs Normal file
View File

@@ -0,0 +1,338 @@
// GSAP for animations.
import { gsap } from "../modules/gsap@3.12.5.min.mjs"
import { ScrollTrigger } from "../modules/gsap@3.12.5_ScrollTrigger.min.mjs"
import detectPlatform from "../modules/detect-browser.mjs"
gsap.registerPlugin(ScrollTrigger);
// Release numbers.
const RELEASE_NUMBERS_INITIAL_DELAY_S = 1;
const RELEASE_NUMBERS_DURATION_S = 1;
const RELEASE_NUMBERS_EASE_NAME = "power2.out";
const RELEASE_NUMBERS_MAX_BAR_WIDTH_PX = 200;
const releaseNumbersEase = gsap.parseEase(RELEASE_NUMBERS_EASE_NAME);
const numberFormat = new Intl.NumberFormat("en-US");
for (const el of ["commits", "contributors"]) {
const timeline = gsap.timeline();
const lines = gsap.utils.toArray(`.release-header .header-numbers-${el} .header-numbers-line`).reverse();
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
const localTimeline = gsap.timeline();
localTimeline.to(line.querySelector(".bar"), {
delay: i == 0
? RELEASE_NUMBERS_INITIAL_DELAY_S
: 0,
duration: RELEASE_NUMBERS_DURATION_S,
ease: RELEASE_NUMBERS_EASE_NAME,
width: `${(Number(line.dataset.value) / Number(line.dataset.max)) * RELEASE_NUMBERS_MAX_BAR_WIDTH_PX}px`,
onUpdate: () => {
line.querySelector(".number").innerText = numberFormat.format(
Math.round(releaseNumbersEase(localTimeline.progress()) * Number(line.dataset.value))
);
},
onComplete: () => {
line.querySelector(".number").innerText = numberFormat.format(Number(line.dataset.value));
}
});
timeline.add(localTimeline);
// Set commits to 0
line.querySelector(".number").innerText = "0";
}
}
// Add a scrolling effect to each card and title.
const windowHeight = window.innerHeight;
/** @type {HTMLDivElement[]} */
const elements = Array.from(gsap.utils.toArray(".release-content .section .release-cards .release-card, .release-content .section .section-title"));
for (const element of elements) {
if (element.getBoundingClientRect().top < windowHeight) {
continue;
}
const timeline = gsap.timeline({
scrollTrigger: {
trigger: element,
start: "top bottom",
}
});
timeline.from(element, {
y: "+=50",
duration: 0.5,
opacity: 0
});
}
// Hide downloads that aren't for the user's platform.
const platformData = detectPlatform(navigator.userAgent, navigator.userAgentData);
let platformName = "windows";
switch (platformData.os) {
case "mac":
case "iphone":
case "ipad": {
platformName = "macos";
} break;
case "linux": {
platformName = "linux";
} break;
case "android": {
platformName = "android";
} break;
case "windows":
default:
break;
}
const releasePlatformContainer = document.querySelector(".release-platform-container");
if (releasePlatformContainer != null) {
const releasePlatform = releasePlatformContainer.querySelector(`.release-platform-${platformName}`);
if (releasePlatform != null) {
releasePlatform.classList.add("active");
}
}
// Rename "Export templates and other downloads" to "More downloads"
const downloadOther = document.querySelector(".card-download-other");
if (downloadOther != null) {
downloadOther.textContent = "More downloads";
}
// Add relative weight based on author data
const authors = Array.from(document.querySelectorAll("#special-thanks-release-authors .release-card-authors .release-card-author"));
let max_prs = 0;
for (const author of authors) {
max_prs = Math.max(max_prs, Number(author.dataset.prs));
}
const scales = new Array(5);
for (let i = scales.length - 1; i >= 0; i--) {
if (i + 1 == scales.length) {
scales[i] = Math.floor(max_prs / 2);
} else {
scales[i] = Math.floor(scales[i + 1] / 2);
}
}
for (const author of authors) {
const prs = Number(author.dataset.prs);
for (let i = 0; i < scales.length; i++) {
if (prs >= scales[i]) {
if (i + 1 == scales.length) {
author.classList.add(`size-${i + 1}`);
break;
}
continue;
}
if (i === 0) {
break;
}
author.classList.add(`size-${i + 1}`);
break;
}
}
// Links and contributors.
const cLinks = Array.from(document.querySelectorAll(".c-link"));
for (const cLink of cLinks) {
if (cLink.dataset.readMore != null) {
const cLinkA = cLink.appendChild(document.createElement("a"));
cLinkA.href = cLink.dataset.readMore;
cLinkA.classList.add("c-link-a");
cLinkA.textContent = "Read more";
cLinkA.target = "_blank";
}
if (cLink.dataset.contributors) {
let parentId = "";
let parent = cLink.parentElement;
while (parent != document.body) {
if (parent.classList.contains("release-card")) {
parentId = parent.id;
break;
}
parent = parent.parentElement;
}
const contributorsId = `${parentId}-contributors`;
const contributorsReducer = (previousValue, currentValue, currentIndex, array) => {
if (currentIndex === 0) {
return `${previousValue} ${currentValue}`;
} else if (currentIndex < array.length - 1) {
return `${previousValue}, ${currentValue}`;
} else if (currentIndex === 1 && array.length === 2) {
return `${previousValue} and ${currentValue}`;
}
return `${previousValue}, and ${currentValue}`;
};
/** @type {String[]} */
const contributors = cLink.dataset.contributors.split(",");
const contributorsText = contributors.reduce(contributorsReducer, "Contributed by");
const contributorsHtml = contributors.map((val) => {
const link = document.createElement("a");
link.href = `https://github.com/${val}`;
link.target = "_blank";
link.textContent = val;
return link.outerHTML;
}).reduce(contributorsReducer, "Contributed by");
const button = cLink.appendChild(document.createElement("button"));
button.classList.add("c-link-popover-button");
const span = button.appendChild(document.createElement("span"));
if (contributors.length === 1) {
span.textContent = "person";
} else if (contributors.length === 2) {
span.textContent = "group";
} else {
span.textContent = "groups";
}
span.classList.add("material-symbols-outlined");
span.style.transform = "translateY(5px)";
button.title = contributorsText;
button.setAttribute("popovertarget", contributorsId);
const popover = cLink.appendChild(document.createElement("div"));
popover.classList.add("c-link-popover");
popover.id = contributorsId;
popover.setAttribute("popover", "");
popover.innerHTML = contributorsHtml;
}
}
// Popovers.
let popoverAnimationFrame = 0;
/** @type {(invoker: HTMLElement, popover: HTMLElement) => { x: number, y: number }} */
function computePosition(invoker, popover) {
const invokerRect = invoker.getBoundingClientRect();
const popoverRect = popover.getBoundingClientRect();
const windowSize = {
width: window.innerWidth,
height: window.innerHeight
};
const padding = 10;
const popoverPosition = {
x: invokerRect.x - (popoverRect.width / 2),
y: invokerRect.y - popoverRect.height - padding,
};
popoverPosition.x = Math.min(Math.max(popoverPosition.x, 0), windowSize.width - popoverRect.width);
if (popoverPosition.y < 0) {
popoverPosition.y = invokerRect.y + invokerRect.height + padding;
}
return popoverPosition;
}
/** @type {(event: ToggleEvent) => void} */
function positionPopover(event) {
if (event.newState !== "open") {
cancelAnimationFrame(popoverAnimationFrame);
popoverAnimationFrame = 0;
return;
}
const popover = event.target;
const invoker = document.querySelector(`[popovertarget="${popover.getAttribute("id")}"`);
const { x, y } = computePosition(invoker, popover);
Object.assign(popover.style, {
left: `${x}px`,
top: `${y}px`,
});
if (popoverAnimationFrame > 0) {
cancelAnimationFrame(popoverAnimationFrame);
}
const updatePopover = () => {
const { x, y } = computePosition(invoker, popover);
Object.assign(popover.style, {
left: `${x}px`,
top: `${y}px`,
});
popoverAnimationFrame = requestAnimationFrame(updatePopover);
};
popoverAnimationFrame = requestAnimationFrame(updatePopover);
}
const popovers = document.querySelectorAll("[popover]");
for (const popover of popovers) {
popover.addEventListener("toggle", positionPopover);
}
// Lazy-load videos
const lazyVideos = Array.from(document.querySelectorAll("video.lazy"));
const lazyVideoObserver = new IntersectionObserver((entries, observer) => {
for (const entry of entries) {
if (!entry.isIntersecting) {
continue;
}
for (var entryChildElement of entry.target.children) {
if (typeof entryChildElement.tagName === "string" && entryChildElement.tagName === "SOURCE") {
entryChildElement.src = entryChildElement.dataset.src;
}
}
entry.target.load();
entry.target.classList.remove("lazy");
observer.unobserve(entry.target);
}
});
for (const lazyVideo of lazyVideos) {
lazyVideoObserver.observe(lazyVideo);
}
// Show/hide the scroll-to-top button
const linksElement = document.querySelector("#links");
const scrollToTopElement = document.querySelector("#scroll-to-top");
let scrollToTopTween = null;
let scrollState = "";
const showScrollToTop = () => {
if (scrollState === "show") {
return;
}
scrollState = "show";
if (scrollToTopTween != null) {
scrollToTopTween.kill();
}
scrollToTopElement.style.display = "block";
scrollToTopTween = gsap.to(scrollToTopElement, {
opacity: 1,
duration: 0.5,
});
};
const hideScrollToTop = () => {
if (scrollState === "hide") {
return;
}
scrollState = "hide";
if (scrollToTopTween != null) {
scrollToTopTween.kill();
}
scrollToTopTween = gsap.to(scrollToTopElement, {
opacity: 0,
duration: 0.5,
onComplete: () => {
scrollToTopElement.style.display = "none";
}
});
};
const scrollToTopObserver = new IntersectionObserver((entries, observer) => {
// requestAnimationFrame(animationFrameHandler);
const entry = entries[0];
if (entry.isIntersecting) {
hideScrollToTop();
} else {
const rect = linksElement.getBoundingClientRect();
console.log(rect);
if (rect.y > window.innerHeight) {
hideScrollToTop();
} else {
showScrollToTop();
}
}
});
scrollToTopObserver.observe(linksElement);

View File

@@ -0,0 +1,31 @@
---
title: "Godot 4.3, a shared effort"
excerpt: "With over 3,500 commits authored by over 500 contributors, the latest Godot Engine release comes packed full of new features and improvements."
categories: ["release"]
author: "Godot contributors"
image: /storage/blog/covers/godot-4-3-a-shared-effort.webp
date: 2024-08-15 11:00:00
redirect_to:
- /releases/4.3/
---
This release we decided to do things a little bit differently. Instead of making a giant blog post, we have decided to make a giant [web page](/releases/4.3/) instead! Inspired by Blender, we have decided to create a stable page on the website that features releases so new users can quickly learn about the latest version of the engine.
So please take a look over at the [4.3 release page](/releases/4.3/)!
Or grab 4.3 here directly and get started.
{% include articles/download_card.html version="4.3" release="stable" article=page %}
**Standard build** includes support for GDScript and GDExtension.
**.NET build** (marked as `mono`) includes support for C#, as well as GDScript and GDExtension.
- See also [C# platform support](https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html#c-platform-support).
If you want to test the new Windows ARM64 builds, you will now find them listed in the usual download page.
## Support
Godot is a non-profit, open source game engine developed by hundreds of contributors on their free time, as well as a handful of part or full-time developers hired thanks to [generous donations from the Godot community](https://fund.godotengine.org/). A big thank you to everyone who has contributed [their time](https://github.com/godotengine/godot/blob/master/AUTHORS.md) or [their financial support](https://github.com/godotengine/godot/blob/master/DONORS.md) to the project!
If you'd like to support the project financially and help us secure our future hires, you can do so using the [Godot Development Fund](https://fund.godotengine.org/) platform managed by [Godot Foundation](https://godot.foundation/). There are also several [alternative ways to donate](/donate) which you may find more suitable.

2408
pages/releases/4.3.html Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="510" height="823" fill="none"><g fill="#EFF1F5" opacity=".05"><path d="M-38.155-37c-41.615 9.252-82.783 22.134-121.379 41.56.883 34.08 3.086 66.734 7.552 99.903-14.988 9.603-30.741 17.845-44.741 29.087-14.224 10.943-28.754 21.41-41.634 34.209-25.732-17.02-52.963-33.015-81.02-47.133C-349.62 153.174-377.9 188.304-401 227.615c18.154 28.497 37.626 57.138 55.659 79.474v241.265c.441.003.886.018 1.323.059l147.909 14.262a15.926 15.926 0 0 1 14.358 14.75l4.562 65.291 129.021 9.209 8.886-60.264a15.931 15.931 0 0 1 15.76-13.606h156.049c7.899 0 14.603 5.793 15.755 13.606l8.886 60.264 129.026-9.209 4.557-65.291a15.933 15.933 0 0 1 14.358-14.75l147.851-14.262c.437-.041.876-.054 1.317-.059v-19.253l.064-.016V307.089c20.828-26.22 40.549-55.141 55.659-79.474-23.092-39.311-51.385-74.441-81.628-106.989-28.049 14.118-55.294 30.113-81.025 47.133-12.876-12.799-27.379-23.266-41.624-34.209-13.996-11.242-29.771-19.484-44.731-29.087 4.454-33.169 6.66-65.822 7.547-99.903-38.6-19.426-79.764-32.309-121.4-41.56-16.623 27.938-31.824 58.196-45.064 87.773-15.7-2.624-31.472-3.596-47.265-3.784v-.027c-.11 0-.213.027-.307.027-.098 0-.204-.027-.302-.027v.027c-15.822.188-31.583 1.16-47.287 3.784C-6.317 21.196-21.507-9.062-38.155-37Zm-117.018 352.938c49.233 0 89.138 39.874 89.138 89.091 0 49.248-39.905 89.143-89.138 89.143-49.208 0-89.122-39.895-89.122-89.143 0-49.217 39.914-89.091 89.122-89.091Zm419.356 0c49.204 0 89.112 39.874 89.112 89.091 0 49.248-39.908 89.143-89.112 89.143-49.24 0-89.143-39.895-89.143-89.143 0-49.217 39.903-89.091 89.143-89.091Zm-209.69 52.134c15.846 0 28.72 11.692 28.72 26.076v82.057c0 14.396-12.874 26.075-28.72 26.075-15.848 0-28.69-11.679-28.69-26.075v-82.057c0-14.384 12.842-26.076 28.69-26.076Z"/><path d="m321.587 593.09-4.581 65.639c-.552 7.911-6.845 14.208-14.756 14.776l-157.549 11.242a15.3 15.3 0 0 1-1.149.04c-7.829 0-14.584-5.745-15.74-13.607l-9.035-61.271H-9.776l-9.035 61.271c-1.213 8.246-8.585 14.175-16.889 13.567l-157.549-11.242c-7.911-.568-14.204-6.865-14.756-14.776l-4.581-65.639-132.998-12.823c.061 14.294.245 29.953.245 33.071 0 140.464 178.185 207.979 399.568 208.755h.543c221.382-.776 399.507-68.291 399.507-208.755 0-3.176.192-18.769.257-33.071L321.587 593.09ZM-87.484 410.315c0 32.666-26.476 59.141-59.166 59.141-32.675 0-59.167-26.475-59.167-59.141 0-32.667 26.492-59.167 59.167-59.167 32.69 0 59.166 26.5 59.166 59.167ZM196.49 410.315c0 32.666 26.468 59.141 59.134 59.141 32.699 0 59.166-26.475 59.166-59.141 0-32.667-26.467-59.167-59.166-59.167-32.666 0-59.134 26.5-59.134 59.167Z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.