summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md60
-rw-r--r--doc/base/classes.xml148
-rw-r--r--main/input_default.cpp14
-rw-r--r--platform/iphone/xcode/godot_xcode/data.pck0
-rwxr-xr-xplatform/iphone/xcode/godot_xcode/godot_debug.iphone0
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj370
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.pngbin0 -> 529 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.pngbin0 -> 648 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.pngbin0 -> 782 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.pngbin0 -> 1641 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.pngbin0 -> 2547 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.pngbin0 -> 2547 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.pngbin0 -> 3096 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.pngbin0 -> 599 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.pngbin0 -> 3035 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.pngbin0 -> 554 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.pngbin0 -> 480 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.pngbin0 -> 274 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json128
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.pngbin0 -> 215 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.pngbin0 -> 218 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.pngbin0 -> 218 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.pngbin0 -> 224 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.pngbin0 -> 225 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.pngbin0 -> 230 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.pngbin0 -> 207 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.pngbin0 -> 205 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.pngbin0 -> 208 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.pngbin0 -> 208 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.pngbin0 -> 208 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.pngbin0 -> 209 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.pngbin0 -> 209 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.pngbin0 -> 211 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.pngbin0 -> 210 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.pngbin0 -> 227 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.pngbin0 -> 212 bytes
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes17
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings2
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist50
-rw-r--r--platform/iphone/xcode/godot_xcode/godot_ios/main.m39
-rwxr-xr-xplatform/iphone/xcode/godot_xcode/godot_opt.iphone0
-rw-r--r--platform/windows/joystick.cpp2
-rw-r--r--platform/x11/detect.py18
-rw-r--r--platform/x11/joystick_linux.cpp35
-rw-r--r--platform/x11/joystick_linux.h4
-rw-r--r--scene/2d/tile_map.cpp1
-rw-r--r--servers/visual/particle_system_sw.h2
-rw-r--r--tools/editor/plugins/animation_player_editor_plugin.cpp8
-rw-r--r--tools/editor/project_settings.cpp127
-rw-r--r--tools/editor/project_settings.h7
51 files changed, 895 insertions, 144 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 97ce9c1403..887fe93779 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,37 +1,59 @@
-## PLEASE READ:
+# How to contribute efficiently
-### Reporting Bugs:
+**Please read the first section before reporting a bug!**
-If you are reporting a new issue, you will make our life much simpler (and the fix come much sooner):
+## Reporting bugs or proposing features
-#### Specify the Platform
+The golden rule is to **always open *one* issue for *one* bug**. If you notice several bugs and want to report them, make sure to create one new issue for each of them.
+
+Everything refered to hereafter as "bug" also applies for feature requests.
+
+If you are reporting a new issue, you will make our life much simpler (and the fix come much sooner) by following those guidelines:
+
+#### Search first in the existing database
+
+Issues are often reported several times by various users. It's a good practice to **search first** in the issues database before reporting your issue. If you don't find a relevant match or if you are unsure, don't hesitate to **open a new issue**. The bugsquad will handle it from there if it's a duplicate.
+
+#### Specify the platform
-Godot runs on a large variety of platforms and operating systems and devices. If you believe your issue is device/platform dependent, please specify:
-* Operating System
-* Device
-* GPU Model
+Godot runs on a large variety of platforms and operating systems and devices. If you believe your issue is device/platform dependent (for example if it is related to the rendering, crashes or compilation errors), please specify:
+* Operating system
+* Device (including architecture, e.g. x86, x86_64, arm, etc.)
+* GPU model (and driver in use if you know it)
-#### Specify Reproduction Steps
+#### Specify steps to reproduce
-Many bugs can't be reproduced unless specific steps are taken. Please **specify the exact steps** that must be taken to reproduce the condition.
+Many bugs can't be reproduced unless specific steps are taken. Please **specify the exact steps** that must be taken to reproduce the condition, and try to keep them as minimal as possible.
-#### Provide a Simple, Example Project
+#### Provide a simple, example project
-Sometimes an unexpected behavior happens in your project. In such case understand that:
+Sometimes an unexpected behavior happens in your project. In such case, understand that:
* What happens to you may not happen to other users.
-* We can't take the time a look at your project, learn it and then figure out why it's failing.
+* We can't take the time to look at your project, understand how it is set up and then figure out why it's failing.
-To speed up our work, prepare for us **a simple project** that isolates and reproduces the issue. This is always the **the best way for us to fix it**.
+To speed up our work, please prepare for us **a simple project** that isolates and reproduces the issue. This is always the **the best way for us to fix it**. You can attach a zip file with the minimal project directly to the bug report, by drag and dropping the file in the GitHub edition field.
-### Contributing Pull Requests
+## Contributing pull requests
-If you are adding new engine funcitonality, please make sure that:
+If you want to add new engine functionalities, please make sure that:
* This functionality is desired.
-* You talked to other developers on how to implement it best.
-* Even if it won't be merged, your PR is useful for future work on another developer.
+* You talked to other developers on how to implement it best (on either communication channel, and maybe in a GitHub issue first before making your PR).
+* Even if it does not get merged, your PR is useful for future work by another developer.
+
+Similar rules can be applied when contributing bug fixes - it's always best to discuss the implementation in the bug report first if you are not 100% about what would be the best fix.
+
+#### Be nice to the git history
+
+Try to make simple PRs with that handle one specific topic. Just like for reporting issues, it's better to open 3 different PRs that each address a different issue than one big PR with three commits.
+
+When updating your fork with upstream changes, please use ``git pull --rebase`` to avoid creating "merge commits". Those commits unnecessarily pollute the git history when coming from PRs.
+
+Also try to make commits that bring the engine from one stable state to another stable state, i.e. if your first commit has a bug that you fixed in the second commit, try to merge them together before making your pull request (see ``git rebase -i`` and relevant help about rebasing or ammending commits on the Internet).
+
+This git style guide has some good practices to have in mind: https://github.com/agis-/git-style-guide
Thanks!
-The Godot Development Team
+The Godot development team
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index b1871632d0..a11297789c 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<doc version="2.0.beta.custom_build" name="Engine Types">
+<doc version="2.0.rc1.custom_build" name="Engine Types">
<class name="@GDScript" category="Core">
<brief_description>
Built-in GDScript functions.
@@ -621,6 +621,32 @@
<description>
</description>
</method>
+ <method name="preload">
+ <return type="Resource">
+ </return>
+ <argument index="0" name="path" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="yield">
+ <return type="Nil">
+ </return>
+ <argument index="0" name="object" type="Object">
+ </argument>
+ <argument index="1" name="signal" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="assert">
+ <return type="Nil">
+ </return>
+ <argument index="0" name="condition" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
</methods>
<constants>
<constant name="PI" value="3.141593">
@@ -4206,7 +4232,7 @@
</argument>
<description>
Set the sample data for a given sample as an array of bytes. The length must be equal to the sample length expected in bytes or an error will be produced. The byte length can be calculated as follows:
- Get the sample length ([method get_sample_length]).
+ Get the sample length ([method sample_get_length]).
If the sample format is SAMPLE_FORMAT_PCM16, multiply it by 2.
If the sample format is SAMPLE_FORMAT_IMA_ADPCM, divide it by 2 (rounding any fraction up), then add 4.
If the sample is stereo ([method sample_is_stereo]), multiply it by 2.
@@ -5686,7 +5712,7 @@
Camera node, displays from a point of view.
</brief_description>
<description>
- Camera is a special node that displays what is visible from its current location. Cameras register themselves in the nearest [Viewport] node (when ascending the tree). Only one camera can be active per viewport. If no viewport is available ascending the tree, the Camera will register in the global viewport. In other words, a Camera just provides [i]3D[/i] display capabilities to a [Viewport], and, without one, a [Scene] registered in that [Viewport] (or higher viewports) can't be displayed.
+ Camera is a special node that displays what is visible from its current location. Cameras register themselves in the nearest [Viewport] node (when ascending the tree). Only one camera can be active per viewport. If no viewport is available ascending the tree, the Camera will register in the global viewport. In other words, a Camera just provides [i]3D[/i] display capabilities to a [Viewport], and, without one, a scene registered in that [Viewport] (or higher viewports) can't be displayed.
</description>
<methods>
<method name="project_ray_normal" qualifiers="const">
@@ -7353,14 +7379,14 @@
<argument index="0" name="build_mode" type="int">
</argument>
<description>
- Set whether the polygon is to be a [ConvexPolygon2D] ([code]build_mode==0[/code]), or a [ConcavePolygon2D] ([code]build_mode==1[/code]).
+ Set whether the polygon is to be a [ConvexPolygonShape2D] ([code]build_mode==0[/code]), or a [ConcavePolygonShape2D] ([code]build_mode==1[/code]).
</description>
</method>
<method name="get_build_mode" qualifiers="const">
<return type="int">
</return>
<description>
- Return whether the polygon is a [ConvexPolygon2D] ([code]build_mode==0[/code]), or a [ConcavePolygon2D] ([code]build_mode==1[/code]).
+ Return whether the polygon is a [ConvexPolygonShape2D] ([code]build_mode==0[/code]), or a [ConcavePolygonShape2D] ([code]build_mode==1[/code]).
</description>
</method>
<method name="set_trigger">
@@ -8164,7 +8190,7 @@
Control is the base class Node for all the GUI components. Every GUI component inherits from it, directly or indirectly. In this way, sections of the scene tree made of contiguous control nodes, become user interfaces.
Controls are relative to the parent position and size by using anchors and margins. This ensures that they can adapt easily in most situation to changing dialog and screen sizes. When more flexibility is desired, [Container] derived nodes can be used.
Anchors work by defining which margin do they follow, and a value relative to it. Allowed anchoring modes are ANCHOR_BEGIN, where the margin is relative to the top or left margins of the parent (in pixels), ANCHOR_END for the right and bottom margins of the parent and ANCHOR_RATIO, which is a ratio from 0 to 1 in the parent range.
- Input device events ([InputEvent]) are first sent to the root controls via the [method Node._input], which distribute it through the tree, then delivers them to the adequate one (under cursor or keyboard focus based) by calling [method Node._input_event]. There is no need to enable input processing on controls to receive such events. To ensure that no one else will receive the event (not even [method Node._unhandled_input]), the control can accept it by calling [method accept_event].
+ Input device events ([InputEvent]) are first sent to the root controls via the [method Node._input], which distribute it through the tree, then delivers them to the adequate one (under cursor or keyboard focus based) by calling [method MainLoop._input_event]. There is no need to enable input processing on controls to receive such events. To ensure that no one else will receive the event (not even [method Node._unhandled_input]), the control can accept it by calling [method accept_event].
Only one control can hold the keyboard focus (receiving keyboard events), for that the control must define the focus mode with [method set_focus_mode]. Focus is lost when another control gains it, or the current focus owner is hidden.
It is sometimes desired for a control to ignore mouse/pointer events. This is often the case when placing other controls on top of a button, in such cases. Calling [method set_ignore_mouse] enables this function.
Finally, controls are skinned according to a [Theme]. Setting a [Theme] on a control will propagate all the skinning down the tree. Optionally, skinning can be overrided per each control by calling the add_*_override functions, or from the editor.
@@ -8411,7 +8437,7 @@
<argument index="0" name="exclusive" type="bool" default="false">
</argument>
<description>
- Display a Control as modal. Control must be a subwindow (see [method set_as_subwindow]). Modal controls capture the input signals until closed or the area outside them is accessed. When a modal control loses focus, or the ESC key is pressed, they automatically hide. Modal controls are used extensively for popup dialogs and menus.
+ Display a Control as modal. Control must be a subwindow. Modal controls capture the input signals until closed or the area outside them is accessed. When a modal control loses focus, or the ESC key is pressed, they automatically hide. Modal controls are used extensively for popup dialogs and menus.
</description>
</method>
<method name="set_focus_mode">
@@ -9580,8 +9606,25 @@ This approximation makes straight segments between each point, then subdivides t
</class>
<class name="Directory" inherits="Reference" category="Core">
<brief_description>
+ Directory type.
</brief_description>
- <description>
+ <description>Directory type. Is used to manage directories and their content (not restricted to the project folder).
+
+How to iterate through the files of a directory example:
+
+func dir(path):
+ var d = Directory.new()
+ if d.open( path )==0:
+ d.list_dir_begin()
+ var file_name = d.get_next()
+ while(file_name!=""):
+ if d.current_is_dir():
+ print("Is directory: " + file_name)
+ else:
+ print("Is File:" + file_name)
+ file_name = d.get_next()
+ else:
+ print("Some open Error, maybe directory not found?")
</description>
<methods>
<method name="open">
@@ -9590,28 +9633,34 @@ This approximation makes straight segments between each point, then subdivides t
<argument index="0" name="path" type="String">
</argument>
<description>
+Opens a directory to work with. Needs a path, example "res://folder"
</description>
</method>
<method name="list_dir_begin">
<return type="bool">
</return>
<description>
+Loads all file names of the current directory (prepares the get_next() function).
</description>
</method>
<method name="get_next">
<return type="String">
</return>
<description>
+Is used to iterate through the files of the current directory. Returns the name(no path) of the current file/directory, it also contains "." and ".." .
+Returns an empty String "" at the end of the list.
</description>
</method>
<method name="current_is_dir" qualifiers="const">
<return type="bool">
</return>
<description>
+Returns true if the current file you are looking at with get_next() is a directory or "." or ".." otherwise false.
</description>
</method>
<method name="list_dir_end">
<description>
+Run this to empty the list of remaining files in get_next(). You can use it to end the iteration, as soon as your goal is reached.
</description>
</method>
<method name="get_drive_count">
@@ -9634,12 +9683,14 @@ This approximation makes straight segments between each point, then subdivides t
<argument index="0" name="todir" type="String">
</argument>
<description>
+Needs a path or name to the next directory. When the target directory is in the current directory you can use "newfolder" otherwise you need the full path "res://currentfolder/newfolder"
</description>
</method>
<method name="get_current_dir">
<return type="String">
</return>
<description>
+Returns a path to the current directory, example: "res://folder"
</description>
</method>
<method name="make_dir">
@@ -9672,6 +9723,7 @@ This approximation makes straight segments between each point, then subdivides t
<argument index="0" name="name" type="String">
</argument>
<description>
+Returns true if directory exists otherwise false. Needs a path, example: "res://folder"
</description>
</method>
<method name="get_space_left">
@@ -12127,6 +12179,16 @@ This approximation makes straight segments between each point, then subdivides t
</signals>
<constants>
</constants>
+ <theme_items>
+ <theme_item name="more" type="Texture">
+ </theme_item>
+ <theme_item name="reset" type="Texture">
+ </theme_item>
+ <theme_item name="minus" type="Texture">
+ </theme_item>
+ <theme_item name="bg" type="StyleBox">
+ </theme_item>
+ </theme_items>
</class>
<class name="GraphNode" inherits="Container" category="Core">
<brief_description>
@@ -12968,6 +13030,7 @@ verify_host will check the SSL identity of the host if set to true.
<return type="Dictionary">
</return>
<description>
+ Returns all response headers as dictionary where the keys and values are transformed to lower case. A key with more than one value is a simple string with "; " as separator. example: (content-length:12), (content-type:application/json; charset=utf-8)
</description>
</method>
<method name="get_response_body_length" qualifiers="const">
@@ -13239,7 +13302,7 @@ verify_host will check the SSL identity of the host if set to true.
IP Protocol support functions.
</brief_description>
<description>
- IP contains some support functions for the IPv4 protocol. TCP/IP support is in different classes (see [TCP_Client], [TCP_Server]). IP provides hostname resolution support, both blocking and threaded.
+ IP contains some support functions for the IPv4 protocol. TCP/IP support is in different classes (see [StreamPeerTCP] and [TCP_Server]). IP provides hostname resolution support, both blocking and threaded.
</description>
<methods>
<method name="resolve_hostname">
@@ -14080,7 +14143,7 @@ verify_host will check the SSL identity of the host if set to true.
</constant>
</constants>
</class>
-<class name="InputEventJoyButton" category="Built-In Types">
+<class name="InputEventJoystickButton" category="Built-In Types">
<brief_description>
</brief_description>
<description>
@@ -14166,7 +14229,7 @@ verify_host will check the SSL identity of the host if set to true.
</constant>
</constants>
</class>
-<class name="InputEventJoyMotion" category="Built-In Types">
+<class name="InputEventJoystickMotion" category="Built-In Types">
<brief_description>
</brief_description>
<description>
@@ -16561,7 +16624,7 @@ verify_host will check the SSL identity of the host if set to true.
Main loop is the abstract main loop base class.
</brief_description>
<description>
- Main loop is the abstract main loop base class. All other main loop classes are derived from it. Upon application start, a [MainLoop] has to be provided to OS, else the application will exit. This happens automatically (and a [SceneMainLoop] is created), unless a main [Script] is supplied, which may or not create and return a [MainLoop].
+ Main loop is the abstract main loop base class. All other main loop classes are derived from it. Upon application start, a [MainLoop] has to be provided to OS, else the application will exit. This happens automatically (and a [SceneTree] is created), unless a main [Script] is supplied, which may or not create and return a [MainLoop].
</description>
<methods>
<method name="_finalize" qualifiers="virtual">
@@ -17772,10 +17835,10 @@ verify_host will check the SSL identity of the host if set to true.
</class>
<class name="MeshInstance" inherits="GeometryInstance" category="Core">
<brief_description>
- Node that instances meshes into a [Scenario].
+ Node that instances meshes into a scenario.
</brief_description>
<description>
- MeshInstance is a [Node] that takes a [Mesh] resource and adds it to the current [Scenario] by creating an instance of it. This is the class most often used to get 3D geometry rendered and can be used to instance a single [Mesh] in many places. This allows to reuse geometry and save on resources. When a [Mesh] has to be instanced more than thousands of times at close proximity, consider using a [MultiMesh] in a [MultiMeshInstance] instead.
+ MeshInstance is a [Node] that takes a [Mesh] resource and adds it to the current scenario by creating an instance of it. This is the class most often used to get 3D geometry rendered and can be used to instance a single [Mesh] in many places. This allows to reuse geometry and save on resources. When a [Mesh] has to be instanced more than thousands of times at close proximity, consider using a [MultiMesh] in a [MultiMeshInstance] instead.
</description>
<methods>
<method name="set_mesh">
@@ -18024,7 +18087,7 @@ verify_host will check the SSL identity of the host if set to true.
Node that instances a [MultiMesh].
</brief_description>
<description>
- MultiMeshInstance is a [Node] that takes a [MultiMesh] resource and adds it to the current [Scenario] by creating an instance of it (yes, this is an instance of instances).
+ MultiMeshInstance is a [Node] that takes a [MultiMesh] resource and adds it to the current scenario by creating an instance of it (yes, this is an instance of instances).
</description>
<methods>
<method name="set_multimesh">
@@ -18624,7 +18687,7 @@ verify_host will check the SSL identity of the host if set to true.
<description>
Nodes can be set as children of other nodes, resulting in a tree arrangement. Any tree of nodes is called a "Scene".
Scenes can be saved to disk, and then instanced into other scenes. This allows for very high flexibility in the architecture and data model of the projects.
- [SceneMainLoop] contains the "active" tree of nodes, and a node becomes active (receiving NOTIFICATION_ENTER_SCENE) when added to that tree.
+ [SceneTree] contains the "active" tree of nodes, and a node becomes active (receiving NOTIFICATION_ENTER_SCENE) when added to that tree.
A node can contain any number of nodes as a children (but there is only one tree root) with the requirement that no two children with the same name can exist.
Nodes can, optionally, be added to groups. This makes it easy to reach a number of nodes from the code (for example an "enemies" group).
Nodes can be set to "process" state, so they constantly receive a callback requesting them to process (do anything). Normal processing ([method _process]) happens as fast as possible and is dependent on the frame rate, so the processing time delta is variable. Fixed processing ([method _fixed_process]) happens a fixed amount of times per second (by default 60) and is useful to link itself to the physics.
@@ -18749,7 +18812,7 @@ verify_host will check the SSL identity of the host if set to true.
</argument>
<description>
Fetch a node. NodePath must be valid (or else error will occur) and can be either the path to child node, a relative path (from the current node to another node), or an absolute path to a node.
- Note: fetching absolute paths only works when the node is inside the scene tree (see [method is_inside_scene]). Examples. Assume your current node is Character and following tree:[br]
+ Note: fetching absolute paths only works when the node is inside the scene tree (see [method is_inside_tree]). Examples. Assume your current node is Character and following tree:[br]
root/
root/Character
root/Character/Sword
@@ -18829,7 +18892,7 @@ verify_host will check the SSL identity of the host if set to true.
<return type="NodePath">
</return>
<description>
- Return the absolute path of the current node. This only works if the current node is inside the scene tree (see [method is_inside_scene]).
+ Return the absolute path of the current node. This only works if the current node is inside the scene tree (see [method is_inside_tree]).
</description>
</method>
<method name="get_path_to" qualifiers="const">
@@ -18847,7 +18910,7 @@ verify_host will check the SSL identity of the host if set to true.
<argument index="1" name="persistent" type="bool" default="false">
</argument>
<description>
- Add a node to a group. Groups are helpers to name and organize group of nodes, like for example: "Enemies", "Collectables", etc. A [Node] can be in any number of groups. Nodes can be assigned a group at any time, but will not be added to it until they are inside the scene tree (see [method is_inside_scene]).
+ Add a node to a group. Groups are helpers to name and organize group of nodes, like for example: "Enemies", "Collectables", etc. A [Node] can be in any number of groups. Nodes can be assigned a group at any time, but will not be added to it until they are inside the scene tree (see [method is_inside_tree]).
</description>
</method>
<method name="remove_from_group">
@@ -18896,7 +18959,7 @@ verify_host will check the SSL identity of the host if set to true.
<return type="Node">
</return>
<description>
- Get the node owner (see [method set_node_owner]).
+ Get the node owner (see [method set_owner]).
</description>
</method>
<method name="remove_and_skip">
@@ -18941,7 +19004,7 @@ verify_host will check the SSL identity of the host if set to true.
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enables or disables node fixed framerate processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS at a fixed (usually 60 fps, check [OS] to change that) interval (and the [method _fixed_process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_fixed_process_time].
+ Enables or disables node fixed framerate processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS at a fixed (usually 60 fps, check [OS] to change that) interval (and the [method _fixed_process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_fixed_process_delta_time].
</description>
</method>
<method name="get_fixed_process_delta_time" qualifiers="const">
@@ -18962,7 +19025,7 @@ verify_host will check the SSL identity of the host if set to true.
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enables or disables node processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS on every drawn frame (and the [method _process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_process_time].
+ Enables or disables node processing. When a node is being processed, it will receive a NOTIFICATION_PROCESS on every drawn frame (and the [method _process] callback will be called if exists). It is common to check how much time was elapsed since the previous frame by calling [method get_process_delta_time].
</description>
</method>
<method name="get_process_delta_time" qualifiers="const">
@@ -19735,7 +19798,7 @@ verify_host will check the SSL identity of the host if set to true.
<return type="String">
</return>
<description>
- Return the name of the host OS.
+ Return the name of the host OS. Possible values are: "Android", "BlackBerry 10", "Flash", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "WinRT", "X11"
</description>
</method>
<method name="get_cmdline_args">
@@ -21031,7 +21094,7 @@ verify_host will check the SSL identity of the host if set to true.
Provides an opaque background for [Control] children.
</brief_description>
<description>
- Panel is a [Control] that displays an opaque background. It's commonly used as a parent and container for other types of [Control] nodes. [center][img]images/panel_example.png[/img][/center]
+ Panel is a [Control] that displays an opaque background. It's commonly used as a parent and container for other types of [Control] nodes.
</description>
<methods>
</methods>
@@ -23836,7 +23899,7 @@ This method controls whether the position between two cached points is interpola
Base class for all objects affected by physics.
</brief_description>
<description>
- PhysicsBody2D is an abstract base class for implementing a physics body. All [i]x[/i]Body2D types inherit from it.
+ PhysicsBody2D is an abstract base class for implementing a physics body. All *Body2D types inherit from it.
</description>
<methods>
<method name="set_layer_mask">
@@ -23923,7 +23986,7 @@ This method controls whether the position between two cached points is interpola
<argument index="0" name="depth" type="float">
</argument>
<description>
- Set how far a body can go through this one, when it allows one-way collisions (see [method set_one_way_collision_detection]).
+ Set how far a body can go through this one, when it allows one-way collisions (see [method set_one_way_collision_direction]).
</description>
</method>
<method name="get_one_way_collision_max_depth" qualifiers="const">
@@ -26306,35 +26369,35 @@ This method controls whether the position between two cached points is interpola
Portals provide virtual openings to rooms.
</brief_description>
<description>
- Portals provide virtual openings to [RoomInstance] nodes, so cameras can look at them from the outside. Note that portals are a visibility optimization technique, and are in no way related to the game of the same name (as in, they are not used for teleportation). For more information on how rooms and portals work, see [RoomInstance]. Portals are represented as 2D convex polygon shapes (in the X,Y local plane), and are placed on the surface of the areas occupied by a [RoomInstance], to indicate that the room can be accessed or looked-at through them. If two rooms are next to each other, and two similar portals in each of them share the same world position (and are parallel and opposed to each other), they will automatically "connect" and form "doors" (for example, the portals that connect a kitchen to a living room are placed in the door they share). Portals must always have a [RoomInstance] node as a parent, grandparent or far parent, or else they will not be active.
+ Portals provide virtual openings to [VisualInstance] nodes, so cameras can look at them from the outside. Note that portals are a visibility optimization technique, and are in no way related to the game of the same name (as in, they are not used for teleportation). For more information on how rooms and portals work, see [VisualInstance]. Portals are represented as 2D convex polygon shapes (in the X,Y local plane), and are placed on the surface of the areas occupied by a [VisualInstance], to indicate that the room can be accessed or looked-at through them. If two rooms are next to each other, and two similar portals in each of them share the same world position (and are parallel and opposed to each other), they will automatically "connect" and form "doors" (for example, the portals that connect a kitchen to a living room are placed in the door they share). Portals must always have a [VisualInstance] node as a parent, grandparent or far parent, or else they will not be active.
</description>
<methods>
<method name="set_shape">
<argument index="0" name="points" type="Vector2Array">
</argument>
<description>
- Set the portal shape. The shape is an array of [Point2] points, representing a convex polygon in the X,Y plane.
+ Set the portal shape. The shape is an array of [Vector2] points, representing a convex polygon in the X,Y plane.
</description>
</method>
<method name="get_shape" qualifiers="const">
<return type="Vector2Array">
</return>
<description>
- Return the portal shape. The shape is an array of [Point2] points, representing a convex polygon in the X,Y plane.
+ Return the portal shape. The shape is an array of [Vector2] points, representing a convex polygon in the X,Y plane.
</description>
</method>
<method name="set_enabled">
<argument index="0" name="enable" type="bool">
</argument>
<description>
- Enable the portal (it is enabled by default though), disabling it will cause the parent [RoomInstance] to not be visible any longer when looking through the portal.
+ Enable the portal (it is enabled by default though), disabling it will cause the parent [VisualInstance] to not be visible any longer when looking through the portal.
</description>
</method>
<method name="is_enabled" qualifiers="const">
<return type="bool">
</return>
<description>
- Return whether the portal is active. When disabled it causes the parent [RoomInstance] to not be visible any longer when looking through the portal.
+ Return whether the portal is active. When disabled it causes the parent [VisualInstance] to not be visible any longer when looking through the portal.
</description>
</method>
<method name="set_disable_distance">
@@ -27503,6 +27566,14 @@ This method controls whether the position between two cached points is interpola
Returns a captured group. A captured group is the part of a string that matches a part of the pattern delimited by parentheses (unless they are non-capturing parentheses [i](?:)[/i]).
</description>
</method>
+ <method name="get_capture_start" qualifiers="const">
+ <return type="int">
+ </return>
+ <argument index="0" name="capture" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="get_captures" qualifiers="const">
<return type="StringArray">
</return>
@@ -28875,7 +28946,7 @@ This method controls whether the position between two cached points is interpola
Room data resource.
</brief_description>
<description>
- Room contains the data to define the bounds of a scene (using a BSP Tree). It is instanced by a [RoomInstance] node to create rooms. See that class documentation for more information about rooms.
+ Room contains the data to define the bounds of a scene (using a BSP Tree). It is instanced by a [VisualInstance] node to create rooms. See that class documentation for more information about rooms.
</description>
<methods>
<method name="set_room">
@@ -34272,7 +34343,7 @@ This method controls whether the position between two cached points is interpola
<return type="Vector2">
</return>
<description>
- Return the "offset" of a stylebox, this is a helper function, like writing Point2( style.get_margin(MARGIN_LEFT), style.get_margin(MARGIN_TOP) )
+ Return the "offset" of a stylebox, this is a helper function, like writing [code]Vector2(style.get_margin(MARGIN_LEFT), style.get_margin(MARGIN_TOP))[/code].
</description>
</method>
<method name="draw" qualifiers="const">
@@ -36349,6 +36420,17 @@ This method controls whether the position between two cached points is interpola
Return whether the referenced cell is flipped over the Y axis.
</description>
</method>
+ <method name="is_cell_transposed" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="x" type="int">
+ </argument>
+ <argument index="1" name="y" type="int">
+ </argument>
+ <description>
+ Return whether the referenced cell is transposed, i.e. the X and Y axes are swapped (mirroring with regard to the (1,1) vector).
+ </description>
+ </method>
<method name="clear">
<description>
Clear all cells.
diff --git a/main/input_default.cpp b/main/input_default.cpp
index 260af7528b..3af02b2b1f 100644
--- a/main/input_default.cpp
+++ b/main/input_default.cpp
@@ -102,6 +102,18 @@ bool InputDefault::is_action_pressed(const StringName& p_action) {
if (joy_buttons_pressed.has(c))
return true;
} break;
+ case InputEvent::JOYSTICK_MOTION: {
+
+ const InputEventJoystickMotion &iejm=E->get().joy_motion;
+ int c = _combine_device(iejm.axis,device);
+ if (_joy_axis.has(c)) {
+ if (iejm.axis_value < 0) {
+ if (_joy_axis[c] < -0.5f) return true;
+ }
+ else
+ if (_joy_axis[c] > 0.5f) return true;
+ }
+ } break;
}
}
@@ -449,7 +461,7 @@ static const char *s_ControllerMappings [] =
"03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,",
"03000000280400000140000000010000,Gravis GamePad Pro USB ,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1,",
"030000004c0500006802000011010000,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,",
- "030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,",
+ "030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,",
"030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,",
"030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,",
"030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
diff --git a/platform/iphone/xcode/godot_xcode/data.pck b/platform/iphone/xcode/godot_xcode/data.pck
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/data.pck
diff --git a/platform/iphone/xcode/godot_xcode/godot_debug.iphone b/platform/iphone/xcode/godot_xcode/godot_debug.iphone
new file mode 100755
index 0000000000..e69de29bb2
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_debug.iphone
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj b/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..bdba8488c8
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj
@@ -0,0 +1,370 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ D07CD43F1C5D573600B7FB28 /* Default-568h@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */; };
+ D07CD4401C5D573600B7FB28 /* Default-667h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4341C5D573600B7FB28 /* Default-667h.png */; };
+ D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */; };
+ D07CD4421C5D573600B7FB28 /* Default-736h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4361C5D573600B7FB28 /* Default-736h.png */; };
+ D07CD4431C5D573600B7FB28 /* Default-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */; };
+ D07CD4441C5D573600B7FB28 /* Default-Landscape-736h.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */; };
+ D07CD4451C5D573600B7FB28 /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */; };
+ D07CD4461C5D573600B7FB28 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */; };
+ D07CD4471C5D573600B7FB28 /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */; };
+ D07CD4481C5D573600B7FB28 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */; };
+ D07CD4491C5D573600B7FB28 /* Default@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */; };
+ D07CD44A1C5D573600B7FB28 /* Default~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D07CD43E1C5D573600B7FB28 /* Default~iphone.png */; };
+ D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D07CD44D1C5D589C00B7FB28 /* Images.xcassets */; };
+ D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
+ D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; };
+ D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
+ D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */; };
+ D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */; };
+ D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; };
+ D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; };
+ D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x~iphone.png"; sourceTree = "<group>"; };
+ D07CD4341C5D573600B7FB28 /* Default-667h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h.png"; sourceTree = "<group>"; };
+ D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = "<group>"; };
+ D07CD4361C5D573600B7FB28 /* Default-736h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h.png"; sourceTree = "<group>"; };
+ D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h@3x.png"; sourceTree = "<group>"; };
+ D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape-736h.png"; sourceTree = "<group>"; };
+ D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x~ipad.png"; sourceTree = "<group>"; };
+ D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape~ipad.png"; sourceTree = "<group>"; };
+ D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x~ipad.png"; sourceTree = "<group>"; };
+ D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait~ipad.png"; sourceTree = "<group>"; };
+ D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x~iphone.png"; sourceTree = "<group>"; };
+ D07CD43E1C5D573600B7FB28 /* Default~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default~iphone.png"; sourceTree = "<group>"; };
+ D07CD44D1C5D589C00B7FB28 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+ D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
+ D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+ D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_ios-Info.plist"; sourceTree = "<group>"; };
+ D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "godot_ios-Prefix.pch"; sourceTree = "<group>"; };
+ D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
+ D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = text; path = data.pck; sourceTree = "<group>"; };
+ D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ D0BCFE3118AEBDA2004A7AAE /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */,
+ D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */,
+ D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */,
+ D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */,
+ D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ D0BCFE2B18AEBDA2004A7AAE = {
+ isa = PBXGroup;
+ children = (
+ D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */,
+ D0BCFE7718AEBFEB004A7AAE /* data.pck */,
+ D0BCFE4118AEBDA2004A7AAE /* godot_ios */,
+ D0BCFE3618AEBDA2004A7AAE /* Frameworks */,
+ D0BCFE3518AEBDA2004A7AAE /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ D0BCFE3518AEBDA2004A7AAE /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */,
+ D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */,
+ D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */,
+ D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */,
+ D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */,
+ D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = {
+ isa = PBXGroup;
+ children = (
+ D07CD4331C5D573600B7FB28 /* Default-568h@2x~iphone.png */,
+ D07CD4341C5D573600B7FB28 /* Default-667h.png */,
+ D07CD4351C5D573600B7FB28 /* Default-667h@2x.png */,
+ D07CD4361C5D573600B7FB28 /* Default-736h.png */,
+ D07CD4371C5D573600B7FB28 /* Default-736h@3x.png */,
+ D07CD4381C5D573600B7FB28 /* Default-Landscape-736h.png */,
+ D07CD4391C5D573600B7FB28 /* Default-Landscape@2x~ipad.png */,
+ D07CD43A1C5D573600B7FB28 /* Default-Landscape~ipad.png */,
+ D07CD43B1C5D573600B7FB28 /* Default-Portrait@2x~ipad.png */,
+ D07CD43C1C5D573600B7FB28 /* Default-Portrait~ipad.png */,
+ D07CD43D1C5D573600B7FB28 /* Default@2x~iphone.png */,
+ D07CD43E1C5D573600B7FB28 /* Default~iphone.png */,
+ D07CD44D1C5D589C00B7FB28 /* Images.xcassets */,
+ D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
+ );
+ path = godot_ios;
+ sourceTree = "<group>";
+ };
+ D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */,
+ D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */,
+ D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */;
+ buildPhases = (
+ D0BCFE3018AEBDA2004A7AAE /* Sources */,
+ D0BCFE3118AEBDA2004A7AAE /* Frameworks */,
+ D0BCFE3218AEBDA2004A7AAE /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = godot_ios;
+ productName = godot_ios;
+ productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ D0BCFE2C18AEBDA2004A7AAE /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0500;
+ ORGANIZATIONNAME = GodotEngine;
+ };
+ buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = D0BCFE2B18AEBDA2004A7AAE;
+ productRefGroup = D0BCFE3518AEBDA2004A7AAE /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ D0BCFE3318AEBDA2004A7AAE /* godot_ios */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ D0BCFE3218AEBDA2004A7AAE /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D07CD4471C5D573600B7FB28 /* Default-Portrait@2x~ipad.png in Resources */,
+ D07CD44E1C5D589C00B7FB28 /* Images.xcassets in Resources */,
+ D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */,
+ D07CD4461C5D573600B7FB28 /* Default-Landscape~ipad.png in Resources */,
+ D07CD4411C5D573600B7FB28 /* Default-667h@2x.png in Resources */,
+ D07CD4401C5D573600B7FB28 /* Default-667h.png in Resources */,
+ D07CD4431C5D573600B7FB28 /* Default-736h@3x.png in Resources */,
+ D07CD43F1C5D573600B7FB28 /* Default-568h@2x~iphone.png in Resources */,
+ D07CD4451C5D573600B7FB28 /* Default-Landscape@2x~ipad.png in Resources */,
+ D07CD44A1C5D573600B7FB28 /* Default~iphone.png in Resources */,
+ D07CD4491C5D573600B7FB28 /* Default@2x~iphone.png in Resources */,
+ D07CD4441C5D573600B7FB28 /* Default-Landscape-736h.png in Resources */,
+ D07CD4421C5D573600B7FB28 /* Default-736h.png in Resources */,
+ D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
+ D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */,
+ D07CD4481C5D573600B7FB28 /* Default-Portrait~ipad.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ D0BCFE3018AEBDA2004A7AAE /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ D0BCFE4518AEBDA2004A7AAE /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ D0BCFE6F18AEBDA3004A7AAE /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ D0BCFE7018AEBDA3004A7AAE /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ D0BCFE7218AEBDA3004A7AAE /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD)";
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
+ INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ PRODUCT_BUNDLE_IDENTIFIER = org.godotengine.game.ios;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALID_ARCHS = "armv7 armv7s";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ D0BCFE7318AEBDA3004A7AAE /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD)";
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Distribution: Ariel Manzur (BYC57PA2Q5)";
+ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
+ INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ PRODUCT_BUNDLE_IDENTIFIER = org.godotengine.game.ios;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALID_ARCHS = "armv7 armv7s";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D0BCFE6F18AEBDA3004A7AAE /* Debug */,
+ D0BCFE7018AEBDA3004A7AAE /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D0BCFE7218AEBDA3004A7AAE /* Debug */,
+ D0BCFE7318AEBDA3004A7AAE /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
+}
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..3c9ba38bbe
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:godot_ios.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png
new file mode 100644
index 0000000000..1341174454
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png
new file mode 100644
index 0000000000..c480d2e3c0
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png
new file mode 100644
index 0000000000..3cc1dfa290
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png
new file mode 100644
index 0000000000..813d689162
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png
new file mode 100644
index 0000000000..7707005e76
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png
new file mode 100644
index 0000000000..b02873323e
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png
new file mode 100644
index 0000000000..d86c4a2510
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png
new file mode 100644
index 0000000000..e4f6cef02b
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png
new file mode 100644
index 0000000000..f306652a31
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png
new file mode 100644
index 0000000000..71a16db6df
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png
new file mode 100644
index 0000000000..5305cb9bdb
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png b/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png
new file mode 100644
index 0000000000..91c62d1e43
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..a458b67873
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,128 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "1x",
+ "filename": "Icon-29.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x",
+ "filename": "Icon-58.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x",
+ "filename": "icon-87.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x",
+ "filename": "Icon-80.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x",
+ "filename": "Icon-120.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "57x57",
+ "scale" : "1x",
+ "filename": "Icon-57.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "57x57",
+ "scale" : "2x",
+ "filename": "Icon-114.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x",
+ "filename": "Icon-120.png",
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x",
+ "filename": "Icon-180.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x",
+ "filename": "Icon-29.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x",
+ "filename": "Icon-58.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x",
+ "filename": "Icon-40.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x",
+ "filename": "Icon-80.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "50x50",
+ "scale" : "1x",
+ "filename": "Icon-50.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "50x50",
+ "scale" : "2x",
+ "filename": "Icon-100.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "72x72",
+ "scale" : "1x",
+ "filename": "Icon-72.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "72x72",
+ "scale" : "2x",
+ "filename": "Icon-144.png",
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-76.png",
+ "scale" : "1x",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x",
+ "filename": "Icon-152.png",
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x",
+ "filename": "icon-167.png",
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png
new file mode 100644
index 0000000000..f9dca1ab57
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png
new file mode 100644
index 0000000000..e7f9bd7388
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png
new file mode 100644
index 0000000000..4faa0f28e2
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png
new file mode 100644
index 0000000000..1c4cb51d56
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png
new file mode 100644
index 0000000000..e99b11c519
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png
new file mode 100644
index 0000000000..3edbcadfc5
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png
new file mode 100644
index 0000000000..0ae5893203
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png
new file mode 100644
index 0000000000..bb4ffa70ad
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png
new file mode 100644
index 0000000000..7a4b7107e7
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png
new file mode 100644
index 0000000000..b00bd79091
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png
new file mode 100644
index 0000000000..46335efdf6
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png
new file mode 100644
index 0000000000..2c9c2b61dc
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png
new file mode 100644
index 0000000000..d711958ef1
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png
new file mode 100644
index 0000000000..464e7e7289
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png
new file mode 100644
index 0000000000..1151bc6b4b
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png
new file mode 100644
index 0000000000..487c8326be
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png
new file mode 100644
index 0000000000..e54cee23a6
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes
new file mode 100644
index 0000000000..e328a62cb6
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes
@@ -0,0 +1,17 @@
+100
+114
+120
+144
+152
+167
+180
+29
+40
+50
+57
+58
+60
+72
+76
+80
+87
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings b/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..477b28ff8f
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist b/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist
new file mode 100644
index 0000000000..f97b0fca36
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleDisplayName</key>
+ <string>Insert Name Here</string>
+ <key>CFBundleExecutable</key>
+ <string>godot_opt.iphone</string>
+ <key>CFBundleIcons</key>
+ <dict/>
+ <key>CFBundleIcons~ipad</key>
+ <dict/>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UIRequiresFullScreen</key>
+ <true/>
+ <key>UIStatusBarHidden</key>
+ <true/>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/main.m b/platform/iphone/xcode/godot_xcode/godot_ios/main.m
new file mode 100644
index 0000000000..3e4ea5e129
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_ios/main.m
@@ -0,0 +1,39 @@
+/*************************************************************************/
+/* main.m */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[])
+{
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/platform/iphone/xcode/godot_xcode/godot_opt.iphone b/platform/iphone/xcode/godot_xcode/godot_opt.iphone
new file mode 100755
index 0000000000..e69de29bb2
--- /dev/null
+++ b/platform/iphone/xcode/godot_xcode/godot_opt.iphone
diff --git a/platform/windows/joystick.cpp b/platform/windows/joystick.cpp
index f4fb09820f..f8526b5ec1 100644
--- a/platform/windows/joystick.cpp
+++ b/platform/windows/joystick.cpp
@@ -472,7 +472,7 @@ InputDefault::JoyAxis joystick_windows::axis_correct(int p_val, bool p_xinput, b
InputDefault::JoyAxis jx;
if (Math::abs(p_val) < MIN_JOY_AXIS) {
- jx.min = -1;
+ jx.min = p_trigger ? 0 : -1;
jx.value = 0.0f;
return jx;
}
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index f49475a2d5..6b147db130 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -56,7 +56,7 @@ def get_opts():
('use_sanitizer','Use llvm compiler sanitize address','no'),
('use_leak_sanitizer','Use llvm compiler sanitize memory leaks','no'),
('pulseaudio','Detect & Use pulseaudio','yes'),
- ('gamepad','Gamepad support, requires libudev and libevdev','yes'),
+ ('udev','Use udev for gamepad connection callbacks','no'),
('new_wm_api', 'Use experimental window management API','no'),
('debug_release', 'Add debug symbols to release version','no'),
]
@@ -156,20 +156,18 @@ def configure(env):
else:
print("ALSA libraries not found, disabling driver")
- if (env["gamepad"]=="yes" and platform.system() == "Linux"):
+ if (platform.system() == "Linux"):
+ env.Append(CPPFLAGS=["-DJOYDEV_ENABLED"])
+ if (env["udev"]=="yes"):
# pkg-config returns 0 when the lib exists...
found_udev = not os.system("pkg-config --exists libudev")
-
+
if (found_udev):
- print("Enabling gamepad support with udev")
- env.Append(CPPFLAGS=["-DJOYDEV_ENABLED"])
+ print("Enabling udev support")
+ env.Append(CPPFLAGS=["-DUDEV_ENABLED"])
env.ParseConfig('pkg-config libudev --cflags --libs')
else:
- print("libudev development libraries not found")
-
- print("Some libraries are missing for the required gamepad support, aborting!")
- print("Install the mentioned libraries or build with 'gamepad=no' to disable gamepad support.")
- sys.exit(255)
+ print("libudev development libraries not found, disabling udev support")
if (env["pulseaudio"]=="yes"):
if not os.system("pkg-config --exists libpulse-simple"):
diff --git a/platform/x11/joystick_linux.cpp b/platform/x11/joystick_linux.cpp
index ef866d5d3a..9a52c4ff36 100644
--- a/platform/x11/joystick_linux.cpp
+++ b/platform/x11/joystick_linux.cpp
@@ -33,11 +33,14 @@
#include "joystick_linux.h"
#include <linux/input.h>
-#include <libudev.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
+#ifdef UDEV_ENABLED
+#include <libudev.h>
+#endif
+
#define LONG_BITS (sizeof(long) * 8)
#define test_bit(nr, addr) (((1UL << ((nr) % LONG_BITS)) & ((addr)[(nr) / LONG_BITS])) != 0)
#define NBITS(x) ((((x)-1)/LONG_BITS)+1)
@@ -99,14 +102,18 @@ void joystick_linux::joy_thread_func(void *p_user) {
}
void joystick_linux::run_joystick_thread() {
-
+#ifdef UDEV_ENABLED
udev *_udev = udev_new();
ERR_FAIL_COND(!_udev);
enumerate_joysticks(_udev);
monitor_joysticks(_udev);
udev_unref(_udev);
+#else
+ monitor_joysticks();
+#endif
}
+#ifdef UDEV_ENABLED
void joystick_linux::enumerate_joysticks(udev *p_udev) {
udev_enumerate *enumerate;
@@ -192,6 +199,23 @@ void joystick_linux::monitor_joysticks(udev *p_udev) {
//printf("exit udev\n");
udev_monitor_unref(mon);
}
+#endif
+
+void joystick_linux::monitor_joysticks() {
+
+ while (!exit_udev) {
+ joy_mutex->lock();
+ for (int i = 0; i < 32; i++) {
+ char fname[64];
+ sprintf(fname, "/dev/input/event%d", i);
+ if (attached_devices.find(fname) == -1) {
+ open_joystick(fname);
+ }
+ }
+ joy_mutex->unlock();
+ usleep(1000000); // 1s
+ }
+}
int joystick_linux::get_free_joy_slot() const {
@@ -229,6 +253,7 @@ void joystick_linux::close_joystick(int p_id) {
close(joy.fd);
joy.fd = -1;
+ attached_devices.remove(attached_devices.find(joy.devpath));
input->joy_connection_changed(p_id, false, "");
};
};
@@ -302,6 +327,9 @@ void joystick_linux::open_joystick(const char *p_path) {
unsigned long keybit[NBITS(KEY_MAX)] = { 0 };
unsigned long absbit[NBITS(ABS_MAX)] = { 0 };
+ // add to attached devices so we don't try to open it again
+ attached_devices.push_back(String(p_path));
+
if ((ioctl(fd, EVIOCGBIT(0, sizeof(evbit)), evbit) < 0) ||
(ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) < 0) ||
(ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0)) {
@@ -446,6 +474,9 @@ uint32_t joystick_linux::process_joysticks(uint32_t p_event_id) {
p_event_id = input->joy_axis(p_event_id, i, index, joy->curr_axis[index]);
}
}
+ if (len == 0 || (len < 0 && errno != EAGAIN)) {
+ close_joystick(i);
+ };
}
joy_mutex->unlock();
return p_event_id;
diff --git a/platform/x11/joystick_linux.h b/platform/x11/joystick_linux.h
index 7f96e3451f..e433f5e8e3 100644
--- a/platform/x11/joystick_linux.h
+++ b/platform/x11/joystick_linux.h
@@ -73,6 +73,7 @@ private:
Thread *joy_thread;
InputDefault *input;
Joystick joysticks[JOYSTICKS_MAX];
+ Vector<String> attached_devices;
static void joy_thread_func(void *p_user);
@@ -81,8 +82,11 @@ private:
void setup_joystick_properties(int p_id);
void close_joystick(int p_id = -1);
+#ifdef UDEV_ENABLED
void enumerate_joysticks(struct udev *_udev);
void monitor_joysticks(struct udev *_udev);
+#endif
+ void monitor_joysticks();
void run_joystick_thread();
void open_joystick(const char* path);
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index 5c298e96f6..2014c9730f 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -1205,6 +1205,7 @@ void TileMap::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_cellv","pos"),&TileMap::get_cellv);
ObjectTypeDB::bind_method(_MD("is_cell_x_flipped","x","y"),&TileMap::is_cell_x_flipped);
ObjectTypeDB::bind_method(_MD("is_cell_y_flipped","x","y"),&TileMap::is_cell_y_flipped);
+ ObjectTypeDB::bind_method(_MD("is_cell_transposed","x","y"),&TileMap::is_cell_transposed);
ObjectTypeDB::bind_method(_MD("clear"),&TileMap::clear);
diff --git a/servers/visual/particle_system_sw.h b/servers/visual/particle_system_sw.h
index 9a176ba0d4..87c71696cf 100644
--- a/servers/visual/particle_system_sw.h
+++ b/servers/visual/particle_system_sw.h
@@ -38,7 +38,7 @@
struct ParticleSystemSW {
enum {
- MAX_PARTICLES=1024
+ MAX_PARTICLES=4096
};
float particle_vars[VS::PARTICLE_VAR_MAX];
diff --git a/tools/editor/plugins/animation_player_editor_plugin.cpp b/tools/editor/plugins/animation_player_editor_plugin.cpp
index 32afd86970..fcb9f4db14 100644
--- a/tools/editor/plugins/animation_player_editor_plugin.cpp
+++ b/tools/editor/plugins/animation_player_editor_plugin.cpp
@@ -942,6 +942,14 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value) {
anim=player->get_animation(current);
float pos = anim->get_length() * (p_value / frame->get_max());
+ float step = anim->get_step();
+ if (step) {
+ pos=Math::stepify(pos, step);
+ if (pos<0)
+ pos=0;
+ if (pos>=anim->get_length())
+ pos=anim->get_length();
+ }
if (player->is_valid()) {
float cpos = player->get_current_animation_pos();
diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp
index 22e93c5a95..fd76ea3087 100644
--- a/tools/editor/project_settings.cpp
+++ b/tools/editor/project_settings.cpp
@@ -97,26 +97,63 @@ void ProjectSettings::_notification(int p_what) {
}
}
-void ProjectSettings::_action_persist_toggle() {
+void ProjectSettings::_action_selected() {
+ TreeItem *ti=input_editor->get_selected();
+ if (!ti || !ti->is_editable(0))
+ return;
+
+ add_at="input/"+ti->get_text(0);
+}
+
+void ProjectSettings::_action_edited() {
TreeItem *ti=input_editor->get_selected();
if (!ti)
return;
- String name="input/"+ti->get_text(0);
+ String new_name=ti->get_text(0);
+ String old_name=add_at.substr(add_at.find("/")+1,add_at.length());
+
+ if (new_name==old_name)
+ return;
+
+ if (new_name.find("/")!=-1 || new_name.find(":")!=-1 || new_name=="") {
- bool prev = Globals::get_singleton()->is_persisting(name);
- print_line("prev persist: "+itos(prev));
- print_line("new persist: "+itos(ti->is_checked(0)));
- if (prev==ti->is_checked(0))
+ ti->set_text(0,old_name);
+ add_at="input/"+old_name;
+
+ message->set_text("Invalid Action (Anything goes but / or :).");
+ message->popup_centered(Size2(300,100));
return;
+ }
+ String action_prop="input/"+new_name;
+
+ if (Globals::get_singleton()->has(action_prop)) {
+
+ ti->set_text(0,old_name);
+ add_at="input/"+old_name;
+
+ message->set_text("Action '"+new_name+"' already exists!.");
+ message->popup_centered(Size2(300,100));
+ return;
+ }
+
+ int order = Globals::get_singleton()->get_order(add_at);
+ Array va = Globals::get_singleton()->get(add_at);
+ bool persisting = Globals::get_singleton()->is_persisting(add_at);
setting=true;
- undo_redo->create_action("Change Input Action Persistence");
- undo_redo->add_do_method(Globals::get_singleton(),"set_persisting",name,ti->is_checked(0));
- undo_redo->add_undo_method(Globals::get_singleton(),"set_persisting",name,prev);
+ undo_redo->create_action("Rename Input Action Event");
+ undo_redo->add_do_method(Globals::get_singleton(),"clear",add_at);
+ undo_redo->add_do_method(Globals::get_singleton(),"set",action_prop,va);
+ undo_redo->add_do_method(Globals::get_singleton(),"set_persisting",action_prop,persisting);
+ undo_redo->add_do_method(Globals::get_singleton(),"set_order",action_prop,order);
+ undo_redo->add_undo_method(Globals::get_singleton(),"clear",action_prop);
+ undo_redo->add_undo_method(Globals::get_singleton(),"set",add_at,va);
+ undo_redo->add_undo_method(Globals::get_singleton(),"set_persisting",add_at,persisting);
+ undo_redo->add_undo_method(Globals::get_singleton(),"set_order",add_at,order);
undo_redo->add_do_method(this,"_update_actions");
undo_redo->add_undo_method(this,"_update_actions");
undo_redo->add_do_method(this,"_settings_changed");
@@ -124,6 +161,8 @@ void ProjectSettings::_action_persist_toggle() {
undo_redo->commit_action();
setting=false;
+ add_at=action_prop;
+
}
@@ -356,15 +395,6 @@ void ProjectSettings::_action_button_pressed(Object* p_obj, int p_column,int p_i
add_at="input/"+ti->get_text(0);
} else if (p_id==2) {
- //rename
-
- add_at="input/"+ti->get_text(0);
- rename_action->popup_centered();
- rename_action->get_line_edit()->set_text(ti->get_text(0));
- rename_action->get_line_edit()->set_cursor_pos(ti->get_text(0).length());
- rename_action->get_line_edit()->select_all();
-
- } else if (p_id==3) {
//remove
if (ti->get_parent()==input_editor->get_root()) {
@@ -446,15 +476,13 @@ void ProjectSettings::_update_actions() {
item->set_text(0,name);
item->add_button(0,get_icon("Add","EditorIcons"),1);
if (!Globals::get_singleton()->get_input_presets().find(pi.name)) {
- item->add_button(0,get_icon("Rename","EditorIcons"),2);
- item->add_button(0,get_icon("Remove","EditorIcons"),3);
+ item->add_button(0,get_icon("Remove","EditorIcons"),2);
+ item->set_editable(0,true);
}
item->set_custom_bg_color(0,get_color("prop_subsection","Editor"));
- item->set_editable(0,true);
//item->set_checked(0,pi.usage&PROPERTY_USAGE_CHECKED);
-
Array actions=Globals::get_singleton()->get(pi.name);
for(int i=0;i<actions.size();i++) {
@@ -527,7 +555,7 @@ void ProjectSettings::_update_actions() {
action->set_icon(0,get_icon("JoyAxis","EditorIcons"));
} break;
}
- action->add_button(0,get_icon("Remove","EditorIcons"),3);
+ action->add_button(0,get_icon("Remove","EditorIcons"),2);
action->set_metadata(0,i);
}
}
@@ -658,45 +686,6 @@ void ProjectSettings::_action_add() {
}
-void ProjectSettings::_action_rename(const String &p_name) {
-
-
- if (p_name.find("/")!=-1 || p_name.find(":")!=-1 || p_name=="") {
- message->set_text("Invalid Action (Anything goes but / or :).");
- message->popup_centered(Size2(300,100));
- return;
- }
-
- String new_name = "input/"+p_name;
-
- if (Globals::get_singleton()->has(new_name)) {
- message->set_text("Action '"+p_name+"' already exists!.");
- message->popup_centered(Size2(300,100));
- return;
- }
-
- int order = Globals::get_singleton()->get_order(add_at);
- Array va = Globals::get_singleton()->get(add_at);
- bool persisting = Globals::get_singleton()->is_persisting(add_at);
-
- undo_redo->create_action("Rename Input Action Event");
- undo_redo->add_do_method(Globals::get_singleton(),"clear",add_at);
- undo_redo->add_do_method(Globals::get_singleton(),"set",new_name,va);
- undo_redo->add_do_method(Globals::get_singleton(),"set_persisting",new_name,persisting);
- undo_redo->add_do_method(Globals::get_singleton(),"set_order",new_name,order);
- undo_redo->add_undo_method(Globals::get_singleton(),"clear",new_name);
- undo_redo->add_undo_method(Globals::get_singleton(),"set",add_at,va);
- undo_redo->add_undo_method(Globals::get_singleton(),"set_persisting",add_at,persisting);
- undo_redo->add_undo_method(Globals::get_singleton(),"set_order",add_at,order);
- undo_redo->add_do_method(this,"_update_actions");
- undo_redo->add_undo_method(this,"_update_actions");
- undo_redo->add_do_method(this,"_settings_changed");
- undo_redo->add_undo_method(this,"_settings_changed");
- undo_redo->commit_action();
-
- rename_action->hide();
-}
-
void ProjectSettings::_item_checked(const String& p_item, bool p_check) {
@@ -1403,9 +1392,9 @@ void ProjectSettings::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_save"),&ProjectSettings::_save);
ObjectTypeDB::bind_method(_MD("_action_add"),&ProjectSettings::_action_add);
ObjectTypeDB::bind_method(_MD("_action_adds"),&ProjectSettings::_action_adds);
- ObjectTypeDB::bind_method(_MD("_action_persist_toggle"),&ProjectSettings::_action_persist_toggle);
+ ObjectTypeDB::bind_method(_MD("_action_selected"),&ProjectSettings::_action_selected);
+ ObjectTypeDB::bind_method(_MD("_action_edited"),&ProjectSettings::_action_edited);
ObjectTypeDB::bind_method(_MD("_action_button_pressed"),&ProjectSettings::_action_button_pressed);
- ObjectTypeDB::bind_method(_MD("_action_rename"),&ProjectSettings::_action_rename);
ObjectTypeDB::bind_method(_MD("_update_actions"),&ProjectSettings::_update_actions);
ObjectTypeDB::bind_method(_MD("_wait_for_key"),&ProjectSettings::_wait_for_key);
ObjectTypeDB::bind_method(_MD("_add_item"),&ProjectSettings::_add_item);
@@ -1620,19 +1609,13 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
input_editor->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END, 35 );
input_editor->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN, 5 );
input_editor->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END, 5 );
- input_editor->connect("item_edited",this,"_action_persist_toggle");
+ input_editor->connect("item_edited",this,"_action_edited");
+ input_editor->connect("cell_selected",this,"_action_selected");
input_editor->connect("button_pressed",this,"_action_button_pressed");
popup_add = memnew( PopupMenu );
add_child(popup_add);
popup_add->connect("item_pressed",this,"_add_item");
- rename_action = memnew( EditorNameDialog );
- add_child(rename_action);
- rename_action->set_hide_on_ok(false);
- rename_action->set_size(Size2(200, 70));
- rename_action->set_title("Rename Input Action");
- rename_action->connect("name_confirmed", this,"_action_rename");
-
press_a_key = memnew( ConfirmationDialog );
press_a_key->set_focus_mode(FOCUS_ALL);
add_child(press_a_key);
diff --git a/tools/editor/project_settings.h b/tools/editor/project_settings.h
index b689340fdf..fd56fc1478 100644
--- a/tools/editor/project_settings.h
+++ b/tools/editor/project_settings.h
@@ -34,7 +34,6 @@
#include "optimized_save_dialog.h"
#include "undo_redo.h"
#include "editor_data.h"
-#include "editor_name_dialog.h"
//#include "project_export_settings.h"
class ProjectSettings : public AcceptDialog {
@@ -67,8 +66,6 @@ class ProjectSettings : public AcceptDialog {
Label *device_index_label;
MenuButton *popup_platform;
- EditorNameDialog *rename_action;
-
LineEdit *action_name;
Tree *input_editor;
bool setting;
@@ -111,11 +108,11 @@ class ProjectSettings : public AcceptDialog {
void _action_adds(String);
void _action_add();
- void _action_rename(const String& p_name);
void _device_input_add();
void _item_checked(const String& p_item, bool p_check);
- void _action_persist_toggle();
+ void _action_selected();
+ void _action_edited();
void _action_button_pressed(Object* p_obj, int p_column,int p_id);
void _wait_for_key(const InputEvent& p_event);
void _press_a_key_confirm();