summaryrefslogtreecommitdiff
path: root/demos/2d/kinematic_char
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-05-03 22:37:10 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-05-03 22:37:10 -0300
commite7aa37fe757151e9e241728c628dde6ccb3e0c07 (patch)
treeb8569a0f0965052b7fe17bd7020c24450a364dc0 /demos/2d/kinematic_char
parent04fb3402c59d6d55435d4eb83eda23707b5ddf9a (diff)
improved kinematic motion, improved demos for kinematic motion
Diffstat (limited to 'demos/2d/kinematic_char')
-rw-r--r--demos/2d/kinematic_char/circle.pngbin0 -> 6107 bytes
-rw-r--r--demos/2d/kinematic_char/colworld.scnbin6596 -> 7459 bytes
-rw-r--r--demos/2d/kinematic_char/long_obstacle.pngbin0 -> 534 bytes
-rw-r--r--demos/2d/kinematic_char/player.gd33
4 files changed, 24 insertions, 9 deletions
diff --git a/demos/2d/kinematic_char/circle.png b/demos/2d/kinematic_char/circle.png
new file mode 100644
index 0000000000..ddb3ac4b9c
--- /dev/null
+++ b/demos/2d/kinematic_char/circle.png
Binary files differ
diff --git a/demos/2d/kinematic_char/colworld.scn b/demos/2d/kinematic_char/colworld.scn
index 6c73e8b126..e66705368d 100644
--- a/demos/2d/kinematic_char/colworld.scn
+++ b/demos/2d/kinematic_char/colworld.scn
Binary files differ
diff --git a/demos/2d/kinematic_char/long_obstacle.png b/demos/2d/kinematic_char/long_obstacle.png
new file mode 100644
index 0000000000..88cb22daee
--- /dev/null
+++ b/demos/2d/kinematic_char/long_obstacle.png
Binary files differ
diff --git a/demos/2d/kinematic_char/player.gd b/demos/2d/kinematic_char/player.gd
index e8b3cc8d00..3549ba3830 100644
--- a/demos/2d/kinematic_char/player.gd
+++ b/demos/2d/kinematic_char/player.gd
@@ -21,6 +21,8 @@ const STOP_FORCE = 1300
const JUMP_SPEED = 200
const JUMP_MAX_AIRBORNE_TIME=0.2
+const SLIDE_STOP_VELOCITY=1.0 #one pixel per second
+const SLIDE_STOP_MIN_TRAVEL=1.0 #one pixel
var velocity = Vector2()
var on_air_time=100
var jumping=false
@@ -86,16 +88,29 @@ func _fixed_process(delta):
#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 (on_air_time==0 and force.x==0 and get_travel().length() < SLIDE_STOP_MIN_TRAVEL and abs(velocity.x) < SLIDE_STOP_VELOCITY and get_collider_velocity()==Vector2()):
+ #Since this formula will always slide the character around,
+ #a special case must be considered to to stop it from moving
+ #if standing on an inclined floor. Conditions are:
+ # 1) Standin on floor (on_air_time==0)
+ # 2) Did not move more than one pixel (get_travel().length() < SLIDE_STOP_MIN_TRAVEL)
+ # 3) Not moving horizontally (abs(velocity.x) < SLIDE_STOP_VELOCITY)
+ # 4) Collider is not moving
+
+ revert_motion()
+ velocity.y=0.0
+
+ else:
+ #For every other case of motion,our motion was interrupted.
+ #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