summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
Diffstat (limited to 'demos')
-rw-r--r--demos/2d/kinematic_char/colworld.gd8
-rw-r--r--demos/2d/kinematic_char/player.gd23
-rw-r--r--demos/2d/platformer/stage.xml23
-rw-r--r--demos/2d/pong/pong.gd12
-rw-r--r--demos/3d/kinematic_char/cubelib.resbin0 -> 11431 bytes
-rw-r--r--demos/3d/kinematic_char/cubio.gd96
-rw-r--r--demos/3d/kinematic_char/engine.cfg17
-rw-r--r--demos/3d/kinematic_char/follow_camera.gd92
-rw-r--r--demos/3d/kinematic_char/kinebody3d.pngbin0 -> 6078 bytes
-rw-r--r--demos/3d/kinematic_char/level.scnbin0 -> 15248 bytes
-rw-r--r--demos/3d/kinematic_char/purple_wood.texbin0 -> 173520 bytes
-rw-r--r--demos/3d/kinematic_char/purplecube.scnbin0 -> 9808 bytes
-rw-r--r--demos/3d/kinematic_char/twood.texbin0 -> 168054 bytes
-rw-r--r--demos/3d/kinematic_char/white_wood.texbin0 -> 169001 bytes
-rw-r--r--demos/3d/mousepick_test/engine.cfg5
-rw-r--r--demos/3d/mousepick_test/icon.pngbin0 -> 2451 bytes
-rw-r--r--demos/3d/mousepick_test/mousepick.gd32
-rw-r--r--demos/3d/mousepick_test/mousepick.scnbin0 -> 38194 bytes
-rw-r--r--demos/3d/platformer/follow_camera.gd6
-rw-r--r--demos/misc/joysticks/engine.cfg10
-rw-r--r--demos/misc/joysticks/icon.pngbin0 -> 2916 bytes
-rw-r--r--demos/misc/joysticks/joysticks.gd40
-rw-r--r--demos/misc/joysticks/joysticks.scnbin0 -> 3809 bytes
-rw-r--r--demos/misc/tween/engine.cfg11
-rw-r--r--demos/misc/tween/main.gd164
-rw-r--r--demos/misc/tween/main.xml367
26 files changed, 871 insertions, 35 deletions
diff --git a/demos/2d/kinematic_char/colworld.gd b/demos/2d/kinematic_char/colworld.gd
index efd1dab805..d13ff9236b 100644
--- a/demos/2d/kinematic_char/colworld.gd
+++ b/demos/2d/kinematic_char/colworld.gd
@@ -1,12 +1,12 @@
extends Node2D
-# member variables here, example:
-# var a=2
-# var b="textvar"
+#member variables here, example:
+#var a=2
+#var b="textvar"
func _ready():
- # Initalization here
+ #Initalization here
pass
diff --git a/demos/2d/kinematic_char/player.gd b/demos/2d/kinematic_char/player.gd
index b35bbfa693..5c56477758 100644
--- a/demos/2d/kinematic_char/player.gd
+++ b/demos/2d/kinematic_char/player.gd
@@ -1,18 +1,18 @@
extends KinematicBody2D
-# This is a simple collision demo showing how
-# the kinematic cotroller works.
-# move() will allow to move the node, and will
-# always move it to a non-colliding spot,
-# as long as it starts from a non-colliding spot too.
+#This is a simple collision demo showing how
+#the kinematic cotroller works.
+#move() will allow to move the node, and will
+#always move it to a non-colliding spot,
+#as long as it starts from a non-colliding spot too.
#pixels / second
const GRAVITY = 500.0
-# Angle in degrees towards either side that the player can
-# consider "floor".
+#Angle in degrees towards either side that the player can
+#consider "floor".
const FLOOR_ANGLE_TOLERANCE = 40
const WALK_FORCE = 600
const WALK_MAX_SPEED = 200
@@ -68,7 +68,6 @@ func _fixed_process(delta):
var motion = velocity * delta
#move and consume motion
-#
motion = move(motion)
@@ -85,9 +84,9 @@ func _fixed_process(delta):
floor_velocity=get_collider_velocity()
#velocity.y=0
- # But we were moving and our motion was interrupted,
- # so try to complete the motion by "sliding"
- # by the normal
+ #But we were moving and our motion was interrupted,
+ #so try to complete the motion by "sliding"
+ #by the normal
motion = n.slide(motion)
velocity = n.slide(velocity)
@@ -109,7 +108,7 @@ func _fixed_process(delta):
prev_jump_pressed=jump
func _ready():
- # Initalization here
+ #Initalization here
set_fixed_process(true)
pass
diff --git a/demos/2d/platformer/stage.xml b/demos/2d/platformer/stage.xml
index 6a112e02aa..78d0f9ae2c 100644
--- a/demos/2d/platformer/stage.xml
+++ b/demos/2d/platformer/stage.xml
@@ -1,19 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<resource_file type="PackedScene" subresource_count="9" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
- <ext_resource path="res://music.ogg" type="AudioStream"></ext_resource>
<ext_resource path="res://tileset.xml" type="TileSet"></ext_resource>
+ <ext_resource path="res://music.ogg" type="AudioStream"></ext_resource>
<ext_resource path="res://coin.xml" type="PackedScene"></ext_resource>
<ext_resource path="res://player.xml" type="PackedScene"></ext_resource>
- <ext_resource path="res://moving_platform.xml" type="PackedScene"></ext_resource>
<ext_resource path="res://seesaw.xml" type="PackedScene"></ext_resource>
+ <ext_resource path="res://moving_platform.xml" type="PackedScene"></ext_resource>
<ext_resource path="res://enemy.xml" type="PackedScene"></ext_resource>
<ext_resource path="res://parallax_bg.xml" type="PackedScene"></ext_resource>
<main_resource>
<dictionary name="_bundled" shared="false">
<string> "names" </string>
- <string_array len="119">
+ <string_array len="122">
<string> "stage" </string>
<string> "Node" </string>
+ <string> "_import_path" </string>
<string> "__meta__" </string>
<string> "tile_map" </string>
<string> "TileMap" </string>
@@ -28,7 +29,9 @@
<string> "quadrant_size" </string>
<string> "tile_set" </string>
<string> "tile_data" </string>
- <string> "collision_layers" </string>
+ <string> "collision/friction" </string>
+ <string> "collision/bounce" </string>
+ <string> "collision/layers" </string>
<string> "coins" </string>
<string> "coin" </string>
<string> "Area2D" </string>
@@ -140,6 +143,7 @@
<int> 66 </int>
<string> "variants" </string>
<array len="96" shared="false">
+ <node_path> "" </node_path>
<dictionary shared="false">
<string> "__editor_plugin_states__" </string>
<dictionary shared="false">
@@ -164,7 +168,7 @@
<string> "use_snap" </string>
<bool> False </bool>
<string> "ofs" </string>
- <vector2> 418.81, 615.088 </vector2>
+ <vector2> -177.089, 415.221 </vector2>
<string> "snap" </string>
<int> 10 </int>
</dictionary>
@@ -318,7 +322,7 @@
<vector2> 4236.75, 541.058 </vector2>
<vector2> 4172.75, 541.058 </vector2>
<resource resource_type="PackedScene" path="res://player.xml"> </resource>
- <vector2> 236.879, 1051.15 </vector2>
+ <vector2> 251.684, 1045.6 </vector2>
<resource resource_type="PackedScene" path="res://moving_platform.xml"> </resource>
<vector2> 1451.86, 742.969 </vector2>
<vector2> 0, 140 </vector2>
@@ -349,16 +353,15 @@
<real> -202 </real>
<real> 358 </real>
<real> -10 </real>
- <node_path> "" </node_path>
<int> 2 </int>
- <real> 14 </real>
+ <real> 7 </real>
<real> 14.769231 </real>
- <string> "This is a simple demo on how to make a platformer game with Godot.&#10;This version uses physics and the 2D physics engine for motion and collision.&#10;&#10;The demo also shows the benefits of using the scene system, where coins,&#10;enemies and the player are edited separatedly and instanced in the stage.&#10;&#10;To edit the base tiles for the tileset, open the tileset_edit.xml file and follow &#10;instructions.&#10;" </string>
+ <string> "This is a simple demo on how to make a platformer game with Godot.&#22;This version uses physics and the 2D physics engine for motion and collision.&#22;&#22;The demo also shows the benefits of using the scene system, where coins,&#22;enemies and the player are edited separatedly and instanced in the stage.&#22;&#22;To edit the base tiles for the tileset, open the tileset_edit.xml file and follow &#22;instructions.&#22;" </string>
<int> 0 </int>
<real> -1 </real>
</array>
<string> "nodes" </string>
- <int_array len="690"> -1, -1, 1, 0, -1, 1, 2, 0, 0, 0, 0, 4, 3, -1, 13, 5, 1, 6, 2, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14, 9, 15, 10, 16, 11, 2, 12, 0, 0, 0, 1, 17, -1, 1, 2, 13, 0, 2, 0, 19, 18, 14, 1, 9, 15, 0, 2, 0, 19, 20, 14, 1, 9, 16, 0, 2, 0, 19, 21, 14, 1, 9, 17, 0, 2, 0, 19, 22, 14, 1, 9, 18, 0, 2, 0, 19, 23, 14, 1, 9, 19, 0, 2, 0, 19, 24, 14, 1, 9, 20, 0, 2, 0, 19, 25, 14, 1, 9, 21, 0, 2, 0, 19, 26, 14, 1, 9, 22, 0, 2, 0, 19, 27, 14, 1, 9, 23, 0, 2, 0, 19, 28, 14, 1, 9, 24, 0, 2, 0, 19, 29, 14, 1, 9, 25, 0, 2, 0, 19, 30, 14, 1, 9, 26, 0, 2, 0, 19, 31, 14, 1, 9, 27, 0, 2, 0, 19, 32, 14, 1, 9, 28, 0, 2, 0, 19, 33, 14, 1, 9, 29, 0, 2, 0, 19, 34, 14, 1, 9, 30, 0, 2, 0, 19, 35, 14, 1, 9, 31, 0, 2, 0, 19, 36, 14, 1, 9, 32, 0, 2, 0, 19, 37, 14, 1, 9, 33, 0, 2, 0, 19, 38, 14, 1, 9, 34, 0, 2, 0, 19, 39, 14, 1, 9, 35, 0, 2, 0, 19, 40, 14, 1, 9, 36, 0, 2, 0, 19, 41, 14, 1, 9, 37, 0, 2, 0, 19, 42, 14, 1, 9, 38, 0, 2, 0, 19, 43, 14, 1, 9, 39, 0, 2, 0, 19, 44, 14, 1, 9, 40, 0, 2, 0, 19, 45, 14, 1, 9, 41, 0, 2, 0, 19, 46, 14, 1, 9, 42, 0, 2, 0, 19, 47, 14, 1, 9, 43, 0, 2, 0, 19, 48, 14, 1, 9, 44, 0, 2, 0, 19, 49, 14, 1, 9, 45, 0, 2, 0, 19, 50, 14, 1, 9, 46, 0, 2, 0, 19, 51, 14, 1, 9, 47, 0, 2, 0, 19, 52, 14, 1, 9, 48, 0, 2, 0, 19, 53, 14, 1, 9, 49, 0, 2, 0, 19, 54, 14, 1, 9, 50, 0, 2, 0, 19, 55, 14, 1, 9, 51, 0, 2, 0, 19, 56, 14, 1, 9, 52, 0, 2, 0, 19, 57, 14, 1, 9, 53, 0, 2, 0, 19, 58, 14, 1, 9, 54, 0, 2, 0, 19, 59, 14, 1, 9, 55, 0, 2, 0, 19, 60, 14, 1, 9, 56, 0, 0, 0, 62, 61, 57, 1, 9, 58, 0, 0, 0, 1, 63, -1, 0, 0, 46, 0, 65, 64, 59, 3, 9, 60, 66, 61, 67, 62, 0, 46, 0, 65, 68, 59, 3, 9, 63, 66, 64, 67, 65, 0, 46, 0, 65, 69, 59, 3, 9, 66, 66, 67, 67, 65, 0, 46, 0, 65, 70, 68, 1, 9, 69, 0, 0, 0, 72, 71, -1, 6, 73, 70, 74, 3, 75, 1, 76, 71, 77, 1, 78, 3, 0, 0, 0, 1, 79, -1, 0, 0, 52, 0, 62, 80, 72, 1, 9, 73, 0, 52, 0, 62, 81, 72, 1, 9, 74, 0, 52, 0, 62, 82, 72, 1, 9, 75, 0, 52, 0, 62, 83, 72, 1, 9, 76, 0, 52, 0, 62, 84, 72, 1, 9, 77, 0, 52, 0, 62, 85, 72, 1, 9, 78, 0, 52, 0, 62, 86, 72, 1, 9, 79, 0, 52, 0, 62, 87, 72, 1, 9, 80, 0, 52, 0, 62, 88, 72, 1, 9, 81, 0, 52, 0, 62, 89, 72, 1, 9, 82, 0, 52, 0, 62, 90, 72, 1, 9, 83, 0, 0, 0, 92, 91, 84, 0, 0, 0, 0, 93, 93, -1, 29, 5, 1, 6, 2, 7, 2, 8, 3, 94, 85, 95, 86, 96, 87, 97, 88, 98, 89, 99, 89, 100, 89, 101, 89, 102, 1, 103, 1, 104, 90, 105, 2, 106, 5, 107, 91, 108, 2, 109, 92, 110, 5, 111, 3, 112, 3, 113, 93, 114, 94, 115, 94, 116, 1, 117, 3, 118, 95, 0 </int_array>
+ <int_array len="708"> -1, -1, 1, 0, -1, 2, 2, 0, 3, 1, 0, 0, 0, 5, 4, -1, 16, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 10, 5, 11, 6, 12, 7, 13, 8, 14, 9, 15, 10, 16, 11, 17, 3, 18, 6, 19, 12, 3, 13, 0, 0, 0, 1, 20, -1, 2, 2, 0, 3, 14, 0, 2, 0, 22, 21, 15, 1, 10, 16, 0, 2, 0, 22, 23, 15, 1, 10, 17, 0, 2, 0, 22, 24, 15, 1, 10, 18, 0, 2, 0, 22, 25, 15, 1, 10, 19, 0, 2, 0, 22, 26, 15, 1, 10, 20, 0, 2, 0, 22, 27, 15, 1, 10, 21, 0, 2, 0, 22, 28, 15, 1, 10, 22, 0, 2, 0, 22, 29, 15, 1, 10, 23, 0, 2, 0, 22, 30, 15, 1, 10, 24, 0, 2, 0, 22, 31, 15, 1, 10, 25, 0, 2, 0, 22, 32, 15, 1, 10, 26, 0, 2, 0, 22, 33, 15, 1, 10, 27, 0, 2, 0, 22, 34, 15, 1, 10, 28, 0, 2, 0, 22, 35, 15, 1, 10, 29, 0, 2, 0, 22, 36, 15, 1, 10, 30, 0, 2, 0, 22, 37, 15, 1, 10, 31, 0, 2, 0, 22, 38, 15, 1, 10, 32, 0, 2, 0, 22, 39, 15, 1, 10, 33, 0, 2, 0, 22, 40, 15, 1, 10, 34, 0, 2, 0, 22, 41, 15, 1, 10, 35, 0, 2, 0, 22, 42, 15, 1, 10, 36, 0, 2, 0, 22, 43, 15, 1, 10, 37, 0, 2, 0, 22, 44, 15, 1, 10, 38, 0, 2, 0, 22, 45, 15, 1, 10, 39, 0, 2, 0, 22, 46, 15, 1, 10, 40, 0, 2, 0, 22, 47, 15, 1, 10, 41, 0, 2, 0, 22, 48, 15, 1, 10, 42, 0, 2, 0, 22, 49, 15, 1, 10, 43, 0, 2, 0, 22, 50, 15, 1, 10, 44, 0, 2, 0, 22, 51, 15, 1, 10, 45, 0, 2, 0, 22, 52, 15, 1, 10, 46, 0, 2, 0, 22, 53, 15, 1, 10, 47, 0, 2, 0, 22, 54, 15, 1, 10, 48, 0, 2, 0, 22, 55, 15, 1, 10, 49, 0, 2, 0, 22, 56, 15, 1, 10, 50, 0, 2, 0, 22, 57, 15, 1, 10, 51, 0, 2, 0, 22, 58, 15, 1, 10, 52, 0, 2, 0, 22, 59, 15, 1, 10, 53, 0, 2, 0, 22, 60, 15, 1, 10, 54, 0, 2, 0, 22, 61, 15, 1, 10, 55, 0, 2, 0, 22, 62, 15, 1, 10, 56, 0, 2, 0, 22, 63, 15, 1, 10, 57, 0, 0, 0, 65, 64, 58, 1, 10, 59, 0, 0, 0, 1, 66, -1, 1, 2, 0, 0, 46, 0, 68, 67, 60, 3, 10, 61, 69, 62, 70, 63, 0, 46, 0, 68, 71, 60, 3, 10, 64, 69, 65, 70, 66, 0, 46, 0, 68, 72, 60, 3, 10, 67, 69, 68, 70, 66, 0, 46, 0, 68, 73, 69, 1, 10, 70, 0, 0, 0, 75, 74, -1, 7, 2, 0, 76, 71, 77, 4, 78, 2, 79, 72, 80, 2, 81, 4, 0, 0, 0, 1, 82, -1, 1, 2, 0, 0, 52, 0, 65, 83, 73, 1, 10, 74, 0, 52, 0, 65, 84, 73, 1, 10, 75, 0, 52, 0, 65, 85, 73, 1, 10, 76, 0, 52, 0, 65, 86, 73, 1, 10, 77, 0, 52, 0, 65, 87, 73, 1, 10, 78, 0, 52, 0, 65, 88, 73, 1, 10, 79, 0, 52, 0, 65, 89, 73, 1, 10, 80, 0, 52, 0, 65, 90, 73, 1, 10, 81, 0, 52, 0, 65, 91, 73, 1, 10, 82, 0, 52, 0, 65, 92, 73, 1, 10, 83, 0, 52, 0, 65, 93, 73, 1, 10, 84, 0, 0, 0, 95, 94, 85, 0, 0, 0, 0, 96, 96, -1, 30, 2, 0, 6, 2, 7, 3, 8, 3, 9, 4, 97, 86, 98, 87, 99, 88, 100, 89, 101, 0, 102, 0, 103, 0, 104, 0, 105, 2, 106, 2, 107, 90, 108, 3, 109, 6, 110, 91, 111, 3, 112, 92, 113, 6, 114, 4, 115, 4, 116, 93, 117, 94, 118, 94, 119, 2, 120, 4, 121, 95, 0 </int_array>
<string> "conns" </string>
<int_array len="0"> </int_array>
</dictionary>
diff --git a/demos/2d/pong/pong.gd b/demos/2d/pong/pong.gd
index bfffdcf0d8..cf6003c659 100644
--- a/demos/2d/pong/pong.gd
+++ b/demos/2d/pong/pong.gd
@@ -1,9 +1,9 @@
extends Node2D
-# member variables here, example:
-# var a=2
-# var b="textvar"
+#member variables here, example:
+#var a=2
+#var b="textvar"
const INITIAL_BALL_SPEED = 80
var ball_speed = INITIAL_BALL_SPEED
var screen_size = Vector2(640,400)
@@ -16,7 +16,7 @@ const PAD_SPEED = 150
func _process(delta):
- # get ball positio and pad rectangles
+ #get ball position and pad rectangles
var ball_pos = get_node("ball").get_pos()
var left_rect = Rect2( get_node("left").get_pos() - pad_size*0.5, pad_size )
var right_rect = Rect2( get_node("right").get_pos() - pad_size*0.5, pad_size )
@@ -44,7 +44,7 @@ func _process(delta):
get_node("ball").set_pos(ball_pos)
- #move left pad
+ #move left pad
var left_pos = get_node("left").get_pos()
if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
@@ -67,7 +67,7 @@ func _process(delta):
func _ready():
- screen_size = get_viewport_rect().size # get actual size
+ screen_size = get_viewport_rect().size #get actual size
pad_size = get_node("left").get_texture().get_size()
set_process(true)
diff --git a/demos/3d/kinematic_char/cubelib.res b/demos/3d/kinematic_char/cubelib.res
new file mode 100644
index 0000000000..66b999d78d
--- /dev/null
+++ b/demos/3d/kinematic_char/cubelib.res
Binary files differ
diff --git a/demos/3d/kinematic_char/cubio.gd b/demos/3d/kinematic_char/cubio.gd
new file mode 100644
index 0000000000..6f12e39db7
--- /dev/null
+++ b/demos/3d/kinematic_char/cubio.gd
@@ -0,0 +1,96 @@
+
+extends KinematicBody
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+var g = -9.8
+var vel = Vector3()
+const MAX_SPEED = 5
+const JUMP_SPEED = 7
+const ACCEL= 2
+const DEACCEL= 4
+const MAX_SLOPE_ANGLE = 30
+
+func _fixed_process(delta):
+
+ var dir = Vector3() #where does the player intend to walk to
+ var cam_xform = get_node("target/camera").get_global_transform()
+
+ if (Input.is_action_pressed("move_forward")):
+ dir+=-cam_xform.basis[2]
+ if (Input.is_action_pressed("move_backwards")):
+ dir+=cam_xform.basis[2]
+ if (Input.is_action_pressed("move_left")):
+ dir+=-cam_xform.basis[0]
+ if (Input.is_action_pressed("move_right")):
+ dir+=cam_xform.basis[0]
+
+ dir.y=0
+ dir=dir.normalized()
+
+ vel.y+=delta*g
+
+ var hvel = vel
+ hvel.y=0
+
+ var target = dir*MAX_SPEED
+ var accel
+ if (dir.dot(hvel) >0):
+ accel=ACCEL
+ else:
+ accel=DEACCEL
+
+ hvel = hvel.linear_interpolate(target,accel*delta)
+
+ vel.x=hvel.x;
+ vel.z=hvel.z
+
+ var motion = vel*delta
+ motion=move(vel*delta)
+
+ var on_floor = false
+ var original_vel = vel
+
+
+ var floor_velocity=Vector2()
+
+ var attempts=4
+
+ while(is_colliding() and attempts):
+ var n=get_collision_normal()
+
+ if ( rad2deg(acos(n.dot( Vector3(0,1,0)))) < MAX_SLOPE_ANGLE ):
+ #if angle to the "up" vectors is < angle tolerance
+ #char is on floor
+ floor_velocity=get_collider_velocity()
+ on_floor=true
+
+ motion = n.slide(motion)
+ vel = n.slide(vel)
+ if (original_vel.dot(vel) > 0):
+ #do not allow to slide towads the opposite direction we were coming from
+ motion=move(motion)
+ if (motion.length()<0.001):
+ break
+ attempts-=1
+
+ if (on_floor and floor_velocity!=Vector3()):
+ move(floor_velocity*delta)
+
+ if (on_floor and Input.is_action_pressed("jump")):
+ vel.y=JUMP_SPEED
+
+ var crid = get_node("../elevator1").get_rid()
+# print(crid," : ",PS.body_get_state(crid,PS.BODY_STATE_TRANSFORM))
+
+func _ready():
+ # Initalization here
+ set_fixed_process(true)
+ pass
+
+
+func _on_tcube_body_enter( body ):
+ get_node("../ty").show()
+ pass # replace with function body
diff --git a/demos/3d/kinematic_char/engine.cfg b/demos/3d/kinematic_char/engine.cfg
new file mode 100644
index 0000000000..b3060b65e0
--- /dev/null
+++ b/demos/3d/kinematic_char/engine.cfg
@@ -0,0 +1,17 @@
+[application]
+
+name="Kinematic Character 3D"
+main_scene="res://level.scn"
+icon="res://kinebody3d.png"
+
+[input]
+
+move_forward=[key(Up)]
+move_left=[key(Left)]
+move_right=[key(Right)]
+move_backwards=[key(Down)]
+jump=[key(Space)]
+
+[rasterizer]
+
+shadow_filter=3
diff --git a/demos/3d/kinematic_char/follow_camera.gd b/demos/3d/kinematic_char/follow_camera.gd
new file mode 100644
index 0000000000..0b9ff9bbb2
--- /dev/null
+++ b/demos/3d/kinematic_char/follow_camera.gd
@@ -0,0 +1,92 @@
+
+extends Camera
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+var collision_exception=[]
+export var min_distance=0.5
+export var max_distance=4.0
+export var angle_v_adjust=0.0
+export var autoturn_ray_aperture=25
+export var autoturn_speed=50
+var max_height = 2.0
+var min_height = 0
+
+func _fixed_process(dt):
+ var target = get_parent().get_global_transform().origin
+ var pos = get_global_transform().origin
+ var up = Vector3(0,1,0)
+
+ var delta = pos - target
+
+ #regular delta follow
+
+ #check ranges
+
+ if (delta.length() < min_distance):
+ delta = delta.normalized() * min_distance
+ elif (delta.length() > max_distance):
+ delta = delta.normalized() * max_distance
+
+ #check upper and lower height
+ if ( delta.y > max_height):
+ delta.y = max_height
+ if ( delta.y < min_height):
+ delta.y = min_height
+
+ #check autoturn
+
+ var ds = PhysicsServer.space_get_direct_state( get_world().get_space() )
+
+
+ var col_left = ds.intersect_ray(target,target+Matrix3(up,deg2rad(autoturn_ray_aperture)).xform(delta),collision_exception)
+ var col = ds.intersect_ray(target,target,collision_exception)
+ var col_right = ds.intersect_ray(target,target+Matrix3(up,deg2rad(-autoturn_ray_aperture)).xform(delta),collision_exception)
+
+ if (col!=null):
+ #if main ray was occluded, get camera closer, this is the worst case scenario
+ delta = col.position - target
+ elif (col_left!=null and col_right==null):
+ #if only left ray is occluded, turn the camera around to the right
+ delta = Matrix3(up,deg2rad(-dt*autoturn_speed)).xform(delta)
+ elif (col_left==null and col_right!=null):
+ #if only right ray is occluded, turn the camera around to the left
+ delta = Matrix3(up,deg2rad(dt*autoturn_speed)).xform(delta)
+ else:
+ #do nothing otherwise, left and right are occluded but center is not, so do not autoturn
+ pass
+
+ #apply lookat
+ pos = target + delta
+
+ look_at_from_pos(pos,target,up)
+
+ #turn a little up or down
+ var t = get_transform()
+ t.basis = Matrix3(t.basis[0],deg2rad(angle_v_adjust)) * t.basis
+ set_transform(t)
+
+
+
+func _ready():
+
+#find collision exceptions for ray
+ var node = self
+ while(node):
+ if (node extends RigidBody):
+ collision_exception.append(node.get_rid())
+ break
+ else:
+ node=node.get_parent()
+ # Initalization here
+ set_fixed_process(true)
+ #this detaches the camera transform from the parent spatial node
+ set_as_toplevel(true)
+
+
+
+
+
+
diff --git a/demos/3d/kinematic_char/kinebody3d.png b/demos/3d/kinematic_char/kinebody3d.png
new file mode 100644
index 0000000000..41f0edb246
--- /dev/null
+++ b/demos/3d/kinematic_char/kinebody3d.png
Binary files differ
diff --git a/demos/3d/kinematic_char/level.scn b/demos/3d/kinematic_char/level.scn
new file mode 100644
index 0000000000..1d7e5a4a70
--- /dev/null
+++ b/demos/3d/kinematic_char/level.scn
Binary files differ
diff --git a/demos/3d/kinematic_char/purple_wood.tex b/demos/3d/kinematic_char/purple_wood.tex
new file mode 100644
index 0000000000..cdf0f810f1
--- /dev/null
+++ b/demos/3d/kinematic_char/purple_wood.tex
Binary files differ
diff --git a/demos/3d/kinematic_char/purplecube.scn b/demos/3d/kinematic_char/purplecube.scn
new file mode 100644
index 0000000000..ab758366fd
--- /dev/null
+++ b/demos/3d/kinematic_char/purplecube.scn
Binary files differ
diff --git a/demos/3d/kinematic_char/twood.tex b/demos/3d/kinematic_char/twood.tex
new file mode 100644
index 0000000000..65c1bd043c
--- /dev/null
+++ b/demos/3d/kinematic_char/twood.tex
Binary files differ
diff --git a/demos/3d/kinematic_char/white_wood.tex b/demos/3d/kinematic_char/white_wood.tex
new file mode 100644
index 0000000000..e003442e70
--- /dev/null
+++ b/demos/3d/kinematic_char/white_wood.tex
Binary files differ
diff --git a/demos/3d/mousepick_test/engine.cfg b/demos/3d/mousepick_test/engine.cfg
new file mode 100644
index 0000000000..093999a87a
--- /dev/null
+++ b/demos/3d/mousepick_test/engine.cfg
@@ -0,0 +1,5 @@
+[application]
+
+name="3D Mouse Picking Test"
+main_scene="res://mousepick.scn"
+icon="res://icon.png"
diff --git a/demos/3d/mousepick_test/icon.png b/demos/3d/mousepick_test/icon.png
new file mode 100644
index 0000000000..264f991e15
--- /dev/null
+++ b/demos/3d/mousepick_test/icon.png
Binary files differ
diff --git a/demos/3d/mousepick_test/mousepick.gd b/demos/3d/mousepick_test/mousepick.gd
new file mode 100644
index 0000000000..cf3d9f1e4e
--- /dev/null
+++ b/demos/3d/mousepick_test/mousepick.gd
@@ -0,0 +1,32 @@
+
+extends RigidBody
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+var gray_mat = FixedMaterial.new()
+
+var selected=false
+
+func _input_event(event,pos,normal,shape):
+ if (event.type==InputEvent.MOUSE_BUTTON and event.pressed):
+ if (not selected):
+ get_node("mesh").set_material_override(gray_mat)
+ else:
+ get_node("mesh").set_material_override(null)
+
+ selected = not selected
+
+
+func _mouse_enter():
+ get_node("mesh").set_scale( Vector3(1.1,1.1,1.1) )
+
+func _mouse_exit():
+ get_node("mesh").set_scale( Vector3(1,1,1) )
+
+func _ready():
+ # Initalization here
+ pass
+
+
diff --git a/demos/3d/mousepick_test/mousepick.scn b/demos/3d/mousepick_test/mousepick.scn
new file mode 100644
index 0000000000..7ecac46a86
--- /dev/null
+++ b/demos/3d/mousepick_test/mousepick.scn
Binary files differ
diff --git a/demos/3d/platformer/follow_camera.gd b/demos/3d/platformer/follow_camera.gd
index 0b9ff9bbb2..60eef5787a 100644
--- a/demos/3d/platformer/follow_camera.gd
+++ b/demos/3d/platformer/follow_camera.gd
@@ -45,13 +45,13 @@ func _fixed_process(dt):
var col = ds.intersect_ray(target,target,collision_exception)
var col_right = ds.intersect_ray(target,target+Matrix3(up,deg2rad(-autoturn_ray_aperture)).xform(delta),collision_exception)
- if (col!=null):
+ if (!col.empty()):
#if main ray was occluded, get camera closer, this is the worst case scenario
delta = col.position - target
- elif (col_left!=null and col_right==null):
+ elif (!col_left.empty() and col_right.empty()):
#if only left ray is occluded, turn the camera around to the right
delta = Matrix3(up,deg2rad(-dt*autoturn_speed)).xform(delta)
- elif (col_left==null and col_right!=null):
+ elif (col_left.empty() and !col_right.empty()):
#if only right ray is occluded, turn the camera around to the left
delta = Matrix3(up,deg2rad(dt*autoturn_speed)).xform(delta)
else:
diff --git a/demos/misc/joysticks/engine.cfg b/demos/misc/joysticks/engine.cfg
new file mode 100644
index 0000000000..71ac91000e
--- /dev/null
+++ b/demos/misc/joysticks/engine.cfg
@@ -0,0 +1,10 @@
+[application]
+
+name="Joysticks"
+main_scene="res://joysticks.scn"
+icon="res://icon.png"
+
+[display]
+
+width=260
+height=300
diff --git a/demos/misc/joysticks/icon.png b/demos/misc/joysticks/icon.png
new file mode 100644
index 0000000000..06b0d7532d
--- /dev/null
+++ b/demos/misc/joysticks/icon.png
Binary files differ
diff --git a/demos/misc/joysticks/joysticks.gd b/demos/misc/joysticks/joysticks.gd
new file mode 100644
index 0000000000..d359e993e6
--- /dev/null
+++ b/demos/misc/joysticks/joysticks.gd
@@ -0,0 +1,40 @@
+
+extends Node2D
+
+# Joysticks demo, written by Dana Olson <dana@shineuponthee.com>
+#
+# This is a demo of joystick support, and doubles as a testing application
+# inspired by and similar to jstest-gtk.
+#
+# Licensed under the MIT license
+
+var joy_num
+var cur_joy
+var axis_value
+var btn_state
+
+func _ready():
+ set_process_input(true)
+
+func _input(ev):
+ # get the joystick device number from the spinbox
+ joy_num = get_node("joy_num").get_value()
+
+ # display the name of the joystick if we haven't already
+ if joy_num != cur_joy:
+ cur_joy = joy_num
+ get_node("joy_name").set_text( Input.get_joy_name(joy_num) )
+
+ # loop through the axes and show their current values
+ for axis in range(0,8):
+ axis_value = Input.get_joy_axis(joy_num,axis)
+ get_node("axis_prog"+str(axis)).set_value(100*axis_value)
+ get_node("axis_val"+str(axis)).set_text(str(axis_value))
+
+ # loop through the buttons and highlight the ones that are pressed
+ for btn in range(0,17):
+ btn_state = 1
+ if (Input.is_joy_button_pressed(joy_num, btn)):
+ get_node("btn"+str(btn)).add_color_override("font_color",Color(1,1,1,1))
+ else:
+ get_node("btn"+str(btn)).add_color_override("font_color",Color(0.2,0.1,0.3,1))
diff --git a/demos/misc/joysticks/joysticks.scn b/demos/misc/joysticks/joysticks.scn
new file mode 100644
index 0000000000..5dbd7f49bf
--- /dev/null
+++ b/demos/misc/joysticks/joysticks.scn
Binary files differ
diff --git a/demos/misc/tween/engine.cfg b/demos/misc/tween/engine.cfg
new file mode 100644
index 0000000000..f97e540dbd
--- /dev/null
+++ b/demos/misc/tween/engine.cfg
@@ -0,0 +1,11 @@
+[application]
+
+name="Tween Demo"
+main_scene="res://main.xml"
+icon="icon.png"
+target_fps=60
+
+[display]
+
+stretch_mode="2d"
+stretch_aspect="keep_width"
diff --git a/demos/misc/tween/main.gd b/demos/misc/tween/main.gd
new file mode 100644
index 0000000000..364651c827
--- /dev/null
+++ b/demos/misc/tween/main.gd
@@ -0,0 +1,164 @@
+
+extends Control
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+var trans = ["linear", "sine", "quint", "quart", "quad", "expo", "elastic", "cubic", "circ", "bounce", "back"]
+var eases = ["in", "out", "in_out", "out_in"]
+var modes = ["move", "color", "scale", "rotate", "callback", "follow", "repeat", "pause"]
+
+var state = {
+ trans = Tween.TRANS_LINEAR,
+ eases = Tween.EASE_IN,
+}
+
+func _ready():
+ for index in range(trans.size()):
+ var name = trans[index]
+ get_node("trans/" + name).connect("pressed", self, "on_trans_changed", [name, index])
+
+ for index in range(eases.size()):
+ var name = eases[index]
+ get_node("eases/" + name).connect("pressed", self, "on_eases_changed", [name, index])
+
+ for index in range(modes.size()):
+ var name = modes[index]
+ get_node("modes/" + name).connect("pressed", self, "on_modes_changed", [name])
+
+ get_node("color/color_from").set_color(Color(1, 0, 0, 1))
+ get_node("color/color_from").connect("color_changed", self, "on_color_changed")
+
+ get_node("color/color_to").set_color(Color(0, 1, 1, 1))
+ get_node("color/color_to").connect("color_changed", self, "on_color_changed")
+
+ get_node("trans/linear").set_pressed(true)
+ get_node("eases/in").set_pressed(true)
+ get_node("modes/move").set_pressed(true)
+ get_node("modes/repeat").set_pressed(true)
+
+ reset_tween()
+
+ # Initalization here
+ pass
+
+func on_trans_changed(name, index):
+ for index in range(trans.size()):
+ var pressed = trans[index] == name
+ var btn = get_node("trans/" + trans[index])
+
+ btn.set_pressed(pressed)
+ btn.set_ignore_mouse(pressed)
+
+ state.trans = index
+ reset_tween()
+
+func on_eases_changed(name, index):
+ for index in range(eases.size()):
+ var pressed = eases[index] == name
+ var btn = get_node("eases/" + eases[index])
+
+ btn.set_pressed(pressed)
+ btn.set_ignore_mouse(pressed)
+
+ state.eases = index
+ reset_tween()
+
+func on_modes_changed(name):
+ var tween = get_node("tween")
+ if name == "pause":
+ if get_node("modes/pause").is_pressed():
+ tween.stop_all()
+ get_node("timeline").set_ignore_mouse(false)
+ else:
+ tween.resume_all()
+ get_node("timeline").set_ignore_mouse(true)
+ else:
+ reset_tween()
+
+func on_color_changed(color):
+ reset_tween()
+
+func reset_tween():
+ var tween = get_node("tween")
+ var pos = tween.tell()
+ tween.reset_all()
+ tween.remove_all()
+
+ var sprite = get_node("tween/area/sprite")
+ var follow = get_node("tween/area/follow")
+ var follow_2 = get_node("tween/area/follow_2")
+ var size = get_node("tween/area").get_size()
+
+ if get_node("modes/move").is_pressed():
+ tween.interpolate_method(sprite, "set_pos", Vector2(0,0), Vector2(size.width, size.height), 2, state.trans, state.eases)
+ tween.interpolate_property(sprite, "transform/pos", Vector2(size.width,size.height), Vector2(0, 0), 2, state.trans, state.eases, 2)
+
+ if get_node("modes/color").is_pressed():
+ tween.interpolate_method(sprite, "set_modulate", get_node("color/color_from").get_color(), get_node("color/color_to").get_color(), 2, state.trans, state.eases)
+ tween.interpolate_property(sprite, "modulate", get_node("color/color_to").get_color(), get_node("color/color_from").get_color(), 2, state.trans, state.eases, 2)
+ else:
+ sprite.set_modulate(Color(1, 1, 1, 1))
+
+ if get_node("modes/scale").is_pressed():
+ tween.interpolate_method(sprite, "set_scale", Vector2(0.5,0.5), Vector2(1.5, 1.5), 2, state.trans, state.eases)
+ tween.interpolate_property(sprite, "transform/scale", Vector2(1.5,1.5), Vector2(0.5, 0.5), 2, state.trans, state.eases, 2)
+ else:
+ sprite.set_scale(Vector2(1, 1))
+
+ if get_node("modes/rotate").is_pressed():
+ tween.interpolate_method(sprite, "_set_rotd", 0, 360, 2, state.trans, state.eases)
+ tween.interpolate_property(sprite, "transform/rot", 360, 0, 2, state.trans, state.eases, 2)
+
+ if get_node("modes/callback").is_pressed():
+ tween.interpolate_callback(self, "on_callback", 0.5, "0.5 second's after")
+ tween.interpolate_callback(self, "on_callback", 1.2, "1.2 second's after")
+
+ if get_node("modes/follow").is_pressed():
+ follow.show()
+ follow_2.show()
+
+ tween.follow_method(follow, "set_pos", Vector2(0, size.height), sprite, "get_pos", 2, state.trans, state.eases)
+ tween.targeting_method(follow, "set_pos", sprite, "get_pos", Vector2(0, size.height), 2, state.trans, state.eases, 2)
+
+ tween.targeting_property(follow_2, "transform/pos", sprite, "transform/pos", Vector2(size.width, 0), 2, state.trans, state.eases)
+ tween.follow_property(follow_2, "transform/pos", Vector2(size.width, 0), sprite, "transform/pos", 2, state.trans, state.eases, 2)
+ else:
+ follow.hide()
+ follow_2.hide()
+
+ tween.set_repeat(get_node("modes/repeat").is_pressed())
+ tween.start()
+ tween.seek(pos)
+
+ if get_node("modes/pause").is_pressed():
+ tween.stop_all()
+ get_node("timeline").set_ignore_mouse(false)
+ get_node("timeline").set_value(0)
+ else:
+ tween.resume_all()
+ get_node("timeline").set_ignore_mouse(true)
+
+func _on_tween_step( object, key, elapsed, value ):
+
+ var timeline = get_node("timeline")
+
+ var tween = get_node("tween")
+ var runtime = tween.get_runtime()
+
+ var ratio = 100 * (elapsed / runtime)
+ timeline.set_value(ratio)
+
+
+func _on_timeline_value_changed( value ):
+ if !get_node("modes/pause").is_pressed():
+ return
+
+ var tween = get_node("tween")
+ var runtime = tween.get_runtime()
+ tween.seek(runtime * value / 100)
+
+func on_callback(arg):
+ var label = get_node("tween/area/label")
+ label.add_text("on_callback -> " + arg + "\n")
diff --git a/demos/misc/tween/main.xml b/demos/misc/tween/main.xml
new file mode 100644
index 0000000000..6580ba04da
--- /dev/null
+++ b/demos/misc/tween/main.xml
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="3" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
+ <ext_resource path="res://icon.png" type="Texture"></ext_resource>
+ <ext_resource path="res://main.gd" type="Script"></ext_resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="115">
+ <string> "main" </string>
+ <string> "Control" </string>
+ <string> "_import_path" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/behind_parent" </string>
+ <string> "margin/right" </string>
+ <string> "margin/bottom" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "focus_neighbour/left" </string>
+ <string> "focus_neighbour/top" </string>
+ <string> "focus_neighbour/right" </string>
+ <string> "focus_neighbour/bottom" </string>
+ <string> "focus/ignore_mouse" </string>
+ <string> "focus/stop_mouse" </string>
+ <string> "size_flags/horizontal" </string>
+ <string> "size_flags/vertical" </string>
+ <string> "size_flags/stretch_ratio" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "trans" </string>
+ <string> "VBoxContainer" </string>
+ <string> "margin/left" </string>
+ <string> "margin/top" </string>
+ <string> "linear" </string>
+ <string> "Button" </string>
+ <string> "disabled" </string>
+ <string> "pressed" </string>
+ <string> "toggle_mode" </string>
+ <string> "click_on_press" </string>
+ <string> "text" </string>
+ <string> "icon" </string>
+ <string> "flat" </string>
+ <string> "clip_text" </string>
+ <string> "align" </string>
+ <string> "sine" </string>
+ <string> "quint" </string>
+ <string> "quart" </string>
+ <string> "quad" </string>
+ <string> "expo" </string>
+ <string> "elastic" </string>
+ <string> "cubic" </string>
+ <string> "circ" </string>
+ <string> "bounce" </string>
+ <string> "back" </string>
+ <string> "eases" </string>
+ <string> "in" </string>
+ <string> "out" </string>
+ <string> "in_out" </string>
+ <string> "out_in" </string>
+ <string> "modes" </string>
+ <string> "move" </string>
+ <string> "color" </string>
+ <string> "scale" </string>
+ <string> "rotate" </string>
+ <string> "callback" </string>
+ <string> "follow" </string>
+ <string> "repeat" </string>
+ <string> "pause" </string>
+ <string> "label_1" </string>
+ <string> "Label" </string>
+ <string> "range/min" </string>
+ <string> "range/max" </string>
+ <string> "range/step" </string>
+ <string> "range/page" </string>
+ <string> "range/value" </string>
+ <string> "range/exp_edit" </string>
+ <string> "rounded_values" </string>
+ <string> "valign" </string>
+ <string> "autowrap" </string>
+ <string> "uppercase" </string>
+ <string> "percent_visible" </string>
+ <string> "color_from" </string>
+ <string> "ColorPicker" </string>
+ <string> "label_2" </string>
+ <string> "color_to" </string>
+ <string> "tween" </string>
+ <string> "Tween" </string>
+ <string> "playback/process_mode" </string>
+ <string> "playback/active" </string>
+ <string> "playback/repeat" </string>
+ <string> "playback/speed" </string>
+ <string> "area" </string>
+ <string> "Panel" </string>
+ <string> "label" </string>
+ <string> "RichTextLabel" </string>
+ <string> "scroll_active" </string>
+ <string> "scroll_follow" </string>
+ <string> "tab_size" </string>
+ <string> "selection_enabled" </string>
+ <string> "sprite" </string>
+ <string> "Sprite" </string>
+ <string> "transform/pos" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "follow_2" </string>
+ <string> "timeline" </string>
+ <string> "HSlider" </string>
+ <string> "tick_count" </string>
+ <string> "ticks_on_borders" </string>
+ <string> "_on_tween_step" </string>
+ <string> "tween_step" </string>
+ <string> "_on_timeline_value_changed" </string>
+ <string> "value_changed" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 2 </int>
+ <string> "node_count" </string>
+ <int> 39 </int>
+ <string> "variants" </string>
+ <array len="104" shared="false">
+ <node_path> "" </node_path>
+ <bool> True </bool>
+ <real> 1 </real>
+ <bool> False </bool>
+ <real> 800 </real>
+ <real> 600 </real>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 2 </int>
+ <resource resource_type="Script" path="res://main.gd"> </resource>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="1" shared="false">
+ <string> "res://main.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 1.360374 </real>
+ <string> "use_snap" </string>
+ <bool> True </bool>
+ <string> "ofs" </string>
+ <vector2> -215.073, -20.8125 </vector2>
+ <string> "snap" </string>
+ <int> 8 </int>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "Script" </string>
+ </dictionary>
+ <real> 56 </real>
+ <real> 256 </real>
+ <real> 129 </real>
+ <real> 582 </real>
+ <dictionary shared="false">
+ <string> "_editor_collapsed" </string>
+ <bool> True </bool>
+ </dictionary>
+ <real> 73 </real>
+ <real> 26 </real>
+ <string> "linear" </string>
+ <resource name=""></resource> <int> 1 </int>
+ <real> 30 </real>
+ <string> "sine" </string>
+ <real> 60 </real>
+ <real> 86 </real>
+ <string> "quint" </string>
+ <real> 90 </real>
+ <real> 116 </real>
+ <string> "quart" </string>
+ <real> 120 </real>
+ <real> 146 </real>
+ <string> "quad" </string>
+ <real> 150 </real>
+ <real> 176 </real>
+ <string> "expo" </string>
+ <real> 180 </real>
+ <real> 206 </real>
+ <string> "elastic" </string>
+ <real> 210 </real>
+ <real> 236 </real>
+ <string> "cubic" </string>
+ <real> 240 </real>
+ <real> 266 </real>
+ <string> "circ" </string>
+ <real> 270 </real>
+ <real> 296 </real>
+ <string> "bounce" </string>
+ <real> 300 </real>
+ <real> 326 </real>
+ <string> "back" </string>
+ <real> 152 </real>
+ <real> 215 </real>
+ <real> 372 </real>
+ <dictionary shared="false">
+ <string> "_editor_collapsed" </string>
+ <bool> True </bool>
+ </dictionary>
+ <real> 63 </real>
+ <string> "in" </string>
+ <string> "out" </string>
+ <string> "in_out" </string>
+ <string> "out_in" </string>
+ <real> 317 </real>
+ <real> 492 </real>
+ <dictionary shared="false">
+ <string> "_editor_collapsed" </string>
+ <bool> True </bool>
+ </dictionary>
+ <real> 77 </real>
+ <string> "move" </string>
+ <string> "color" </string>
+ <string> "scale" </string>
+ <string> "rotate" </string>
+ <string> "callback" </string>
+ <string> "follow" </string>
+ <string> "repeat" </string>
+ <string> "pause" </string>
+ <real> 384 </real>
+ <real> 760 </real>
+ <real> 592 </real>
+ <dictionary shared="false">
+ <string> "_editor_collapsed" </string>
+ <bool> True </bool>
+ </dictionary>
+ <real> 376 </real>
+ <real> 19 </real>
+ <string> "Color From:" </string>
+ <int> 0 </int>
+ <real> -1 </real>
+ <real> 23 </real>
+ <real> 174 </real>
+ <real> 178 </real>
+ <real> 197 </real>
+ <string> "Color To:" </string>
+ <real> 201 </real>
+ <real> 352 </real>
+ <real> 32 </real>
+ <real> 768 </real>
+ <real> 216 </real>
+ <real> 24 </real>
+ <real> 552 </real>
+ <real> 160 </real>
+ <string> "" </string>
+ <int> 4 </int>
+ <vector2> 0, 0 </vector2>
+ <resource resource_type="Texture" path="res://icon.png"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <vector2> 0, 184 </vector2>
+ <vector2> 736, 0 </vector2>
+ <real> 40 </real>
+ <real> 224 </real>
+ <real> 100 </real>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="2229"> -1, -1, 1, 0, -1, 20, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 20, 9, 21, 10, 0, 0, 0, 23, 22, -1, 21, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 11, 25, 12, 7, 13, 8, 14, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 3, 17, 8, 18, 8, 19, 2, 21, 15, 0, 1, 0, 27, 26, -1, 27, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 16, 8, 17, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 18, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 37, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 21, 7, 16, 8, 11, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 22, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 38, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 23, 7, 16, 8, 24, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 25, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 39, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 26, 7, 16, 8, 27, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 28, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 40, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 29, 7, 16, 8, 30, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 31, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 41, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 32, 7, 16, 8, 33, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 34, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 42, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 35, 7, 16, 8, 36, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 37, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 43, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 38, 7, 16, 8, 39, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 40, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 44, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 41, 7, 16, 8, 42, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 43, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 45, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 44, 7, 16, 8, 45, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 46, 33, 19, 34, 3, 35, 3, 36, 20, 0, 1, 0, 27, 46, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 47, 7, 16, 8, 48, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 49, 33, 19, 34, 3, 35, 3, 36, 20, 0, 0, 0, 23, 47, -1, 21, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 50, 25, 12, 7, 51, 8, 52, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 3, 17, 8, 18, 8, 19, 2, 21, 53, 0, 13, 0, 27, 48, -1, 27, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 54, 8, 17, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 55, 33, 19, 34, 3, 35, 3, 36, 20, 0, 13, 0, 27, 49, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 21, 7, 54, 8, 11, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 56, 33, 19, 34, 3, 35, 3, 36, 20, 0, 13, 0, 27, 50, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 23, 7, 54, 8, 24, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 57, 33, 19, 34, 3, 35, 3, 36, 20, 0, 13, 0, 27, 51, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 26, 7, 54, 8, 27, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 58, 33, 19, 34, 3, 35, 3, 36, 20, 0, 0, 0, 23, 52, -1, 21, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 41, 25, 12, 7, 59, 8, 60, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 3, 17, 8, 18, 8, 19, 2, 21, 61, 0, 18, 0, 27, 53, -1, 27, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 62, 8, 17, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 63, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 54, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 21, 7, 62, 8, 11, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 64, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 55, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 23, 7, 62, 8, 24, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 65, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 56, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 26, 7, 62, 8, 27, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 66, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 57, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 29, 7, 62, 8, 30, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 67, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 58, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 32, 7, 62, 8, 33, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 68, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 59, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 35, 7, 62, 8, 36, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 69, 33, 19, 34, 3, 35, 3, 36, 20, 0, 18, 0, 27, 60, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 38, 7, 62, 8, 39, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 28, 3, 29, 3, 30, 1, 31, 3, 32, 70, 33, 19, 34, 3, 35, 3, 36, 20, 0, 0, 0, 23, 54, -1, 21, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 71, 25, 41, 7, 72, 8, 73, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 3, 17, 8, 18, 8, 19, 2, 21, 74, 0, 27, 0, 62, 61, -1, 30, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 7, 75, 8, 76, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 1, 16, 1, 17, 8, 19, 2, 63, 6, 64, 2, 65, 2, 66, 2, 67, 6, 68, 3, 69, 3, 32, 77, 36, 78, 70, 78, 71, 3, 72, 3, 73, 79, 0, 27, 0, 75, 74, -1, 19, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 80, 7, 75, 8, 81, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 3, 17, 8, 18, 8, 19, 2, 0, 27, 0, 62, 76, -1, 31, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 82, 7, 75, 8, 83, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 1, 16, 1, 17, 8, 19, 2, 63, 6, 64, 2, 65, 2, 66, 2, 67, 6, 68, 3, 69, 3, 32, 84, 36, 78, 70, 78, 71, 3, 72, 3, 73, 79, 0, 27, 0, 75, 77, -1, 19, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 25, 85, 7, 75, 8, 86, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 3, 17, 8, 18, 8, 19, 2, 0, 0, 0, 79, 78, -1, 5, 2, 0, 80, 20, 81, 1, 82, 1, 83, 2, 0, 32, 0, 85, 84, -1, 20, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 87, 25, 87, 7, 88, 8, 89, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 18, 8, 19, 2, 0, 33, 0, 87, 86, -1, 24, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 33, 25, 90, 7, 91, 8, 92, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 19, 2, 32, 93, 88, 1, 89, 1, 90, 94, 91, 3, 0, 33, 0, 93, 92, -1, 19, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 94, 95, 9, 6, 10, 7, 95, 96, 96, 1, 97, 95, 98, 3, 99, 3, 100, 20, 101, 20, 102, 78, 103, 97, 104, 3, 105, 98, 0, 33, 0, 93, 58, -1, 19, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 94, 99, 9, 6, 10, 7, 95, 96, 96, 1, 97, 95, 98, 3, 99, 3, 100, 20, 101, 20, 102, 78, 103, 97, 104, 3, 105, 98, 0, 33, 0, 93, 106, -1, 19, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 94, 100, 9, 6, 10, 7, 95, 96, 96, 1, 97, 95, 98, 3, 99, 3, 100, 20, 101, 20, 102, 78, 103, 97, 104, 3, 105, 98, 0, 0, 0, 108, 107, -1, 28, 2, 0, 3, 1, 4, 2, 5, 2, 6, 3, 24, 101, 25, 102, 7, 72, 8, 41, 9, 6, 10, 7, 11, 0, 12, 0, 13, 0, 14, 0, 15, 3, 16, 1, 17, 8, 19, 2, 63, 6, 64, 103, 65, 2, 66, 6, 67, 2, 68, 3, 69, 3, 109, 78, 110, 3, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="12"> 32, 0, 112, 111, 2, 0, 38, 0, 114, 113, 2, 0 </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file>