New pong demo that uses Godot as intended, erased old one.
BIN
2d/pong/.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex
Normal file
BIN
2d/pong/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex
Normal file
16
2d/pong/ball.gd
Normal file
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 203 B After Width: | Height: | Size: 203 B |
23
2d/pong/ball.png.import
Normal file
@@ -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
2d/pong/ceiling_floor.gd
Normal file
@@ -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
|
||||
|
Before Width: | Height: | Size: 956 B After Width: | Height: | Size: 956 B |
23
2d/pong/icon.png.import
Normal file
@@ -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
|
||||
|
Before Width: | Height: | Size: 200 B After Width: | Height: | Size: 200 B |
23
2d/pong/left_pallete.png.import
Normal file
@@ -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
2d/pong/paddle.gd
Normal file
@@ -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
2d/pong/pong.tscn
Normal file
@@ -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
2d/pong/project.godot
Normal file
@@ -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 )
|
||||
|
||||
|
Before Width: | Height: | Size: 202 B After Width: | Height: | Size: 202 B |
23
2d/pong/right_pallete.png.import
Normal file
@@ -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
|
||||
|
Before Width: | Height: | Size: 203 B After Width: | Height: | Size: 203 B |
23
2d/pong/separator.png.import
Normal file
@@ -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
2d/pong/wall.gd
Normal file
@@ -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()
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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 )
|
||||
|
||||
|
||||