Skip to content

Commit 8ee590a

Browse files
authored
Merge pull request #171 from endlessm/T35494-simple-node-no-scenes
Build simple node scenes in code
2 parents 8c1abb4 + 356b5c8 commit 8ee590a

File tree

7 files changed

+82
-104
lines changed

7 files changed

+82
-104
lines changed

addons/block_code/examples/pong_game/pong_game.tscn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,7 @@ version = 0
949949

950950
[node name="Space" parent="." instance=ExtResource("1_y56ac")]
951951

952-
[node name="PaddleLeft" type="CharacterBody2D" parent="." groups=["paddles"]]
952+
[node name="PaddleLeft" type="CharacterBody2D" parent="." groups=["affected_by_gravity", "paddles"]]
953953
modulate = Color(0.509804, 0.360784, 0.972549, 1)
954954
position = Vector2(64, 544)
955955
collision_mask = 5
@@ -960,7 +960,7 @@ texture = ExtResource("4_ra7bh")
960960
script = ExtResource("3_6jaq8")
961961
block_script = SubResource("Resource_m2svk")
962962

963-
[node name="PaddleRight" type="CharacterBody2D" parent="." groups=["paddles"]]
963+
[node name="PaddleRight" type="CharacterBody2D" parent="." groups=["affected_by_gravity", "paddles"]]
964964
modulate = Color(0.509804, 0.360784, 0.972549, 1)
965965
position = Vector2(1856, 544)
966966
collision_mask = 5

addons/block_code/simple_nodes/simple_character/_simple_character.gd

Lines changed: 0 additions & 8 deletions
This file was deleted.

addons/block_code/simple_nodes/simple_character/_simple_character.tscn

Lines changed: 0 additions & 14 deletions
This file was deleted.

addons/block_code/simple_nodes/simple_character/simple_character.gd

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ const Types = preload("res://addons/block_code/types/types.gd")
88
@export var texture: Texture2D:
99
set = _set_texture
1010

11-
@export var speed: Vector2 = Vector2(300, 300):
12-
set = _set_speed
11+
@export var speed: Vector2 = Vector2(300, 300)
1312

1413
const PLAYER_KEYS = {
1514
"player_1":
@@ -28,6 +27,9 @@ const PLAYER_KEYS = {
2827
}
2928
}
3029

30+
var sprite: Sprite2D
31+
var collision: CollisionShape2D
32+
3133
# Get the gravity from the project settings to be synced with RigidBody nodes.
3234
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
3335

@@ -36,43 +38,47 @@ var _jumping = false
3638

3739
func _set_texture(new_texture):
3840
texture = new_texture
39-
40-
if not is_node_ready():
41-
return
42-
43-
$Sprite2D.texture = texture
44-
var shape = RectangleShape2D.new()
45-
shape.size = Vector2(100, 100) if texture == null else texture.get_size()
46-
$CollisionShape2D.shape = shape
41+
if is_node_ready():
42+
_texture_updated()
4743

4844

49-
func _set_speed(new_speed):
50-
speed = new_speed
45+
func _texture_updated():
46+
sprite.texture = texture
47+
collision.shape.size = Vector2(100, 100) if texture == null else texture.get_size()
5148

5249

5350
## Nodes in the "affected_by_gravity" group will receive gravity changes:
5451
func on_gravity_changed(new_gravity):
5552
gravity = new_gravity
5653

5754

58-
func _init():
59-
if self.get_parent():
60-
return
61-
62-
var node = preload("res://addons/block_code/simple_nodes/simple_character/_simple_character.tscn").instantiate() as Node
63-
node.replace_by(self, true)
64-
node.queue_free()
65-
scene_file_path = ""
66-
67-
6855
func _ready():
69-
add_to_group("affected_by_gravity")
7056
simple_setup()
7157

7258

