mirror of
https://github.com/CactiChameleon9/PONG-Godot.git
synced 2025-02-06 16:33: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