diff options
author | Juan Linietsky <reduzio@gmail.com> | 2014-02-22 20:28:19 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2014-02-22 20:28:19 -0300 |
commit | 7ca29bfaa7a23d06374c2456e0360c911bd9aa3e (patch) | |
tree | dc615e0c7a55dff92af81be0ff2555e1f9485eba /demos | |
parent | b62ec387f340220e11902daab8484fcb85d28cda (diff) |
-added kinematic body
-added kinematic body demos
Diffstat (limited to 'demos')
-rw-r--r-- | demos/2d/kinematic_char/colworld.gd | 17 | ||||
-rw-r--r-- | demos/2d/kinematic_char/colworld.scn | bin | 0 -> 5065 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/engine.cfg | 13 | ||||
-rw-r--r-- | demos/2d/kinematic_char/icon.png | bin | 0 -> 1513 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/obstacle.png | bin | 0 -> 490 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/player.gd | 116 | ||||
-rw-r--r-- | demos/2d/kinematic_char/player.png | bin | 0 -> 502 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/player.scn | bin | 0 -> 1511 bytes | |||
-rw-r--r-- | demos/2d/kinematic_char/princess.png | bin | 0 -> 504 bytes | |||
-rw-r--r-- | demos/2d/kinematic_col/colworld.scn | bin | 0 -> 2941 bytes | |||
-rw-r--r-- | demos/2d/kinematic_col/engine.cfg | 12 | ||||
-rw-r--r-- | demos/2d/kinematic_col/icon.png | bin | 0 -> 1426 bytes | |||
-rw-r--r-- | demos/2d/kinematic_col/obstacle.png | bin | 0 -> 453 bytes | |||
-rw-r--r-- | demos/2d/kinematic_col/player.gd | 36 | ||||
-rw-r--r-- | demos/2d/kinematic_col/player.png | bin | 0 -> 502 bytes | |||
-rw-r--r-- | demos/2d/kinematic_col/player.scn | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000000..b1285b4811 --- /dev/null +++ b/demos/2d/kinematic_char/colworld.scn 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 Binary files differnew file mode 100644 index 0000000000..bdca104c1f --- /dev/null +++ b/demos/2d/kinematic_char/icon.png diff --git a/demos/2d/kinematic_char/obstacle.png b/demos/2d/kinematic_char/obstacle.png Binary files differnew file mode 100644 index 0000000000..3ade3c3a52 --- /dev/null +++ b/demos/2d/kinematic_char/obstacle.png 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 Binary files differnew file mode 100644 index 0000000000..0e7d843899 --- /dev/null +++ b/demos/2d/kinematic_char/player.png diff --git a/demos/2d/kinematic_char/player.scn b/demos/2d/kinematic_char/player.scn Binary files differnew file mode 100644 index 0000000000..126b332184 --- /dev/null +++ b/demos/2d/kinematic_char/player.scn diff --git a/demos/2d/kinematic_char/princess.png b/demos/2d/kinematic_char/princess.png Binary files differnew file mode 100644 index 0000000000..9605c9c831 --- /dev/null +++ b/demos/2d/kinematic_char/princess.png diff --git a/demos/2d/kinematic_col/colworld.scn b/demos/2d/kinematic_col/colworld.scn Binary files differnew file mode 100644 index 0000000000..064ff12075 --- /dev/null +++ b/demos/2d/kinematic_col/colworld.scn 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 Binary files differnew file mode 100644 index 0000000000..2774de6110 --- /dev/null +++ b/demos/2d/kinematic_col/icon.png diff --git a/demos/2d/kinematic_col/obstacle.png b/demos/2d/kinematic_col/obstacle.png Binary files differnew file mode 100644 index 0000000000..693f115a98 --- /dev/null +++ b/demos/2d/kinematic_col/obstacle.png 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 Binary files differnew file mode 100644 index 0000000000..0e7d843899 --- /dev/null +++ b/demos/2d/kinematic_col/player.png diff --git a/demos/2d/kinematic_col/player.scn b/demos/2d/kinematic_col/player.scn Binary files differnew file mode 100644 index 0000000000..e558bffe8e --- /dev/null +++ b/demos/2d/kinematic_col/player.scn |