mirror of
https://github.com/godotengine/godot.git
synced 2025-10-15 02:49:24 +00:00
Compare commits
201 Commits
4.0.4-stab
...
3.1.1-stab
Author | SHA1 | Date | |
---|---|---|---|
![]() |
66baa3b633 | ||
![]() |
e4816a8b1c | ||
![]() |
5b6ad923f0 | ||
![]() |
1c77481d3e | ||
![]() |
a24899ee25 | ||
![]() |
f7d5bee636 | ||
![]() |
23cf9f3b6f | ||
![]() |
348270df38 | ||
![]() |
a485d862f1 | ||
![]() |
fcbe50befa | ||
![]() |
08113feb5f | ||
![]() |
4764e17970 | ||
![]() |
39f1a110a1 | ||
![]() |
cab4921477 | ||
![]() |
4aa7760c74 | ||
![]() |
4fefc0896d | ||
![]() |
d8cae6e7f6 | ||
![]() |
a7f0bfb7db | ||
![]() |
5cc03473e0 | ||
![]() |
6fac922bff | ||
![]() |
0064d26517 | ||
![]() |
c76c33fb50 | ||
![]() |
5e02d6d98a | ||
![]() |
71753edeae | ||
![]() |
ff3987598e | ||
![]() |
49df4b7a7a | ||
![]() |
6ab01490f5 | ||
![]() |
340bf6e80c | ||
![]() |
9535a6079e | ||
![]() |
bb8f015595 | ||
![]() |
94f6c3a810 | ||
![]() |
42fa261563 | ||
![]() |
e0fe795433 | ||
![]() |
a1ad05df86 | ||
![]() |
ffc47d6fbe | ||
![]() |
9b65bd18bc | ||
![]() |
4c10a322d1 | ||
![]() |
7851d828a2 | ||
![]() |
17cb8878c7 | ||
![]() |
24ac1439e8 | ||
![]() |
1353c98279 | ||
![]() |
fce901ce40 | ||
![]() |
a758b329d0 | ||
![]() |
c7e5b371be | ||
![]() |
edba82b940 | ||
![]() |
9e2cf9ef0b | ||
![]() |
904bfa6a72 | ||
![]() |
aa78461ebd | ||
![]() |
ab8ccee1da | ||
![]() |
42514bfd80 | ||
![]() |
667dc0b336 | ||
![]() |
40c2a5ff57 | ||
![]() |
d0bebee560 | ||
![]() |
d9aa43e793 | ||
![]() |
a329f6fa0b | ||
![]() |
4f3fc559bc | ||
![]() |
759c1fb0b8 | ||
![]() |
ae6d45b0f2 | ||
![]() |
2213a21ab3 | ||
![]() |
b887d3f8e8 | ||
![]() |
c33a924c28 | ||
![]() |
4be1343f3c | ||
![]() |
34c2679506 | ||
![]() |
650c8512cd | ||
![]() |
852997e446 | ||
![]() |
01b39be9e6 | ||
![]() |
4298db56cf | ||
![]() |
3c635b4bdf | ||
![]() |
7b8e7d6514 | ||
![]() |
4da40c39f1 | ||
![]() |
7ddd4f7232 | ||
![]() |
965b13d62a | ||
![]() |
20ffda695a | ||
![]() |
367b371fdd | ||
![]() |
d0c5dc77f3 | ||
![]() |
3d74b1e2ef | ||
![]() |
320105ff05 | ||
![]() |
2020f43261 | ||
![]() |
95766f5a6a | ||
![]() |
7434760380 | ||
![]() |
a028160522 | ||
![]() |
792beb4b83 | ||
![]() |
c6fa282fbb | ||
![]() |
456eb53439 | ||
![]() |
782a6dcdde | ||
![]() |
a1388dff7e | ||
![]() |
3445984901 | ||
![]() |
bd2e707e2f | ||
![]() |
72b4844d42 | ||
![]() |
96222dedb5 | ||
![]() |
aedea36d0c | ||
![]() |
16097dd174 | ||
![]() |
afe6d654d5 | ||
![]() |
59b2f02ac7 | ||
![]() |
8f537cfa19 | ||
![]() |
b439515d73 | ||
![]() |
e31d6367ea | ||
![]() |
0e7de28b8d | ||
![]() |
0f51f138b5 | ||
![]() |
511fb03e20 | ||
![]() |
4574894e43 | ||
![]() |
f673bc1e3d | ||
![]() |
7a94bac34e | ||
![]() |
781b8a6c0f | ||
![]() |
a29700e034 | ||
![]() |
def0820385 | ||
![]() |
53d73f59eb | ||
![]() |
aa0d4ffe51 | ||
![]() |
af12b2d18b | ||
![]() |
d99a0a5fba | ||
![]() |
f12848f9e1 | ||
![]() |
28f547a021 | ||
![]() |
fd4a65df7b | ||
![]() |
8d87f624eb | ||
![]() |
a033640276 | ||
![]() |
0eeb1a7d0d | ||
![]() |
b5d9099626 | ||
![]() |
6137387ede | ||
![]() |
4243f8b32a | ||
![]() |
2fbc4219db | ||
![]() |
6226be9595 | ||
![]() |
b836420fd8 | ||
![]() |
37e62939e0 | ||
![]() |
276cd771f9 | ||
![]() |
c94e80a0a3 | ||
![]() |
948562261d | ||
![]() |
67dc8cf252 | ||
![]() |
93875a79bb | ||
![]() |
d538fb8d6c | ||
![]() |
4ba90b9dda | ||
![]() |
b5bd8e5f1b | ||
![]() |
a4610ca61e | ||
![]() |
e8e57c49de | ||
![]() |
40ec89d24d | ||
![]() |
fd3845cdad | ||
![]() |
2ad86122ac | ||
![]() |
24b049ec9e | ||
![]() |
c4ff65207d | ||
![]() |
b502152195 | ||
![]() |
4889c65922 | ||
![]() |
4eefd2d581 | ||
![]() |
2b3f2ee372 | ||
![]() |
929e3595c8 | ||
![]() |
dc928e6174 | ||
![]() |
38e5f94e19 | ||
![]() |
dc259b95d8 | ||
![]() |
d59b97cca7 | ||
![]() |
37c97d09e6 | ||
![]() |
1dd72dca45 | ||
![]() |
29a6e7d306 | ||
![]() |
e3ae29e666 | ||
![]() |
044ec35f62 | ||
![]() |
8b1b8181b3 | ||
![]() |
5ec63c62a1 | ||
![]() |
3ccb859711 | ||
![]() |
7f691e8bb9 | ||
![]() |
f4578e1008 | ||
![]() |
1d05568aed | ||
![]() |
e3e33daeb9 | ||
![]() |
3e0fc6906e | ||
![]() |
cf8bd34941 | ||
![]() |
08f3562fd1 | ||
![]() |
c7c8c0700f | ||
![]() |
364aea1eff | ||
![]() |
72433a35b1 | ||
![]() |
683c95ebdb | ||
![]() |
03d00ca36b | ||
![]() |
dffc754a0a | ||
![]() |
9ca440b763 | ||
![]() |
2f8362a2ab | ||
![]() |
2e9cf9829c | ||
![]() |
1f9809032d | ||
![]() |
b2d13ba7b7 | ||
![]() |
9bd25ce7d2 | ||
![]() |
804b68c981 | ||
![]() |
373e6aa17a | ||
![]() |
695f1a9185 | ||
![]() |
5650c1ecde | ||
![]() |
754e1b073a | ||
![]() |
ae3047d758 | ||
![]() |
f7f80b009b | ||
![]() |
4fda05e15f | ||
![]() |
3d0dc81e9e | ||
![]() |
0c3c4d61f7 | ||
![]() |
08b685ab61 | ||
![]() |
848bd54dae | ||
![]() |
d362e3eb11 | ||
![]() |
d26c3fca0c | ||
![]() |
589c5698a0 | ||
![]() |
d02ee1ff0e | ||
![]() |
4740489a97 | ||
![]() |
e9796044ed | ||
![]() |
f7ff3ec749 | ||
![]() |
dbf2f0c31e | ||
![]() |
0d8492cf9e | ||
![]() |
a51b2b8a82 | ||
![]() |
d060cd4fef | ||
![]() |
4023d52399 | ||
![]() |
77c26d3260 | ||
![]() |
57f19fd8ee | ||
![]() |
51e04c588b |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -316,3 +316,10 @@ platform/windows/godot_res.res
|
||||
|
||||
# Scons progress indicator
|
||||
.scons_node_count
|
||||
|
||||
# ccls cache (https://github.com/MaskRay/ccls)
|
||||
.ccls-cache/
|
||||
|
||||
# compile commands (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||
compile_commands.json
|
||||
|
||||
|
@@ -27,7 +27,7 @@ matrix:
|
||||
packages:
|
||||
- clang-format-6.0
|
||||
|
||||
- env: PLATFORM=x11 TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-mono-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="module_mono_enabled=yes mono_glue=no werror=yes"
|
||||
- env: PLATFORM=x11 TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-mono-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="module_mono_enabled=yes mono_glue=no warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: gcc-8
|
||||
addons:
|
||||
@@ -49,7 +49,7 @@ matrix:
|
||||
build_command: "scons p=x11 -j2 $OPTIONS"
|
||||
branch_pattern: coverity_scan
|
||||
|
||||
- env: PLATFORM=x11 TOOLS=no TARGET=release CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="werror=yes"
|
||||
- env: PLATFORM=x11 TOOLS=no TARGET=release CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
@@ -57,7 +57,7 @@ matrix:
|
||||
packages:
|
||||
- *linux_deps
|
||||
|
||||
- env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="werror=yes"
|
||||
- env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: clang
|
||||
|
||||
@@ -69,7 +69,7 @@ matrix:
|
||||
os: osx
|
||||
compiler: clang
|
||||
|
||||
- env: PLATFORM=server TOOLS=yes TARGET=release_debug CACHE_NAME=${PLATFORM}-tools-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="werror=yes"
|
||||
- env: PLATFORM=server TOOLS=yes TARGET=release_debug CACHE_NAME=${PLATFORM}-tools-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: gcc-8
|
||||
addons:
|
||||
|
@@ -45,6 +45,7 @@ name is available.
|
||||
Błażej Szczygieł (zaps166)
|
||||
Bojidar Marinov (bojidar-bg)
|
||||
bruvzg
|
||||
Camille Mohr-Daurat (pouleyKetchoupp)
|
||||
Carl Olsson (not-surt)
|
||||
Carter Anderson (cart)
|
||||
Chris Bradfield (cbscribe)
|
||||
@@ -115,6 +116,7 @@ name is available.
|
||||
Pieter-Jan Briers (PJB3005)
|
||||
Poommetee Ketson (Noshyaar)
|
||||
Przemysław Gołąb (n-pigeon)
|
||||
Rafał Mikrut (qarmin)
|
||||
Ralf Hölzemer (rollenrolm)
|
||||
Ramesh Ravone (RameshRavone)
|
||||
Ray Koopa (RayKoopa)
|
||||
|
@@ -369,17 +369,19 @@ Comment: libSquish
|
||||
Copyright: 2006, Simon Brown
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/thekla_atlas/
|
||||
Comment: Thekla Atlas
|
||||
Copyright: 2013, Thekla, Inc
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/tinyexr/
|
||||
Comment: TinyEXR
|
||||
Copyright: 2014-2018, Syoyo Fujita
|
||||
2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: ./thirdparty/xatlas/
|
||||
Comment: xatlas
|
||||
Copyright: 2018, Jonathan Young
|
||||
2013, Thekla, Inc
|
||||
2006, NVIDIA Corporation, Ignacio Castano
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/zlib/
|
||||
Comment: zlib
|
||||
Copyright: 1995-2017, Jean-loup Gailly and Mark Adler
|
||||
|
92
DONORS.md
92
DONORS.md
@@ -18,22 +18,21 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
|
||||
Gamblify <https://www.gamblify.com>
|
||||
Image Campus <https://www.imagecampus.edu.ar>
|
||||
Yakaz.com <https://yakaz.com>
|
||||
|
||||
## Mini sponsors
|
||||
|
||||
Alan Beauchamp
|
||||
Anandarup Mallik
|
||||
Andrew Dunai
|
||||
Arda Erol
|
||||
Brandon Lamb
|
||||
Christian Uldall Pedersen
|
||||
Christoph Woinke
|
||||
Connor Hill
|
||||
Edward Flick
|
||||
GameDev.net
|
||||
GameDev.tv
|
||||
Hein-Pieter van Braam
|
||||
Jamal Alyafei
|
||||
Jacob McKenney
|
||||
Javary Games
|
||||
Jay Sistar
|
||||
Justin Arnold
|
||||
@@ -43,22 +42,18 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Matthieu Huvé
|
||||
Maxim Karsten
|
||||
Mike King
|
||||
Nathan Warden
|
||||
Neal Gompa (Conan Kudo)
|
||||
Patrick Aarstad
|
||||
"Rainway "
|
||||
Ruslan Mustakov
|
||||
Slobodan Milnovic
|
||||
StarFlare Software
|
||||
Stephan Lanfermann
|
||||
Stoney Meyerhoeffer
|
||||
thechris
|
||||
TigerJ
|
||||
VilliHaukka
|
||||
Zashi
|
||||
|
||||
## Gold donors
|
||||
|
||||
Asdf
|
||||
Brandon Waite
|
||||
cheese65536
|
||||
David Gehrig
|
||||
@@ -69,8 +64,10 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Nathanael Beisiegel
|
||||
Officine Pixel S.n.c.
|
||||
Retro Village
|
||||
Sofox
|
||||
Zaven Muradyan
|
||||
|
||||
Alexander Trey Saunders
|
||||
Allen Schade
|
||||
Andreas Schüle
|
||||
Asher Glick
|
||||
@@ -80,7 +77,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
David Giardi
|
||||
Edward E
|
||||
Florian Breisch
|
||||
Gary Oberbrunner
|
||||
Gero
|
||||
Jay Horton
|
||||
Jon Smith
|
||||
@@ -88,6 +84,8 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Jorge Bernal
|
||||
Joshua Lesperance
|
||||
Justo Delgado Baudí
|
||||
Karl Werf
|
||||
Kommentgames
|
||||
Krzysztof Dluzniewski
|
||||
Moonwards
|
||||
Mored1984
|
||||
@@ -95,6 +93,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
paul gruenbacher
|
||||
Paul LaMotte
|
||||
Rob Messick
|
||||
Ross Esmond
|
||||
Scott Wadden
|
||||
Sergey
|
||||
Svenne Krap
|
||||
@@ -103,19 +102,20 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Wyatt Goodin
|
||||
Xananax
|
||||
|
||||
BanjoNode2D
|
||||
Beliar
|
||||
Abel Oroz Vicente
|
||||
Chris Serino
|
||||
Christian Padilla
|
||||
Conrad Curry
|
||||
Craig Smith
|
||||
Daniel Egger
|
||||
Dean Harmon
|
||||
Ian Richard Kunert
|
||||
Ivan Trombley
|
||||
Joan Fons
|
||||
Krzysztof Jankowski
|
||||
Lord Bloodhound
|
||||
Lucas Ferreira Franca
|
||||
Michele Zilli
|
||||
Nathan Lundquist
|
||||
Pascal Grüter
|
||||
Petr Malac
|
||||
@@ -125,27 +125,34 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Ronnie Ashlock
|
||||
ScottMakesGames
|
||||
Thomas Bjarnelöf
|
||||
Vincent Henderson
|
||||
Wojciech Chojnacki
|
||||
Xavier PATRICELLI
|
||||
|
||||
Alessandra Pereyra
|
||||
Alexey Dyadchenko
|
||||
Andrew Bowen
|
||||
Asdf
|
||||
Benjamin W Flint
|
||||
Chau Siu Hung
|
||||
Chris Goddard
|
||||
Chris Petrich
|
||||
Christian Leth Jeppesen
|
||||
Christoph Schröder
|
||||
Cody Parker
|
||||
ComicSads
|
||||
D
|
||||
Daniel
|
||||
Daniel Eichler
|
||||
Deadly Lampshade
|
||||
Eagle 3d
|
||||
E.G.
|
||||
Eric
|
||||
Eric Monson
|
||||
Ethan Bennis
|
||||
Eugenio Hugo Salgüero Jáñez
|
||||
flesk
|
||||
Francisco Javier Moreno Carracedo
|
||||
gavlig
|
||||
GGGames.org
|
||||
Giles Montgomery
|
||||
@@ -153,21 +160,24 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Guilherme Felipe de C. G. da Silva
|
||||
Heath Hayes
|
||||
Hysteria
|
||||
Jalal Chaabane
|
||||
Jeppe Zapp
|
||||
Jose Malheiro
|
||||
Joshua Flores
|
||||
Juan T Chen
|
||||
Juraj Móza
|
||||
Kasper Jeppesen
|
||||
Klavdij Voncina
|
||||
Leandro Voltolino
|
||||
Lukáš Rendvanský
|
||||
Maarten Elings
|
||||
Malcolm Peralty
|
||||
Marius Kamm
|
||||
Markus Fehr
|
||||
Markus Wiesner
|
||||
Martin Eigel
|
||||
Marvin
|
||||
Matt Eunson
|
||||
Matthew Hillier
|
||||
Max R.R. Collada
|
||||
MegaC
|
||||
Nick Nikitin
|
||||
Oliver Dick
|
||||
oziatek
|
||||
@@ -175,39 +185,45 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Paul Von Zimmerman
|
||||
Pete Goodwin
|
||||
Ranoller
|
||||
ray-tracer
|
||||
Ruben Soares Luis
|
||||
Samuel Judd
|
||||
Sofox
|
||||
Scott Pilet
|
||||
spilldata
|
||||
Stoned Xander
|
||||
Thomas Krampl
|
||||
Tobias Bocanegra
|
||||
Urho
|
||||
WytRabbit
|
||||
Xavier Fumado Beltran
|
||||
yuanzhe zhou
|
||||
|
||||
## Silver donors
|
||||
|
||||
1D_Inc
|
||||
Abraham Haskins
|
||||
Adam Brunnmeier
|
||||
Adam Carr
|
||||
Adam Nakonieczny
|
||||
Adam Smeltzer
|
||||
Adisibio
|
||||
Aidan O'Flannagain
|
||||
Alder Stefano
|
||||
Alessandro Senese
|
||||
Alexander Gillberg
|
||||
Alexander Koppe
|
||||
Alex Davies-Moore
|
||||
Alice Robinson
|
||||
Andreas Evers
|
||||
Andreas Krampitz
|
||||
Anthony Bongiovanni
|
||||
Arbor Interactive
|
||||
Arda Erol
|
||||
Arthur S. Muszynski
|
||||
Aubrey Falconer
|
||||
Avencherus
|
||||
Bailey
|
||||
Balázs Batári
|
||||
Bastian Böhm
|
||||
Beliar
|
||||
Benedikt
|
||||
Ben Phelan
|
||||
Ben Vercammen
|
||||
Bernd Jänichen
|
||||
Blair Allen
|
||||
@@ -221,14 +237,17 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Christian Baune
|
||||
Christian Winter
|
||||
Christoffer Sundbom
|
||||
Christopher Fisher
|
||||
Chris Wilson
|
||||
Clay Heaton
|
||||
Collin Shooltz
|
||||
Connor Hill
|
||||
Daniel Johnson
|
||||
DanielMaximiano
|
||||
Daniel Reed
|
||||
David Bullock
|
||||
David Cravens
|
||||
David May
|
||||
Diliup Gabadamudalige
|
||||
Dominik Wetzel
|
||||
Duobix
|
||||
Edward Herbert
|
||||
@@ -238,20 +257,24 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Eric Martini
|
||||
Eric McCarthy
|
||||
Eric Williams
|
||||
Fabian Becker
|
||||
Fabian Lökes
|
||||
fengjiongmax
|
||||
Foomf
|
||||
G3Dev sàrl
|
||||
Gary Hulst
|
||||
Gerrit Großkopf
|
||||
Grant Clarke
|
||||
Greg Olson
|
||||
Greg Pennefather
|
||||
Guldoman
|
||||
Haley Aycock
|
||||
Heribert Hirth
|
||||
Hiroshi Naruo
|
||||
HMan
|
||||
Hunter Jones
|
||||
ialex32x
|
||||
Igor Buzatovic
|
||||
Iiari
|
||||
Isaac Morton
|
||||
Jaime Ruiz-Borau Vizárraga
|
||||
Jako Danar
|
||||
James A F Manley
|
||||
@@ -259,6 +282,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Jeremy Kahn
|
||||
Jesse Dubay
|
||||
Joel Fivat
|
||||
Joel Setterberg
|
||||
Johannes Wuensch
|
||||
Jonas Rudlang
|
||||
Jonas Yamazaki
|
||||
@@ -267,14 +291,16 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Jonathon
|
||||
Jon Bonazza
|
||||
Jon Sully
|
||||
Jose Aleman
|
||||
Josh 'Cheeseness' Bush
|
||||
Juanfran
|
||||
Juan Negrier
|
||||
Judd
|
||||
Julian Murgia
|
||||
Julius Hackel
|
||||
Kajornthep Piyanun
|
||||
KC Chan
|
||||
Kevin Boyer
|
||||
kickmaniac
|
||||
Kiyohiro Kawamura (kyorohiro)
|
||||
Klagsam
|
||||
KR McGinley
|
||||
@@ -289,10 +315,13 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Major Haul
|
||||
Malcolm
|
||||
Markus Michael Egger
|
||||
Martin Holas
|
||||
Matthew Little
|
||||
Matthias Grandis
|
||||
Matt Welke
|
||||
Maxwell
|
||||
medecau
|
||||
Menno Finlay-Smits
|
||||
Mertcan Mermerkaya
|
||||
mhilbrunner
|
||||
Michael Dürwald
|
||||
@@ -300,17 +329,19 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Michael Labbe
|
||||
Mikael Olsson
|
||||
Mikayla Hutchinson
|
||||
Mike Cunningham
|
||||
MoM
|
||||
Moritz Laass
|
||||
Moritz Weissenberger
|
||||
MuffinManKen
|
||||
Natrim
|
||||
nee
|
||||
Neil Blakey-Milner
|
||||
Nerdforge
|
||||
Nick Pavlica
|
||||
Niclas Eriksen
|
||||
Nicolás Montaña
|
||||
Nicolas SAN AGUSTIN
|
||||
Nithin Jino
|
||||
Oscar Norlander
|
||||
Pan Ip
|
||||
Patrick Nafarrete
|
||||
@@ -321,20 +352,29 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
Pierre-Igor Berthet
|
||||
Pietro Vertechi
|
||||
Piotr Kaczmarski
|
||||
Pitsanu Tongprasin
|
||||
Poryg
|
||||
Prokhorenko Leonid
|
||||
Psyagnostic
|
||||
Rafael
|
||||
Raphael Leroux
|
||||
Rémi Verschelde
|
||||
Reneator
|
||||
Ricardo Alcantara
|
||||
Richman Stewart
|
||||
Rob Crowle
|
||||
Robert Farr (Larington)
|
||||
Robert Hernandez
|
||||
Rodrigo Loli
|
||||
Roger Burgess
|
||||
Roger Smith
|
||||
Roland Rząsa
|
||||
Roman Tinkov
|
||||
Ryan Cheung
|
||||
Ryan Groom
|
||||
Ryan Hentz
|
||||
Sasori Olkof
|
||||
Scott D. Yelich
|
||||
Sebastian Michailidis
|
||||
Shane Spoor
|
||||
Simon Wenner
|
||||
@@ -348,6 +388,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
tiansheng li
|
||||
Tim
|
||||
Tim Drumheller
|
||||
Tim Gudex
|
||||
Tom Larrow
|
||||
Torsten Crass
|
||||
Tryggve Sollid
|
||||
@@ -355,10 +396,13 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||
UltyX
|
||||
Vaiktorg
|
||||
Victor
|
||||
Vigilant Watch
|
||||
Viktor Ferenczi
|
||||
waka nya
|
||||
Wayne Haak
|
||||
werner mendizabal
|
||||
Wiley Thompson
|
||||
Will
|
||||
William Gervasio
|
||||
William Hogben
|
||||
Wout Standaert
|
||||
|
11
SConstruct
11
SConstruct
@@ -5,7 +5,6 @@ EnsureSConsVersion(0, 98, 1)
|
||||
# System
|
||||
import glob
|
||||
import os
|
||||
import string
|
||||
import sys
|
||||
|
||||
# Local
|
||||
@@ -181,7 +180,6 @@ opts.Add(BoolVariable('builtin_opus', "Use the built-in Opus library", True))
|
||||
opts.Add(BoolVariable('builtin_pcre2', "Use the built-in PCRE2 library)", True))
|
||||
opts.Add(BoolVariable('builtin_recast', "Use the built-in Recast library", True))
|
||||
opts.Add(BoolVariable('builtin_squish', "Use the built-in squish library", True))
|
||||
opts.Add(BoolVariable('builtin_thekla_atlas', "Use the built-in thekla_altas library", True))
|
||||
opts.Add(BoolVariable('builtin_xatlas', "Use the built-in xatlas library", True))
|
||||
opts.Add(BoolVariable('builtin_zlib', "Use the built-in zlib library", True))
|
||||
opts.Add(BoolVariable('builtin_zstd', "Use the built-in Zstd library", True))
|
||||
@@ -342,12 +340,17 @@ if selected_platform in platform_list:
|
||||
shadow_local_warning = []
|
||||
all_plus_warnings = ['-Wwrite-strings']
|
||||
|
||||
if methods.use_gcc(env):
|
||||
if methods.using_gcc(env):
|
||||
version = methods.get_compiler_version(env)
|
||||
if version != None and version[0] >= '7':
|
||||
shadow_local_warning = ['-Wshadow-local']
|
||||
if (env["warnings"] == 'extra'):
|
||||
env.Append(CCFLAGS=['-Wall', '-Wextra'] + all_plus_warnings + shadow_local_warning)
|
||||
# FIXME: enable -Wimplicit-fallthrough once #26135 is fixed
|
||||
# FIXME: enable -Wclobbered once #26351 is fixed
|
||||
env.Append(CCFLAGS=['-Wall', '-Wextra', '-Wno-implicit-fallthrough', '-Wno-unused-parameter'] + all_plus_warnings + shadow_local_warning)
|
||||
if methods.using_gcc(env):
|
||||
env['CCFLAGS'] += ['-Wno-clobbered']
|
||||
|
||||
elif (env["warnings"] == 'all'):
|
||||
env.Append(CCFLAGS=['-Wall'] + shadow_local_warning)
|
||||
elif (env["warnings"] == 'moderate'):
|
||||
|
@@ -792,7 +792,7 @@ Dictionary _OS::get_datetime_from_unix_time(int64_t unix_time_val) const {
|
||||
|
||||
size_t imonth = 0;
|
||||
|
||||
while (dayno >= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth]) {
|
||||
while ((unsigned long)dayno >= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth]) {
|
||||
dayno -= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth];
|
||||
imonth++;
|
||||
}
|
||||
@@ -1908,18 +1908,18 @@ bool _File::file_exists(const String &p_name) const {
|
||||
return FileAccess::exists(p_name);
|
||||
}
|
||||
|
||||
void _File::store_var(const Variant &p_var) {
|
||||
void _File::store_var(const Variant &p_var, bool p_full_objects) {
|
||||
|
||||
ERR_FAIL_COND(!f);
|
||||
int len;
|
||||
Error err = encode_variant(p_var, NULL, len);
|
||||
Error err = encode_variant(p_var, NULL, len, p_full_objects);
|
||||
ERR_FAIL_COND(err != OK);
|
||||
|
||||
PoolVector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
PoolVector<uint8_t>::Write w = buff.write();
|
||||
|
||||
err = encode_variant(p_var, &w[0], len);
|
||||
err = encode_variant(p_var, &w[0], len, p_full_objects);
|
||||
ERR_FAIL_COND(err != OK);
|
||||
w = PoolVector<uint8_t>::Write();
|
||||
|
||||
@@ -1927,7 +1927,7 @@ void _File::store_var(const Variant &p_var) {
|
||||
store_buffer(buff);
|
||||
}
|
||||
|
||||
Variant _File::get_var() const {
|
||||
Variant _File::get_var(bool p_allow_objects) const {
|
||||
|
||||
ERR_FAIL_COND_V(!f, Variant());
|
||||
uint32_t len = get_32();
|
||||
@@ -1937,7 +1937,7 @@ Variant _File::get_var() const {
|
||||
PoolVector<uint8_t>::Read r = buff.read();
|
||||
|
||||
Variant v;
|
||||
Error err = decode_variant(v, &r[0], len);
|
||||
Error err = decode_variant(v, &r[0], len, NULL, p_allow_objects);
|
||||
ERR_FAIL_COND_V(err != OK, Variant());
|
||||
|
||||
return v;
|
||||
@@ -1980,7 +1980,7 @@ void _File::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_endian_swap"), &_File::get_endian_swap);
|
||||
ClassDB::bind_method(D_METHOD("set_endian_swap", "enable"), &_File::set_endian_swap);
|
||||
ClassDB::bind_method(D_METHOD("get_error"), &_File::get_error);
|
||||
ClassDB::bind_method(D_METHOD("get_var"), &_File::get_var);
|
||||
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &_File::get_var, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("store_8", "value"), &_File::store_8);
|
||||
ClassDB::bind_method(D_METHOD("store_16", "value"), &_File::store_16);
|
||||
@@ -1993,7 +1993,7 @@ void _File::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("store_line", "line"), &_File::store_line);
|
||||
ClassDB::bind_method(D_METHOD("store_csv_line", "values", "delim"), &_File::store_csv_line, DEFVAL(","));
|
||||
ClassDB::bind_method(D_METHOD("store_string", "string"), &_File::store_string);
|
||||
ClassDB::bind_method(D_METHOD("store_var", "value"), &_File::store_var);
|
||||
ClassDB::bind_method(D_METHOD("store_var", "value", "full_objects"), &_File::store_var, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("store_pascal_string", "string"), &_File::store_pascal_string);
|
||||
ClassDB::bind_method(D_METHOD("get_pascal_string"), &_File::get_pascal_string);
|
||||
@@ -2223,17 +2223,17 @@ _Marshalls *_Marshalls::get_singleton() {
|
||||
return singleton;
|
||||
}
|
||||
|
||||
String _Marshalls::variant_to_base64(const Variant &p_var) {
|
||||
String _Marshalls::variant_to_base64(const Variant &p_var, bool p_full_objects) {
|
||||
|
||||
int len;
|
||||
Error err = encode_variant(p_var, NULL, len);
|
||||
Error err = encode_variant(p_var, NULL, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(err != OK, "");
|
||||
|
||||
PoolVector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
PoolVector<uint8_t>::Write w = buff.write();
|
||||
|
||||
err = encode_variant(p_var, &w[0], len);
|
||||
err = encode_variant(p_var, &w[0], len, p_full_objects);
|
||||
ERR_FAIL_COND_V(err != OK, "");
|
||||
|
||||
int b64len = len / 3 * 4 + 4 + 1;
|
||||
@@ -2249,7 +2249,7 @@ String _Marshalls::variant_to_base64(const Variant &p_var) {
|
||||
return ret;
|
||||
};
|
||||
|
||||
Variant _Marshalls::base64_to_variant(const String &p_str) {
|
||||
Variant _Marshalls::base64_to_variant(const String &p_str, bool p_allow_objects) {
|
||||
|
||||
int strlen = p_str.length();
|
||||
CharString cstr = p_str.ascii();
|
||||
@@ -2261,7 +2261,7 @@ Variant _Marshalls::base64_to_variant(const String &p_str) {
|
||||
int len = base64_decode((char *)(&w[0]), (char *)cstr.get_data(), strlen);
|
||||
|
||||
Variant v;
|
||||
Error err = decode_variant(v, &w[0], len);
|
||||
Error err = decode_variant(v, &w[0], len, NULL, p_allow_objects);
|
||||
ERR_FAIL_COND_V(err != OK, Variant());
|
||||
|
||||
return v;
|
||||
@@ -2340,8 +2340,8 @@ String _Marshalls::base64_to_utf8(const String &p_str) {
|
||||
|
||||
void _Marshalls::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("variant_to_base64", "variant"), &_Marshalls::variant_to_base64);
|
||||
ClassDB::bind_method(D_METHOD("base64_to_variant", "base64_str"), &_Marshalls::base64_to_variant);
|
||||
ClassDB::bind_method(D_METHOD("variant_to_base64", "variant", "full_objects"), &_Marshalls::variant_to_base64, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("base64_to_variant", "base64_str", "allow_objects"), &_Marshalls::base64_to_variant, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("raw_to_base64", "array"), &_Marshalls::raw_to_base64);
|
||||
ClassDB::bind_method(D_METHOD("base64_to_raw", "base64_str"), &_Marshalls::base64_to_raw);
|
||||
|
@@ -463,7 +463,7 @@ public:
|
||||
double get_double() const;
|
||||
real_t get_real() const;
|
||||
|
||||
Variant get_var() const;
|
||||
Variant get_var(bool p_allow_objects = false) const;
|
||||
|
||||
PoolVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes
|
||||
String get_line() const;
|
||||
@@ -500,7 +500,7 @@ public:
|
||||
|
||||
void store_buffer(const PoolVector<uint8_t> &p_buffer); ///< store an array of bytes
|
||||
|
||||
void store_var(const Variant &p_var);
|
||||
void store_var(const Variant &p_var, bool p_full_objects = false);
|
||||
|
||||
bool file_exists(const String &p_name) const; ///< return true if a file exists
|
||||
|
||||
@@ -569,8 +569,8 @@ protected:
|
||||
public:
|
||||
static _Marshalls *get_singleton();
|
||||
|
||||
String variant_to_base64(const Variant &p_var);
|
||||
Variant base64_to_variant(const String &p_str);
|
||||
String variant_to_base64(const Variant &p_var, bool p_full_objects = false);
|
||||
Variant base64_to_variant(const String &p_str, bool p_allow_objects = false);
|
||||
|
||||
String raw_to_base64(const PoolVector<uint8_t> &p_arr);
|
||||
PoolVector<uint8_t> base64_to_raw(const String &p_str);
|
||||
|
@@ -249,6 +249,11 @@ void ClassDB::set_current_api(APIType p_api) {
|
||||
current_api = p_api;
|
||||
}
|
||||
|
||||
ClassDB::APIType ClassDB::get_current_api() {
|
||||
|
||||
return current_api;
|
||||
}
|
||||
|
||||
HashMap<StringName, ClassDB::ClassInfo> ClassDB::classes;
|
||||
HashMap<StringName, StringName> ClassDB::resource_base_extensions;
|
||||
HashMap<StringName, StringName> ClassDB::compat_classes;
|
||||
|
@@ -371,6 +371,7 @@ public:
|
||||
static void init();
|
||||
|
||||
static void set_current_api(APIType p_api);
|
||||
static APIType get_current_api();
|
||||
static void cleanup();
|
||||
};
|
||||
|
||||
|
@@ -175,7 +175,9 @@ int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p
|
||||
} break;
|
||||
case MODE_ZSTD: {
|
||||
ZSTD_DCtx *dctx = ZSTD_createDCtx();
|
||||
if (zstd_long_distance_matching) ZSTD_DCtx_setMaxWindowSize(dctx, (size_t)1 << zstd_window_log_size);
|
||||
if (zstd_long_distance_matching) {
|
||||
ZSTD_DCtx_setParameter(dctx, ZSTD_d_windowLogMax, zstd_window_log_size);
|
||||
}
|
||||
int ret = ZSTD_decompressDCtx(dctx, p_dst, p_dst_max_size, p_src, p_src_size);
|
||||
ZSTD_freeDCtx(dctx);
|
||||
return ret;
|
||||
@@ -189,4 +191,4 @@ int Compression::zlib_level = Z_DEFAULT_COMPRESSION;
|
||||
int Compression::gzip_level = Z_DEFAULT_COMPRESSION;
|
||||
int Compression::zstd_level = 3;
|
||||
bool Compression::zstd_long_distance_matching = false;
|
||||
int Compression::zstd_window_log_size = 27;
|
||||
int Compression::zstd_window_log_size = 27; // ZSTD_WINDOWLOG_LIMIT_DEFAULT
|
||||
|
@@ -272,7 +272,7 @@ int FileAccessPack::get_buffer(uint8_t *p_dst, int p_length) const {
|
||||
if (eof)
|
||||
return 0;
|
||||
|
||||
int64_t to_read = p_length;
|
||||
uint64_t to_read = p_length;
|
||||
if (to_read + pos > pf.size) {
|
||||
eof = true;
|
||||
to_read = int64_t(pf.size) - int64_t(pos);
|
||||
|
@@ -794,7 +794,7 @@ static void _encode_string(const String &p_string, uint8_t *&buf, int &r_len) {
|
||||
}
|
||||
}
|
||||
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_object_as_id) {
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_full_objects) {
|
||||
|
||||
uint8_t *buf = r_buffer;
|
||||
|
||||
@@ -819,7 +819,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||
}
|
||||
} break;
|
||||
case Variant::OBJECT: {
|
||||
if (p_object_as_id) {
|
||||
if (!p_full_objects) {
|
||||
flags |= ENCODE_FLAG_OBJECT_AS_ID;
|
||||
}
|
||||
} break;
|
||||
@@ -1086,22 +1086,8 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||
} break;
|
||||
case Variant::OBJECT: {
|
||||
|
||||
if (p_object_as_id) {
|
||||
if (p_full_objects) {
|
||||
|
||||
if (buf) {
|
||||
|
||||
Object *obj = p_variant;
|
||||
ObjectID id = 0;
|
||||
if (obj && ObjectDB::instance_validate(obj)) {
|
||||
id = obj->get_instance_id();
|
||||
}
|
||||
|
||||
encode_uint64(id, buf);
|
||||
}
|
||||
|
||||
r_len += 8;
|
||||
|
||||
} else {
|
||||
Object *obj = p_variant;
|
||||
if (!obj) {
|
||||
if (buf) {
|
||||
@@ -1139,7 +1125,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||
_encode_string(E->get().name, buf, r_len);
|
||||
|
||||
int len;
|
||||
Error err = encode_variant(obj->get(E->get().name), buf, len, p_object_as_id);
|
||||
Error err = encode_variant(obj->get(E->get().name), buf, len, p_full_objects);
|
||||
if (err)
|
||||
return err;
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
@@ -1148,6 +1134,19 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||
buf += len;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (buf) {
|
||||
|
||||
Object *obj = p_variant;
|
||||
ObjectID id = 0;
|
||||
if (obj && ObjectDB::instance_validate(obj)) {
|
||||
id = obj->get_instance_id();
|
||||
}
|
||||
|
||||
encode_uint64(id, buf);
|
||||
}
|
||||
|
||||
r_len += 8;
|
||||
}
|
||||
|
||||
} break;
|
||||
@@ -1180,14 +1179,14 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||
r_len++; //pad
|
||||
*/
|
||||
int len;
|
||||
encode_variant(E->get(), buf, len, p_object_as_id);
|
||||
encode_variant(E->get(), buf, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
r_len += len;
|
||||
if (buf)
|
||||
buf += len;
|
||||
Variant *v = d.getptr(E->get());
|
||||
ERR_FAIL_COND_V(!v, ERR_BUG);
|
||||
encode_variant(*v, buf, len, p_object_as_id);
|
||||
encode_variant(*v, buf, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
r_len += len;
|
||||
if (buf)
|
||||
@@ -1209,7 +1208,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||
for (int i = 0; i < v.size(); i++) {
|
||||
|
||||
int len;
|
||||
encode_variant(v.get(i), buf, len, p_object_as_id);
|
||||
encode_variant(v.get(i), buf, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
r_len += len;
|
||||
if (buf)
|
||||
|
@@ -199,7 +199,7 @@ public:
|
||||
EncodedObjectAsID();
|
||||
};
|
||||
|
||||
Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int *r_len = NULL, bool p_allow_objects = true);
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_object_as_id = false);
|
||||
Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int *r_len = NULL, bool p_allow_objects = false);
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_full_objects = false);
|
||||
|
||||
#endif
|
||||
|
@@ -299,7 +299,7 @@ void MultiplayerAPI::_process_rpc(Node *p_node, const StringName &p_name, int p_
|
||||
ERR_FAIL_COND(p_offset >= p_packet_len);
|
||||
|
||||
int vlen;
|
||||
Error err = decode_variant(args.write[i], &p_packet[p_offset], p_packet_len - p_offset, &vlen);
|
||||
Error err = decode_variant(args.write[i], &p_packet[p_offset], p_packet_len - p_offset, &vlen, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ERR_EXPLAIN("Invalid packet received. Unable to decode RPC argument.");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
|
||||
@@ -335,7 +335,7 @@ void MultiplayerAPI::_process_rset(Node *p_node, const StringName &p_name, int p
|
||||
ERR_FAIL_COND(!_can_call_mode(p_node, rset_mode, p_from));
|
||||
|
||||
Variant value;
|
||||
Error err = decode_variant(value, &p_packet[p_offset], p_packet_len - p_offset);
|
||||
Error err = decode_variant(value, &p_packet[p_offset], p_packet_len - p_offset, NULL, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
|
||||
ERR_EXPLAIN("Invalid packet received. Unable to decode RSET value.");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
@@ -526,11 +526,11 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p
|
||||
|
||||
if (p_set) {
|
||||
// Set argument.
|
||||
Error err = encode_variant(*p_arg[0], NULL, len);
|
||||
Error err = encode_variant(*p_arg[0], NULL, len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ERR_EXPLAIN("Unable to encode RSET value. THIS IS LIKELY A BUG IN THE ENGINE!");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
MAKE_ROOM(ofs + len);
|
||||
encode_variant(*p_arg[0], &(packet_cache.write[ofs]), len);
|
||||
encode_variant(*p_arg[0], &(packet_cache.write[ofs]), len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ofs += len;
|
||||
|
||||
} else {
|
||||
@@ -539,11 +539,11 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p
|
||||
packet_cache.write[ofs] = p_argcount;
|
||||
ofs += 1;
|
||||
for (int i = 0; i < p_argcount; i++) {
|
||||
Error err = encode_variant(*p_arg[i], NULL, len);
|
||||
Error err = encode_variant(*p_arg[i], NULL, len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ERR_EXPLAIN("Unable to encode RPC argument. THIS IS LIKELY A BUG IN THE ENGINE!");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
MAKE_ROOM(ofs + len);
|
||||
encode_variant(*p_arg[i], &(packet_cache.write[ofs]), len);
|
||||
encode_variant(*p_arg[i], &(packet_cache.write[ofs]), len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ofs += len;
|
||||
}
|
||||
}
|
||||
@@ -818,6 +818,16 @@ Vector<int> MultiplayerAPI::get_network_connected_peers() const {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void MultiplayerAPI::set_allow_object_decoding(bool p_enable) {
|
||||
|
||||
allow_object_decoding = p_enable;
|
||||
}
|
||||
|
||||
bool MultiplayerAPI::is_object_decoding_allowed() const {
|
||||
|
||||
return allow_object_decoding;
|
||||
}
|
||||
|
||||
void MultiplayerAPI::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_root_node", "node"), &MultiplayerAPI::set_root_node);
|
||||
ClassDB::bind_method(D_METHOD("send_bytes", "bytes", "id", "mode"), &MultiplayerAPI::send_bytes, DEFVAL(NetworkedMultiplayerPeer::TARGET_PEER_BROADCAST), DEFVAL(NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE));
|
||||
@@ -838,6 +848,10 @@ void MultiplayerAPI::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_network_connected_peers"), &MultiplayerAPI::get_network_connected_peers);
|
||||
ClassDB::bind_method(D_METHOD("set_refuse_new_network_connections", "refuse"), &MultiplayerAPI::set_refuse_new_network_connections);
|
||||
ClassDB::bind_method(D_METHOD("is_refusing_new_network_connections"), &MultiplayerAPI::is_refusing_new_network_connections);
|
||||
ClassDB::bind_method(D_METHOD("set_allow_object_decoding", "enable"), &MultiplayerAPI::set_allow_object_decoding);
|
||||
ClassDB::bind_method(D_METHOD("is_object_decoding_allowed"), &MultiplayerAPI::is_object_decoding_allowed);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_object_decoding"), "set_allow_object_decoding", "is_object_decoding_allowed");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "refuse_new_network_connections"), "set_refuse_new_network_connections", "is_refusing_new_network_connections");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "network_peer", PROPERTY_HINT_RESOURCE_TYPE, "NetworkedMultiplayerPeer", 0), "set_network_peer", "get_network_peer");
|
||||
|
||||
@@ -859,7 +873,8 @@ void MultiplayerAPI::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(RPC_MODE_PUPPETSYNC);
|
||||
}
|
||||
|
||||
MultiplayerAPI::MultiplayerAPI() {
|
||||
MultiplayerAPI::MultiplayerAPI() :
|
||||
allow_object_decoding(false) {
|
||||
rpc_sender_id = 0;
|
||||
root_node = NULL;
|
||||
clear();
|
||||
|
@@ -63,6 +63,7 @@ private:
|
||||
int last_send_cache_id;
|
||||
Vector<uint8_t> packet_cache;
|
||||
Node *root_node;
|
||||
bool allow_object_decoding;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@@ -126,6 +127,9 @@ public:
|
||||
void set_refuse_new_network_connections(bool p_refuse);
|
||||
bool is_refusing_new_network_connections() const;
|
||||
|
||||
void set_allow_object_decoding(bool p_enable);
|
||||
bool is_object_decoding_allowed() const;
|
||||
|
||||
MultiplayerAPI();
|
||||
~MultiplayerAPI();
|
||||
};
|
||||
|
@@ -79,7 +79,7 @@ Error PacketPeer::put_packet_buffer(const PoolVector<uint8_t> &p_buffer) {
|
||||
return put_packet(&r[0], len);
|
||||
}
|
||||
|
||||
Error PacketPeer::get_var(Variant &r_variant) {
|
||||
Error PacketPeer::get_var(Variant &r_variant, bool p_allow_objects) {
|
||||
|
||||
const uint8_t *buffer;
|
||||
int buffer_size;
|
||||
@@ -87,13 +87,13 @@ Error PacketPeer::get_var(Variant &r_variant) {
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return decode_variant(r_variant, buffer, buffer_size, NULL, allow_object_decoding);
|
||||
return decode_variant(r_variant, buffer, buffer_size, NULL, p_allow_objects || allow_object_decoding);
|
||||
}
|
||||
|
||||
Error PacketPeer::put_var(const Variant &p_packet) {
|
||||
Error PacketPeer::put_var(const Variant &p_packet, bool p_full_objects) {
|
||||
|
||||
int len;
|
||||
Error err = encode_variant(p_packet, NULL, len, !allow_object_decoding); // compute len first
|
||||
Error err = encode_variant(p_packet, NULL, len, p_full_objects || allow_object_decoding); // compute len first
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -102,15 +102,15 @@ Error PacketPeer::put_var(const Variant &p_packet) {
|
||||
|
||||
uint8_t *buf = (uint8_t *)alloca(len);
|
||||
ERR_FAIL_COND_V(!buf, ERR_OUT_OF_MEMORY);
|
||||
err = encode_variant(p_packet, buf, len, !allow_object_decoding);
|
||||
err = encode_variant(p_packet, buf, len, p_full_objects || allow_object_decoding);
|
||||
ERR_FAIL_COND_V(err, err);
|
||||
|
||||
return put_packet(buf, len);
|
||||
}
|
||||
|
||||
Variant PacketPeer::_bnd_get_var() {
|
||||
Variant PacketPeer::_bnd_get_var(bool p_allow_objects) {
|
||||
Variant var;
|
||||
get_var(var);
|
||||
get_var(var, p_allow_objects);
|
||||
|
||||
return var;
|
||||
};
|
||||
@@ -132,8 +132,8 @@ Error PacketPeer::_get_packet_error() const {
|
||||
|
||||
void PacketPeer::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_var"), &PacketPeer::_bnd_get_var);
|
||||
ClassDB::bind_method(D_METHOD("put_var", "var"), &PacketPeer::put_var);
|
||||
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &PacketPeer::_bnd_get_var, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("put_var", "var", "full_objects"), &PacketPeer::put_var, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("get_packet"), &PacketPeer::_get_packet);
|
||||
ClassDB::bind_method(D_METHOD("put_packet", "buffer"), &PacketPeer::_put_packet);
|
||||
ClassDB::bind_method(D_METHOD("get_packet_error"), &PacketPeer::_get_packet_error);
|
||||
|
@@ -39,8 +39,7 @@ class PacketPeer : public Reference {
|
||||
|
||||
GDCLASS(PacketPeer, Reference);
|
||||
|
||||
Variant _bnd_get_var();
|
||||
void _bnd_put_var(const Variant &p_var);
|
||||
Variant _bnd_get_var(bool p_allow_objects = false);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
@@ -64,8 +63,8 @@ public:
|
||||
virtual Error get_packet_buffer(PoolVector<uint8_t> &r_buffer);
|
||||
virtual Error put_packet_buffer(const PoolVector<uint8_t> &p_buffer);
|
||||
|
||||
virtual Error get_var(Variant &r_variant);
|
||||
virtual Error put_var(const Variant &p_packet);
|
||||
virtual Error get_var(Variant &r_variant, bool p_allow_objects = false);
|
||||
virtual Error put_var(const Variant &p_packet, bool p_full_objects = false);
|
||||
|
||||
void set_allow_object_decoding(bool p_enable);
|
||||
bool is_object_decoding_allowed() const;
|
||||
|
@@ -221,14 +221,14 @@ void StreamPeer::put_utf8_string(const String &p_string) {
|
||||
put_u32(cs.length());
|
||||
put_data((const uint8_t *)cs.get_data(), cs.length());
|
||||
}
|
||||
void StreamPeer::put_var(const Variant &p_variant) {
|
||||
void StreamPeer::put_var(const Variant &p_variant, bool p_full_objects) {
|
||||
|
||||
int len = 0;
|
||||
Vector<uint8_t> buf;
|
||||
encode_variant(p_variant, NULL, len);
|
||||
encode_variant(p_variant, NULL, len, p_full_objects);
|
||||
buf.resize(len);
|
||||
put_32(len);
|
||||
encode_variant(p_variant, buf.ptrw(), len);
|
||||
encode_variant(p_variant, buf.ptrw(), len, p_full_objects);
|
||||
put_data(buf.ptr(), buf.size());
|
||||
}
|
||||
|
||||
@@ -359,7 +359,7 @@ String StreamPeer::get_utf8_string(int p_bytes) {
|
||||
ret.parse_utf8((const char *)buf.ptr(), buf.size());
|
||||
return ret;
|
||||
}
|
||||
Variant StreamPeer::get_var() {
|
||||
Variant StreamPeer::get_var(bool p_allow_objects) {
|
||||
|
||||
int len = get_32();
|
||||
Vector<uint8_t> var;
|
||||
@@ -369,7 +369,7 @@ Variant StreamPeer::get_var() {
|
||||
ERR_FAIL_COND_V(err != OK, Variant());
|
||||
|
||||
Variant ret;
|
||||
decode_variant(ret, var.ptr(), len);
|
||||
decode_variant(ret, var.ptr(), len, NULL, p_allow_objects);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -398,7 +398,7 @@ void StreamPeer::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("put_double", "value"), &StreamPeer::put_double);
|
||||
ClassDB::bind_method(D_METHOD("put_string", "value"), &StreamPeer::put_string);
|
||||
ClassDB::bind_method(D_METHOD("put_utf8_string", "value"), &StreamPeer::put_utf8_string);
|
||||
ClassDB::bind_method(D_METHOD("put_var", "value"), &StreamPeer::put_var);
|
||||
ClassDB::bind_method(D_METHOD("put_var", "value", "full_objects"), &StreamPeer::put_var, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_8"), &StreamPeer::get_8);
|
||||
ClassDB::bind_method(D_METHOD("get_u8"), &StreamPeer::get_u8);
|
||||
@@ -412,7 +412,7 @@ void StreamPeer::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_double"), &StreamPeer::get_double);
|
||||
ClassDB::bind_method(D_METHOD("get_string", "bytes"), &StreamPeer::get_string, DEFVAL(-1));
|
||||
ClassDB::bind_method(D_METHOD("get_utf8_string", "bytes"), &StreamPeer::get_utf8_string, DEFVAL(-1));
|
||||
ClassDB::bind_method(D_METHOD("get_var"), &StreamPeer::get_var);
|
||||
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &StreamPeer::get_var, DEFVAL(false));
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "big_endian"), "set_big_endian", "is_big_endian_enabled");
|
||||
}
|
||||
|
@@ -73,7 +73,7 @@ public:
|
||||
void put_double(double p_val);
|
||||
void put_string(const String &p_string);
|
||||
void put_utf8_string(const String &p_string);
|
||||
void put_var(const Variant &p_variant);
|
||||
void put_var(const Variant &p_variant, bool p_full_objects = false);
|
||||
|
||||
uint8_t get_u8();
|
||||
int8_t get_8();
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
double get_double();
|
||||
String get_string(int p_bytes = -1);
|
||||
String get_utf8_string(int p_bytes = -1);
|
||||
Variant get_var();
|
||||
Variant get_var(bool p_allow_objects = false);
|
||||
|
||||
StreamPeer() { big_endian = false; }
|
||||
};
|
||||
|
@@ -55,6 +55,7 @@ void AStar::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) {
|
||||
pt->weight_scale = p_weight_scale;
|
||||
pt->prev_point = NULL;
|
||||
pt->last_pass = 0;
|
||||
pt->enabled = true;
|
||||
points[p_id] = pt;
|
||||
} else {
|
||||
points[p_id]->pos = p_pos;
|
||||
@@ -242,6 +243,9 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
||||
|
||||
pass++;
|
||||
|
||||
if (!end_point->enabled)
|
||||
return false;
|
||||
|
||||
SelfList<Point>::List open_list;
|
||||
|
||||
bool found_route = false;
|
||||
@@ -249,6 +253,10 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
||||
for (Set<Point *>::Element *E = begin_point->neighbours.front(); E; E = E->next()) {
|
||||
|
||||
Point *n = E->get();
|
||||
|
||||
if (!n->enabled)
|
||||
continue;
|
||||
|
||||
n->prev_point = begin_point;
|
||||
n->distance = _compute_cost(begin_point->id, n->id) * n->weight_scale;
|
||||
n->last_pass = pass;
|
||||
@@ -290,6 +298,9 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
||||
|
||||
Point *e = E->get();
|
||||
|
||||
if (!e->enabled)
|
||||
continue;
|
||||
|
||||
real_t distance = _compute_cost(p->id, e->id) * e->weight_scale + p->distance;
|
||||
|
||||
if (e->last_pass == pass) {
|
||||
@@ -438,6 +449,14 @@ PoolVector<int> AStar::get_id_path(int p_from_id, int p_to_id) {
|
||||
return path;
|
||||
}
|
||||
|
||||
void AStar::set_point_disabled(int p_id, bool p_disabled) {
|
||||
points[p_id]->enabled = !p_disabled;
|
||||
}
|
||||
|
||||
bool AStar::is_point_disabled(int p_id) const {
|
||||
return !points[p_id]->enabled;
|
||||
}
|
||||
|
||||
void AStar::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_available_point_id"), &AStar::get_available_point_id);
|
||||
@@ -450,6 +469,9 @@ void AStar::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("has_point", "id"), &AStar::has_point);
|
||||
ClassDB::bind_method(D_METHOD("get_points"), &AStar::get_points);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_point_disabled", "id", "disabled"), &AStar::set_point_disabled, DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("is_point_disabled", "id"), &AStar::is_point_disabled);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_point_connections", "id"), &AStar::get_point_connections);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("connect_points", "id", "to_id", "bidirectional"), &AStar::connect_points, DEFVAL(true));
|
||||
|
@@ -54,6 +54,7 @@ class AStar : public Reference {
|
||||
Vector3 pos;
|
||||
real_t weight_scale;
|
||||
uint64_t last_pass;
|
||||
bool enabled;
|
||||
|
||||
Set<Point *> neighbours;
|
||||
|
||||
@@ -114,6 +115,9 @@ public:
|
||||
PoolVector<int> get_point_connections(int p_id);
|
||||
Array get_points();
|
||||
|
||||
void set_point_disabled(int p_id, bool p_disabled = true);
|
||||
bool is_point_disabled(int p_id) const;
|
||||
|
||||
void connect_points(int p_id, int p_with_id, bool bidirectional = true);
|
||||
void disconnect_points(int p_id, int p_with_id);
|
||||
bool are_points_connected(int p_id, int p_with_id) const;
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#ifndef AUDIOFRAME_H
|
||||
#define AUDIOFRAME_H
|
||||
|
||||
#include "core/math/vector2.h"
|
||||
#include "core/typedefs.h"
|
||||
|
||||
static inline float undenormalise(volatile float f) {
|
||||
@@ -122,6 +123,20 @@ struct AudioFrame {
|
||||
r = p_frame.r;
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ AudioFrame operator=(const AudioFrame &p_frame) {
|
||||
l = p_frame.l;
|
||||
r = p_frame.r;
|
||||
return *this;
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ operator Vector2() const {
|
||||
return Vector2(l, r);
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ AudioFrame(const Vector2 &p_v2) {
|
||||
l = p_v2.x;
|
||||
r = p_v2.y;
|
||||
}
|
||||
_ALWAYS_INLINE_ AudioFrame() {}
|
||||
};
|
||||
|
||||
|
@@ -557,11 +557,23 @@ void Basis::set_euler_yxz(const Vector3 &p_euler) {
|
||||
*this = ymat * xmat * zmat;
|
||||
}
|
||||
|
||||
bool Basis::is_equal_approx(const Basis &a, const Basis &b) const {
|
||||
bool Basis::is_equal_approx(const Basis &a, const Basis &b,real_t p_epsilon) const {
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (!Math::is_equal_approx_ratio(a.elements[i][j], b.elements[i][j], UNIT_EPSILON))
|
||||
if (!Math::is_equal_approx(a.elements[i][j], b.elements[i][j], p_epsilon))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Basis::is_equal_approx_ratio(const Basis &a, const Basis &b,real_t p_epsilon) const {
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (!Math::is_equal_approx_ratio(a.elements[i][j], b.elements[i][j], p_epsilon))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -605,12 +617,14 @@ Basis::operator String() const {
|
||||
|
||||
Quat Basis::get_quat() const {
|
||||
|
||||
#ifdef MATH_CHECKS
|
||||
if (!is_rotation()) {
|
||||
ERR_EXPLAIN("Basis must be normalized in order to be casted to a Quaternion. Use get_rotation_quat() or call orthonormalized() instead.");
|
||||
ERR_FAIL_V(Quat());
|
||||
}
|
||||
#endif
|
||||
/* Allow getting a quaternion from an unnormalized transform */
|
||||
Basis m = *this;
|
||||
m.elements[0].normalize();
|
||||
m.elements[1].normalize();
|
||||
m.elements[2].normalize();
|
||||
|
||||
real_t trace = m.elements[0][0] + m.elements[1][1] + m.elements[2][2];
|
||||
real_t temp[4];
|
||||
|
||||
|
@@ -133,7 +133,8 @@ public:
|
||||
return elements[0][2] * v[0] + elements[1][2] * v[1] + elements[2][2] * v[2];
|
||||
}
|
||||
|
||||
bool is_equal_approx(const Basis &a, const Basis &b) const;
|
||||
bool is_equal_approx(const Basis &a, const Basis &b, real_t p_epsilon=CMP_EPSILON) const;
|
||||
bool is_equal_approx_ratio(const Basis &a, const Basis &b, real_t p_epsilon=UNIT_EPSILON) const;
|
||||
|
||||
bool operator==(const Basis &p_matrix) const;
|
||||
bool operator!=(const Basis &p_matrix) const;
|
||||
|
@@ -68,6 +68,7 @@ const char *Expression::func_name[Expression::FUNC_MAX] = {
|
||||
"lerp",
|
||||
"inverse_lerp",
|
||||
"range_lerp",
|
||||
"smoothstep",
|
||||
"dectime",
|
||||
"randomize",
|
||||
"randi",
|
||||
@@ -164,10 +165,10 @@ int Expression::get_func_argument_count(BuiltinFunc p_func) {
|
||||
case TEXT_PRINTRAW:
|
||||
case VAR_TO_STR:
|
||||
case STR_TO_VAR:
|
||||
case VAR_TO_BYTES:
|
||||
case BYTES_TO_VAR:
|
||||
case TYPE_EXISTS:
|
||||
return 1;
|
||||
case VAR_TO_BYTES:
|
||||
case BYTES_TO_VAR:
|
||||
case MATH_ATAN2:
|
||||
case MATH_FMOD:
|
||||
case MATH_FPOSMOD:
|
||||
@@ -185,6 +186,7 @@ int Expression::get_func_argument_count(BuiltinFunc p_func) {
|
||||
return 2;
|
||||
case MATH_LERP:
|
||||
case MATH_INVERSE_LERP:
|
||||
case MATH_SMOOTHSTEP:
|
||||
case MATH_DECTIME:
|
||||
case MATH_WRAP:
|
||||
case MATH_WRAPF:
|
||||
@@ -392,6 +394,12 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||
VALIDATE_ARG_NUM(4);
|
||||
*r_return = Math::range_lerp((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2], (double)*p_inputs[3], (double)*p_inputs[4]);
|
||||
} break;
|
||||
case MATH_SMOOTHSTEP: {
|
||||
VALIDATE_ARG_NUM(0);
|
||||
VALIDATE_ARG_NUM(1);
|
||||
VALIDATE_ARG_NUM(2);
|
||||
*r_return = Math::smoothstep((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2]);
|
||||
} break;
|
||||
case MATH_DECTIME: {
|
||||
|
||||
VALIDATE_ARG_NUM(0);
|
||||
@@ -696,8 +704,9 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||
case VAR_TO_BYTES: {
|
||||
|
||||
PoolByteArray barr;
|
||||
bool full_objects = *p_inputs[1];
|
||||
int len;
|
||||
Error err = encode_variant(*p_inputs[0], NULL, len);
|
||||
Error err = encode_variant(*p_inputs[0], NULL, len, full_objects);
|
||||
if (err) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.argument = 0;
|
||||
@@ -709,7 +718,7 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||
barr.resize(len);
|
||||
{
|
||||
PoolByteArray::Write w = barr.write();
|
||||
encode_variant(*p_inputs[0], w.ptr(), len);
|
||||
encode_variant(*p_inputs[0], w.ptr(), len, full_objects);
|
||||
}
|
||||
*r_return = barr;
|
||||
} break;
|
||||
@@ -724,10 +733,11 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||
}
|
||||
|
||||
PoolByteArray varr = *p_inputs[0];
|
||||
bool allow_objects = *p_inputs[1];
|
||||
Variant ret;
|
||||
{
|
||||
PoolByteArray::Read r = varr.read();
|
||||
Error err = decode_variant(ret, r.ptr(), varr.size(), NULL);
|
||||
Error err = decode_variant(ret, r.ptr(), varr.size(), NULL, allow_objects);
|
||||
if (err != OK) {
|
||||
r_error_str = RTR("Not enough bytes for decoding bytes, or invalid format.");
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
|
@@ -66,6 +66,7 @@ public:
|
||||
MATH_LERP,
|
||||
MATH_INVERSE_LERP,
|
||||
MATH_RANGE_LERP,
|
||||
MATH_SMOOTHSTEP,
|
||||
MATH_DECTIME,
|
||||
MATH_RANDOMIZE,
|
||||
MATH_RAND,
|
||||
|
@@ -208,6 +208,17 @@ public:
|
||||
static _ALWAYS_INLINE_ double range_lerp(double p_value, double p_istart, double p_istop, double p_ostart, double p_ostop) { return Math::lerp(p_ostart, p_ostop, Math::inverse_lerp(p_istart, p_istop, p_value)); }
|
||||
static _ALWAYS_INLINE_ float range_lerp(float p_value, float p_istart, float p_istop, float p_ostart, float p_ostop) { return Math::lerp(p_ostart, p_ostop, Math::inverse_lerp(p_istart, p_istop, p_value)); }
|
||||
|
||||
static _ALWAYS_INLINE_ double smoothstep(double p_from, double p_to, double p_weight) {
|
||||
if (is_equal_approx(p_from, p_to)) return p_from;
|
||||
double x = CLAMP((p_weight - p_from) / (p_to - p_from), 0.0, 1.0);
|
||||
return x * x * (3.0 - 2.0 * x);
|
||||
}
|
||||
static _ALWAYS_INLINE_ float smoothstep(float p_from, float p_to, float p_weight) {
|
||||
if (is_equal_approx(p_from, p_to)) return p_from;
|
||||
float x = CLAMP((p_weight - p_from) / (p_to - p_from), 0.0f, 1.0f);
|
||||
return x * x * (3.0f - 2.0f * x);
|
||||
}
|
||||
|
||||
static _ALWAYS_INLINE_ double linear2db(double p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
|
||||
static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
|
||||
|
||||
@@ -249,11 +260,11 @@ public:
|
||||
static float random(float from, float to);
|
||||
static real_t random(int from, int to) { return (real_t)random((real_t)from, (real_t)to); }
|
||||
|
||||
static _ALWAYS_INLINE_ bool is_equal_approx_ratio(real_t a, real_t b, real_t epsilon = CMP_EPSILON) {
|
||||
static _ALWAYS_INLINE_ bool is_equal_approx_ratio(real_t a, real_t b, real_t epsilon = CMP_EPSILON, real_t min_epsilon = CMP_EPSILON) {
|
||||
// this is an approximate way to check that numbers are close, as a ratio of their average size
|
||||
// helps compare approximate numbers that may be very big or very small
|
||||
real_t diff = abs(a - b);
|
||||
if (diff == 0.0) {
|
||||
if (diff == 0.0 || diff < min_epsilon) {
|
||||
return true;
|
||||
}
|
||||
real_t avg_size = (abs(a) + abs(b)) / 2.0;
|
||||
|
@@ -131,6 +131,14 @@ public:
|
||||
w(q.w) {
|
||||
}
|
||||
|
||||
Quat operator=(const Quat &q) {
|
||||
x = q.x;
|
||||
y = q.y;
|
||||
z = q.z;
|
||||
w = q.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Quat(const Vector3 &v0, const Vector3 &v1) // shortest arc
|
||||
{
|
||||
Vector3 c = v0.cross(v1);
|
||||
|
@@ -40,6 +40,7 @@ void RandomNumberGenerator::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("randi"), &RandomNumberGenerator::randi);
|
||||
ClassDB::bind_method(D_METHOD("randf"), &RandomNumberGenerator::randf);
|
||||
ClassDB::bind_method(D_METHOD("randfn", "mean", "deviation"), &RandomNumberGenerator::randfn, DEFVAL(0.0), DEFVAL(1.0));
|
||||
ClassDB::bind_method(D_METHOD("randf_range", "from", "to"), &RandomNumberGenerator::randf_range);
|
||||
ClassDB::bind_method(D_METHOD("randi_range", "from", "to"), &RandomNumberGenerator::randi_range);
|
||||
ClassDB::bind_method(D_METHOD("randomize"), &RandomNumberGenerator::randomize);
|
||||
|
@@ -55,6 +55,8 @@ public:
|
||||
|
||||
_FORCE_INLINE_ real_t randf_range(real_t from, real_t to) { return randbase.random(from, to); }
|
||||
|
||||
_FORCE_INLINE_ real_t randfn(real_t mean = 0.0, real_t deviation = 1.0) { return randbase.randfn(mean, deviation); }
|
||||
|
||||
_FORCE_INLINE_ int randi_range(int from, int to) {
|
||||
unsigned int ret = randbase.rand();
|
||||
return ret % (to - from + 1) + from;
|
||||
|
@@ -31,6 +31,8 @@
|
||||
#ifndef RANDOM_PCG_H
|
||||
#define RANDOM_PCG_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "core/math/math_defs.h"
|
||||
|
||||
#include "thirdparty/misc/pcg.h"
|
||||
@@ -61,6 +63,13 @@ public:
|
||||
_FORCE_INLINE_ double randd() { return (double)rand() / (double)RANDOM_MAX; }
|
||||
_FORCE_INLINE_ float randf() { return (float)rand() / (float)RANDOM_MAX; }
|
||||
|
||||
_FORCE_INLINE_ double randfn(double p_mean, double p_deviation) {
|
||||
return p_mean + p_deviation * (cos(Math_TAU * randd()) * sqrt(-2.0 * log(randd()))); // Box-Muller transform
|
||||
}
|
||||
_FORCE_INLINE_ float randfn(float p_mean, float p_deviation) {
|
||||
return p_mean + p_deviation * (cos(Math_TAU * randf()) * sqrt(-2.0 * log(randf()))); // Box-Muller transform
|
||||
}
|
||||
|
||||
double random(double p_from, double p_to);
|
||||
float random(float p_from, float p_to);
|
||||
real_t random(int p_from, int p_to) { return (real_t)random((real_t)p_from, (real_t)p_to); }
|
||||
|
@@ -65,6 +65,7 @@ struct Vector2 {
|
||||
real_t distance_squared_to(const Vector2 &p_vector2) const;
|
||||
real_t angle_to(const Vector2 &p_vector2) const;
|
||||
real_t angle_to_point(const Vector2 &p_vector2) const;
|
||||
_FORCE_INLINE_ Vector2 direction_to(const Vector2 &p_b) const;
|
||||
|
||||
real_t dot(const Vector2 &p_other) const;
|
||||
real_t cross(const Vector2 &p_other) const;
|
||||
@@ -236,6 +237,12 @@ Vector2 Vector2::slerp(const Vector2 &p_b, real_t p_t) const {
|
||||
return rotated(theta * p_t);
|
||||
}
|
||||
|
||||
Vector2 Vector2::direction_to(const Vector2 &p_b) const {
|
||||
Vector2 ret(p_b.x - x, p_b.y - y);
|
||||
ret.normalize();
|
||||
return ret;
|
||||
}
|
||||
|
||||
Vector2 Vector2::linear_interpolate(const Vector2 &p_a, const Vector2 &p_b, real_t p_t) {
|
||||
|
||||
Vector2 res = p_a;
|
||||
|
@@ -112,6 +112,7 @@ struct Vector3 {
|
||||
_FORCE_INLINE_ Vector3 project(const Vector3 &p_b) const;
|
||||
|
||||
_FORCE_INLINE_ real_t angle_to(const Vector3 &p_b) const;
|
||||
_FORCE_INLINE_ Vector3 direction_to(const Vector3 &p_b) const;
|
||||
|
||||
_FORCE_INLINE_ Vector3 slide(const Vector3 &p_normal) const;
|
||||
_FORCE_INLINE_ Vector3 bounce(const Vector3 &p_normal) const;
|
||||
@@ -244,6 +245,12 @@ real_t Vector3::angle_to(const Vector3 &p_b) const {
|
||||
return Math::atan2(cross(p_b).length(), dot(p_b));
|
||||
}
|
||||
|
||||
Vector3 Vector3::direction_to(const Vector3 &p_b) const {
|
||||
Vector3 ret(p_b.x - x, p_b.y - y, p_b.z - z);
|
||||
ret.normalize();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Operators */
|
||||
|
||||
Vector3 &Vector3::operator+=(const Vector3 &p_v) {
|
||||
|
@@ -1366,7 +1366,10 @@ Array Object::_get_incoming_connections() const {
|
||||
void Object::get_signal_list(List<MethodInfo> *p_signals) const {
|
||||
|
||||
if (!script.is_null()) {
|
||||
Ref<Script>(script)->get_script_signal_list(p_signals);
|
||||
Ref<Script> scr = script;
|
||||
if (scr.is_valid()) {
|
||||
scr->get_script_signal_list(p_signals);
|
||||
}
|
||||
}
|
||||
|
||||
ClassDB::get_signal_list(get_class_name(), p_signals);
|
||||
|
@@ -75,6 +75,11 @@ void MIDIDriver::receive_input_packet(uint64_t timestamp, uint8_t *data, uint32_
|
||||
if (length >= 3) {
|
||||
event->set_pitch(data[1]);
|
||||
event->set_velocity(data[2]);
|
||||
|
||||
if (event->get_message() == MIDI_MESSAGE_NOTE_ON && event->get_velocity() == 0) {
|
||||
// https://www.midi.org/forum/228-writing-midi-software-send-note-off,-or-zero-velocity-note-on
|
||||
event->set_message(MIDI_MESSAGE_NOTE_OFF);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@@ -114,7 +114,7 @@ Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, b
|
||||
} else {
|
||||
|
||||
Variant v;
|
||||
Error rerr = decode_variant(v, p_buf + p_ofs, datalen - p_ofs, NULL);
|
||||
Error rerr = decode_variant(v, p_buf + p_ofs, datalen - p_ofs, NULL, false);
|
||||
|
||||
if (rerr != OK) {
|
||||
|
||||
@@ -249,9 +249,9 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
|
||||
|
||||
uint32_t pos = tmpdata.size();
|
||||
int len;
|
||||
encode_variant(p_data, NULL, len);
|
||||
encode_variant(p_data, NULL, len, false);
|
||||
tmpdata.resize(tmpdata.size() + len);
|
||||
encode_variant(p_data, &tmpdata.write[pos], len);
|
||||
encode_variant(p_data, &tmpdata.write[pos], len, false);
|
||||
return pos;
|
||||
|
||||
} break;
|
||||
|
@@ -501,7 +501,7 @@ Error ProjectSettings::_load_settings_binary(const String p_path) {
|
||||
d.resize(vlen);
|
||||
f->get_buffer(d.ptrw(), vlen);
|
||||
Variant value;
|
||||
err = decode_variant(value, d.ptr(), d.size());
|
||||
err = decode_variant(value, d.ptr(), d.size(), NULL, true);
|
||||
ERR_EXPLAIN("Error decoding property: " + key);
|
||||
ERR_CONTINUE(err != OK);
|
||||
set(key, value);
|
||||
@@ -656,7 +656,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||
file->store_string(key);
|
||||
|
||||
int len;
|
||||
err = encode_variant(p_custom_features, NULL, len);
|
||||
err = encode_variant(p_custom_features, NULL, len, false);
|
||||
if (err != OK) {
|
||||
memdelete(file);
|
||||
ERR_FAIL_V(err);
|
||||
@@ -665,7 +665,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||
Vector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
|
||||
err = encode_variant(p_custom_features, buff.ptrw(), len);
|
||||
err = encode_variant(p_custom_features, buff.ptrw(), len, false);
|
||||
if (err != OK) {
|
||||
memdelete(file);
|
||||
ERR_FAIL_V(err);
|
||||
@@ -694,7 +694,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||
file->store_string(key);
|
||||
|
||||
int len;
|
||||
err = encode_variant(value, NULL, len);
|
||||
err = encode_variant(value, NULL, len, true);
|
||||
if (err != OK)
|
||||
memdelete(file);
|
||||
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
||||
@@ -702,7 +702,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||
Vector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
|
||||
err = encode_variant(value, buff.ptrw(), len);
|
||||
err = encode_variant(value, buff.ptrw(), len, true);
|
||||
if (err != OK)
|
||||
memdelete(file);
|
||||
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
||||
|
@@ -205,6 +205,8 @@ public:
|
||||
static ScriptCodeCompletionCache *get_singleton() { return singleton; }
|
||||
|
||||
ScriptCodeCompletionCache();
|
||||
|
||||
virtual ~ScriptCodeCompletionCache() {}
|
||||
};
|
||||
|
||||
class ScriptLanguage {
|
||||
|
@@ -328,4 +328,10 @@ struct _GlobalLock {
|
||||
#define _PRINTF_FORMAT_ATTRIBUTE_2_3
|
||||
#endif
|
||||
|
||||
/** This is needed due to a strange OpenGL API that expects a pointer
|
||||
* type for an argument that is actually an offset.
|
||||
*/
|
||||
|
||||
#define CAST_INT_TO_UCHAR_PTR(ptr) ((uint8_t *)(uintptr_t)(ptr))
|
||||
|
||||
#endif // TYPEDEFS_H
|
||||
|
1332
core/ucaps.h
1332
core/ucaps.h
File diff suppressed because it is too large
Load Diff
@@ -97,6 +97,10 @@ public:
|
||||
|
||||
_FORCE_INLINE_ CharString() {}
|
||||
_FORCE_INLINE_ CharString(const CharString &p_str) { _cowdata._ref(p_str._cowdata); }
|
||||
_FORCE_INLINE_ CharString operator=(const CharString &p_str) {
|
||||
_cowdata._ref(p_str._cowdata);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator<(const CharString &p_right) const;
|
||||
CharString &operator+=(char p_char);
|
||||
@@ -339,6 +343,10 @@ public:
|
||||
|
||||
_FORCE_INLINE_ String() {}
|
||||
_FORCE_INLINE_ String(const String &p_str) { _cowdata._ref(p_str._cowdata); }
|
||||
String operator=(const String &p_str) {
|
||||
_cowdata._ref(p_str._cowdata);
|
||||
return *this;
|
||||
}
|
||||
|
||||
String(const char *p_str);
|
||||
String(const CharType *p_str, int p_clip_to_len = -1);
|
||||
|
@@ -341,6 +341,7 @@ struct _VariantCall {
|
||||
VCALL_LOCALMEM1R(Vector2, project);
|
||||
VCALL_LOCALMEM1R(Vector2, angle_to);
|
||||
VCALL_LOCALMEM1R(Vector2, angle_to_point);
|
||||
VCALL_LOCALMEM1R(Vector2, direction_to);
|
||||
VCALL_LOCALMEM2R(Vector2, linear_interpolate);
|
||||
VCALL_LOCALMEM2R(Vector2, slerp);
|
||||
VCALL_LOCALMEM4R(Vector2, cubic_interpolate);
|
||||
@@ -397,6 +398,7 @@ struct _VariantCall {
|
||||
VCALL_LOCALMEM1R(Vector3, distance_squared_to);
|
||||
VCALL_LOCALMEM1R(Vector3, project);
|
||||
VCALL_LOCALMEM1R(Vector3, angle_to);
|
||||
VCALL_LOCALMEM1R(Vector3, direction_to);
|
||||
VCALL_LOCALMEM1R(Vector3, slide);
|
||||
VCALL_LOCALMEM1R(Vector3, bounce);
|
||||
VCALL_LOCALMEM1R(Vector3, reflect);
|
||||
@@ -773,6 +775,8 @@ struct _VariantCall {
|
||||
VCALL_PTR0R(Basis, get_orthogonal_index);
|
||||
VCALL_PTR0R(Basis, orthonormalized);
|
||||
VCALL_PTR2R(Basis, slerp);
|
||||
VCALL_PTR2R(Basis, is_equal_approx);
|
||||
VCALL_PTR0R(Basis, get_rotation_quat);
|
||||
|
||||
VCALL_PTR0R(Transform, inverse);
|
||||
VCALL_PTR0R(Transform, affine_inverse);
|
||||
@@ -1554,6 +1558,7 @@ void register_variant_methods() {
|
||||
ADDFUNC0R(VECTOR2, REAL, Vector2, angle, varray());
|
||||
ADDFUNC0R(VECTOR2, REAL, Vector2, length_squared, varray());
|
||||
ADDFUNC0R(VECTOR2, BOOL, Vector2, is_normalized, varray());
|
||||
ADDFUNC1R(VECTOR2, VECTOR2, Vector2, direction_to, VECTOR2, "b", varray());
|
||||
ADDFUNC1R(VECTOR2, REAL, Vector2, distance_to, VECTOR2, "to", varray());
|
||||
ADDFUNC1R(VECTOR2, REAL, Vector2, distance_squared_to, VECTOR2, "to", varray());
|
||||
ADDFUNC1R(VECTOR2, VECTOR2, Vector2, project, VECTOR2, "b", varray());
|
||||
@@ -1602,6 +1607,7 @@ void register_variant_methods() {
|
||||
ADDFUNC2R(VECTOR3, VECTOR3, Vector3, linear_interpolate, VECTOR3, "b", REAL, "t", varray());
|
||||
ADDFUNC2R(VECTOR3, VECTOR3, Vector3, slerp, VECTOR3, "b", REAL, "t", varray());
|
||||
ADDFUNC4R(VECTOR3, VECTOR3, Vector3, cubic_interpolate, VECTOR3, "b", VECTOR3, "pre_a", VECTOR3, "post_b", REAL, "t", varray());
|
||||
ADDFUNC1R(VECTOR3, VECTOR3, Vector3, direction_to, VECTOR3, "b", varray());
|
||||
ADDFUNC1R(VECTOR3, REAL, Vector3, dot, VECTOR3, "b", varray());
|
||||
ADDFUNC1R(VECTOR3, VECTOR3, Vector3, cross, VECTOR3, "b", varray());
|
||||
ADDFUNC1R(VECTOR3, BASIS, Vector3, outer, VECTOR3, "b", varray());
|
||||
@@ -1842,6 +1848,8 @@ void register_variant_methods() {
|
||||
ADDFUNC1R(BASIS, VECTOR3, Basis, xform_inv, VECTOR3, "v", varray());
|
||||
ADDFUNC0R(BASIS, INT, Basis, get_orthogonal_index, varray());
|
||||
ADDFUNC2R(BASIS, BASIS, Basis, slerp, BASIS, "b", REAL, "t", varray());
|
||||
ADDFUNC2R(BASIS, BOOL, Basis, is_equal_approx, BASIS, "b", REAL, "epsilon", varray(CMP_EPSILON));
|
||||
ADDFUNC0R(BASIS, QUAT, Basis, get_rotation_quat, varray());
|
||||
|
||||
ADDFUNC0R(TRANSFORM, TRANSFORM, Transform, inverse, varray());
|
||||
ADDFUNC0R(TRANSFORM, TRANSFORM, Transform, affine_inverse, varray());
|
||||
@@ -1923,9 +1931,9 @@ void register_variant_methods() {
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "IDENTITY", identity_transform);
|
||||
transform_x.set(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0);
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "FLIP_X", transform_x);
|
||||
transform_x.set(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0);
|
||||
transform_y.set(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0);
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "FLIP_Y", transform_y);
|
||||
transform_x.set(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0);
|
||||
transform_z.set(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0);
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "FLIP_Z", transform_z);
|
||||
|
||||
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_YZ", Plane(Vector3(1, 0, 0), 0));
|
||||
|
@@ -65,7 +65,7 @@ private:
|
||||
const Pair *a = _cowdata.ptr();
|
||||
int middle = 0;
|
||||
|
||||
#if DEBUG_ENABLED
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (low > high)
|
||||
ERR_PRINT("low > high, this may be a bug");
|
||||
#endif
|
||||
|
@@ -50,7 +50,7 @@ class VSet {
|
||||
const T *a = &_data[0];
|
||||
int middle = 0;
|
||||
|
||||
#if DEBUG_ENABLED
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (low > high)
|
||||
ERR_PRINT("low > high, this may be a bug");
|
||||
#endif
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="@GDScript" category="Core" version="3.1">
|
||||
<class name="@GDScript" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Built-in GDScript functions.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="Color8">
|
||||
<return type="Color">
|
||||
@@ -127,7 +125,7 @@
|
||||
<description>
|
||||
Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle of tangent [code]y/x[/code]. To compute the value, the method takes into account the sign of both arguments in order to determine the quadrant.
|
||||
[codeblock]
|
||||
a = atan(0, -1) # a is 3.141593
|
||||
a = atan2(0, -1) # a is 3.141593
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
@@ -136,8 +134,11 @@
|
||||
</return>
|
||||
<argument index="0" name="bytes" type="PoolByteArray">
|
||||
</argument>
|
||||
<argument index="1" name="allow_objects" type="bool" default="false">
|
||||
</argument>
|
||||
<description>
|
||||
Decodes a byte array back to a value.
|
||||
Decodes a byte array back to a value. When [code]allow_objects[/code] is [code]true[/code] decoding objects is allowed.
|
||||
[b]WARNING:[/b] Deserialized object can contain code which gets executed. Do not use this option if the serialized object comes from untrusted sources to avoid potential security threats (remote code execution).
|
||||
</description>
|
||||
</method>
|
||||
<method name="cartesian2polar">
|
||||
@@ -972,6 +973,24 @@
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
<method name="smoothstep">
|
||||
<return type="float">
|
||||
</return>
|
||||
<argument index="0" name="from" type="float">
|
||||
</argument>
|
||||
<argument index="1" name="to" type="float">
|
||||
</argument>
|
||||
<argument index="2" name="weight" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Returns a number smoothly interpolated between the [code]from[/code] and [code]to[/code], based on the [code]weight[/code]. Similar to [method lerp], but interpolates faster at the beginning and slower at the end.
|
||||
[codeblock]
|
||||
smooth_step(0, 2, 0.5) # returns 0.15
|
||||
smooth_step(0, 2, 1.0) # returns 0.5
|
||||
smooth_step(0, 2, 2.0) # returns 1.0
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
<method name="sqrt">
|
||||
<return type="float">
|
||||
</return>
|
||||
@@ -1112,8 +1131,10 @@
|
||||
</return>
|
||||
<argument index="0" name="var" type="Variant">
|
||||
</argument>
|
||||
<argument index="1" name="full_objects" type="bool" default="false">
|
||||
</argument>
|
||||
<description>
|
||||
Encodes a variable value to a byte array.
|
||||
Encodes a variable value to a byte array. When [code]full_objects[/code] is [code]true[/code] encoding objects is allowed (and can potentially include code).
|
||||
</description>
|
||||
</method>
|
||||
<method name="var2str">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="@GlobalScope" category="Core" version="3.1">
|
||||
<class name="@GlobalScope" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Global scope constants and variables.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="@NativeScript" category="Core" version="3.1">
|
||||
<class name="@NativeScript" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="@VisualScript" category="Core" version="3.1">
|
||||
<class name="@VisualScript" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Built-in visual script functions.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AABB" category="Built-In Types" version="3.1">
|
||||
<class name="AABB" category="Built-In Types" version="3.1.1">
|
||||
<brief_description>
|
||||
Axis-Aligned Bounding Box.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="AABB">
|
||||
<return type="AABB">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRAnchor" inherits="Spatial" category="Core" version="3.1">
|
||||
<class name="ARVRAnchor" inherits="Spatial" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Anchor point in AR Space.
|
||||
</brief_description>
|
||||
@@ -10,8 +10,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_anchor_name" qualifiers="const">
|
||||
<return type="String">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRCamera" inherits="Camera" category="Core" version="3.1">
|
||||
<class name="ARVRCamera" inherits="Camera" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
A camera node with a few overrules for AR/VR applied, such as location tracking.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRController" inherits="Spatial" category="Core" version="3.1">
|
||||
<class name="ARVRController" inherits="Spatial" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
A spatial node representing a spatially tracked controller.
|
||||
</brief_description>
|
||||
@@ -10,8 +10,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_controller_name" qualifiers="const">
|
||||
<return type="String">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRInterface" inherits="Reference" category="Core" version="3.1">
|
||||
<class name="ARVRInterface" inherits="Reference" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Base class for ARVR interface implementation.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_capabilities" qualifiers="const">
|
||||
<return type="int">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVROrigin" inherits="Spatial" category="Core" version="3.1">
|
||||
<class name="ARVROrigin" inherits="Spatial" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Our origin point in AR/VR.
|
||||
</brief_description>
|
||||
@@ -11,8 +11,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRPositionalTracker" inherits="Object" category="Core" version="3.1">
|
||||
<class name="ARVRPositionalTracker" inherits="Object" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
A tracked object
|
||||
</brief_description>
|
||||
@@ -10,8 +10,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_hand" qualifiers="const">
|
||||
<return type="int" enum="ARVRPositionalTracker.TrackerHand">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRServer" inherits="Object" category="Core" version="3.1">
|
||||
<class name="ARVRServer" inherits="Object" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
This is our AR/VR Server.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="center_on_hmd">
|
||||
<return type="void">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AStar" inherits="Reference" category="Core" version="3.1">
|
||||
<class name="AStar" inherits="Reference" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
AStar class representation that uses vectors as edges.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="_compute_cost" qualifiers="virtual">
|
||||
<return type="float">
|
||||
@@ -226,6 +224,15 @@
|
||||
Returns whether a point associated with the given id exists.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_point_disabled" qualifiers="const">
|
||||
<return type="bool">
|
||||
</return>
|
||||
<argument index="0" name="id" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns whether a point is disabled or not for pathfinding. By default, all points are enabled.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_point">
|
||||
<return type="void">
|
||||
</return>
|
||||
@@ -235,6 +242,17 @@
|
||||
Removes the point associated with the given id from the points pool.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_point_disabled">
|
||||
<return type="void">
|
||||
</return>
|
||||
<argument index="0" name="id" type="int">
|
||||
</argument>
|
||||
<argument index="1" name="disabled" type="bool" default="true">
|
||||
</argument>
|
||||
<description>
|
||||
Disables or enables the specified point for pathfinding. Useful for making a temporary obstacle.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_point_position">
|
||||
<return type="void">
|
||||
</return>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AcceptDialog" inherits="WindowDialog" category="Core" version="3.1">
|
||||
<class name="AcceptDialog" inherits="WindowDialog" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Base dialog for user notification.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_button">
|
||||
<return type="Button">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatedSprite" inherits="Node2D" category="Core" version="3.1">
|
||||
<class name="AnimatedSprite" inherits="Node2D" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Sprite node that can use multiple textures for animation.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="is_playing" qualifiers="const">
|
||||
<return type="bool">
|
||||
@@ -23,8 +21,10 @@
|
||||
</return>
|
||||
<argument index="0" name="anim" type="String" default="""">
|
||||
</argument>
|
||||
<argument index="1" name="backwards" type="bool" default="false">
|
||||
</argument>
|
||||
<description>
|
||||
Play the animation set in parameter. If no parameter is provided, the current animation is played.
|
||||
Play the animation set in parameter. If no parameter is provided, the current animation is played. Property [code]backwards[/code] plays the animation in reverse if set to [code]true[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="stop">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.1">
|
||||
<class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
2D sprite node in 3D world, that can use multiple 2D textures for animation.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="is_playing" qualifiers="const">
|
||||
<return type="bool">
|
||||
|
@@ -1,17 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatedTexture" inherits="Texture" category="Core" version="3.1">
|
||||
<class name="AnimatedTexture" inherits="Texture" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Proxy texture for simple frame-based animations.
|
||||
</brief_description>
|
||||
<description>
|
||||
[code]AnimatedTexture[/code] is a resource format for simple frame-based animations, where multiple frames textures can be chained automatically with a predefined delay for each frame. It's not a [Node], contrarily to [AnimationPlayer] or [AnimatedSprite], but has the advantage of being usable at any place where a [Texture] resource can be used, e.g. in a [TileSet].
|
||||
[code]AnimatedTexture[/code] is a resource format for frame-based animations, where multiple textures can be chained automatically with a predefined delay for each frame. Unlike [AnimationPlayer] or [AnimatedSprite], it isn't a [Node], but has the advantage of being usable anywhere a [Texture] resource can be used, e.g. in a [TileSet].
|
||||
The playback of the animation is controlled by the [member fps] property as well as each frame's optional delay (see [method set_frame_delay]). The animation loops, i.e. it will restart at frame 0 automatically after playing the last frame.
|
||||
[code]AnimatedTexture[/code] currently requires all frame textures to have the same size, otherwise the bigger ones will be cropped to match the smallest one.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_frame_delay" qualifiers="const">
|
||||
<return type="float">
|
||||
@@ -19,7 +17,7 @@
|
||||
<argument index="0" name="frame" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Retrieves the delayed assigned to the given [code]frame[/code] ID.
|
||||
Returns the given frame's delay value.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_frame_texture" qualifiers="const">
|
||||
@@ -28,7 +26,7 @@
|
||||
<argument index="0" name="frame" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Retrieves the [Texture] assigned to the given [code]frame[/code] ID.
|
||||
Returns the given frame's [Texture].
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_frame_delay">
|
||||
@@ -39,7 +37,7 @@
|
||||
<argument index="1" name="delay" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Defines an additional delay (in seconds) between this frame and the next one, that will be added to the time interval defined by [member fps]. By default, frames have no delay defined. If a delay value is defined, the final time interval between this frame and the next will be [code]1.0 / fps + delay[/code].
|
||||
Sets an additional delay (in seconds) between this frame and the next one, that will be added to the time interval defined by [member fps]. By default, frames have no delay defined. If a delay value is defined, the final time interval between this frame and the next will be [code]1.0 / fps + delay[/code].
|
||||
For example, for an animation with 3 frames, 2 FPS and a frame delay on the second frame of 1.2, the resulting playback will be:
|
||||
[codeblock]
|
||||
Frame 0: 0.5 s (1 / fps)
|
||||
@@ -57,15 +55,15 @@
|
||||
<argument index="1" name="texture" type="Texture">
|
||||
</argument>
|
||||
<description>
|
||||
Assigns a [Texture] to the given [code]frame[/code] ID. IDs start at 0 (so the first frame has ID 0, and the last frame of the animation has ID [member frames] - 1).
|
||||
You can define any frame texture up to [constant MAX_FRAMES], but keep in mind that only frames from 0 to [member frames] - 1 will be part of the animation.
|
||||
Assigns a [Texture] to the given frame. Frame IDs start at 0, so the first frame has ID 0, and the last frame of the animation has ID [member frames] - 1.
|
||||
You can define any number of textures up to [constant MAX_FRAMES], but keep in mind that only frames from 0 to [member frames] - 1 will be part of the animation.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="fps" type="float" setter="set_fps" getter="get_fps">
|
||||
Number of frames per second. This value defines the default time interval between two frames of the animation, and thus the overall duration of the animation loop based on the [member frames] property. A value of 0 means no predefined number of frames per second, the animation will play according to each frame's frame delay (see [method set_frame_delay]). Default value: 4.
|
||||
For example, an animation with 8 frames, no frame delay and a [code]fps[/code] value of 2 will run over 4 seconds, with one frame each 0.5 seconds.
|
||||
Animation speed in frames per second. This value defines the default time interval between two frames of the animation, and thus the overall duration of the animation loop based on the [member frames] property. A value of 0 means no predefined number of frames per second, the animation will play according to each frame's frame delay (see [method set_frame_delay]). Default value: 4.
|
||||
For example, an animation with 8 frames, no frame delay and a [code]fps[/code] value of 2 will run for 4 seconds, with each frame lasting 0.5 seconds.
|
||||
</member>
|
||||
<member name="frames" type="int" setter="set_frames" getter="get_frames">
|
||||
Number of frames to use in the animation. While you can create the frames independently with [method set_frame_texture], you need to set this value for the animation to take new frames into account. The maximum number of frames is [constant MAX_FRAMES]. Default value: 1.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Animation" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="Animation" inherits="Resource" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Contains data used to animate everything in the engine.
|
||||
</brief_description>
|
||||
@@ -19,8 +19,6 @@
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_track">
|
||||
<return type="int">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNode" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AnimationNode" inherits="Resource" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Base resource for [AnimationTree] nodes.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_input">
|
||||
<return type="void">
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAdd2" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeAdd2" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAdd3" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeAdd3" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAnimation" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeAnimation" inherits="AnimationRootNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlend2" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlend2" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlend3" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlend3" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendSpace1D" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlendSpace1D" inherits="AnimationRootNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_blend_point">
|
||||
<return type="void">
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendSpace2D" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlendSpace2D" inherits="AnimationRootNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_blend_point">
|
||||
<return type="void">
|
||||
@@ -136,8 +134,10 @@
|
||||
<constant name="BLEND_MODE_INTERPOLATED" value="0" enum="BlendMode">
|
||||
</constant>
|
||||
<constant name="BLEND_MODE_DISCRETE" value="1" enum="BlendMode">
|
||||
Useful for frame-by-frame 2D animations.
|
||||
</constant>
|
||||
<constant name="BLEND_MODE_DISCRETE_CARRY" value="2" enum="BlendMode">
|
||||
Keep the current play position when switching between discrete animations.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendTree" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlendTree" inherits="AnimationRootNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
<return type="void">
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeOneShot" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeOneShot" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_mix_mode" qualifiers="const">
|
||||
<return type="int" enum="AnimationNodeOneShot.MixMode">
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeOutput" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeOutput" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,13 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachine" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeStateMachine" inherits="AnimationRootNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
Contains multiple root nodes as children in a graph. Each node is used as a state, and provides multiple functions to alternate between states. Retrieve the AnimationNodeStateMachinePlayback object from the [AnimationTree] node to control it programatically.
|
||||
[codeblock]
|
||||
var state_machine = anim_tree["parameters/StateMachine/playback"]
|
||||
state_machine.travel("SomeState")
|
||||
[codeblock]
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
<return type="void">
|
||||
@@ -170,7 +173,7 @@
|
||||
<method name="set_graph_offset">
|
||||
<return type="void">
|
||||
</return>
|
||||
<argument index="0" name="name" type="Vector2">
|
||||
<argument index="0" name="offset" type="Vector2">
|
||||
</argument>
|
||||
<description>
|
||||
</description>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachinePlayback" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AnimationNodeStateMachinePlayback" inherits="Resource" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_current_node" qualifiers="const">
|
||||
<return type="String">
|
||||
@@ -47,6 +45,7 @@
|
||||
<argument index="0" name="to_node" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Transition from the current state to another one, while visiting all the intermediate ones. This is done via the A* algorithm.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
|
@@ -1,27 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachineTransition" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AnimationNodeStateMachineTransition" inherits="Resource" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="advance_condition" type="String" setter="set_advance_condition" getter="get_advance_condition">
|
||||
Turn on auto advance when this condition is set. This is a custom text field that can be filled with a variable name. The variable can be modified from code.
|
||||
</member>
|
||||
<member name="auto_advance" type="bool" setter="set_auto_advance" getter="has_auto_advance">
|
||||
Turn on the transition automatically when this state is reached. This works best with [code]SWITCH_MODE_AT_END[/code].
|
||||
</member>
|
||||
<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled">
|
||||
Don't use this transition during [method AnimationNodeStateMachinePlayback.travel] or [member auto_advance].
|
||||
</member>
|
||||
<member name="priority" type="int" setter="set_priority" getter="get_priority">
|
||||
Lower priority transitions are preferred when travelling through the tree via [method AnimationNodeStateMachinePlayback.travel] or [member auto_advance].
|
||||
</member>
|
||||
<member name="switch_mode" type="int" setter="set_switch_mode" getter="get_switch_mode" enum="AnimationNodeStateMachineTransition.SwitchMode">
|
||||
The transition type.
|
||||
</member>
|
||||
<member name="xfade_time" type="float" setter="set_xfade_time" getter="get_xfade_time">
|
||||
The time to cross-fade between this state and the next.
|
||||
</member>
|
||||
</members>
|
||||
<signals>
|
||||
@@ -32,10 +36,13 @@
|
||||
</signals>
|
||||
<constants>
|
||||
<constant name="SWITCH_MODE_IMMEDIATE" value="0" enum="SwitchMode">
|
||||
Switch to the next state immediately. The current state will end and blend into the beginning of the new one.
|
||||
</constant>
|
||||
<constant name="SWITCH_MODE_SYNC" value="1" enum="SwitchMode">
|
||||
Switch to the next state immediately, but will seek the new state to the playback position of the old state.
|
||||
</constant>
|
||||
<constant name="SWITCH_MODE_AT_END" value="2" enum="SwitchMode">
|
||||
Wait for the current state playback to end, then switch to the beginning of the next state animation.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeTimeScale" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeTimeScale" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeTimeSeek" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeTimeSeek" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeTransition" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeTransition" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationPlayer" inherits="Node" category="Core" version="3.1">
|
||||
<class name="AnimationPlayer" inherits="Node" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Container and player of [Animation] resources.
|
||||
</brief_description>
|
||||
@@ -10,8 +10,6 @@
|
||||
<link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/animations.html</link>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_animation">
|
||||
<return type="int" enum="Error">
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationRootNode" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationRootNode" inherits="AnimationNode" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationTrackEditPlugin" inherits="Reference" category="Core" version="3.1">
|
||||
<class name="AnimationTrackEditPlugin" inherits="Reference" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationTree" inherits="Node" category="Core" version="3.1">
|
||||
<class name="AnimationTree" inherits="Node" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
|
||||
<link>https://github.com/godotengine/tps-demo</link>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="advance">
|
||||
<return type="void">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationTreePlayer" inherits="Node" category="Core" version="3.1">
|
||||
<class name="AnimationTreePlayer" inherits="Node" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Animation Player that uses a node graph for blending Animations.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
<return type="void">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Area" inherits="CollisionObject" category="Core" version="3.1">
|
||||
<class name="Area" inherits="CollisionObject" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
General purpose area node for detection and 3D physics influence.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_collision_layer_bit" qualifiers="const">
|
||||
<return type="bool">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Area2D" inherits="CollisionObject2D" category="Core" version="3.1">
|
||||
<class name="Area2D" inherits="CollisionObject2D" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
2D area for detection and 2D physics influence.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_collision_layer_bit" qualifiers="const">
|
||||
<return type="bool">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Array" category="Built-In Types" version="3.1">
|
||||
<class name="Array" category="Built-In Types" version="3.1.1">
|
||||
<brief_description>
|
||||
Generic array datatype.
|
||||
</brief_description>
|
||||
@@ -17,8 +17,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="Array">
|
||||
<return type="Array">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ArrayMesh" inherits="Mesh" category="Core" version="3.1">
|
||||
<class name="ArrayMesh" inherits="Mesh" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
@@ -23,8 +23,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_blend_shape">
|
||||
<return type="void">
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AtlasTexture" inherits="Texture" category="Core" version="3.1">
|
||||
<class name="AtlasTexture" inherits="Texture" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Packs multiple small textures in a single, bigger one. Helps to optimize video memory costs and render calls.
|
||||
</brief_description>
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioBusLayout" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AudioBusLayout" inherits="Resource" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Stores information about the audiobusses.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffect" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AudioEffect" inherits="Resource" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Audio Effect For Audio.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectAmplify" inherits="AudioEffect" category="Core" version="3.1">
|
||||
<class name="AudioEffectAmplify" inherits="AudioEffect" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a Amplify audio effect to an Audio bus.
|
||||
Increases or decreases the volume of the selected audio bus.
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectBandLimitFilter" inherits="AudioEffectFilter" category="Core" version="3.1">
|
||||
<class name="AudioEffectBandLimitFilter" inherits="AudioEffectFilter" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a band limit filter to the Audio Bus.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectBandPassFilter" inherits="AudioEffectFilter" category="Core" version="3.1">
|
||||
<class name="AudioEffectBandPassFilter" inherits="AudioEffectFilter" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a band pass filter to the Audio Bus.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectChorus" inherits="AudioEffect" category="Core" version="3.1">
|
||||
<class name="AudioEffectChorus" inherits="AudioEffect" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a chorus audio effect.
|
||||
</brief_description>
|
||||
@@ -8,8 +8,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectCompressor" inherits="AudioEffect" category="Core" version="3.1">
|
||||
<class name="AudioEffectCompressor" inherits="AudioEffect" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a Compressor audio effect to an Audio bus.
|
||||
Reduces sounds that exceed a certain threshold level, smooths out the dynamics and increases the overall volume.
|
||||
@@ -14,8 +14,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectDelay" inherits="AudioEffect" category="Core" version="3.1">
|
||||
<class name="AudioEffectDelay" inherits="AudioEffect" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a Delay audio effect to an Audio bus. Plays input signal back after a period of time.
|
||||
Two tap delay and feedback options.
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectDistortion" inherits="AudioEffect" category="Core" version="3.1">
|
||||
<class name="AudioEffectDistortion" inherits="AudioEffect" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Adds a Distortion audio effect to an Audio bus.
|
||||
Modify the sound to make it dirty.
|
||||
@@ -10,8 +10,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioEffectEQ" inherits="AudioEffect" category="Core" version="3.1">
|
||||
<class name="AudioEffectEQ" inherits="AudioEffect" category="Core" version="3.1.1">
|
||||
<brief_description>
|
||||
Base class for audio equalizers. Gives you control over frequencies.
|
||||
Use it to create a custom equalizer if [AudioEffectEQ6], [AudioEffectEQ10] or [AudioEffectEQ21] don't fit your needs.
|
||||
@@ -9,8 +9,6 @@
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_band_count" qualifiers="const">
|
||||
<return type="int">
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user