summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-02-22 20:28:19 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-02-22 20:28:19 -0300
commit7ca29bfaa7a23d06374c2456e0360c911bd9aa3e (patch)
treedc615e0c7a55dff92af81be0ff2555e1f9485eba /demos
parentb62ec387f340220e11902daab8484fcb85d28cda (diff)
-added kinematic body
-added kinematic body demos
Diffstat (limited to 'demos')
-rw-r--r--demos/2d/kinematic_char/colworld.gd17
-rw-r--r--demos/2d/kinematic_char/colworld.scnbin0 -> 5065 bytes
-rw-r--r--demos/2d/kinematic_char/engine.cfg13
-rw-r--r--demos/2d/kinematic_char/icon.pngbin0 -> 1513 bytes
-rw-r--r--demos/2d/kinematic_char/obstacle.pngbin0 -> 490 bytes
-rw-r--r--demos/2d/kinematic_char/player.gd116
-rw-r--r--demos/2d/kinematic_char/player.pngbin0 -> 502 bytes
-rw-r--r--demos/2d/kinematic_char/player.scnbin0 -> 1511 bytes
-rw-r--r--demos/2d/kinematic_char/princess.pngbin0 -> 504 bytes
-rw-r--r--demos/2d/kinematic_col/colworld.scnbin0 -> 2941 bytes
-rw-r--r--demos/2d/kinematic_col/engine.cfg12
-rw-r--r--demos/2d/kinematic_col/icon.pngbin0 -> 1426 bytes
-rw-r--r--demos/2d/kinematic_col/obstacle.pngbin0 -> 453 bytes
-rw-r--r--demos/2d/kinematic_col/player.gd36
-rw-r--r--demos/2d/kinematic_col/player.pngbin0 -> 502 bytes
-rw-r--r--demos/2d/kinematic_col/player.scnbin0 -> 1495 bytes
16 files changed, 194 insertions, 0 deletions
diff --git a/demos/2d/kinematic_char/colworld.gd b/demos/2d/kinematic_char/colworld.gd
new file mode 100644
index 0000000000..efd1dab805
--- /dev/null
+++ b/demos/2d/kinematic_char/colworld.gd
@@ -0,0 +1,17 @@
+
+extends Node2D
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+func _ready():
+ # Initalization here
+ pass
+
+
+
+
+func _on_princess_body_enter( body ):
+ #the name of this editor-generated callback is unfortunate
+ get_node("youwin").show()
diff --git a/demos/2d/kinematic_char/colworld.scn b/demos/2d/kinematic_char/colworld.scn
new file mode 100644
index 0000000000..b1285b4811
--- /dev/null
+++ b/demos/2d/kinematic_char/colworld.scn
Binary files differ
diff --git a/demos/2d/kinematic_char/engine.cfg b/demos/2d/kinematic_char/engine.cfg
new file mode 100644
index 0000000000..0132442c18
--- /dev/null
+++ b/demos/2d/kinematic_char/engine.cfg
@@ -0,0 +1,13 @@
+[application]
+
+name="Kinematic Collision"
+main_scene="res://colworld.scn"
+icon="res://icon.png"
+
+[input]
+
+move_up=[key(Up)]
+move_left=[key(Left)]
+move_right=[key(Right)]
+move_bottom=[key(Down)]
+jump=[key(Space)]
diff --git a/demos/2d/kinematic_char/icon.png b/demos/2d/kinematic_char/icon.png
new file mode 100644
index 0000000000..bdca104c1f
--- /dev/null
+++ b/demos/2d/kinematic_char/icon.png
Binary files differ
diff --git a/demos/2d/kinematic_char/obstacle.png b/demos/2d/kinematic_char/obstacle.png
new file mode 100644
index 0000000000..3ade3c3a52
--- /dev/null
+++ b/demos/2d/kinematic_char/obstacle.png
Binary files differ
diff --git a/demos/2d/kinematic_char/player.gd b/demos/2d/kinematic_char/player.gd
new file mode 100644
index 0000000000..b35bbfa693
--- /dev/null
+++ b/demos/2d/kinematic_char/player.gd
@@ -0,0 +1,116 @@
+
+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.
+
+
+#pixels / second
+const GRAVITY = 500.0
+
+# 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
+const STOP_FORCE = 1300
+const JUMP_SPEED = 200
+const JUMP_MAX_AIRBORNE_TIME=0.2
+
+var velocity = Vector2()
+var on_air_time=100
+var jumping=false
+
+var prev_jump_pressed=false
+
+func _fixed_process(delta):
+
+ #create forces
+ var force = Vector2(0,GRAVITY)
+
+ var stop = velocity.x!=0.0
+
+ var walk_left = Input.is_action_pressed("move_left")
+ var walk_right = Input.is_action_pressed("move_right")
+ var jump = Input.is_action_pressed("jump")
+
+ var stop=true
+
+ if (walk_left):
+ if (velocity.x<=0 and velocity.x > -WALK_MAX_SPEED):
+ force.x-=WALK_FORCE
+ stop=false
+
+ elif (walk_right):
+ if (velocity.x>=0 and velocity.x < WALK_MAX_SPEED):
+ force.x+=WALK_FORCE
+ stop=false
+
+ if (stop):
+ var vsign = sign(velocity.x)
+ var vlen = abs(velocity.x)
+
+ vlen -= STOP_FORCE * delta
+ if (vlen<0):
+ vlen=0
+
+ velocity.x=vlen*vsign
+
+
+
+ #integrate forces to velocity
+ velocity += force * delta
+
+ #integrate velocity into motion and move
+ var motion = velocity * delta
+
+ #move and consume motion
+#
+ motion = move(motion)
+
+
+ var floor_velocity=Vector2()
+
+ if (is_colliding()):
+ #ran against something, is it the floor? get normal
+ var n = get_collision_normal()
+
+ if ( rad2deg(acos(n.dot( Vector2(0,-1)))) < FLOOR_ANGLE_TOLERANCE ):
+ #if angle to the "up" vectors is < angle tolerance
+ #char is on floor
+ on_air_time=0
+ 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
+ motion = n.slide(motion)
+ velocity = n.slide(velocity)
+
+ #then move again
+ move(motion)
+
+ if (floor_velocity!=Vector2()):
+ #if floor moves, move with floor
+ move(floor_velocity*delta)
+
+ if (jumping and velocity.y>0):
+ jumping=false
+
+ if (on_air_time<JUMP_MAX_AIRBORNE_TIME and jump and not prev_jump_pressed and not jumping):
+ velocity.y=-JUMP_SPEED
+ jumping=true
+
+ on_air_time+=delta
+ prev_jump_pressed=jump
+
+func _ready():
+ # Initalization here
+ set_fixed_process(true)
+ pass
+
+
diff --git a/demos/2d/kinematic_char/player.png b/demos/2d/kinematic_char/player.png
new file mode 100644
index 0000000000..0e7d843899
--- /dev/null
+++ b/demos/2d/kinematic_char/player.png
Binary files differ
diff --git a/demos/2d/kinematic_char/player.scn b/demos/2d/kinematic_char/player.scn
new file mode 100644
index 0000000000..126b332184
--- /dev/null
+++ b/demos/2d/kinematic_char/player.scn
Binary files differ
diff --git a/demos/2d/kinematic_char/princess.png b/demos/2d/kinematic_char/princess.png
new file mode 100644
index 0000000000..9605c9c831
--- /dev/null
+++ b/demos/2d/kinematic_char/princess.png
Binary files differ
diff --git a/demos/2d/kinematic_col/colworld.scn b/demos/2d/kinematic_col/colworld.scn
new file mode 100644
index 0000000000..064ff12075
--- /dev/null
+++ b/demos/2d/kinematic_col/colworld.scn
Binary files differ
diff --git a/demos/2d/kinematic_col/engine.cfg b/demos/2d/kinematic_col/engine.cfg
new file mode 100644
index 0000000000..654288a9bd
--- /dev/null
+++ b/demos/2d/kinematic_col/engine.cfg
@@ -0,0 +1,12 @@
+[application]
+
+name="Kinematic Collision"
+main_scene="res://colworld.scn"
+icon="res://icon.png"
+
+[input]
+
+move_up=[key(Up)]
+move_left=[key(Left)]
+move_right=[key(Right)]
+move_bottom=[key(Down)]
diff --git a/demos/2d/kinematic_col/icon.png b/demos/2d/kinematic_col/icon.png
new file mode 100644
index 0000000000..2774de6110
--- /dev/null
+++ b/demos/2d/kinematic_col/icon.png
Binary files differ
diff --git a/demos/2d/kinematic_col/obstacle.png b/demos/2d/kinematic_col/obstacle.png
new file mode 100644
index 0000000000..693f115a98
--- /dev/null
+++ b/demos/2d/kinematic_col/obstacle.png
Binary files differ
diff --git a/demos/2d/kinematic_col/player.gd b/demos/2d/kinematic_col/player.gd
new file mode 100644
index 0000000000..36784a9d9f
--- /dev/null
+++ b/demos/2d/kinematic_col/player.gd
@@ -0,0 +1,36 @@
+
+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.
+
+
+#pixels / second
+const MOTION_SPEED=160
+
+func _fixed_process(delta):
+
+ var motion = Vector2()
+
+ if (Input.is_action_pressed("move_up")):
+ motion+=Vector2(0,-1)
+ if (Input.is_action_pressed("move_bottom")):
+ motion+=Vector2(0,1)
+ if (Input.is_action_pressed("move_left")):
+ motion+=Vector2(-1,0)
+ if (Input.is_action_pressed("move_right")):
+ motion+=Vector2(1,0)
+
+ motion = motion.normalized() * MOTION_SPEED * delta
+ move(motion)
+
+
+func _ready():
+ # Initalization here
+ set_fixed_process(true)
+ pass
+
+
diff --git a/demos/2d/kinematic_col/player.png b/demos/2d/kinematic_col/player.png
new file mode 100644
index 0000000000..0e7d843899
--- /dev/null
+++ b/demos/2d/kinematic_col/player.png
Binary files differ
diff --git a/demos/2d/kinematic_col/player.scn b/demos/2d/kinematic_col/player.scn
new file mode 100644
index 0000000000..e558bffe8e
--- /dev/null
+++ b/demos/2d/kinematic_col/player.scn
Binary files differ