Merge pull request #33450 from akien-mga/3.1
Assorted cherry-picks from the master branch for Godot 3.1.2 [3rd batch]
This commit is contained in:
commit
0b399e0373
|
@ -6,7 +6,7 @@ sudo: false
|
|||
|
||||
env:
|
||||
global:
|
||||
- SCONS_CACHE=$HOME/.scons_cache
|
||||
- SCONS_CACHE=$HOME/.scons_cache/$TRAVIS_BRANCH
|
||||
- SCONS_CACHE_LIMIT=1024
|
||||
- OPTIONS="debug_symbols=no verbose=yes progress=no"
|
||||
- secure: "uch9QszCgsl1qVbuzY41P7S2hWL2IiNFV4SbAYRCdi0oJ9MIu+pVyrQdpf3+jG4rH6j4Rffl+sN17Zz4dIDDioFL1JwqyCqyCyswR8uACC0Rr8gr4Mi3+HIRbv+2s2P4cIQq41JM8FJe84k9jLEMGCGh69w+ibCWoWs74CokYVA="
|
||||
|
|
|
@ -55,6 +55,7 @@ name is available.
|
|||
Dana Olson (adolson)
|
||||
Daniel J. Ramirez (djrm)
|
||||
Daniel Rakos (aqnuep)
|
||||
David Sichma (DavidSichma)
|
||||
Dharkael (lupoDharkael)
|
||||
Dmitry Koteroff (Krakean)
|
||||
DualMatrix
|
||||
|
@ -120,6 +121,7 @@ name is available.
|
|||
Patrick (firefly2442)
|
||||
Paul Batty (Paulb23)
|
||||
Paul Joannon (paulloz)
|
||||
Paul Trojahn (ptrojahn)
|
||||
Pawel Kowal (pkowal1982)
|
||||
Pedro J. Estébanez (RandomShaper)
|
||||
Pieter-Jan Briers (PJB3005)
|
||||
|
|
67
DONORS.md
67
DONORS.md
|
@ -14,10 +14,12 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
|
||||
Enjin Coin <https://enjincoin.io>
|
||||
Heroic Labs <https://heroiclabs.com>
|
||||
Interblock <http://interblockgaming.com>
|
||||
|
||||
## Gold sponsors
|
||||
|
||||
Gamblify <https://www.gamblify.com>
|
||||
Image Campus <https://www.imagecampus.edu.ar>
|
||||
Moonwards <https://www.moonwards.com>
|
||||
|
||||
## Mini sponsors
|
||||
|
@ -27,8 +29,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Anandarup Mallik
|
||||
Andrew Dunai
|
||||
Brandon Lamb
|
||||
Christian Chipont
|
||||
Christian Uldall Pedersen
|
||||
Christopher Montesano
|
||||
Christoph Woinke
|
||||
Darkhan Baimyrza
|
||||
Denis Malyavin
|
||||
|
@ -42,6 +43,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Javary Co.
|
||||
Jeffery Chiu
|
||||
Jeppe Zapp
|
||||
John Benard (Linuxydable)
|
||||
Justin Arnold
|
||||
Justo Delgado Baudí
|
||||
Kyle Szklenski
|
||||
|
@ -52,7 +54,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Mike King
|
||||
Nathan Warden
|
||||
Neal Gompa (Conan Kudo)
|
||||
Patrick Aarstad
|
||||
ScottMakesGames
|
||||
Slobodan Milnovic
|
||||
Stephan Lanfermann
|
||||
|
@ -64,7 +65,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
|
||||
Andrei
|
||||
cheese65536
|
||||
Daniel Hartmann
|
||||
Dave
|
||||
David Gehrig
|
||||
David Snopek
|
||||
|
@ -82,18 +82,17 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Taylor Ritenour
|
||||
Zaven Muradyan
|
||||
|
||||
_
|
||||
Alexander Trey Saunders
|
||||
Asher Glick
|
||||
Austen McRae
|
||||
Bernhard Werner
|
||||
beVR
|
||||
Brian van der Stel
|
||||
Cameron MacNair
|
||||
Carlo Cabanilla
|
||||
Daniel James
|
||||
David Giardi
|
||||
Default Name
|
||||
Edward E
|
||||
Florian Breisch
|
||||
Gamejunkey
|
||||
Gero
|
||||
|
@ -103,6 +102,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Jon Woodward
|
||||
Jose Fernando Alexandre
|
||||
Karl Werf
|
||||
Klavdij Voncina
|
||||
Lex Steers
|
||||
Luke
|
||||
Maciej Pendolski
|
||||
|
@ -115,11 +115,11 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Scott Wadden
|
||||
Sergey
|
||||
Shawn Yu
|
||||
The Architect
|
||||
thechris
|
||||
Tom Langwaldt
|
||||
tukon
|
||||
Unseen Domains
|
||||
wmww
|
||||
|
||||
Alex Khayrullin
|
||||
Branwyn Tylwyth
|
||||
|
@ -129,19 +129,18 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Conrad Curry
|
||||
Craig Smith
|
||||
Darrian Little
|
||||
Dean Harmon
|
||||
Ivan Trombley
|
||||
Jakub Dering
|
||||
Joan Fons
|
||||
Joshua Flores
|
||||
Krzysztof Jankowski
|
||||
Lord Bloodhound
|
||||
Lucas Ferreira Franca
|
||||
Nathan Lundquist
|
||||
Nicklas Breum
|
||||
Pascal Grüter
|
||||
Petr Malac
|
||||
Rami
|
||||
Reneator
|
||||
Rob
|
||||
Robert Willes
|
||||
Ronnie Ashlock
|
||||
Thomas Bjarnelöf
|
||||
|
@ -156,6 +155,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
André Frélicot
|
||||
andres eduardo lopez
|
||||
Andrew Bowen
|
||||
aoshiwik
|
||||
Ben Botwin
|
||||
Carlos de Sousa Marques
|
||||
Chase Taranto
|
||||
|
@ -166,7 +166,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
D
|
||||
Daniel Eichler
|
||||
David White
|
||||
Eric
|
||||
Eric Monson
|
||||
Erik Hatfield
|
||||
Eugenio Hugo Salgüero Jáñez
|
||||
|
@ -189,8 +188,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Juraj Móza
|
||||
Kasper Jeppesen
|
||||
kinfox
|
||||
Klaus The
|
||||
Klavdij Voncina
|
||||
Maarten Elings
|
||||
Marcelo Dornbusch Lopes
|
||||
Markus Fehr
|
||||
|
@ -199,7 +196,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Marvin
|
||||
Matt Eunson
|
||||
Max Bulai
|
||||
Max R.R. Collada
|
||||
MuffinManKen
|
||||
Nick Nikitin
|
||||
Oliver Dick
|
||||
|
@ -218,7 +214,9 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Scott Pilet
|
||||
spilldata
|
||||
Stoned Xander
|
||||
TheLevelOfDetail .
|
||||
Thomas Krampl
|
||||
Thomas Kurz
|
||||
Tobias Bocanegra
|
||||
Urho
|
||||
Zie Weaver
|
||||
|
@ -236,27 +234,25 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Adam Smeltzer
|
||||
Adisibio
|
||||
Adrian Demetrescu
|
||||
Aggelos Arnaoutis
|
||||
Agustinus Arya
|
||||
Aidan O'Flannagain
|
||||
Aki Mimoto
|
||||
Albin Jonasson Svärdsby
|
||||
Alder Stefano
|
||||
Alessandro Senese
|
||||
Alexander Koppe
|
||||
Alexandre
|
||||
Alex Davies-Moore
|
||||
Allen Schade
|
||||
Andreas Evers
|
||||
Andreas Krampitz
|
||||
Andreas Schüle
|
||||
André Simões
|
||||
Andrés Rodríguez
|
||||
Andrew Thomas
|
||||
Andrzej Skalski
|
||||
Angelos Arnaoutis
|
||||
Anthony Bongiovanni
|
||||
Anthony Staunton
|
||||
Anton Kurkin
|
||||
Antony K. Jones
|
||||
AP Condomines
|
||||
Arda Erol
|
||||
Arseniy M
|
||||
|
@ -266,7 +262,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Avencherus
|
||||
B A
|
||||
Balázs Batári
|
||||
Beliar
|
||||
Benedikt
|
||||
Ben G
|
||||
Ben Phelan
|
||||
|
@ -278,20 +273,21 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Bryan Stevenson
|
||||
Carl van der Geest
|
||||
Carwyn Edwards
|
||||
Casey M.
|
||||
Chris Brown
|
||||
Chris Chapin
|
||||
Christian Baune
|
||||
Christian Chipont
|
||||
Christian Winter
|
||||
Christoffer Sundbom
|
||||
Christopher Schmitt
|
||||
Clay Heaton
|
||||
Cobaltum
|
||||
Collin Shooltz
|
||||
Daniel Johnson
|
||||
Daniel Kimblad
|
||||
DanielMaximiano
|
||||
Daniel Pontillo
|
||||
Daniel Reed
|
||||
David Cravens
|
||||
David May
|
||||
David Rapisarda
|
||||
David Woodard
|
||||
|
@ -308,14 +304,16 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Ellen Marie Dash
|
||||
Elmeri '- Duy Kevin Nguyen
|
||||
Emanuel Kotzayan
|
||||
Ennemoser Ernst
|
||||
Eric Ellingson
|
||||
Eric Martini
|
||||
Eric Williams
|
||||
Erkki Seppälä
|
||||
EugeneTel
|
||||
Evan Rose
|
||||
Felix Kollmann
|
||||
fengjiongmax
|
||||
Flaredown
|
||||
Florian Richer
|
||||
FuDiggity
|
||||
G3Dev sàrl
|
||||
Gadzhi Kharkharov
|
||||
|
@ -324,6 +322,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
George Marques
|
||||
gmmath
|
||||
Greg Olson
|
||||
GREGORY C FEIN
|
||||
Greg P
|
||||
Greyson Richey
|
||||
Guldoman
|
||||
|
@ -332,7 +331,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Hiroshi Naruo
|
||||
Hunter Jones
|
||||
Hylpher
|
||||
ialex32x
|
||||
Iiari
|
||||
IndustrialRobot
|
||||
Isaac Morton
|
||||
|
@ -341,6 +339,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Jaime Ruiz-Borau Vizárraga
|
||||
Jako Danar
|
||||
James A F Manley
|
||||
Jannik Gröger
|
||||
Jax
|
||||
Jed
|
||||
Jeff Hungerford
|
||||
|
@ -353,7 +352,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Joel Fivat
|
||||
Joel Setterberg
|
||||
Johannes Wuensch
|
||||
John Selig
|
||||
Jomei Jackson
|
||||
Jonas Rudlang
|
||||
Jonas Yamazaki
|
||||
|
@ -365,9 +363,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Jose Andrés Mejias Rojas
|
||||
Jose C. Rubio
|
||||
Joseph Catrambone
|
||||
Josh 'Cheeseness' Bush
|
||||
Juanfran
|
||||
Juan Negrier
|
||||
Judd
|
||||
Julian Murgia
|
||||
JungleRobba
|
||||
|
@ -378,7 +374,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
KC Chan
|
||||
Keedong Park
|
||||
Keith Bradner
|
||||
Kevin Kolcheck
|
||||
Kevin McPhillips
|
||||
kickmaniac
|
||||
Kiyohiro Kawamura (kyorohiro)
|
||||
|
@ -400,12 +395,12 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Malik Ahmed
|
||||
Malik Nejer
|
||||
Marcus Richter
|
||||
Markus Lohaus
|
||||
Markus Michael Egger
|
||||
Martin Candela
|
||||
Martin Holas
|
||||
Martin Liška
|
||||
Matthew Little
|
||||
Matti Pohjanvirta
|
||||
Maxime Blade
|
||||
Maxwell
|
||||
medecau
|
||||
|
@ -417,12 +412,11 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Michael Haney
|
||||
Michael Labbe
|
||||
Mikael Olsson
|
||||
Mikayla Hutchinson
|
||||
Mikayla
|
||||
Mike Birkhead
|
||||
Mitchell J. Wagner
|
||||
MoM
|
||||
Nathan Fish
|
||||
Nathan W
|
||||
Natrim
|
||||
nee
|
||||
Neil Blakey-Milner
|
||||
|
@ -440,20 +434,19 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Olivier
|
||||
Omar Delarosa
|
||||
Oscar Norlander
|
||||
Pafka
|
||||
Pan Ip
|
||||
Patrick Forringer
|
||||
Patrick Nafarrete
|
||||
Paul Gieske
|
||||
Paul Mason
|
||||
Paweł Kowal
|
||||
Penguin
|
||||
Petrus Prinsloo
|
||||
Philip Cohoe
|
||||
Pierre-Igor Berthet
|
||||
Pitsanu Tongprasin
|
||||
Point08
|
||||
Poryg
|
||||
Rafa Laguna
|
||||
Rafal Wyszomirski
|
||||
rainerLinux
|
||||
Raphael Leroux
|
||||
Remi Rampin
|
||||
|
@ -462,6 +455,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Ricardo Alcantara
|
||||
Richard Diss
|
||||
Richard Ivánek
|
||||
Richard Patching
|
||||
Robert Farr (Larington)
|
||||
Robert Hernandez
|
||||
Rodrigo Loli
|
||||
|
@ -471,7 +465,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Ronan Jouchet
|
||||
Ryan Groom
|
||||
Ryan Hentz
|
||||
Saad Khoudmi
|
||||
Sam.C
|
||||
Sam Edson
|
||||
Samuele Zolfanelli
|
||||
Sanka.X
|
||||
|
@ -487,13 +481,11 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
SK
|
||||
smbe19
|
||||
Sootstone
|
||||
Stonepyre
|
||||
Svenne Krap
|
||||
The Architect
|
||||
tezuvholovdr
|
||||
thomas
|
||||
Thomas Bechtold
|
||||
Thomas Kelly
|
||||
Thomas Kurz
|
||||
tiansheng li
|
||||
Tim Drumheller
|
||||
Timothy B. MacDonald
|
||||
|
@ -504,7 +496,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Torsten Crass
|
||||
Travis O'Brien
|
||||
Trent Skinner
|
||||
Triptych
|
||||
Troy Bonneau
|
||||
Tryggve Sollid
|
||||
Turgut Temucin
|
||||
|
|
|
@ -208,7 +208,8 @@ void FileAccessCompressed::seek(size_t p_position) {
|
|||
if (p_position == read_total) {
|
||||
at_end = true;
|
||||
} else {
|
||||
|
||||
at_end = false;
|
||||
read_eof = false;
|
||||
int block_idx = p_position / block_size;
|
||||
if (block_idx != read_block) {
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ void PackedData::add_path(const String &pkg_path, const String &path, uint64_t o
|
|||
}
|
||||
}
|
||||
String filename = path.get_file();
|
||||
// Don't add as a file if the path points to a directoryy
|
||||
// Don't add as a file if the path points to a directory
|
||||
if (!filename.empty()) {
|
||||
cd->files.insert(filename);
|
||||
}
|
||||
|
@ -463,11 +463,15 @@ String DirAccessPack::get_current_dir() {
|
|||
|
||||
bool DirAccessPack::file_exists(String p_file) {
|
||||
|
||||
p_file = fix_path(p_file);
|
||||
|
||||
return current->files.has(p_file);
|
||||
}
|
||||
|
||||
bool DirAccessPack::dir_exists(String p_dir) {
|
||||
|
||||
p_dir = fix_path(p_dir);
|
||||
|
||||
return current->subdirs.has(p_dir);
|
||||
}
|
||||
|
||||
|
|
|
@ -1801,6 +1801,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
|
|||
|
||||
if (f->get_error() != OK && f->get_error() != ERR_FILE_EOF) {
|
||||
f->close();
|
||||
memdelete(f);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
|
||||
|
@ -1953,10 +1954,12 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
|
|||
|
||||
if (f->get_error() != OK && f->get_error() != ERR_FILE_EOF) {
|
||||
f->close();
|
||||
memdelete(f);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
|
||||
f->close();
|
||||
memdelete(f);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
|
|
@ -1030,6 +1030,13 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
if (!enabled)
|
||||
return p_message;
|
||||
|
||||
// Locale can be of the form 'll_CC', i.e. language code and regional code,
|
||||
// e.g. 'en_US', 'en_GB', etc. It might also be simply 'll', e.g. 'en'.
|
||||
// To find the relevant translation, we look for those with locale starting
|
||||
// with the language code, and then if any is an exact match for the long
|
||||
// form. If not found, we fall back to a near match (another locale with
|
||||
// same language code).
|
||||
|
||||
StringName res;
|
||||
bool near_match = false;
|
||||
const CharType *lptr = &locale[0];
|
||||
|
@ -1039,13 +1046,11 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
const Ref<Translation> &t = E->get();
|
||||
String l = t->get_locale();
|
||||
if (lptr[0] != l[0] || lptr[1] != l[1])
|
||||
continue; // locale not match
|
||||
continue; // Language code does not match.
|
||||
|
||||
//near match
|
||||
bool match = (l != locale);
|
||||
|
||||
if (near_match && !match)
|
||||
continue; //only near-match once
|
||||
bool exact_match = (l == locale);
|
||||
if (!exact_match && near_match)
|
||||
continue; // Only near-match once, but keep looking for exact matches.
|
||||
|
||||
StringName r = t->get_message(p_message);
|
||||
|
||||
|
@ -1054,43 +1059,38 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
|
||||
res = r;
|
||||
|
||||
if (match)
|
||||
if (exact_match)
|
||||
break;
|
||||
else
|
||||
near_match = true;
|
||||
}
|
||||
|
||||
if (!res) {
|
||||
//try again with fallback
|
||||
if (fallback.length() >= 2) {
|
||||
if (!res && fallback.length() >= 2) {
|
||||
// Try again with the fallback locale.
|
||||
const CharType *fptr = &fallback[0];
|
||||
near_match = false;
|
||||
for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) {
|
||||
|
||||
const CharType *fptr = &fallback[0];
|
||||
near_match = false;
|
||||
for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) {
|
||||
const Ref<Translation> &t = E->get();
|
||||
String l = t->get_locale();
|
||||
if (fptr[0] != l[0] || fptr[1] != l[1])
|
||||
continue; // Language code does not match.
|
||||
|
||||
const Ref<Translation> &t = E->get();
|
||||
String l = t->get_locale();
|
||||
if (fptr[0] != l[0] || fptr[1] != l[1])
|
||||
continue; // locale not match
|
||||
bool exact_match = (l == fallback);
|
||||
if (!exact_match && near_match)
|
||||
continue; // Only near-match once, but keep looking for exact matches.
|
||||
|
||||
//near match
|
||||
bool match = (l != fallback);
|
||||
StringName r = t->get_message(p_message);
|
||||
|
||||
if (near_match && !match)
|
||||
continue; //only near-match once
|
||||
if (!r)
|
||||
continue;
|
||||
|
||||
StringName r = t->get_message(p_message);
|
||||
res = r;
|
||||
|
||||
if (!r)
|
||||
continue;
|
||||
|
||||
res = r;
|
||||
|
||||
if (match)
|
||||
break;
|
||||
else
|
||||
near_match = true;
|
||||
}
|
||||
if (exact_match)
|
||||
break;
|
||||
else
|
||||
near_match = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1271,10 +1271,10 @@
|
|||
No hint for edited property.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_RANGE" value="1" enum="PropertyHint">
|
||||
Hints that an integer or float property should be within a range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"allow_greater"[/code] and/or [code]"allow_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"-360,360,1,allow_greater,allow_lesser"[/code].
|
||||
Hints that an integer or float property should be within a range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"or_greater"[/code] and/or [code]"or_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"-360,360,1,or_greater,or_lesser"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_EXP_RANGE" value="2" enum="PropertyHint">
|
||||
Hints that an integer or float property should be within an exponential range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"allow_greater"[/code] and/or [code]"allow_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"0.01,100,0.01,allow_greater"[/code].
|
||||
Hints that an integer or float property should be within an exponential range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"or_greater"[/code] and/or [code]"or_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"0.01,100,0.01,or_greater"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_ENUM" value="3" enum="PropertyHint">
|
||||
Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string such as [code]"Hello,Something,Else"[/code].
|
||||
|
|
|
@ -128,7 +128,7 @@
|
|||
<argument index="3" name="ud" type="Variant" default="null">
|
||||
</argument>
|
||||
<description>
|
||||
Add a custom menu to 'Project > Tools' as [code]name[/code] that calls [code]callback[/code] on an instance of [code]handler[/code] with a parameter [code]ud[/code] when user activates it.
|
||||
Adds a custom menu item to [b]Project > Tools[/b] as [code]name[/code] that calls [code]callback[/code] on an instance of [code]handler[/code] with a parameter [code]ud[/code] when user activates it.
|
||||
</description>
|
||||
</method>
|
||||
<method name="add_tool_submenu_item">
|
||||
|
@ -139,7 +139,7 @@
|
|||
<argument index="1" name="submenu" type="Object">
|
||||
</argument>
|
||||
<description>
|
||||
Like [method add_tool_menu_item] but adds the [code]submenu[/code] item inside the [code]name[/code] menu.
|
||||
Adds a custom submenu under [b]Project > Tools >[/b] [code]name[/code]. [code]submenu[/code] should be an object of class [PopupMenu]. This submenu should be cleaned up using [code]remove_tool_menu_item(name)[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="apply_changes" qualifiers="virtual">
|
||||
|
|
|
@ -19,22 +19,26 @@
|
|||
</member>
|
||||
<member name="lod_max_distance" type="float" setter="set_lod_max_distance" getter="get_lod_max_distance">
|
||||
The GeometryInstance's max LOD distance.
|
||||
[b]Note:[/b] This property currently has no effect.
|
||||
</member>
|
||||
<member name="lod_max_hysteresis" type="float" setter="set_lod_max_hysteresis" getter="get_lod_max_hysteresis">
|
||||
The GeometryInstance's max LOD margin.
|
||||
[b]Note:[/b] This property currently has no effect.
|
||||
</member>
|
||||
<member name="lod_min_distance" type="float" setter="set_lod_min_distance" getter="get_lod_min_distance">
|
||||
The GeometryInstance's min LOD distance.
|
||||
[b]Note:[/b] This property currently has no effect.
|
||||
</member>
|
||||
<member name="lod_min_hysteresis" type="float" setter="set_lod_min_hysteresis" getter="get_lod_min_hysteresis">
|
||||
The GeometryInstance's min LOD margin.
|
||||
[b]Note:[/b] This property currently has no effect.
|
||||
</member>
|
||||
<member name="material_override" type="Material" setter="set_material_override" getter="get_material_override">
|
||||
The material override for the whole geometry.
|
||||
If there is a material in [code]material_override[/code], it will be used instead of any material set in any material slot of the mesh.
|
||||
If a material is assigned to this property, it will be used instead of any material set in any material slot of the mesh.
|
||||
</member>
|
||||
<member name="use_in_baked_light" type="bool" setter="set_flag" getter="get_flag">
|
||||
If [code]true[/code], this GeometryInstance will be used when baking lights using a [GIProbe] and/or any other form of baked lighting.
|
||||
If [code]true[/code], this GeometryInstance will be used when baking lights using a [GIProbe] or [BakedLightmap].
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
@ -51,10 +55,10 @@
|
|||
</constant>
|
||||
<constant name="SHADOW_CASTING_SETTING_SHADOWS_ONLY" value="3" enum="ShadowCastingSetting">
|
||||
Will only show the shadows casted from this object.
|
||||
In other words: The actual mesh will not be visible, only the shadows casted from the mesh.
|
||||
In other words, the actual mesh will not be visible, only the shadows casted from the mesh will be.
|
||||
</constant>
|
||||
<constant name="FLAG_USE_BAKED_LIGHT" value="0" enum="Flags">
|
||||
Will allow the GeometryInstance to be used when baking lights using a [GIProbe] and/or any other form of baked lighting.
|
||||
Will allow the GeometryInstance to be used when baking lights using a [GIProbe] or [BakedLightmap].
|
||||
</constant>
|
||||
<constant name="FLAG_MAX" value="2" enum="Flags">
|
||||
Represents the size of the [enum Flags] enum.
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
<description>
|
||||
This will simulate pressing the specified action.
|
||||
The strength can be used for non-boolean actions, it's ranged between 0 and 1 representing the intensity of the given action.
|
||||
[b]Note:[/b] This method will not cause any [method Node._input] calls. It is intended to be used with [method is_action_pressed] and [method is_action_just_pressed]. If you want to simulate [code]_input[/code], use [method parse_input_event] instead.
|
||||
</description>
|
||||
</method>
|
||||
<method name="action_release">
|
||||
|
@ -216,7 +217,7 @@
|
|||
<argument index="0" name="action" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Returns [code]true[/code] if you are pressing the action event.
|
||||
Returns [code]true[/code] if you are pressing the action event. Note that if an action has multiple buttons asigned and more than one of them is pressed, releasing one button will release the action, even if some other button assigned to this action is still pressed.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_joy_button_pressed" qualifiers="const">
|
||||
|
@ -277,7 +278,14 @@
|
|||
<argument index="0" name="event" type="InputEvent">
|
||||
</argument>
|
||||
<description>
|
||||
Feeds an [InputEvent] to the game. Can be used to artificially trigger input events from code.
|
||||
Feeds an [InputEvent] to the game. Can be used to artificially trigger input events from code. Also generates [method Node._input] calls.
|
||||
Example:
|
||||
[codeblock]
|
||||
var a = InputEventAction.new()
|
||||
a.action = "ui_cancel"
|
||||
a.pressed = true
|
||||
Input.parse_input_event(a)
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_joy_mapping">
|
||||
|
@ -311,7 +319,8 @@
|
|||
</argument>
|
||||
<description>
|
||||
Sets the default cursor shape to be used in the viewport instead of [constant CURSOR_ARROW].
|
||||
Note that if you want to change the default cursor shape for [Control]'s nodes, use [member Control.mouse_default_cursor_shape] instead.
|
||||
[b]Note:[/b] If you want to change the default cursor shape for [Control]'s nodes, use [member Control.mouse_default_cursor_shape] instead.
|
||||
[b]Note:[/b] This method generates an [InputEventMouseMotion] to update cursor immediately.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_mouse_mode">
|
||||
|
|
|
@ -4,7 +4,9 @@
|
|||
A pooled [Array] of integers ([int]).
|
||||
</brief_description>
|
||||
<description>
|
||||
An [Array] specifically designed to hold integer values ([int]). Optimized for memory usage, does not fragment the memory. Note that this type is passed by value and not by reference.
|
||||
An [Array] specifically designed to hold integer values ([int]). Optimized for memory usage, does not fragment the memory.
|
||||
[b]Note:[/b] This type is passed by value and not by reference.
|
||||
[b]Note:[/b] This type is limited to signed 32-bit integers, which means it can only take values in the interval [code][-2^31, 2^31 - 1][/code], i.e. [code][-2147483648, 2147483647][/code]. Exceeding those bounds will wrap around. In comparison, [int] uses signed 64-bit integers which can hold much larger values.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -705,6 +705,12 @@
|
|||
<member name="rendering/limits/buffers/immediate_buffer_size_kb" type="int" setter="" getter="">
|
||||
Max buffer size for drawing immediate objects (ImmediateGeometry nodes). Nodes using more than this size will not work.
|
||||
</member>
|
||||
<member name="rendering/limits/rendering/max_renderable_lights" type="int" setter="" getter="">
|
||||
Max number of lights renderable in a frame. If more than this number are used, they will be ignored. On some systems (particularly web) setting this number as low as possible can increase the speed of shader compilation.
|
||||
</member>
|
||||
<member name="rendering/limits/rendering/max_renderable_reflections" type="int" setter="" getter="">
|
||||
Max number of reflection probes renderable in a frame. If more than this number are used, they will be ignored. On some systems (particularly web) setting this number as low as possible can increase the speed of shader compilation.
|
||||
</member>
|
||||
<member name="rendering/limits/rendering/max_renderable_elements" type="int" setter="" getter="">
|
||||
Max amount of elements renderable in a frame. If more than this are visible per frame, they will be dropped. Keep in mind elements refer to mesh surfaces and not meshes themselves.
|
||||
</member>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
Vector used for 2D math.
|
||||
</brief_description>
|
||||
<description>
|
||||
2-element structure that can be used to represent positions in 2d space or any other pair of numeric values.
|
||||
2-element structure that can be used to represent positions in 2D space or any other pair of numeric values.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/3.1/tutorials/math/index.html</link>
|
||||
|
|
|
@ -425,21 +425,30 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
|
|||
# Signals
|
||||
if len(class_def.signals) > 0:
|
||||
f.write(make_heading('Signals', '-'))
|
||||
index = 0
|
||||
|
||||
for signal in class_def.signals.values():
|
||||
#f.write(".. _class_{}_{}:\n\n".format(class_name, signal.name))
|
||||
if index != 0:
|
||||
f.write('----\n\n')
|
||||
|
||||
f.write(".. _class_{}_signal_{}:\n\n".format(class_name, signal.name))
|
||||
_, signature = make_method_signature(class_def, signal, False, state)
|
||||
f.write("- {}\n\n".format(signature))
|
||||
|
||||
if signal.description is None or signal.description.strip() == '':
|
||||
continue
|
||||
f.write(rstize_text(signal.description.strip(), state))
|
||||
f.write("\n\n")
|
||||
if signal.description is not None and signal.description.strip() != '':
|
||||
f.write(rstize_text(signal.description.strip(), state) + '\n\n')
|
||||
|
||||
index += 1
|
||||
|
||||
# Enums
|
||||
if len(class_def.enums) > 0:
|
||||
f.write(make_heading('Enumerations', '-'))
|
||||
index = 0
|
||||
|
||||
for e in class_def.enums.values():
|
||||
if index != 0:
|
||||
f.write('----\n\n')
|
||||
|
||||
f.write(".. _enum_{}_{}:\n\n".format(class_name, e.name))
|
||||
# Sphinx seems to divide the bullet list into individual <ul> tags if we weave the labels into it.
|
||||
# As such I'll put them all above the list. Won't be perfect but better than making the list visually broken.
|
||||
|
@ -453,8 +462,11 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
|
|||
f.write("- **{}** = **{}**".format(value.name, value.value))
|
||||
if value.text is not None and value.text.strip() != '':
|
||||
f.write(' --- ' + rstize_text(value.text.strip(), state))
|
||||
|
||||
f.write('\n\n')
|
||||
|
||||
index += 1
|
||||
|
||||
# Constants
|
||||
if len(class_def.constants) > 0:
|
||||
f.write(make_heading('Constants', '-'))
|
||||
|
@ -467,6 +479,7 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
|
|||
f.write("- **{}** = **{}**".format(constant.name, constant.value))
|
||||
if constant.text is not None and constant.text.strip() != '':
|
||||
f.write(' --- ' + rstize_text(constant.text.strip(), state))
|
||||
|
||||
f.write('\n\n')
|
||||
|
||||
# Class description
|
||||
|
@ -484,8 +497,12 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
|
|||
# Property descriptions
|
||||
if len(class_def.properties) > 0:
|
||||
f.write(make_heading('Property Descriptions', '-'))
|
||||
index = 0
|
||||
|
||||
for property_def in class_def.properties.values():
|
||||
#f.write(".. _class_{}_{}:\n\n".format(class_name, property_def.name))
|
||||
if index != 0:
|
||||
f.write('----\n\n')
|
||||
|
||||
f.write(".. _class_{}_property_{}:\n\n".format(class_name, property_def.name))
|
||||
f.write('- {} **{}**\n\n'.format(property_def.type_name.to_rst(state), property_def.name))
|
||||
|
||||
|
@ -499,24 +516,30 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
|
|||
format_table(f, setget)
|
||||
|
||||
if property_def.text is not None and property_def.text.strip() != '':
|
||||
f.write(rstize_text(property_def.text.strip(), state))
|
||||
f.write('\n\n')
|
||||
f.write(rstize_text(property_def.text.strip(), state) + '\n\n')
|
||||
|
||||
index += 1
|
||||
|
||||
# Method descriptions
|
||||
if len(class_def.methods) > 0:
|
||||
f.write(make_heading('Method Descriptions', '-'))
|
||||
index = 0
|
||||
|
||||
for method_list in class_def.methods.values():
|
||||
for i, m in enumerate(method_list):
|
||||
if index != 0:
|
||||
f.write('----\n\n')
|
||||
|
||||
if i == 0:
|
||||
#f.write(".. _class_{}_{}:\n\n".format(class_name, m.name))
|
||||
f.write(".. _class_{}_method_{}:\n\n".format(class_name, m.name))
|
||||
|
||||
ret_type, signature = make_method_signature(class_def, m, False, state)
|
||||
f.write("- {} {}\n\n".format(ret_type, signature))
|
||||
|
||||
if m.description is None or m.description.strip() == '':
|
||||
continue
|
||||
f.write(rstize_text(m.description.strip(), state))
|
||||
f.write("\n\n")
|
||||
if m.description is not None and m.description.strip() != '':
|
||||
f.write(rstize_text(m.description.strip(), state) + '\n\n')
|
||||
|
||||
index += 1
|
||||
|
||||
|
||||
def make_class_list(class_list, columns): # type: (List[str], int) -> None
|
||||
|
|
|
@ -1571,6 +1571,7 @@ void RasterizerCanvasGLES2::canvas_render_items(Item *p_item_list, int p_z, cons
|
|||
|
||||
//always re-set uniforms, since light parameters changed
|
||||
_set_uniforms();
|
||||
state.canvas_shader.use_material((void *)material_ptr);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0 + storage->config.max_texture_image_units - 4);
|
||||
RasterizerStorageGLES2::Texture *t = storage->texture_owner.getornull(light->texture);
|
||||
|
|
|
@ -120,7 +120,7 @@ void RasterizerSceneGLES2::shadow_atlas_set_size(RID p_atlas, int p_size) {
|
|||
|
||||
//maximum compatibility, renderbuffer and RGBA shadow
|
||||
glGenRenderbuffers(1, &shadow_atlas->depth);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, directional_shadow.depth);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, shadow_atlas->depth);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, storage->config.depth_internalformat, shadow_atlas->size, shadow_atlas->size);
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, shadow_atlas->depth);
|
||||
|
||||
|
@ -1847,14 +1847,14 @@ void RasterizerSceneGLES2::_setup_light_type(LightInstance *p_light, ShadowAtlas
|
|||
}
|
||||
}
|
||||
|
||||
void RasterizerSceneGLES2::_setup_light(LightInstance *light, ShadowAtlas *shadow_atlas, const Transform &p_view_transform) {
|
||||
void RasterizerSceneGLES2::_setup_light(LightInstance *light, ShadowAtlas *shadow_atlas, const Transform &p_view_transform, bool accum_pass) {
|
||||
|
||||
RasterizerStorageGLES2::Light *light_ptr = light->light_ptr;
|
||||
|
||||
//common parameters
|
||||
float energy = light_ptr->param[VS::LIGHT_PARAM_ENERGY];
|
||||
float specular = light_ptr->param[VS::LIGHT_PARAM_SPECULAR];
|
||||
float sign = light_ptr->negative ? -1 : 1;
|
||||
float sign = (light_ptr->negative && !accum_pass) ? -1 : 1; //inverse color for base pass lights only
|
||||
|
||||
state.scene_shader.set_uniform(SceneShaderGLES2::LIGHT_SPECULAR, specular);
|
||||
Color color = light_ptr->color * sign * energy * Math_PI;
|
||||
|
@ -2258,6 +2258,11 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
|
|||
|
||||
if (accum_pass) { //accum pass force pass
|
||||
blend_mode = RasterizerStorageGLES2::Shader::Spatial::BLEND_MODE_ADD;
|
||||
if (rebind_light && light && light->light_ptr->negative) {
|
||||
glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||
blend_mode = RasterizerStorageGLES2::Shader::Spatial::BLEND_MODE_SUB;
|
||||
}
|
||||
}
|
||||
|
||||
if (prev_blend_mode != blend_mode) {
|
||||
|
@ -2484,7 +2489,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
|
|||
}
|
||||
|
||||
if (rebind_light && light) {
|
||||
_setup_light(light, shadow_atlas, p_view_transform);
|
||||
_setup_light(light, shadow_atlas, p_view_transform, accum_pass);
|
||||
}
|
||||
|
||||
if (rebind_reflection && (refprobe_1 || refprobe_2)) {
|
||||
|
@ -3093,6 +3098,10 @@ void RasterizerSceneGLES2::render_shadow(RID p_light, RID p_shadow_atlas, int p_
|
|||
glEnable(GL_SCISSOR_TEST);
|
||||
glClearDepth(1.0f);
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
if (storage->config.use_rgba_3d_shadows) {
|
||||
glClearColor(1.0, 1.0, 1.0, 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
|
||||
if (light->reverse_cull) {
|
||||
|
|
|
@ -686,7 +686,7 @@ public:
|
|||
_FORCE_INLINE_ bool _setup_material(RasterizerStorageGLES2::Material *p_material, bool p_reverse_cull, bool p_alpha_pass, Size2i p_skeleton_tex_size = Size2i(0, 0));
|
||||
_FORCE_INLINE_ void _setup_geometry(RenderList::Element *p_element, RasterizerStorageGLES2::Skeleton *p_skeleton);
|
||||
_FORCE_INLINE_ void _setup_light_type(LightInstance *p_light, ShadowAtlas *shadow_atlas);
|
||||
_FORCE_INLINE_ void _setup_light(LightInstance *p_light, ShadowAtlas *shadow_atlas, const Transform &p_view_transform);
|
||||
_FORCE_INLINE_ void _setup_light(LightInstance *p_light, ShadowAtlas *shadow_atlas, const Transform &p_view_transform, bool accum_pass);
|
||||
_FORCE_INLINE_ void _setup_refprobes(ReflectionProbeInstance *p_refprobe1, ReflectionProbeInstance *p_refprobe2, const Transform &p_view_transform, Environment *p_env);
|
||||
_FORCE_INLINE_ void _render_geometry(RenderList::Element *p_element);
|
||||
|
||||
|
|
|
@ -1539,7 +1539,7 @@ void RasterizerStorageGLES2::shader_get_param_list(RID p_shader, List<PropertyIn
|
|||
|
||||
if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_RANGE) {
|
||||
pi.hint = PROPERTY_HINT_RANGE;
|
||||
pi.hint_string = rtos(u.hint_range[0]) + "," + rtos(u.hint_range[1]);
|
||||
pi.hint_string = rtos(u.hint_range[0]) + "," + rtos(u.hint_range[1]) + "," + rtos(u.hint_range[2]);
|
||||
}
|
||||
} break;
|
||||
|
||||
|
@ -5333,7 +5333,7 @@ void RasterizerStorageGLES2::initialize() {
|
|||
config.support_depth_cubemaps = true;
|
||||
#else
|
||||
config.use_rgba_2d_shadows = !(config.float_texture_supported && config.extensions.has("GL_EXT_texture_rg"));
|
||||
config.support_depth_texture = config.extensions.has("GL_OES_depth_texture");
|
||||
config.support_depth_texture = config.extensions.has("GL_OES_depth_texture") || config.extensions.has("WEBGL_depth_texture");
|
||||
config.use_rgba_3d_shadows = !config.support_depth_texture;
|
||||
config.support_depth_cubemaps = config.extensions.has("GL_OES_depth_texture_cube_map");
|
||||
#endif
|
||||
|
|
|
@ -780,7 +780,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() {
|
|||
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["WORLD_MATRIX"] = "modelview_matrix";
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["PROJECTION_MATRIX"] = "projection_matrix";
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["EXTRA_MATRIX"] = "extra_matrix";
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["EXTRA_MATRIX"] = "extra_matrix_instance";
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["TIME"] = "time";
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["AT_LIGHT_PASS"] = "at_light_pass";
|
||||
actions[VS::SHADER_CANVAS_ITEM].renames["INSTANCE_CUSTOM"] = "instance_custom";
|
||||
|
|
|
@ -200,6 +200,8 @@ void RasterizerCanvasGLES3::canvas_end() {
|
|||
glBindBufferBase(GL_UNIFORM_BUFFER, 0, 0);
|
||||
glColorMask(1, 1, 1, 1);
|
||||
|
||||
glVertexAttrib4f(VS::ARRAY_COLOR, 1, 1, 1, 1);
|
||||
|
||||
state.using_texture_rect = false;
|
||||
state.using_ninepatch = false;
|
||||
}
|
||||
|
@ -1584,6 +1586,11 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons
|
|||
state.canvas_shader.set_uniform(CanvasShaderGLES3::FINAL_MODULATE, state.canvas_item_modulate);
|
||||
state.canvas_shader.set_uniform(CanvasShaderGLES3::MODELVIEW_MATRIX, state.final_transform);
|
||||
state.canvas_shader.set_uniform(CanvasShaderGLES3::EXTRA_MATRIX, Transform2D());
|
||||
if (storage->frame.current_rt) {
|
||||
state.canvas_shader.set_uniform(CanvasShaderGLES3::SCREEN_PIXEL_SIZE, Vector2(1.0 / storage->frame.current_rt->width, 1.0 / storage->frame.current_rt->height));
|
||||
} else {
|
||||
state.canvas_shader.set_uniform(CanvasShaderGLES3::SCREEN_PIXEL_SIZE, Vector2(1.0, 1.0));
|
||||
}
|
||||
}
|
||||
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 1, static_cast<LightInternal *>(light->light_internal.get_data())->ubo);
|
||||
|
|
|
@ -2817,7 +2817,7 @@ void RasterizerSceneGLES3::_setup_lights(RID *p_light_cull_result, int p_light_c
|
|||
|
||||
for (int i = 0; i < p_light_cull_count; i++) {
|
||||
|
||||
ERR_BREAK(i >= RenderList::MAX_LIGHTS);
|
||||
ERR_BREAK(i >= render_list.max_lights);
|
||||
|
||||
LightInstance *li = light_instance_owner.getptr(p_light_cull_result[i]);
|
||||
|
||||
|
@ -4173,7 +4173,7 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
|
|||
|
||||
for (int i = 0; i < p_light_cull_count; i++) {
|
||||
|
||||
ERR_BREAK(i >= RenderList::MAX_LIGHTS);
|
||||
ERR_BREAK(i >= render_list.max_lights);
|
||||
|
||||
LightInstance *li = light_instance_owner.getptr(p_light_cull_result[i]);
|
||||
if (li->light_ptr->param[VS::LIGHT_PARAM_CONTACT_SHADOW_SIZE] > CMP_EPSILON) {
|
||||
|
@ -4310,6 +4310,10 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
|
|||
if (storage->frame.current_rt->buffers.active) {
|
||||
current_fbo = storage->frame.current_rt->buffers.fbo;
|
||||
} else {
|
||||
if (storage->frame.current_rt->effects.mip_maps[0].sizes.size() == 0) {
|
||||
ERR_PRINT_ONCE("Can't use canvas background mode in a render target configured without sampling");
|
||||
return;
|
||||
}
|
||||
current_fbo = storage->frame.current_rt->effects.mip_maps[0].sizes[0].fbo;
|
||||
}
|
||||
|
||||
|
@ -4975,6 +4979,10 @@ void RasterizerSceneGLES3::initialize() {
|
|||
|
||||
render_list.max_elements = GLOBAL_DEF_RST("rendering/limits/rendering/max_renderable_elements", (int)RenderList::DEFAULT_MAX_ELEMENTS);
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/rendering/max_renderable_elements", PropertyInfo(Variant::INT, "rendering/limits/rendering/max_renderable_elements", PROPERTY_HINT_RANGE, "1024,1000000,1"));
|
||||
render_list.max_lights = GLOBAL_DEF("rendering/limits/rendering/max_renderable_lights", (int)RenderList::DEFAULT_MAX_LIGHTS);
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/rendering/max_renderable_lights", PropertyInfo(Variant::INT, "rendering/limits/rendering/max_renderable_lights", PROPERTY_HINT_RANGE, "16,4096,1"));
|
||||
render_list.max_reflections = GLOBAL_DEF("rendering/limits/rendering/max_renderable_reflections", (int)RenderList::DEFAULT_MAX_REFLECTIONS);
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/rendering/max_renderable_reflections", PropertyInfo(Variant::INT, "rendering/limits/rendering/max_renderable_reflections", PROPERTY_HINT_RANGE, "8,1024,1"));
|
||||
|
||||
{
|
||||
//quad buffers
|
||||
|
@ -5069,7 +5077,7 @@ void RasterizerSceneGLES3::initialize() {
|
|||
glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &max_ubo_size);
|
||||
const int ubo_light_size = 160;
|
||||
state.ubo_light_size = ubo_light_size;
|
||||
state.max_ubo_lights = MIN(RenderList::MAX_LIGHTS, max_ubo_size / ubo_light_size);
|
||||
state.max_ubo_lights = MIN(render_list.max_lights, max_ubo_size / ubo_light_size);
|
||||
|
||||
state.spot_array_tmp = (uint8_t *)memalloc(ubo_light_size * state.max_ubo_lights);
|
||||
state.omni_array_tmp = (uint8_t *)memalloc(ubo_light_size * state.max_ubo_lights);
|
||||
|
@ -5094,7 +5102,7 @@ void RasterizerSceneGLES3::initialize() {
|
|||
state.scene_shader.add_custom_define("#define MAX_LIGHT_DATA_STRUCTS " + itos(state.max_ubo_lights) + "\n");
|
||||
state.scene_shader.add_custom_define("#define MAX_FORWARD_LIGHTS " + itos(state.max_forward_lights_per_object) + "\n");
|
||||
|
||||
state.max_ubo_reflections = MIN((int)RenderList::MAX_REFLECTIONS, max_ubo_size / sizeof(ReflectionProbeDataUBO));
|
||||
state.max_ubo_reflections = MIN(render_list.max_reflections, max_ubo_size / (int)sizeof(ReflectionProbeDataUBO));
|
||||
|
||||
state.reflection_array_tmp = (uint8_t *)memalloc(sizeof(ReflectionProbeDataUBO) * state.max_ubo_reflections);
|
||||
|
||||
|
|
|
@ -665,8 +665,8 @@ public:
|
|||
SORT_FLAG_SKELETON = 1,
|
||||
SORT_FLAG_INSTANCING = 2,
|
||||
MAX_DIRECTIONAL_LIGHTS = 16,
|
||||
MAX_LIGHTS = 4096,
|
||||
MAX_REFLECTIONS = 1024,
|
||||
DEFAULT_MAX_LIGHTS = 4096,
|
||||
DEFAULT_MAX_REFLECTIONS = 1024,
|
||||
|
||||
SORT_KEY_PRIORITY_SHIFT = 56,
|
||||
SORT_KEY_PRIORITY_MASK = 0xFF,
|
||||
|
@ -697,6 +697,8 @@ public:
|
|||
};
|
||||
|
||||
int max_elements;
|
||||
int max_lights;
|
||||
int max_reflections;
|
||||
|
||||
struct Element {
|
||||
|
||||
|
@ -809,6 +811,8 @@ public:
|
|||
RenderList() {
|
||||
|
||||
max_elements = DEFAULT_MAX_ELEMENTS;
|
||||
max_lights = DEFAULT_MAX_LIGHTS;
|
||||
max_reflections = DEFAULT_MAX_REFLECTIONS;
|
||||
}
|
||||
|
||||
~RenderList() {
|
||||
|
|
|
@ -2233,7 +2233,7 @@ void RasterizerStorageGLES3::shader_get_param_list(RID p_shader, List<PropertyIn
|
|||
pi.type = Variant::INT;
|
||||
if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_RANGE) {
|
||||
pi.hint = PROPERTY_HINT_RANGE;
|
||||
pi.hint_string = rtos(u.hint_range[0]) + "," + rtos(u.hint_range[1]);
|
||||
pi.hint_string = rtos(u.hint_range[0]) + "," + rtos(u.hint_range[1]) + "," + rtos(u.hint_range[2]);
|
||||
}
|
||||
|
||||
} break;
|
||||
|
@ -2939,7 +2939,9 @@ _FORCE_INLINE_ static void _fill_std140_ubo_empty(ShaderLanguage::DataType type,
|
|||
case ShaderLanguage::TYPE_BVEC3:
|
||||
case ShaderLanguage::TYPE_IVEC3:
|
||||
case ShaderLanguage::TYPE_UVEC3:
|
||||
case ShaderLanguage::TYPE_VEC3:
|
||||
case ShaderLanguage::TYPE_VEC3: {
|
||||
zeromem(data, 12);
|
||||
} break;
|
||||
case ShaderLanguage::TYPE_BVEC4:
|
||||
case ShaderLanguage::TYPE_IVEC4:
|
||||
case ShaderLanguage::TYPE_UVEC4:
|
||||
|
|
|
@ -206,7 +206,7 @@ uint64_t OS_Unix::get_system_time_secs() const {
|
|||
uint64_t OS_Unix::get_system_time_msecs() const {
|
||||
struct timeval tv_now;
|
||||
gettimeofday(&tv_now, NULL);
|
||||
return uint64_t(tv_now.tv_sec * 1000 + tv_now.tv_usec / 1000);
|
||||
return uint64_t(tv_now.tv_sec) * 1000 + uint64_t(tv_now.tv_usec) / 1000;
|
||||
}
|
||||
|
||||
OS::Date OS_Unix::get_date(bool utc) const {
|
||||
|
|
|
@ -322,13 +322,14 @@ void EditorFileSystem::_save_filesystem_cache() {
|
|||
|
||||
FileAccess *f = FileAccess::open(fscache, FileAccess::WRITE);
|
||||
if (f == NULL) {
|
||||
ERR_PRINTS("Error writing fscache: " + fscache);
|
||||
} else {
|
||||
f->store_line(filesystem_settings_version_for_import);
|
||||
_save_filesystem_cache(filesystem, f);
|
||||
f->close();
|
||||
memdelete(f);
|
||||
ERR_EXPLAIN("Cannot create file '" + fscache + "'. Check user write permissions.");
|
||||
ERR_FAIL();
|
||||
}
|
||||
|
||||
f->store_line(filesystem_settings_version_for_import);
|
||||
_save_filesystem_cache(filesystem, f);
|
||||
f->close();
|
||||
memdelete(f);
|
||||
}
|
||||
|
||||
void EditorFileSystem::_thread_func(void *_userdata) {
|
||||
|
@ -1370,6 +1371,10 @@ void EditorFileSystem::_save_late_updated_files() {
|
|||
//files that already existed, and were modified, need re-scanning for dependencies upon project restart. This is done via saving this special file
|
||||
String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file("filesystem_update4");
|
||||
FileAccessRef f = FileAccess::open(fscache, FileAccess::WRITE);
|
||||
if (!f) {
|
||||
ERR_EXPLAIN("Cannot create file '" + fscache + "'. Check user write permissions.");
|
||||
ERR_FAIL();
|
||||
}
|
||||
for (Set<String>::Element *E = late_update_files.front(); E; E = E->next()) {
|
||||
f->store_line(E->get());
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
Ref<DynamicFont> m_name; \
|
||||
m_name.instance(); \
|
||||
m_name->set_size(m_size); \
|
||||
if (CustomFont.is_valid()) { \
|
||||
if (CustomFontBold.is_valid()) { \
|
||||
m_name->set_font_data(CustomFontBold); \
|
||||
m_name->add_fallback(DefaultFontBold); \
|
||||
} else { \
|
||||
|
|
|
@ -5789,6 +5789,13 @@ EditorNode::EditorNode() {
|
|||
bottom_panel_hb_editors = memnew(HBoxContainer);
|
||||
bottom_panel_hb_editors->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
bottom_panel_hb->add_child(bottom_panel_hb_editors);
|
||||
|
||||
version_label = memnew(Label);
|
||||
version_label->set_text(VERSION_FULL_CONFIG);
|
||||
// Fade out the version label to be less prominent, but still readable
|
||||
version_label->set_self_modulate(Color(1, 1, 1, 0.6));
|
||||
bottom_panel_hb->add_child(version_label);
|
||||
|
||||
bottom_panel_raise = memnew(ToolButton);
|
||||
bottom_panel_raise->set_icon(gui_base->get_icon("ExpandBottomDock", "EditorIcons"));
|
||||
|
||||
|
|
|
@ -399,6 +399,7 @@ private:
|
|||
HBoxContainer *bottom_panel_hb;
|
||||
HBoxContainer *bottom_panel_hb_editors;
|
||||
VBoxContainer *bottom_panel_vb;
|
||||
Label *version_label;
|
||||
ToolButton *bottom_panel_raise;
|
||||
|
||||
void _bottom_panel_raise_toggled(bool);
|
||||
|
|
|
@ -306,7 +306,8 @@ void EditorPropertyArray::update_property() {
|
|||
} else {
|
||||
//bye bye children of the box
|
||||
while (vbox->get_child_count() > 2) {
|
||||
memdelete(vbox->get_child(2));
|
||||
vbox->get_child(2)->queue_delete(); // button still needed after pressed is called
|
||||
vbox->remove_child(vbox->get_child(2));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -177,6 +177,10 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref<
|
|||
ResourceSaver::save(cache_base + "_small.png", r_small_texture);
|
||||
}
|
||||
FileAccess *f = FileAccess::open(cache_base + ".txt", FileAccess::WRITE);
|
||||
if (!f) {
|
||||
ERR_EXPLAIN("Cannot create file '" + cache_base + ".txt'. Check user write permissions.");
|
||||
ERR_FAIL();
|
||||
}
|
||||
f->store_line(itos(thumbnail_size));
|
||||
f->store_line(itos(has_small_texture));
|
||||
f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
|
||||
|
@ -267,10 +271,16 @@ void EditorResourcePreview::_thread() {
|
|||
//update modified time
|
||||
|
||||
f = FileAccess::open(file, FileAccess::WRITE);
|
||||
f->store_line(itos(modtime));
|
||||
f->store_line(itos(has_small_texture));
|
||||
f->store_line(md5);
|
||||
memdelete(f);
|
||||
if (!f) {
|
||||
// Not returning as this would leave the thread hanging and would require
|
||||
// some proper cleanup/disabling of resource preview generation.
|
||||
ERR_PRINTS("Cannot create file '" + file + "'. Check user write permissions.");
|
||||
} else {
|
||||
f->store_line(itos(modtime));
|
||||
f->store_line(itos(has_small_texture));
|
||||
f->store_line(md5);
|
||||
memdelete(f);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
memdelete(f);
|
||||
|
|
|
@ -3705,7 +3705,7 @@ void CanvasItemEditor::_zoom_on_position(float p_zoom, Point2 p_position) {
|
|||
}
|
||||
|
||||
void CanvasItemEditor::_button_zoom_minus() {
|
||||
_zoom_on_position(zoom / 1.5, viewport_scrollable->get_size() / 2.0);
|
||||
_zoom_on_position(zoom / Math_SQRT2, viewport_scrollable->get_size() / 2.0);
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_button_zoom_reset() {
|
||||
|
@ -3713,7 +3713,7 @@ void CanvasItemEditor::_button_zoom_reset() {
|
|||
}
|
||||
|
||||
void CanvasItemEditor::_button_zoom_plus() {
|
||||
_zoom_on_position(zoom * 1.5, viewport_scrollable->get_size() / 2.0);
|
||||
_zoom_on_position(zoom * Math_SQRT2, viewport_scrollable->get_size() / 2.0);
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_button_toggle_snap(bool p_status) {
|
||||
|
|
|
@ -1450,6 +1450,8 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) {
|
|||
undo_redo->create_action(TTR("Edit Navigation Polygon"));
|
||||
undo_redo->add_do_method(edited_navigation_shape.ptr(), "set_vertices", polygon);
|
||||
undo_redo->add_undo_method(edited_navigation_shape.ptr(), "set_vertices", edited_navigation_shape->get_vertices());
|
||||
undo_redo->add_do_method(edited_navigation_shape.ptr(), "clear_polygons");
|
||||
undo_redo->add_undo_method(edited_navigation_shape.ptr(), "clear_polygons");
|
||||
undo_redo->add_do_method(edited_navigation_shape.ptr(), "add_polygon", indices);
|
||||
undo_redo->add_undo_method(edited_navigation_shape.ptr(), "add_polygon", edited_navigation_shape->get_polygon(0));
|
||||
undo_redo->add_do_method(this, "_select_edited_shape_coord");
|
||||
|
|
|
@ -590,9 +590,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
|
|||
|
||||
editor_data->get_undo_redo().create_action(TTR("Make node as Root"));
|
||||
editor_data->get_undo_redo().add_do_method(node->get_parent(), "remove_child", node);
|
||||
editor_data->get_undo_redo().add_do_method(root->get_parent(), "remove_child", root);
|
||||
editor_data->get_undo_redo().add_do_method(node, "add_child", root);
|
||||
editor_data->get_undo_redo().add_do_method(editor, "set_edited_scene", node);
|
||||
editor_data->get_undo_redo().add_do_method(node, "add_child", root);
|
||||
editor_data->get_undo_redo().add_do_method(node, "set_filename", root->get_filename());
|
||||
editor_data->get_undo_redo().add_do_method(root, "set_filename", String());
|
||||
editor_data->get_undo_redo().add_do_method(node, "set_owner", (Object *)NULL);
|
||||
|
@ -604,14 +603,13 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
|
|||
editor_data->get_undo_redo().add_undo_method(node, "remove_child", root);
|
||||
editor_data->get_undo_redo().add_undo_method(editor, "set_edited_scene", root);
|
||||
editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node);
|
||||
editor_data->get_undo_redo().add_undo_method(node->get_parent(), "move_child", node, node->get_index());
|
||||
editor_data->get_undo_redo().add_undo_method(root, "set_owner", (Object *)NULL);
|
||||
editor_data->get_undo_redo().add_undo_method(node, "set_owner", root);
|
||||
|
||||
_node_replace_owner(root, root, root, MODE_UNDO);
|
||||
|
||||
editor_data->get_undo_redo().add_do_method(scene_tree, "update_tree");
|
||||
editor_data->get_undo_redo().add_undo_method(scene_tree, "update_tree");
|
||||
editor_data->get_undo_redo().add_undo_reference(root);
|
||||
editor_data->get_undo_redo().commit_action();
|
||||
} break;
|
||||
case TOOL_MULTI_EDIT: {
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
03000000c82d00000060000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000c82d00000061000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000c82d00003028000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
|
||||
03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
|
||||
030000008f0e00001200000000000000,Acme GA-02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000fa190000f0ff000000000000,Acteck AGJ-3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
|
@ -26,6 +27,7 @@
|
|||
03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000bc2000000055000000000000,Betop BFM Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000bc2000006321000000000000,BETOP CONTROLLER,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
|
@ -38,6 +40,8 @@
|
|||
03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000005e040000a102000000000000,Controller (Xbox 360 Wireless Receiver for Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000005e040000ff02000000000000,Controller (Xbox One For Windows) - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000005e040000ea02000000000000,Controller (Xbox One For Windows) - Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
|
@ -64,6 +68,7 @@
|
|||
03000000ac0500003d03000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000ac0500004d04000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000006f0e00000102000000007801,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
|
@ -73,6 +78,7 @@
|
|||
03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f0250000c383000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
030000007d0400000540000000000000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000d81400000862000000000000,HitBox Edition Cthulhu+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
|
||||
|
@ -83,6 +89,7 @@
|
|||
030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
|
@ -96,11 +103,14 @@
|
|||
030000006f0e00002401000000000000,INJUSTICE FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000ac0500002c02000000000000,IPEGA,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000491900000204000000000000,Ipega PG-9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000491900000304000000000000,Ipega PG-9087 - Bluetooth Gamepad,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
|
||||
030000006e0500000a20000000000000,JC-DUX60 ELECOM MMO Gamepad,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
|
||||
030000006e0500000520000000000000,JC-P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
|
||||
030000006e0500000320000000000000,JC-U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
|
||||
030000006e0500000720000000000000,JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
|
||||
030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
|
||||
030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
|
||||
030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000bd12000003c0000000000000,JY-P70UR,a:b1,b:b0,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b4,x:b3,y:b2,platform:Windows,
|
||||
03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
|
||||
|
@ -139,7 +149,7 @@
|
|||
03000000bd12000015d0000000000000,Nintendo Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
|
||||
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows,
|
||||
03000000550900001472000000000000,NVIDIA Controller v01.04,a:b11,b:b10,x:b9,y:b8,back:b13,guide:b12,start:b3,leftstick:b5,rightstick:b4,leftshoulder:b7,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a6,lefttrigger:a4,righttrigger:a5,platform:Windows,
|
||||
03000000550900001472000000000000,NVIDIA Controller v01.04,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,
|
||||
030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows,
|
||||
03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
|
@ -147,6 +157,7 @@
|
|||
03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,
|
||||
03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
|
||||
030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
|
||||
|
@ -201,6 +212,7 @@
|
|||
03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
|
||||
03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b5,x:b0,y:b1,platform:Windows,
|
||||
03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,x:b0,y:b1,platform:Windows,
|
||||
03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
|
||||
|
@ -211,6 +223,7 @@
|
|||
03000000300f00001101000000000000,Saitek Rumble Pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
|
||||
0300000000050000289b000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000005e0400008e02000000007801,ShanWan PS3/PC Wired GamePad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
|
@ -244,6 +257,7 @@
|
|||
03000000ff1100004133000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000632500002305000000000000,USB Vibration Joystick (BM),a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
|
||||
03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
|
||||
|
@ -259,18 +273,21 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,x:b2,y:b3,back:b10,start:b9,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Mac OS X,
|
||||
03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000790000000600000000000000,G-Shark GP-702,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
030000006f0e00000102000000000000,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
030000007d0400000540000001010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00005f00000000010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00005e00000000010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00005f00000000000000,HORI Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00005e00000000000000,HORI Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00006e00000000010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00006600000000010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000000d0f00006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
|
@ -296,9 +313,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X,
|
||||
03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
|
||||
03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,x:b2,y:b3,back:b9,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Mac OS X,
|
||||
03000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
|
||||
030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
|
||||
030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
|
||||
|
@ -311,8 +329,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
03000000321500000204000000010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000321500000104000000010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000321500000009000000020000,Razer Serval,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Mac OS X,
|
||||
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Mac OS X,
|
||||
03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
|
||||
0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
|
||||
|
@ -321,6 +339,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X,
|
||||
03000000b40400000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X,
|
||||
030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
|
||||
0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X,
|
||||
030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
|
@ -338,6 +357,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,
|
||||
030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
|
||||
|
@ -349,6 +369,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
|
||||
# Linux
|
||||
05000000c82d00001038000000010000,8Bitdo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
|
||||
|
@ -360,9 +381,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006f0e00003901000013020000,Afterglow Prismatic Wired Controller 048-007-NA,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
|
||||
030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
05000000491900000204000021000000,Amazon Fire Game Controller,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Linux,
|
||||
05000000491900000204000021000000,Amazon Fire Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
|
||||
05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
|
||||
03000000120c00000500000010010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,
|
||||
|
@ -381,6 +403,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:a0,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:a3,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000007d0400000540000000010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000008f0e00000610000000010000,GreenAsia Electronics 4Axes 12Keys GamePad ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,
|
||||
030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
|
||||
|
@ -396,6 +419,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f0000ee00000011010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
|
@ -408,9 +432,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
0500000049190000020400001b010000,Ipega PG-9069 - Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
|
||||
03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
|
||||
03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,
|
||||
050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,
|
||||
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
|
||||
050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
|
||||
030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
|
@ -439,6 +466,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
0300000079000000d218000011010000,MAGIC-NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000790000004318000010010000,Mayflash GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
|
||||
0300000025090000e803000001010000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
|
||||
03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,
|
||||
|
@ -450,9 +478,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
030000005e040000d102000003020000,Microsoft X-Box One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
|
||||
030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
|
||||
05000000d6200000e589000001000000,Moga 2 HID,a:b0,b:b1,x:b2,y:b3,back:b9,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Linux,
|
||||
05000000d6200000e589000001000000,Moga 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,x:b2,y:b3,back:b9,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Linux,
|
||||
05000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
|
||||
03000000250900006688000000010000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
|
||||
030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Linux,
|
||||
|
@ -461,15 +489,17 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
030000000d0500000308000010010000,Nostromo n45 Dual Analog Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
|
||||
03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
|
||||
05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,x:b2,y:b3,back:b14,guide:b16,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,x:b2,y:b3,back:b14,guide:b16,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
|
||||
05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
|
||||
03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
|
||||
05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
|
||||
05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
|
||||
03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006f0e0000a802000023020000,PDP Wired Controller for Xbox One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
|
@ -524,6 +554,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
|||
03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,a:b12,b:b10,back:b4,dpdown:b2,dpleft:b3,dpright:b1,dpup:b0,leftshoulder:b9,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b8,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b5,x:b13,y:b11,platform:Linux,
|
||||
03000000f025000021c1000010010000,ShanWan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000632500007505000010010000,SHANWAN PS3/PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000bc2000000055000010010000,ShanWan PS3/PC Wired GamePad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
03000000632500002305000010010000,ShanWan USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
|
||||
03000000341a00000908000010010000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
|
||||
|
|
|
@ -632,6 +632,10 @@ Input::CursorShape InputDefault::get_default_cursor_shape() {
|
|||
}
|
||||
|
||||
void InputDefault::set_default_cursor_shape(CursorShape p_shape) {
|
||||
|
||||
if (default_shape == p_shape)
|
||||
return;
|
||||
|
||||
default_shape = p_shape;
|
||||
// The default shape is set in Viewport::_gui_input_event. To instantly
|
||||
// see the shape in the viewport we need to trigger a mouse motion event.
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 50 KiB |
|
@ -471,7 +471,7 @@ void RigidBodyBullet::assert_no_constraints() {
|
|||
|
||||
void RigidBodyBullet::set_activation_state(bool p_active) {
|
||||
if (p_active) {
|
||||
btBody->setActivationState(ACTIVE_TAG);
|
||||
btBody->activate();
|
||||
} else {
|
||||
btBody->setActivationState(WANTS_DEACTIVATION);
|
||||
}
|
||||
|
|
|
@ -6,19 +6,18 @@ Import('env_modules')
|
|||
env_cvtt = env_modules.Clone()
|
||||
|
||||
# Thirdparty source files
|
||||
if env['builtin_squish']:
|
||||
thirdparty_dir = "#thirdparty/cvtt/"
|
||||
thirdparty_sources = [
|
||||
"ConvectionKernels.cpp"
|
||||
]
|
||||
thirdparty_dir = "#thirdparty/cvtt/"
|
||||
thirdparty_sources = [
|
||||
"ConvectionKernels.cpp"
|
||||
]
|
||||
|
||||
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
|
||||
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
|
||||
|
||||
env_cvtt.Append(CPPPATH=[thirdparty_dir])
|
||||
env_cvtt.Append(CPPPATH=[thirdparty_dir])
|
||||
|
||||
env_thirdparty = env_cvtt.Clone()
|
||||
env_thirdparty.disable_warnings()
|
||||
env_thirdparty.add_source_files(env.modules_sources, thirdparty_sources)
|
||||
env_thirdparty = env_cvtt.Clone()
|
||||
env_thirdparty.disable_warnings()
|
||||
env_thirdparty.add_source_files(env.modules_sources, thirdparty_sources)
|
||||
|
||||
# Godot source files
|
||||
env_cvtt.add_source_files(env.modules_sources, "*.cpp")
|
||||
|
|
|
@ -1,35 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="GDNativeLibrary" inherits="Resource" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
An external library containing functions or script classes to use in Godot.
|
||||
</brief_description>
|
||||
<description>
|
||||
A GDNative library can implement [NativeScript]s, global functions to call with the [GDNative] class, or low-level engine extensions through interfaces such as [ARVRInterfaceGDNative]. The library must be compiled for each platform and architecture that the project will run on.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-example.html</link>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-cpp-example.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="get_current_dependencies" qualifiers="const">
|
||||
<return type="PoolStringArray">
|
||||
</return>
|
||||
<description>
|
||||
Returns paths to all dependency libraries for the current platform and architecture.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_current_library_path" qualifiers="const">
|
||||
<return type="String">
|
||||
</return>
|
||||
<description>
|
||||
Returns the path to the dynamic library file for the current platform and architecture.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="config_file" type="ConfigFile" setter="set_config_file" getter="get_config_file">
|
||||
This resource in INI-style [ConfigFile] format, as in [code].gdnlib[/code] files.
|
||||
</member>
|
||||
<member name="load_once" type="bool" setter="set_load_once" getter="should_load_once">
|
||||
If [code]true[/code], Godot loads only one copy of the library and each script that references the library will share static data like static or global variables.
|
||||
If [code]false[/code], Godot loads a separate copy of the library into memory for each script that references it.
|
||||
</member>
|
||||
<member name="reloadable" type="bool" setter="set_reloadable" getter="is_reloadable">
|
||||
If [code]true[/code], the editor will temporarily unload the library whenever the user switches away from the editor window, allowing the user to recompile the library without restarting Godot.
|
||||
[b]Note:[/b] If the library defines tool scripts that run inside the editor, [code]reloadable[/code] must be [code]false[/code]. Otherwise, the editor will attempt to unload the tool scripts while they're in use and crash.
|
||||
</member>
|
||||
<member name="singleton" type="bool" setter="set_singleton" getter="is_singleton">
|
||||
If [code]true[/code], Godot loads the library at startup rather than the first time a script uses the library, calling [code]gdnative_singleton[/code] after initializing the library. The library remains loaded as long as Godot is running.
|
||||
[b]Note:[/b] A singleton library cannot be [member reloadable].
|
||||
</member>
|
||||
<member name="symbol_prefix" type="String" setter="set_symbol_prefix" getter="get_symbol_prefix">
|
||||
The prefix this library's entry point functions begin with. For example, a GDNativeLibrary would declare its [code]gdnative_init[/code] function as [code]godot_gdnative_init[/code] by default.
|
||||
On platforms that require statically linking libraries (currently only iOS), each library must have a different [code]symbol_prefix[/code].
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -185,7 +185,7 @@ def _build_gdnative_api_struct_source(api):
|
|||
'extern const godot_gdnative_core_' + ('{0}_{1}_api_struct api_{0}_{1}'.format(core['version']['major'], core['version']['minor'])) + ' = {',
|
||||
'\tGDNATIVE_' + core['type'] + ',',
|
||||
'\t{' + str(core['version']['major']) + ', ' + str(core['version']['minor']) + '},',
|
||||
'\t' + ('NULL' if not core['next'] else ('(const godot_gdnative_api_struct *)& api_{0}_{1}'.format(core['version']['major'], core['version']['minor']))) + ','
|
||||
'\t' + ('NULL' if not core['next'] else ('(const godot_gdnative_api_struct *)& api_{0}_{1}'.format(core['next']['version']['major'], core['next']['version']['minor']))) + ','
|
||||
]
|
||||
|
||||
for funcdef in core['api']:
|
||||
|
|
|
@ -387,11 +387,9 @@ GDNativeLibraryEditor::GDNativeLibraryEditor() {
|
|||
|
||||
void GDNativeLibraryEditorPlugin::edit(Object *p_node) {
|
||||
|
||||
if (Object::cast_to<GDNativeLibrary>(p_node)) {
|
||||
library_editor->edit(Object::cast_to<GDNativeLibrary>(p_node));
|
||||
library_editor->show();
|
||||
} else
|
||||
library_editor->hide();
|
||||
Ref<GDNativeLibrary> new_library = Object::cast_to<GDNativeLibrary>(p_node);
|
||||
if (new_library.is_valid())
|
||||
library_editor->edit(new_library);
|
||||
}
|
||||
|
||||
bool GDNativeLibraryEditorPlugin::handles(Object *p_node) const {
|
||||
|
|
|
@ -329,6 +329,7 @@
|
|||
<description>
|
||||
The natural exponential function. It raises the mathematical constant [b]e[/b] to the power of [code]s[/code] and returns it.
|
||||
[b]e[/b] has an approximate value of 2.71828.
|
||||
For exponents to other bases use the method [method pow].
|
||||
[codeblock]
|
||||
a = exp(2) # approximately 7.39
|
||||
[/codeblock]
|
||||
|
|
|
@ -910,6 +910,10 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s
|
|||
|
||||
} else if (tokenizer->get_token() == GDScriptTokenizer::TK_PR_IS && tokenizer->get_token(1) == GDScriptTokenizer::TK_BUILT_IN_TYPE) {
|
||||
// 'is' operator with built-in type
|
||||
if (!expr) {
|
||||
_set_error("Expected identifier before 'is' operator");
|
||||
return NULL;
|
||||
}
|
||||
OperatorNode *op = alloc_node<OperatorNode>();
|
||||
op->op = OperatorNode::OP_IS_BUILTIN;
|
||||
op->arguments.push_back(expr);
|
||||
|
@ -2768,12 +2772,12 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
_mark_line_as_safe(tokenizer->get_token_line());
|
||||
tokenizer->advance();
|
||||
if (tokenizer->get_token() == GDScriptTokenizer::TK_SEMICOLON) {
|
||||
// Ignore semicolon after 'pass'
|
||||
// Ignore semicolon after 'pass'.
|
||||
tokenizer->advance();
|
||||
}
|
||||
} break;
|
||||
case GDScriptTokenizer::TK_PR_VAR: {
|
||||
//variale declaration and (eventual) initialization
|
||||
// Variable declaration and (eventual) initialization.
|
||||
|
||||
tokenizer->advance();
|
||||
int var_line = tokenizer->get_token_line();
|
||||
|
@ -3174,6 +3178,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
} break;
|
||||
case GDScriptTokenizer::TK_CF_CONTINUE: {
|
||||
|
||||
_mark_line_as_safe(tokenizer->get_token_line());
|
||||
tokenizer->advance();
|
||||
ControlFlowNode *cf_continue = alloc_node<ControlFlowNode>();
|
||||
cf_continue->cf_type = ControlFlowNode::CF_CONTINUE;
|
||||
|
@ -3185,6 +3190,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
} break;
|
||||
case GDScriptTokenizer::TK_CF_BREAK: {
|
||||
|
||||
_mark_line_as_safe(tokenizer->get_token_line());
|
||||
tokenizer->advance();
|
||||
ControlFlowNode *cf_break = alloc_node<ControlFlowNode>();
|
||||
cf_break->cf_type = ControlFlowNode::CF_BREAK;
|
||||
|
@ -3491,6 +3497,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
} break;
|
||||
case GDScriptTokenizer::TK_PR_CLASS_NAME: {
|
||||
|
||||
_mark_line_as_safe(tokenizer->get_token_line());
|
||||
if (p_class->owner) {
|
||||
_set_error("'class_name' is only valid for the main class namespace.");
|
||||
return;
|
||||
|
@ -5947,12 +5954,18 @@ bool GDScriptParser::_is_type_compatible(const DataType &p_container, const Data
|
|||
break;
|
||||
}
|
||||
|
||||
// Some classes are prefixed with `_` internally
|
||||
if (!ClassDB::class_exists(expr_native)) {
|
||||
expr_native = "_" + expr_native;
|
||||
}
|
||||
|
||||
switch (p_container.kind) {
|
||||
case DataType::NATIVE: {
|
||||
if (p_container.is_meta_type) {
|
||||
return ClassDB::is_parent_class(expr_native, GDScriptNativeClass::get_class_static());
|
||||
} else {
|
||||
return ClassDB::is_parent_class(expr_native, p_container.native_type);
|
||||
StringName container_native = ClassDB::class_exists(p_container.native_type) ? p_container.native_type : StringName("_" + p_container.native_type);
|
||||
return ClassDB::is_parent_class(expr_native, container_native);
|
||||
}
|
||||
} break;
|
||||
case DataType::SCRIPT:
|
||||
|
@ -6436,7 +6449,7 @@ GDScriptParser::DataType GDScriptParser::_reduce_node_type(Node *p_node) {
|
|||
return DataType();
|
||||
}
|
||||
}
|
||||
if (check_types && !node_type.has_type) {
|
||||
if (check_types && !node_type.has_type && base_type.kind == DataType::BUILTIN) {
|
||||
// Can infer indexing type for some variant types
|
||||
DataType result;
|
||||
result.has_type = true;
|
||||
|
@ -6505,7 +6518,8 @@ GDScriptParser::DataType GDScriptParser::_reduce_node_type(Node *p_node) {
|
|||
default: {}
|
||||
}
|
||||
|
||||
p_node->set_datatype(_resolve_type(node_type, p_node->line));
|
||||
node_type = _resolve_type(node_type, p_node->line);
|
||||
p_node->set_datatype(node_type);
|
||||
return node_type;
|
||||
}
|
||||
|
||||
|
|
|
@ -740,19 +740,21 @@ void GridMapEditor::_icon_size_changed(float p_value) {
|
|||
void GridMapEditor::update_palette() {
|
||||
int selected = mesh_library_palette->get_current();
|
||||
|
||||
float min_size = EDITOR_DEF("editors/grid_map/preview_size", 64);
|
||||
min_size *= EDSCALE;
|
||||
|
||||
mesh_library_palette->clear();
|
||||
if (display_mode == DISPLAY_THUMBNAIL) {
|
||||
mesh_library_palette->set_max_columns(0);
|
||||
mesh_library_palette->set_icon_mode(ItemList::ICON_MODE_TOP);
|
||||
mesh_library_palette->set_fixed_column_width(min_size * MAX(size_slider->get_value(), 1.5));
|
||||
} else if (display_mode == DISPLAY_LIST) {
|
||||
mesh_library_palette->set_max_columns(1);
|
||||
mesh_library_palette->set_icon_mode(ItemList::ICON_MODE_LEFT);
|
||||
mesh_library_palette->set_fixed_column_width(0);
|
||||
}
|
||||
|
||||
float min_size = EDITOR_DEF("editors/grid_map/preview_size", 64);
|
||||
min_size *= EDSCALE;
|
||||
mesh_library_palette->set_fixed_icon_size(Size2(min_size, min_size));
|
||||
mesh_library_palette->set_fixed_column_width(min_size * MAX(size_slider->get_value(), 1.5));
|
||||
mesh_library_palette->set_max_text_lines(2);
|
||||
|
||||
Ref<MeshLibrary> mesh_library = node->get_mesh_library();
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
# Do not ignore solution files inside the mono module. Overrides Godot's global gitignore.
|
||||
!*.sln
|
|
@ -378,7 +378,7 @@ namespace Godot
|
|||
return c;
|
||||
}
|
||||
|
||||
public string ToHtml(bool include_alpha = true)
|
||||
public string ToHtml(bool includeAlpha = true)
|
||||
{
|
||||
var txt = string.Empty;
|
||||
|
||||
|
@ -386,7 +386,7 @@ namespace Godot
|
|||
txt += ToHex32(g);
|
||||
txt += ToHex32(b);
|
||||
|
||||
if (include_alpha)
|
||||
if (includeAlpha)
|
||||
txt = ToHex32(a) + txt;
|
||||
|
||||
return txt;
|
||||
|
@ -468,13 +468,13 @@ namespace Godot
|
|||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
char[] c = { (char)0, (char)0 };
|
||||
char c;
|
||||
int lv = v & 0xF;
|
||||
|
||||
if (lv < 10)
|
||||
c[0] = (char)('0' + lv);
|
||||
c = (char)('0' + lv);
|
||||
else
|
||||
c[0] = (char)('a' + lv - 10);
|
||||
c = (char)('a' + lv - 10);
|
||||
|
||||
v >>= 4;
|
||||
ret = c + ret;
|
||||
|
@ -493,12 +493,17 @@ namespace Godot
|
|||
|
||||
bool alpha;
|
||||
|
||||
if (color.Length == 8)
|
||||
alpha = true;
|
||||
else if (color.Length == 6)
|
||||
alpha = false;
|
||||
else
|
||||
return false;
|
||||
switch (color.Length)
|
||||
{
|
||||
case 8:
|
||||
alpha = true;
|
||||
break;
|
||||
case 6:
|
||||
alpha = false;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
if (alpha)
|
||||
{
|
||||
|
|
|
@ -312,6 +312,13 @@ void GDMono::initialize() {
|
|||
}
|
||||
#endif
|
||||
|
||||
#if !defined(WINDOWS_ENABLED) && !defined(NO_MONO_THREADS_SUSPEND_WORKAROUND)
|
||||
// FIXME: Temporary workaround. See: https://github.com/godotengine/godot/issues/29812
|
||||
if (!OS::get_singleton()->has_environment("MONO_THREADS_SUSPEND")) {
|
||||
OS::get_singleton()->set_environment("MONO_THREADS_SUSPEND", "preemptive");
|
||||
}
|
||||
#endif
|
||||
|
||||
root_domain = mono_jit_init_version("GodotEngine.RootDomain", "v4.0.30319");
|
||||
|
||||
ERR_EXPLAIN("Mono: Failed to initialize runtime");
|
||||
|
|
|
@ -268,7 +268,10 @@ Error WebSocketMultiplayerPeer::_server_relay(int32_t p_from, int32_t p_to, cons
|
|||
|
||||
ERR_FAIL_COND_V(p_to == p_from, FAILED);
|
||||
|
||||
return get_peer(p_to)->put_packet(p_buffer, p_buffer_size); // Sending to specific peer
|
||||
Ref<WebSocketPeer> peer_to = get_peer(p_to);
|
||||
ERR_FAIL_COND_V(peer_to.is_null(), FAILED);
|
||||
|
||||
return peer_to->put_packet(p_buffer, p_buffer_size); // Sending to specific peer
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -299,8 +302,6 @@ void WebSocketMultiplayerPeer::_process_multiplayer(Ref<WebSocketPeer> p_peer, u
|
|||
ERR_FAIL_COND(type != SYS_NONE); // Only server sends sys messages
|
||||
ERR_FAIL_COND(from != p_peer_id); // Someone is cheating
|
||||
|
||||
_server_relay(from, to, in_buffer, size); // Relay if needed
|
||||
|
||||
if (to == 1) { // This is for the server
|
||||
|
||||
_store_pkt(from, to, in_buffer, data_size);
|
||||
|
@ -315,13 +316,9 @@ void WebSocketMultiplayerPeer::_process_multiplayer(Ref<WebSocketPeer> p_peer, u
|
|||
// All but one, for us if not excluded
|
||||
if (_peer_id != -(int32_t)p_peer_id)
|
||||
_store_pkt(from, to, in_buffer, data_size);
|
||||
|
||||
} else {
|
||||
|
||||
// Send to specific peer
|
||||
ERR_FAIL_COND(!_peer_map.has(to));
|
||||
get_peer(to)->put_packet(in_buffer, size);
|
||||
}
|
||||
// Relay if needed (i.e. "to" includes a peer that is not the server)
|
||||
_server_relay(from, to, in_buffer, size);
|
||||
|
||||
} else {
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@ def get_opts():
|
|||
('ndk_platform', 'Target platform (android-<api>, e.g. "android-18")', "android-18"),
|
||||
EnumVariable('android_arch', 'Target architecture', "armv7", ('armv7', 'armv6', 'arm64v8', 'x86', 'x86_64')),
|
||||
BoolVariable('android_neon', 'Enable NEON support (armv7 only)', True),
|
||||
BoolVariable('android_stl', 'Enable Android STL support (for modules)', True)
|
||||
]
|
||||
|
||||
|
||||
|
@ -213,12 +212,17 @@ def configure(env):
|
|||
|
||||
## Compile flags
|
||||
|
||||
if env['android_stl']:
|
||||
env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++/include"])
|
||||
env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++abi/include"])
|
||||
env.Append(CXXFLAGS=['-frtti',"-std=gnu++14"])
|
||||
env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++/include"])
|
||||
env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++abi/include"])
|
||||
env.Append(CXXFLAGS=["-std=gnu++14"])
|
||||
|
||||
# Disable exceptions and rtti on non-tools (template) builds
|
||||
if env['tools']:
|
||||
env.Append(CXXFLAGS=['-frtti'])
|
||||
else:
|
||||
env.Append(CXXFLAGS=['-fno-rtti', '-fno-exceptions', '-DNO_SAFE_CAST'])
|
||||
env.Append(CXXFLAGS=['-fno-rtti', '-fno-exceptions'])
|
||||
# Don't use dynamic_cast, necessary with no-rtti.
|
||||
env.Append(CPPFLAGS=['-DNO_SAFE_CAST'])
|
||||
|
||||
ndk_version = get_ndk_version(env["ANDROID_NDK_ROOT"])
|
||||
if ndk_version != None and LooseVersion(ndk_version) >= LooseVersion("15.0.4075724"):
|
||||
|
|
|
@ -1140,7 +1140,7 @@ public:
|
|||
virtual void get_export_options(List<ExportOption> *r_options) {
|
||||
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/32_bits_framebuffer"), true));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "one_click_deploy/clear_previous_install"), true));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "one_click_deploy/clear_previous_install"), false));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "*.apk"), ""));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/release", PROPERTY_HINT_GLOBAL_FILE, "*.apk"), ""));
|
||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "command_line/extra_args"), ""));
|
||||
|
|
|
@ -627,6 +627,10 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC
|
|||
singletons[i].onMainDestroy();
|
||||
}
|
||||
super.onDestroy();
|
||||
|
||||
// TODO: This is a temp solution. The proper fix will involve tracking down and properly shutting down each
|
||||
// native Godot components that is started in Godot#onVideoInit.
|
||||
forceQuit();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -114,10 +114,12 @@ def configure(env):
|
|||
env.Append(CPPFLAGS=['-DNEED_LONG_INT'])
|
||||
env.Append(CPPFLAGS=['-DLIBYUV_DISABLE_NEON'])
|
||||
|
||||
if env['ios_exceptions']:
|
||||
env.Append(CPPFLAGS=['-fexceptions'])
|
||||
else:
|
||||
env.Append(CPPFLAGS=['-fno-exceptions'])
|
||||
# Disable exceptions on non-tools (template) builds
|
||||
if not env['tools']:
|
||||
if env['ios_exceptions']:
|
||||
env.Append(CCFLAGS=['-fexceptions'])
|
||||
else:
|
||||
env.Append(CCFLAGS=['-fno-exceptions'])
|
||||
|
||||
## Link flags
|
||||
|
||||
|
|
|
@ -334,7 +334,6 @@ static void clear_touches() {
|
|||
[self destroyFramebuffer];
|
||||
[self createFramebuffer];
|
||||
[self drawView];
|
||||
[self drawView];
|
||||
}
|
||||
|
||||
- (BOOL)createFramebuffer {
|
||||
|
@ -450,22 +449,22 @@ static void clear_touches() {
|
|||
|
||||
// Updates the OpenGL view when the timer fires
|
||||
- (void)drawView {
|
||||
if (useCADisplayLink) {
|
||||
// Pause the CADisplayLink to avoid recursion
|
||||
[displayLink setPaused:YES];
|
||||
|
||||
// Process all input events
|
||||
while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE) == kCFRunLoopRunHandledSource)
|
||||
;
|
||||
|
||||
// We are good to go, resume the CADisplayLink
|
||||
[displayLink setPaused:NO];
|
||||
}
|
||||
|
||||
if (!active) {
|
||||
printf("draw view not active!\n");
|
||||
return;
|
||||
};
|
||||
if (useCADisplayLink) {
|
||||
// Pause the CADisplayLink to avoid recursion
|
||||
[displayLink setPaused:YES];
|
||||
|
||||
// Process all input events
|
||||
while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.0, TRUE) == kCFRunLoopRunHandledSource)
|
||||
;
|
||||
|
||||
// We are good to go, resume the CADisplayLink
|
||||
[displayLink setPaused:NO];
|
||||
}
|
||||
|
||||
// Make sure that you are drawing to the current context
|
||||
[EAGLContext setCurrentContext:context];
|
||||
|
|
|
@ -110,10 +110,12 @@ def configure(env):
|
|||
# once feasible also consider memory buffer size issues.
|
||||
env.Append(CPPDEFINES=['NO_THREADS'])
|
||||
|
||||
# These flags help keep the file size down.
|
||||
env.Append(CCFLAGS=['-fno-exceptions', '-fno-rtti'])
|
||||
# Don't use dynamic_cast, necessary with no-rtti.
|
||||
env.Append(CPPDEFINES=['NO_SAFE_CAST'])
|
||||
# Disable exceptions and rtti on non-tools (template) builds
|
||||
if not env['tools']:
|
||||
# These flags help keep the file size down.
|
||||
env.Append(CCFLAGS=['-fno-exceptions', '-fno-rtti'])
|
||||
# Don't use dynamic_cast, necessary with no-rtti.
|
||||
env.Append(CPPDEFINES=['NO_SAFE_CAST'])
|
||||
|
||||
if env['javascript_eval']:
|
||||
env.Append(CPPDEFINES=['JAVASCRIPT_EVAL_ENABLED'])
|
||||
|
|
|
@ -1382,9 +1382,12 @@ void OS_X11::set_window_maximized(bool p_enabled) {
|
|||
|
||||
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
|
||||
|
||||
if (is_window_maximize_allowed()) {
|
||||
while (p_enabled && !is_window_maximized()) {
|
||||
// Wait for effective resizing (so the GLX context is too).
|
||||
if (p_enabled && is_window_maximize_allowed()) {
|
||||
// Wait for effective resizing (so the GLX context is too).
|
||||
// Give up after 0.5s, it's not going to happen on this WM.
|
||||
// https://github.com/godotengine/godot/issues/19978
|
||||
for (int attempt = 0; !is_window_maximized() && attempt < 50; attempt++) {
|
||||
usleep(10000);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -69,6 +69,9 @@ Size2 ParallaxLayer::get_motion_offset() const {
|
|||
|
||||
void ParallaxLayer::_update_mirroring() {
|
||||
|
||||
if (!is_inside_tree())
|
||||
return;
|
||||
|
||||
ParallaxBackground *pb = Object::cast_to<ParallaxBackground>(get_parent());
|
||||
if (pb) {
|
||||
|
||||
|
|
|
@ -162,6 +162,7 @@ protected:
|
|||
ShapePair(int p_bs, int p_ls) {
|
||||
body_shape = p_bs;
|
||||
local_shape = p_ls;
|
||||
tagged = false;
|
||||
}
|
||||
};
|
||||
struct RigidBody_RemoveAction {
|
||||
|
|
|
@ -235,6 +235,7 @@ bool AnimationNodeStateMachinePlayback::_travel(AnimationNodeStateMachine *sm, c
|
|||
|
||||
if (cost < least_cost) {
|
||||
least_cost_transition = E;
|
||||
least_cost = cost;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1412,6 +1412,7 @@ void AnimationTree::_update_properties_for_node(const String &p_base_path, Ref<A
|
|||
Vector<Activity> activity;
|
||||
for (int i = 0; i < node->get_input_count(); i++) {
|
||||
Activity a;
|
||||
a.activity = 0;
|
||||
a.last_pass = 0;
|
||||
activity.push_back(a);
|
||||
}
|
||||
|
|
|
@ -205,9 +205,9 @@ void WindowDialog::_notification(int p_what) {
|
|||
Color title_color = get_color("title_color", "WindowDialog");
|
||||
int title_height = get_constant("title_height", "WindowDialog");
|
||||
int font_height = title_font->get_height() - title_font->get_descent() * 2;
|
||||
int x = (size.x - title_font->get_string_size(title).x) / 2;
|
||||
int x = (size.x - title_font->get_string_size(xl_title).x) / 2;
|
||||
int y = (-title_height + font_height) / 2;
|
||||
title_font->draw(canvas, Point2(x, y), title, title_color, size.x - panel->get_minimum_size().x);
|
||||
title_font->draw(canvas, Point2(x, y), xl_title, title_color, size.x - panel->get_minimum_size().x);
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_THEME_CHANGED:
|
||||
|
@ -219,6 +219,15 @@ void WindowDialog::_notification(int p_what) {
|
|||
close_button->set_begin(Point2(-get_constant("close_h_ofs", "WindowDialog"), -get_constant("close_v_ofs", "WindowDialog")));
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_TRANSLATION_CHANGED: {
|
||||
String new_title = tr(title);
|
||||
if (new_title != xl_title) {
|
||||
xl_title = new_title;
|
||||
minimum_size_changed();
|
||||
update();
|
||||
}
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_MOUSE_EXIT: {
|
||||
// Reset the mouse cursor when leaving the resizable window border.
|
||||
if (resizable && !drag_type) {
|
||||
|
@ -226,11 +235,13 @@ void WindowDialog::_notification(int p_what) {
|
|||
set_default_cursor_shape(CURSOR_ARROW);
|
||||
}
|
||||
} break;
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
case NOTIFICATION_POST_POPUP: {
|
||||
if (get_tree() && Engine::get_singleton()->is_editor_hint() && EditorNode::get_singleton())
|
||||
EditorNode::get_singleton()->dim_editor(true);
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_POPUP_HIDE: {
|
||||
if (get_tree() && Engine::get_singleton()->is_editor_hint() && EditorNode::get_singleton())
|
||||
EditorNode::get_singleton()->dim_editor(false);
|
||||
|
@ -272,8 +283,12 @@ int WindowDialog::_drag_hit_test(const Point2 &pos) const {
|
|||
|
||||
void WindowDialog::set_title(const String &p_title) {
|
||||
|
||||
title = tr(p_title);
|
||||
update();
|
||||
if (title != p_title) {
|
||||
title = p_title;
|
||||
xl_title = tr(p_title);
|
||||
minimum_size_changed();
|
||||
update();
|
||||
}
|
||||
}
|
||||
String WindowDialog::get_title() const {
|
||||
|
||||
|
@ -292,12 +307,12 @@ Size2 WindowDialog::get_minimum_size() const {
|
|||
Ref<Font> font = get_font("title_font", "WindowDialog");
|
||||
|
||||
const int button_width = close_button->get_combined_minimum_size().x;
|
||||
const int title_width = font->get_string_size(title).x;
|
||||
const int title_width = font->get_string_size(xl_title).x;
|
||||
const int padding = button_width / 2;
|
||||
const int button_area = button_width + padding;
|
||||
|
||||
// as the title gets centered, title_width + close_button_width is not enough.
|
||||
// we want a width w, such that w / 2 - title_width / 2 >= button_area, i.e.
|
||||
// As the title gets centered, title_width + close_button_width is not enough.
|
||||
// We want a width w, such that w / 2 - title_width / 2 >= button_area, i.e.
|
||||
// w >= 2 * button_area + title_width
|
||||
|
||||
return Size2(2 * button_area + title_width, 1);
|
||||
|
@ -324,7 +339,6 @@ void WindowDialog::_bind_methods() {
|
|||
|
||||
WindowDialog::WindowDialog() {
|
||||
|
||||
//title="Hello!";
|
||||
drag_type = DRAG_NONE;
|
||||
resizable = false;
|
||||
close_button = memnew(TextureButton);
|
||||
|
@ -340,7 +354,6 @@ WindowDialog::~WindowDialog() {
|
|||
void PopupDialog::_notification(int p_what) {
|
||||
|
||||
if (p_what == NOTIFICATION_DRAW) {
|
||||
|
||||
RID ci = get_canvas_item();
|
||||
get_stylebox("panel", "PopupMenu")->draw(ci, Rect2(Point2(), get_size()));
|
||||
}
|
||||
|
@ -362,15 +375,15 @@ void AcceptDialog::_post_popup() {
|
|||
|
||||
void AcceptDialog::_notification(int p_what) {
|
||||
|
||||
if (p_what == NOTIFICATION_MODAL_CLOSE) {
|
||||
switch (p_what) {
|
||||
case NOTIFICATION_MODAL_CLOSE: {
|
||||
cancel_pressed();
|
||||
} break;
|
||||
|
||||
cancel_pressed();
|
||||
} else if (p_what == NOTIFICATION_READY) {
|
||||
|
||||
_update_child_rects();
|
||||
} else if (p_what == NOTIFICATION_RESIZED) {
|
||||
|
||||
_update_child_rects();
|
||||
case NOTIFICATION_READY:
|
||||
case NOTIFICATION_RESIZED: {
|
||||
_update_child_rects();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ class WindowDialog : public Popup {
|
|||
|
||||
TextureButton *close_button;
|
||||
String title;
|
||||
String xl_title;
|
||||
int drag_type;
|
||||
Point2 drag_offset;
|
||||
Point2 drag_offset_far;
|
||||
|
|
|
@ -79,7 +79,7 @@ Size2 PopupMenu::get_minimum_size() const {
|
|||
size.width += check_w + hseparation;
|
||||
}
|
||||
|
||||
String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].xl_text;
|
||||
String text = items[i].xl_text;
|
||||
size.width += font->get_string_size(text).width;
|
||||
if (i > 0)
|
||||
size.height += vseparation;
|
||||
|
@ -467,7 +467,7 @@ void PopupMenu::_notification(int p_what) {
|
|||
hover->draw(ci, Rect2(item_ofs + Point2(-hseparation, -vseparation / 2), Size2(get_size().width - style->get_minimum_size().width + hseparation * 2, h + vseparation)));
|
||||
}
|
||||
|
||||
String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].xl_text;
|
||||
String text = items[i].xl_text;
|
||||
|
||||
item_ofs.x += items[i].h_ofs;
|
||||
if (items[i].separator) {
|
||||
|
@ -576,25 +576,30 @@ void PopupMenu::_notification(int p_what) {
|
|||
}
|
||||
}
|
||||
|
||||
/* Methods to add items with or without icon, checkbox, shortcut.
|
||||
* Be sure to keep them in sync when adding new properties in the Item struct.
|
||||
*/
|
||||
|
||||
#define ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel) \
|
||||
item.text = p_label; \
|
||||
item.xl_text = tr(p_label); \
|
||||
item.ID = p_ID == -1 ? items.size() : p_ID; \
|
||||
item.accel = p_accel;
|
||||
|
||||
void PopupMenu::add_icon_item(const Ref<Texture> &p_icon, const String &p_label, int p_ID, uint32_t p_accel) {
|
||||
|
||||
Item item;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
item.icon = p_icon;
|
||||
item.text = p_label;
|
||||
item.xl_text = tr(p_label);
|
||||
item.accel = p_accel;
|
||||
item.ID = p_ID;
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
}
|
||||
|
||||
void PopupMenu::add_item(const String &p_label, int p_ID, uint32_t p_accel) {
|
||||
|
||||
Item item;
|
||||
item.text = p_label;
|
||||
item.xl_text = tr(p_label);
|
||||
item.accel = p_accel;
|
||||
item.ID = p_ID == -1 ? items.size() : p_ID;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
|
@ -605,7 +610,7 @@ void PopupMenu::add_submenu_item(const String &p_label, const String &p_submenu,
|
|||
Item item;
|
||||
item.text = p_label;
|
||||
item.xl_text = tr(p_label);
|
||||
item.ID = p_ID;
|
||||
item.ID = p_ID == -1 ? items.size() : p_ID;
|
||||
item.submenu = p_submenu;
|
||||
items.push_back(item);
|
||||
update();
|
||||
|
@ -615,11 +620,8 @@ void PopupMenu::add_submenu_item(const String &p_label, const String &p_submenu,
|
|||
void PopupMenu::add_icon_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_ID, uint32_t p_accel) {
|
||||
|
||||
Item item;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
item.icon = p_icon;
|
||||
item.text = p_label;
|
||||
item.xl_text = tr(p_label);
|
||||
item.accel = p_accel;
|
||||
item.ID = p_ID;
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX;
|
||||
items.push_back(item);
|
||||
update();
|
||||
|
@ -629,10 +631,7 @@ void PopupMenu::add_icon_check_item(const Ref<Texture> &p_icon, const String &p_
|
|||
void PopupMenu::add_check_item(const String &p_label, int p_ID, uint32_t p_accel) {
|
||||
|
||||
Item item;
|
||||
item.text = p_label;
|
||||
item.xl_text = tr(p_label);
|
||||
item.accel = p_accel;
|
||||
item.ID = p_ID == -1 ? items.size() : p_ID;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX;
|
||||
items.push_back(item);
|
||||
update();
|
||||
|
@ -641,31 +640,40 @@ void PopupMenu::add_check_item(const String &p_label, int p_ID, uint32_t p_accel
|
|||
|
||||
void PopupMenu::add_radio_check_item(const String &p_label, int p_ID, uint32_t p_accel) {
|
||||
|
||||
add_check_item(p_label, p_ID, p_accel);
|
||||
items.write[items.size() - 1].checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
Item item;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
}
|
||||
|
||||
void PopupMenu::add_icon_radio_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_ID, uint32_t p_accel) {
|
||||
|
||||
add_icon_check_item(p_icon, p_label, p_ID, p_accel);
|
||||
items.write[items.size() - 1].checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
Item item;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
item.icon = p_icon;
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
}
|
||||
|
||||
#define ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_ID, p_global) \
|
||||
ERR_EXPLAIN("Cannot add item with invalid ShortCut."); \
|
||||
ERR_FAIL_COND(p_shortcut.is_null()); \
|
||||
_ref_shortcut(p_shortcut); \
|
||||
item.text = p_shortcut->get_name(); \
|
||||
item.xl_text = tr(item.text); \
|
||||
item.ID = p_ID == -1 ? items.size() : p_ID; \
|
||||
item.shortcut = p_shortcut; \
|
||||
item.shortcut_is_global = p_global;
|
||||
|
||||
void PopupMenu::add_icon_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_ID, bool p_global) {
|
||||
|
||||
ERR_FAIL_COND(p_shortcut.is_null());
|
||||
|
||||
_ref_shortcut(p_shortcut);
|
||||
|
||||
Item item;
|
||||
item.ID = p_ID;
|
||||
ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_ID, p_global);
|
||||
item.icon = p_icon;
|
||||
item.shortcut = p_shortcut;
|
||||
item.shortcut_is_global = p_global;
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
|
@ -673,14 +681,8 @@ void PopupMenu::add_icon_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut
|
|||
|
||||
void PopupMenu::add_shortcut(const Ref<ShortCut> &p_shortcut, int p_ID, bool p_global) {
|
||||
|
||||
ERR_FAIL_COND(p_shortcut.is_null());
|
||||
|
||||
_ref_shortcut(p_shortcut);
|
||||
|
||||
Item item;
|
||||
item.ID = p_ID;
|
||||
item.shortcut = p_shortcut;
|
||||
item.shortcut_is_global = p_global;
|
||||
ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_ID, p_global);
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
|
@ -688,16 +690,10 @@ void PopupMenu::add_shortcut(const Ref<ShortCut> &p_shortcut, int p_ID, bool p_g
|
|||
|
||||
void PopupMenu::add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_ID, bool p_global) {
|
||||
|
||||
ERR_FAIL_COND(p_shortcut.is_null());
|
||||
|
||||
_ref_shortcut(p_shortcut);
|
||||
|
||||
Item item;
|
||||
item.ID = p_ID;
|
||||
item.shortcut = p_shortcut;
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX;
|
||||
ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_ID, p_global);
|
||||
item.icon = p_icon;
|
||||
item.shortcut_is_global = p_global;
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX;
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
|
@ -705,14 +701,8 @@ void PopupMenu::add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<Sh
|
|||
|
||||
void PopupMenu::add_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_ID, bool p_global) {
|
||||
|
||||
ERR_FAIL_COND(p_shortcut.is_null());
|
||||
|
||||
_ref_shortcut(p_shortcut);
|
||||
|
||||
Item item;
|
||||
item.ID = p_ID;
|
||||
item.shortcut = p_shortcut;
|
||||
item.shortcut_is_global = p_global;
|
||||
ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_ID, p_global);
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX;
|
||||
items.push_back(item);
|
||||
update();
|
||||
|
@ -721,8 +711,10 @@ void PopupMenu::add_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_ID, bo
|
|||
|
||||
void PopupMenu::add_radio_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_ID, bool p_global) {
|
||||
|
||||
add_check_shortcut(p_shortcut, p_ID, p_global);
|
||||
items.write[items.size() - 1].checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
Item item;
|
||||
ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_ID, p_global);
|
||||
item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON;
|
||||
items.push_back(item);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
}
|
||||
|
@ -730,10 +722,7 @@ void PopupMenu::add_radio_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_
|
|||
void PopupMenu::add_multistate_item(const String &p_label, int p_max_states, int p_default_state, int p_ID, uint32_t p_accel) {
|
||||
|
||||
Item item;
|
||||
item.text = p_label;
|
||||
item.xl_text = tr(p_label);
|
||||
item.accel = p_accel;
|
||||
item.ID = p_ID;
|
||||
ITEM_SETUP_WITH_ACCEL(p_label, p_ID, p_accel);
|
||||
item.max_states = p_max_states;
|
||||
item.state = p_default_state;
|
||||
items.push_back(item);
|
||||
|
@ -741,6 +730,11 @@ void PopupMenu::add_multistate_item(const String &p_label, int p_max_states, int
|
|||
minimum_size_changed();
|
||||
}
|
||||
|
||||
#undef ITEM_SETUP_WITH_ACCEL
|
||||
#undef ITEM_SETUP_WITH_SHORTCUT
|
||||
|
||||
/* Methods to modify existing items. */
|
||||
|
||||
void PopupMenu::set_item_text(int p_idx, const String &p_text) {
|
||||
|
||||
ERR_FAIL_INDEX(p_idx, items.size());
|
||||
|
|
|
@ -801,11 +801,7 @@ void RichTextLabel::_notification(int p_what) {
|
|||
} break;
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
|
||||
if (is_inside_tree() && use_bbcode) {
|
||||
parse_bbcode(bbcode);
|
||||
//first_invalid_line=0; //invalidate ALL
|
||||
//update();
|
||||
}
|
||||
update();
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_DRAW: {
|
||||
|
|
|
@ -143,6 +143,11 @@ void TabContainer::_notification(int p_what) {
|
|||
|
||||
switch (p_what) {
|
||||
|
||||
case NOTIFICATION_TRANSLATION_CHANGED: {
|
||||
|
||||
minimum_size_changed();
|
||||
update();
|
||||
} break;
|
||||
case NOTIFICATION_RESIZED: {
|
||||
|
||||
Vector<Control *> tabs = _get_tabs();
|
||||
|
@ -178,7 +183,6 @@ void TabContainer::_notification(int p_what) {
|
|||
first_tab_cache--;
|
||||
}
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_DRAW: {
|
||||
|
||||
RID canvas = get_canvas_item();
|
||||
|
|
|
@ -53,7 +53,7 @@ Size2 Tabs::get_minimum_size() const {
|
|||
ms.width += get_constant("hseparation");
|
||||
}
|
||||
|
||||
ms.width += Math::ceil(font->get_string_size(tabs[i].text).width);
|
||||
ms.width += Math::ceil(font->get_string_size(tabs[i].xl_text).width);
|
||||
|
||||
if (tabs[i].disabled)
|
||||
ms.width += tab_disabled->get_minimum_size().width;
|
||||
|
@ -222,6 +222,13 @@ void Tabs::_notification(int p_what) {
|
|||
|
||||
switch (p_what) {
|
||||
|
||||
case NOTIFICATION_TRANSLATION_CHANGED: {
|
||||
for (int i = 0; i < tabs.size(); ++i) {
|
||||
tabs.write[i].xl_text = tr(tabs[i].text);
|
||||
}
|
||||
minimum_size_changed();
|
||||
update();
|
||||
} break;
|
||||
case NOTIFICATION_MOUSE_EXIT: {
|
||||
rb_hover = -1;
|
||||
cb_hover = -1;
|
||||
|
@ -232,7 +239,6 @@ void Tabs::_notification(int p_what) {
|
|||
_update_cache();
|
||||
_ensure_no_over_offset();
|
||||
ensure_tab_visible(current);
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_DRAW: {
|
||||
_update_cache();
|
||||
|
@ -321,7 +327,7 @@ void Tabs::_notification(int p_what) {
|
|||
w += icon->get_width() + get_constant("hseparation");
|
||||
}
|
||||
|
||||
font->draw(ci, Point2i(w, sb->get_margin(MARGIN_TOP) + ((sb_rect.size.y - sb_ms.y) - font->get_height()) / 2 + font->get_ascent()), tabs[i].text, col, tabs[i].size_text);
|
||||
font->draw(ci, Point2i(w, sb->get_margin(MARGIN_TOP) + ((sb_rect.size.y - sb_ms.y) - font->get_height()) / 2 + font->get_ascent()), tabs[i].xl_text, col, tabs[i].size_text);
|
||||
|
||||
w += tabs[i].size_text;
|
||||
|
||||
|
@ -394,7 +400,6 @@ void Tabs::_notification(int p_what) {
|
|||
} else {
|
||||
buttons_visible = false;
|
||||
}
|
||||
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
@ -439,6 +444,7 @@ void Tabs::set_tab_title(int p_tab, const String &p_title) {
|
|||
|
||||
ERR_FAIL_INDEX(p_tab, tabs.size());
|
||||
tabs.write[p_tab].text = p_title;
|
||||
tabs.write[p_tab].xl_text = tr(p_title);
|
||||
update();
|
||||
minimum_size_changed();
|
||||
}
|
||||
|
@ -547,7 +553,7 @@ void Tabs::_update_cache() {
|
|||
for (int i = 0; i < tabs.size(); i++) {
|
||||
tabs.write[i].ofs_cache = mw;
|
||||
tabs.write[i].size_cache = get_tab_width(i);
|
||||
tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].text).width);
|
||||
tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].xl_text).width);
|
||||
mw += tabs[i].size_cache;
|
||||
if (tabs[i].size_cache <= min_width || i == current) {
|
||||
size_fixed += tabs[i].size_cache;
|
||||
|
@ -599,6 +605,7 @@ void Tabs::add_tab(const String &p_str, const Ref<Texture> &p_icon) {
|
|||
|
||||
Tab t;
|
||||
t.text = p_str;
|
||||
t.xl_text = tr(p_str);
|
||||
t.icon = p_icon;
|
||||
t.disabled = false;
|
||||
t.ofs_cache = 0;
|
||||
|
@ -654,7 +661,7 @@ Variant Tabs::get_drag_data(const Point2 &p_point) {
|
|||
tf->set_texture(tabs[tab_over].icon);
|
||||
drag_preview->add_child(tf);
|
||||
}
|
||||
Label *label = memnew(Label(tabs[tab_over].text));
|
||||
Label *label = memnew(Label(tabs[tab_over].xl_text));
|
||||
drag_preview->add_child(label);
|
||||
if (!tabs[tab_over].right_button.is_null()) {
|
||||
TextureRect *tf = memnew(TextureRect);
|
||||
|
@ -803,7 +810,7 @@ int Tabs::get_tab_width(int p_idx) const {
|
|||
x += get_constant("hseparation");
|
||||
}
|
||||
|
||||
x += Math::ceil(font->get_string_size(tabs[p_idx].text).width);
|
||||
x += Math::ceil(font->get_string_size(tabs[p_idx].xl_text).width);
|
||||
|
||||
if (tabs[p_idx].disabled)
|
||||
x += tab_disabled->get_minimum_size().width;
|
||||
|
|
|
@ -58,6 +58,7 @@ private:
|
|||
struct Tab {
|
||||
|
||||
String text;
|
||||
String xl_text;
|
||||
Ref<Texture> icon;
|
||||
int ofs_cache;
|
||||
bool disabled;
|
||||
|
|
|
@ -165,11 +165,12 @@ Error MeshDataTool::create_from_surface(const Ref<ArrayMesh> &p_mesh, int p_surf
|
|||
e.vertex[0] = edge.x;
|
||||
e.vertex[1] = edge.y;
|
||||
edges.push_back(e);
|
||||
v[j]->edges.push_back(face.edges[j]);
|
||||
v[(j + 1) % 3]->edges.push_back(face.edges[j]);
|
||||
}
|
||||
|
||||
edges.write[face.edges[j]].faces.push_back(fidx);
|
||||
v[j]->faces.push_back(fidx);
|
||||
v[j]->edges.push_back(face.edges[j]);
|
||||
}
|
||||
|
||||
faces.push_back(face);
|
||||
|
|
|
@ -932,6 +932,7 @@ bool ShaderLanguage::_find_identifier(const BlockNode *p_block, const Map<String
|
|||
if (r_type) {
|
||||
*r_type = IDENTIFIER_FUNCTION;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue