Explorar o código

New pong demo that uses Godot as intended, erased old one.

Juan Linietsky %!s(int64=8) %!d(string=hai) anos
pai
achega
8f6370f13d

BIN=BIN
2d/pong/.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex


BIN=BIN
2d/pong/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex


BIN=BIN
2d/pong/.import/left_pallete.png-bc33611074a0f886142e37c77bd2545a.stex


BIN=BIN
2d/pong/.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex


BIN=BIN
2d/pong/.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex


+ 16 - 0
2d/pong/ball.gd

@@ -0,0 +1,16 @@
+extends Area2D
+
+const BALL_SPEED = 100
+var direction = Vector2(-1,0)
+var speed = BALL_SPEED
+
+onready var initial_pos = get_position()
+
+func reset():
+	position = initial_pos
+	speed = BALL_SPEED
+	direction = Vector2(-1,0)
+
+func _process(delta):
+	position += direction * speed * delta
+	

+ 0 - 0
old/2d/pong/ball.png → 2d/pong/ball.png


+ 23 - 0
2d/pong/ball.png.import

@@ -0,0 +1,23 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex"
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=true

+ 7 - 0
2d/pong/ceiling_floor.gd

@@ -0,0 +1,7 @@
+extends Area2D
+
+export var y_direction = 1
+
+func _on_area_entered( area ):
+	if (area.get_name()=="ball"):
+		area.direction.y = y_direction

+ 0 - 0
old/2d/pong/icon.png → 2d/pong/icon.png


+ 23 - 0
2d/pong/icon.png.import

@@ -0,0 +1,23 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=true

+ 0 - 0
old/2d/pong/left_pallete.png → 2d/pong/left_pallete.png


+ 23 - 0
2d/pong/left_pallete.png.import

@@ -0,0 +1,23 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/left_pallete.png-bc33611074a0f886142e37c77bd2545a.stex"
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=true

+ 20 - 0
2d/pong/paddle.gd

@@ -0,0 +1,20 @@
+extends Area2D
+export var ball_dir=1
+
+const MOVE_SPEED=100
+
+func _process(delta):
+
+	var which = get_name()
+	
+	# move up and down based on input
+	if (Input.is_action_pressed(which+"_move_up") and position.y > 0):
+		position.y -= MOVE_SPEED * delta
+	if (Input.is_action_pressed(which+"_move_down") and position.y < 640):
+		position.y += MOVE_SPEED * delta
+		
+
+func _on_area_entered( area ):
+	if area.get_name() == "ball":
+		# assign new direction
+		area.direction = Vector2(ball_dir,randf() * 2 - 1).normalized()

+ 186 - 0
2d/pong/pong.tscn

@@ -0,0 +1,186 @@
+[gd_scene load_steps=13 format=2]
+
+[ext_resource path="res://paddle.gd" type="Script" id=1]
+[ext_resource path="res://left_pallete.png" type="Texture" id=2]
+[ext_resource path="res://right_pallete.png" type="Texture" id=3]
+[ext_resource path="res://ball.gd" type="Script" id=4]
+[ext_resource path="res://ball.png" type="Texture" id=5]
+[ext_resource path="res://separator.png" type="Texture" id=6]
+[ext_resource path="res://wall.gd" type="Script" id=7]
+[ext_resource path="res://ceiling_floor.gd" type="Script" id=8]
+
+[sub_resource type="RectangleShape2D" id=1]
+
+custom_solver_bias = 0.0
+extents = Vector2( 4, 16 )
+
+[sub_resource type="RectangleShape2D" id=2]
+
+custom_solver_bias = 0.0
+extents = Vector2( 4, 4 )
+
+[sub_resource type="RectangleShape2D" id=3]
+
+custom_solver_bias = 0.0
+extents = Vector2( 10, 200 )
+
+[sub_resource type="RectangleShape2D" id=4]
+
+custom_solver_bias = 0.0
+extents = Vector2( 320, 10 )
+
+[node name="game" type="Node2D"]
+
+[node name="left" type="Area2D" parent="."]
+
+position = Vector2( 67.6285, 192.594 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 1 )
+ball_dir = 1
+
+[node name="sprite" type="Sprite" parent="left"]
+
+texture = ExtResource( 2 )
+_sections_unfolded = [ "Transform" ]
+
+[node name="collision" type="CollisionShape2D" parent="left"]
+
+shape = SubResource( 1 )
+
+[node name="right" type="Area2D" parent="."]
+
+position = Vector2( 563.815, 188.919 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 1 )
+ball_dir = -1
+
+[node name="sprite" type="Sprite" parent="right"]
+
+texture = ExtResource( 3 )
+_sections_unfolded = [ "Transform" ]
+
+[node name="collision" type="CollisionShape2D" parent="right"]
+
+shape = SubResource( 1 )
+
+[node name="ball" type="Area2D" parent="."]
+
+position = Vector2( 320.5, 191.124 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 4 )
+
+[node name="sprite" type="Sprite" parent="ball"]
+
+texture = ExtResource( 5 )
+_sections_unfolded = [ "Transform" ]
+
+[node name="collision" type="CollisionShape2D" parent="ball"]
+
+shape = SubResource( 2 )
+
+[node name="separator" type="Sprite" parent="."]
+
+position = Vector2( 320, 200 )
+texture = ExtResource( 6 )
+
+[node name="left_wall" type="Area2D" parent="."]
+
+position = Vector2( -10, 200 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 7 )
+_sections_unfolded = [ "Transform" ]
+
+[node name="collision" type="CollisionShape2D" parent="left_wall"]
+
+shape = SubResource( 3 )
+
+[node name="right_wall" type="Area2D" parent="."]
+
+position = Vector2( 650, 200 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 7 )
+_sections_unfolded = [ "Transform" ]
+
+[node name="collision" type="CollisionShape2D" parent="right_wall"]
+
+shape = SubResource( 3 )
+
+[node name="ceiling" type="Area2D" parent="."]
+
+position = Vector2( 320, -10 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 8 )
+_sections_unfolded = [ "Transform" ]
+y_direction = 1
+
+[node name="collision" type="CollisionShape2D" parent="ceiling"]
+
+shape = SubResource( 4 )
+
+[node name="floor" type="Area2D" parent="."]
+
+position = Vector2( 320, 410 )
+input_pickable = true
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+audio_bus_override = false
+audio_bus_name = "Master"
+script = ExtResource( 8 )
+_sections_unfolded = [ "Transform" ]
+y_direction = -1
+
+[node name="collision" type="CollisionShape2D" parent="floor"]
+
+shape = SubResource( 4 )
+
+[connection signal="area_entered" from="left" to="left" method="_on_area_entered"]
+
+[connection signal="area_entered" from="right" to="right" method="_on_area_entered"]
+
+[connection signal="area_entered" from="left_wall" to="left_wall" method="_on_wall_area_entered"]
+
+[connection signal="area_entered" from="right_wall" to="right_wall" method="_on_wall_area_entered"]
+
+[connection signal="area_entered" from="ceiling" to="ceiling" method="_on_area_entered"]
+
+[connection signal="area_entered" from="floor" to="floor" method="_on_area_entered"]
+
+

