mirror of
https://github.com/CactiChameleon9/PONG-Godot.git
synced 2025-02-07 00:43:03 +00:00
Made PONG! in Godot
This commit is contained in:
commit
0edf5ed31c
16
.gitignore
vendored
Normal file
16
.gitignore
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# ---> Godot
|
||||||
|
# Godot-specific ignores
|
||||||
|
.import/
|
||||||
|
export.cfg
|
||||||
|
export_presets.cfg
|
||||||
|
|
||||||
|
# Imported translations (automatically generated from CSV files)
|
||||||
|
*.translation
|
||||||
|
|
||||||
|
# Mono-specific ignores
|
||||||
|
.mono/
|
||||||
|
data_*/
|
||||||
|
|
||||||
|
# Builds
|
||||||
|
.exe
|
||||||
|
.x86_64
|
37
Ball.gd
Normal file
37
Ball.gd
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
extends KinematicBody2D
|
||||||
|
|
||||||
|
export var inital_speed : float = 400.0
|
||||||
|
export var speed_increase : float = 40.0
|
||||||
|
|
||||||
|
var speed : float = inital_speed
|
||||||
|
|
||||||
|
|
||||||
|
var velocity : Vector2 = Vector2.RIGHT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _draw():
|
||||||
|
draw_circle(Vector2(0, 0), 20, Color("#c4c4c4"))
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
velocity = velocity.normalized() * speed
|
||||||
|
|
||||||
|
var collision = move_and_collide(velocity * delta)
|
||||||
|
if collision:
|
||||||
|
velocity = velocity.bounce(collision.normal)
|
||||||
|
speed += speed_increase
|
||||||
|
|
||||||
|
if collision.collider.is_in_group("Paddle"):
|
||||||
|
velocity.x += velocity.x/abs(velocity.x) * speed_increase
|
||||||
|
|
||||||
|
collision_mask = 2
|
||||||
|
$DisableCollision.start()
|
||||||
|
|
||||||
|
|
||||||
|
func reset_speed():
|
||||||
|
speed = inital_speed
|
||||||
|
|
||||||
|
|
||||||
|
func _on_DisableCollision_timeout():
|
||||||
|
collision_mask = 3
|
21
Ball.tscn
Normal file
21
Ball.tscn
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://Ball.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id=1]
|
||||||
|
radius = 20.0
|
||||||
|
|
||||||
|
[node name="Ball" type="KinematicBody2D"]
|
||||||
|
collision_layer = 4
|
||||||
|
collision_mask = 3
|
||||||
|
moving_platform_apply_velocity_on_leave = 2
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="DisableCollision" type="Timer" parent="."]
|
||||||
|
process_mode = 0
|
||||||
|
wait_time = 0.2
|
||||||
|
|
||||||
|
[connection signal="timeout" from="DisableCollision" to="." method="_on_DisableCollision_timeout"]
|
BIN
ExpressionPro.ttf
Normal file
BIN
ExpressionPro.ttf
Normal file
Binary file not shown.
13
Main.gd
Normal file
13
Main.gd
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
extends Node2D
|
||||||
|
|
||||||
|
const ball := preload("res://Ball.tscn")
|
||||||
|
|
||||||
|
onready var ball_position : Vector2 = $"%Ball".position
|
||||||
|
|
||||||
|
|
||||||
|
func reset_ball():
|
||||||
|
yield(get_tree().create_timer(.5), "timeout")
|
||||||
|
|
||||||
|
$"%Ball".reset_speed()
|
||||||
|
$"%Ball".position = ball_position
|
||||||
|
|
100
Main.tscn
Normal file
100
Main.tscn
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
[gd_scene load_steps=10 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://Paddle.tscn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://Ball.tscn" type="PackedScene" id=2]
|
||||||
|
[ext_resource path="res://ExpressionPro.ttf" type="DynamicFontData" id=3]
|
||||||
|
[ext_resource path="res://Score.gd" type="Script" id=4]
|
||||||
|
[ext_resource path="res://Main.gd" type="Script" id=5]
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFont" id=2]
|
||||||
|
size = 480
|
||||||
|
font_data = ExtResource( 3 )
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFont" id=3]
|
||||||
|
size = 200
|
||||||
|
font_data = ExtResource( 3 )
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
|
extents = Vector2( 700, 10 )
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=4]
|
||||||
|
extents = Vector2( 10, 540 )
|
||||||
|
|
||||||
|
[node name="Main" type="Node2D"]
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
|
||||||
|
[node name="UI" type="CanvasLayer" parent="."]
|
||||||
|
layer = -1
|
||||||
|
|
||||||
|
[node name="Score" type="Label" parent="UI"]
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_top = -420.0
|
||||||
|
custom_colors/font_color = Color( 0.356863, 0.356863, 0.356863, 1 )
|
||||||
|
custom_fonts/font = SubResource( 2 )
|
||||||
|
text = "2 2"
|
||||||
|
align = 1
|
||||||
|
script = ExtResource( 4 )
|
||||||
|
|
||||||
|
[node name="Title" type="Label" parent="UI"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
margin_bottom = 176.0
|
||||||
|
custom_colors/font_color = Color( 0.356863, 0.356863, 0.356863, 1 )
|
||||||
|
custom_fonts/font = SubResource( 3 )
|
||||||
|
text = "PONG!"
|
||||||
|
align = 1
|
||||||
|
|
||||||
|
[node name="PlayerPaddle" parent="." instance=ExtResource( 1 )]
|
||||||
|
position = Vector2( 60, 142 )
|
||||||
|
scale = Vector2( -15, 100 )
|
||||||
|
is_player = true
|
||||||
|
acceleration = 25.0
|
||||||
|
friction = 15.0
|
||||||
|
speed = 1000.0
|
||||||
|
|
||||||
|
[node name="OppPaddle" parent="." instance=ExtResource( 1 )]
|
||||||
|
position = Vector2( 1220, 213 )
|
||||||
|
speed = 1000.0
|
||||||
|
|
||||||
|
[node name="Ball" parent="." instance=ExtResource( 2 )]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
position = Vector2( 619, 311 )
|
||||||
|
|
||||||
|
[node name="Walls" type="Node" parent="."]
|
||||||
|
|
||||||
|
[node name="Wall1" type="StaticBody2D" parent="Walls"]
|
||||||
|
position = Vector2( 640, 0 )
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/Wall1"]
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="Wall2" type="StaticBody2D" parent="Walls"]
|
||||||
|
position = Vector2( 640, 720 )
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 0
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/Wall2"]
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="PlayerGoal" type="Area2D" parent="."]
|
||||||
|
position = Vector2( -30, 360 )
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 4
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerGoal"]
|
||||||
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="OppGoal" type="Area2D" parent="."]
|
||||||
|
position = Vector2( 1310, 360 )
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 4
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="OppGoal"]
|
||||||
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
|
[connection signal="goal_scored" from="UI/Score" to="." method="reset_ball"]
|
||||||
|
[connection signal="body_entered" from="PlayerGoal" to="UI/Score" method="increase_opp_score"]
|
||||||
|
[connection signal="body_entered" from="OppGoal" to="UI/Score" method="increase_player_score"]
|
BIN
PONG!.x86_64
Executable file
BIN
PONG!.x86_64
Executable file
Binary file not shown.
35
Paddle.gd
Normal file
35
Paddle.gd
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
extends KinematicBody2D
|
||||||
|
|
||||||
|
export var is_player : bool = false
|
||||||
|
export var acceleration : float = 50.0
|
||||||
|
export var friction : float = 55.0
|
||||||
|
export var speed : float = 500.0
|
||||||
|
|
||||||
|
var velocity : Vector2 = Vector2.ZERO
|
||||||
|
|
||||||
|
onready var inital_x = position.x
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(_delta):
|
||||||
|
|
||||||
|
var direction := Vector2.ZERO
|
||||||
|
|
||||||
|
if is_player:
|
||||||
|
direction.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
|
||||||
|
else:
|
||||||
|
if get_node_or_null("%Ball"):
|
||||||
|
direction.y = 1 if $"%Ball".position.y >= self.position.y else -1
|
||||||
|
else:
|
||||||
|
direction.y = 0
|
||||||
|
|
||||||
|
velocity += acceleration * direction
|
||||||
|
if direction.y == 0:
|
||||||
|
velocity -= velocity.normalized() * friction
|
||||||
|
if abs(velocity.length()) <= friction:
|
||||||
|
velocity = Vector2.ZERO
|
||||||
|
|
||||||
|
velocity = velocity.limit_length(speed)
|
||||||
|
|
||||||
|
velocity = move_and_slide(velocity)
|
||||||
|
|
||||||
|
position.x = inital_x
|
15
Paddle.tscn
Normal file
15
Paddle.tscn
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://Paddle.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[node name="Paddle" type="KinematicBody2D" groups=["Paddle"]]
|
||||||
|
scale = Vector2( 15, 100 )
|
||||||
|
collision_mask = 0
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
|
||||||
|
polygon = PoolVector2Array( 1, 1, 1, -1, 0.333333, -1, -0.667, -0.75, -1.5, -0.25, -1.5, 0.25, -0.667, 0.75, 0.333333, 1 )
|
||||||
|
|
||||||
|
[node name="Polygon2D2" type="Polygon2D" parent="."]
|
||||||
|
color = Color( 0.768627, 0.768627, 0.768627, 1 )
|
||||||
|
polygon = PoolVector2Array( 1, 1, 1, -1, -1.5, -1, -1.5, 1 )
|
22
Score.gd
Normal file
22
Score.gd
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
extends Label
|
||||||
|
|
||||||
|
signal goal_scored
|
||||||
|
|
||||||
|
var player_score : int = 0
|
||||||
|
var opp_score : int = 0
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
update_label()
|
||||||
|
|
||||||
|
func update_label():
|
||||||
|
self.text = str(player_score) + " " + str(opp_score)
|
||||||
|
|
||||||
|
func increase_player_score(_body = null):
|
||||||
|
player_score += 1
|
||||||
|
update_label()
|
||||||
|
emit_signal("goal_scored")
|
||||||
|
|
||||||
|
func increase_opp_score(_body = null):
|
||||||
|
opp_score += 1
|
||||||
|
update_label()
|
||||||
|
emit_signal("goal_scored")
|
7
default_env.tres
Normal file
7
default_env.tres
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[gd_resource type="Environment" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSky" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
background_mode = 2
|
||||||
|
background_sky = SubResource( 1 )
|
35
icon.png.import
Normal file
35
icon.png.import
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://icon.png"
|
||||||
|
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=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
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=true
|
||||||
|
svg/scale=1.0
|
68
project.godot
Normal file
68
project.godot
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
; Engine configuration file.
|
||||||
|
; It's best edited using the editor UI and not directly,
|
||||||
|
; since the parameters that go here are not all obvious.
|
||||||
|
;
|
||||||
|
; Format:
|
||||||
|
; [section] ; section goes between []
|
||||||
|
; param=value ; assign values to parameters
|
||||||
|
|
||||||
|
config_version=4
|
||||||
|
|
||||||
|
[application]
|
||||||
|
|
||||||
|
config/name="PONG!"
|
||||||
|
run/main_scene="res://Main.tscn"
|
||||||
|
config/icon="res://icon.png"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
|
||||||
|
window/size/width=1280
|
||||||
|
window/size/height=720
|
||||||
|
window/stretch/mode="2d"
|
||||||
|
window/stretch/aspect="keep_width"
|
||||||
|
|
||||||
|
[gui]
|
||||||
|
|
||||||
|
common/drop_mouse_on_gui_input_disabled=true
|
||||||
|
|
||||||
|
[input]
|
||||||
|
|
||||||
|
ui_left={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [ ]
|
||||||
|
}
|
||||||
|
ui_right={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [ ]
|
||||||
|
}
|
||||||
|
ui_up={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
ui_down={
|
||||||
|
"deadzone": 0.5,
|
||||||
|
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||||
|
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
[layer_names]
|
||||||
|
|
||||||
|
2d_physics/layer_1="Paddle"
|
||||||
|
2d_physics/layer_2="Wall"
|
||||||
|
2d_physics/layer_3="Ball"
|
||||||
|
|
||||||
|
[physics]
|
||||||
|
|
||||||
|
common/enable_pause_aware_picking=true
|
||||||
|
|
||||||
|
[rendering]
|
||||||
|
|
||||||
|
environment/default_clear_color=Color( 0.168627, 0.168627, 0.168627, 1 )
|
||||||
|
environment/default_environment="res://default_env.tres"
|
Loading…
x
Reference in New Issue
Block a user