summaryrefslogtreecommitdiffstats
path: root/demos/viewport/2d_in_3d/pong.gd
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-04-10 00:18:27 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-04-10 00:18:27 -0300
commit7ea3e8267afaf626256c84a9a3dc61e2954fc6a2 (patch)
tree0aa7588918b814d1781fc94e8b518c7095a0bab7 /demos/viewport/2d_in_3d/pong.gd
parentb4969373b3475799d6b24cdffeda4659c37f0b8a (diff)
downloadredot-engine-7ea3e8267afaf626256c84a9a3dc61e2954fc6a2.tar.gz
-Fixed a few bugs in Viewport
-Made a few demos using Viewport to show it's true power! -Fixed some start-up error messages.
Diffstat (limited to 'demos/viewport/2d_in_3d/pong.gd')
-rw-r--r--demos/viewport/2d_in_3d/pong.gd73
1 files changed, 73 insertions, 0 deletions
diff --git a/demos/viewport/2d_in_3d/pong.gd b/demos/viewport/2d_in_3d/pong.gd
new file mode 100644
index 0000000000..bfffdcf0d8
--- /dev/null
+++ b/demos/viewport/2d_in_3d/pong.gd
@@ -0,0 +1,73 @@
+
+extends Node2D
+
+# 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)
+#default ball direction
+var direction = Vector2(-1,0)
+var pad_size = Vector2(8,32)
+const PAD_SPEED = 150
+
+
+func _process(delta):
+
+
+ # get ball positio 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 )
+
+ #integrate new ball postion
+ ball_pos+=direction*ball_speed*delta
+
+ #flip when touching roof or floor
+ if ( (ball_pos.y<0 and direction.y <0) or (ball_pos.y>screen_size.y and direction.y>0)):
+ direction.y = -direction.y
+
+ #flip, change direction and increase speed when touching pads
+ if ( (left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
+ direction.x=-direction.x
+ ball_speed*=1.1
+ direction.y=randf()*2.0-1
+ direction = direction.normalized()
+
+ #check gameover
+ if (ball_pos.x<0 or ball_pos.x>screen_size.x):
+ ball_pos=screen_size*0.5
+ ball_speed=INITIAL_BALL_SPEED
+ direction=Vector2(-1,0)
+
+
+ get_node("ball").set_pos(ball_pos)
+
+ #move left pad
+ var left_pos = get_node("left").get_pos()
+
+ if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
+ left_pos.y+=-PAD_SPEED*delta
+ if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
+ left_pos.y+=PAD_SPEED*delta
+
+ get_node("left").set_pos(left_pos)
+
+ #move right pad
+ var right_pos = get_node("right").get_pos()
+
+ if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
+ right_pos.y+=-PAD_SPEED*delta
+ if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
+ right_pos.y+=PAD_SPEED*delta
+
+ get_node("right").set_pos(right_pos)
+
+
+
+func _ready():
+ screen_size = get_viewport_rect().size # get actual size
+ pad_size = get_node("left").get_texture().get_size()
+ set_process(true)
+