+ 23 - 0
2d/pong/project.godot

@@ -0,0 +1,23 @@
+[application]
+
+icon = "res://icon.png"
+main_scene = "pong.tscn"
+name = "Pong"
+
+[display]
+
+stretch_2d = true
+window/height = 400
+window/width = 640
+
+[input]
+
+left_move_down = [ InputEvent(KEY,90) ]
+left_move_up = [ InputEvent(KEY,65) ]
+right_move_down = [ InputEvent(KEY,16777234) ]
+right_move_up = [ InputEvent(KEY,16777232) ]
+
+[rendering]
+
+viewport/default_clear_color = Color( 0, 0, 0, 1 )
+

+ 0 - 0
old/2d/pong/right_pallete.png → 2d/pong/right_pallete.png


+ 23 - 0
2d/pong/right_pallete.png.import

@@ -0,0 +1,23 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex"
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=true

+ 0 - 0
old/2d/pong/separator.png → 2d/pong/separator.png


+ 23 - 0
2d/pong/separator.png.import

@@ -0,0 +1,23 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex"
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=true

+ 8 - 0
2d/pong/wall.gd

@@ -0,0 +1,8 @@
+extends Area2D
+
+
+
+func _on_wall_area_entered( area ):
+	if (area.get_name() == "ball"):
+		#oops, ball went out of game place, reset
+		area.reset()

+ 0 - 22
old/2d/pong/engine.cfg

@@ -1,22 +0,0 @@
-[application]
-
-name="Pong"
-main_scene="pong.tscn"
-icon="res://icon.png"
-
-[display]
-
-width=640
-height=400
-stretch_2d=true
-
-[input]
-
-left_move_up=[key(A)]
-left_move_down=[key(Z)]
-right_move_up=[key(Up)]
-right_move_down=[key(Down)]
-
-[render]
-
-default_clear_color=#ff000000

+ 0 - 67
old/2d/pong/pong.gd

@@ -1,67 +0,0 @@
-
-extends Node2D
-
-# Member variables
-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 position 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)

+ 0 - 33
old/2d/pong/pong.tscn

@@ -1,33 +0,0 @@
-[gd_scene load_steps=6 format=1]
-
-[ext_resource path="res://pong.gd" type="Script" id=1]
-[ext_resource path="res://left_pallete.png" type="Texture" id=2]
-[ext_resource path="res://right_pallete.png" type="Texture" id=3]
-[ext_resource path="res://separator.png" type="Texture" id=4]
-[ext_resource path="res://ball.png" type="Texture" id=5]
-
-[node name="game" type="Node2D"]
-
-script/script = ExtResource( 1 )
-
-[node name="left" type="Sprite" parent="."]
-
-transform/pos = Vector2( 67.6875, 183.208 )
-texture = ExtResource( 2 )
-
-[node name="right" type="Sprite" parent="."]
-
-transform/pos = Vector2( 577, 187 )
-texture = ExtResource( 3 )
-
-[node name="separator" type="Sprite" parent="."]
-
-transform/pos = Vector2( 320, 200 )
-texture = ExtResource( 4 )
-
-[node name="ball" type="Sprite" parent="."]
-
-transform/pos = Vector2( 320.283, 188 )
-texture = ExtResource( 5 )
-
-