7359
func simple_setup():
74-
_set_texture(texture)
75-
_set_speed(speed)
60+
add_to_group("affected_by_gravity", true)
61+
62+
sprite = Sprite2D.new()
63+
sprite.name = &"Sprite2D"
64+
add_child(sprite)
65+
66+
collision = CollisionShape2D.new()
67+
collision.name = &"CollisionShape2D"
68+
collision.shape = RectangleShape2D.new()
69+
add_child(collision)
70+
71+
_texture_updated()
72+
73+
74+
func _exit_tree():
75+
if collision:
76+
collision.queue_free()
77+
collision = null
78+
79+
if sprite:
80+
sprite.queue_free()
81+
sprite = null
7682

7783

7884
func get_custom_class():

addons/block_code/simple_nodes/simple_scoring/_simple_scoring.gd

Lines changed: 0 additions & 8 deletions
This file was deleted.

addons/block_code/simple_nodes/simple_scoring/_simple_scoring.tscn

Lines changed: 0 additions & 30 deletions
This file was deleted.

addons/block_code/simple_nodes/simple_scoring/simple_scoring.gd

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,61 @@ const Types = preload("res://addons/block_code/types/types.gd")
1111
@export var score_right: int:
1212
set = _set_score_right
1313

14-
@onready var _score_labels = {
15-
"left": %PlayerLeftScore,
16-
"right": %PlayerRightScore,
17-
}
14+
var _score_labels: Dictionary
1815

1916
const _POSITIONS_FOR_PLAYER = {
2017
"1": "left",
2118
"2": "right",
2219
}
2320

2421

25-
func _init():
26-
if self.get_parent():
27-
return
22+
func _create_score_label(player: String) -> Label:
23+
var label := Label.new()
24+
25+
var x_pos: int
26+
match player:
27+
"left":
28+
x_pos = 240
29+
"right":
30+
x_pos = 1200
31+
_:
32+
push_error('Unrecognized SimpleScoring player "%s"' % player)
33+
34+
label.name = &"Player%sScore" % player.capitalize()
35+
label.set_size(Vector2(477, 1080))
36+
label.set_position(Vector2(x_pos, 0))
37+
label.pivot_offset = Vector2(240, 176)
38+
label.size_flags_horizontal = Control.SizeFlags.SIZE_EXPAND_FILL
39+
label.size_flags_vertical = Control.SizeFlags.SIZE_FILL
40+
label.add_theme_font_size_override("font_size", 200)
41+
label.text = "0"
42+
label.horizontal_alignment = HorizontalAlignment.HORIZONTAL_ALIGNMENT_CENTER
43+
44+
return label
45+
46+
47+
func _ready():
48+
simple_setup()
49+
50+
51+
func simple_setup():
52+
add_to_group("hud", true)
53+
54+
var left_label := _create_score_label("left")
55+
_score_labels["left"] = left_label
56+
_update_label("left", score_left)
57+
add_child(left_label)
58+
59+
var right_label := _create_score_label("right")
60+
_score_labels["right"] = right_label
61+
_update_label("right", score_right)
62+
add_child(right_label)
63+
2864

29-
var node = preload("res://addons/block_code/simple_nodes/simple_scoring/_simple_scoring.tscn").instantiate() as Node
30-
node.replace_by(self, true)
31-
node.queue_free()
32-
scene_file_path = ""
65+
func _exit_tree():
66+
for label in _score_labels.values():
67+
label.queue_free()
68+
_score_labels.clear()
3369

3470

3571
func get_custom_class():
@@ -38,17 +74,13 @@ func get_custom_class():
3874

3975
func _set_score_left(new_score_left):
4076
score_left = new_score_left
41-
if not is_node_ready():
42-
await ready
43-
if score_left:
77+
if score_left and is_node_ready():
4478
_update_label("left", score_left)
4579

4680

4781
func _set_score_right(new_score_right):
4882
score_right = new_score_right
49-
if not is_node_ready():
50-
await ready
51-
if score_right:
83+
if score_right and is_node_ready():
5284
_update_label("right", score_right)
5385

5486

0 commit comments

Comments
 (0)