diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-05-03 22:37:10 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-05-03 22:37:10 -0300 |
commit | e7aa37fe757151e9e241728c628dde6ccb3e0c07 (patch) | |
tree | b8569a0f0965052b7fe17bd7020c24450a364dc0 /demos | |
parent | 04fb3402c59d6d55435d4eb83eda23707b5ddf9a (diff) |
improved kinematic motion, improved demos for kinematic motion
Diffstat (limited to 'demos')
-rw-r--r-- | demos/2d/kinematic_char/circle.png | bin | 0 -> 6107 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/colworld.scn | bin | 6596 -> 7459 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/long_obstacle.png | bin | 0 -> 534 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/player.gd | 33 |
4 files changed, 24 insertions, 9 deletions
diff --git a/demos/2d/kinematic_char/circle.png b/demos/2d/kinematic_char/circle.png Binary files differnew file mode 100644 index 0000000000..ddb3ac4b9c --- /dev/null +++ b/demos/2d/kinematic_char/circle.png diff --git a/demos/2d/kinematic_char/colworld.scn b/demos/2d/kinematic_char/colworld.scn Binary files differindex 6c73e8b126..e66705368d 100644 --- a/demos/2d/kinematic_char/colworld.scn +++ b/demos/2d/kinematic_char/colworld.scn diff --git a/demos/2d/kinematic_char/long_obstacle.png b/demos/2d/kinematic_char/long_obstacle.png Binary files differnew file mode 100644 index 0000000000..88cb22daee --- /dev/null +++ b/demos/2d/kinematic_char/long_obstacle.png 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 |