From 284e85a106c37c7f8300875e774f3331e1319641 Mon Sep 17 00:00:00 2001 From: myin Date: Sat, 21 Oct 2023 18:03:45 +0200 Subject: [PATCH] remove self hit on spawn --- godot/src/player.gd | 5 ++++- godot/src/props/projectile.gd | 15 +++++++++++++-- godot/src/props/projectile.tscn | 4 +++- godot/src/props/shard_emitter.gd | 1 - 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/godot/src/player.gd b/godot/src/player.gd index c67672f..68f2f0a 100644 --- a/godot/src/player.gd +++ b/godot/src/player.gd @@ -12,16 +12,19 @@ signal died() @onready var hand: Node2D = $Hand @onready var shot_point = $Hand/ShotPoint +var thrown = false func _ready(): input.just_pressed.connect(_on_just_pressed) func _on_just_pressed(ev: InputEvent): - if ev.is_action_pressed("throw"): + if ev.is_action_pressed("throw") and not thrown: + thrown = true var projectile = projectile_scene.instantiate() projectile.global_position = shot_point.global_position projectile.global_rotation = shot_point.global_rotation get_tree().current_scene.add_child(projectile) + projectile.freed.connect(func(): thrown = false) func _process(delta): hand.global_rotation = Vector2.RIGHT.angle_to(global_position.direction_to(get_global_mouse_position())) diff --git a/godot/src/props/projectile.gd b/godot/src/props/projectile.gd index 6b9060f..3aa3f77 100644 --- a/godot/src/props/projectile.gd +++ b/godot/src/props/projectile.gd @@ -1,13 +1,20 @@ extends Area2D +signal freed() + @export var speed := 300 @export var dir := Vector2.RIGHT @export var max_reflections := 4 @export var damage := 5 +@onready var collision_shape_2d = $CollisionShape2D + var reflected := 0 func _ready(): + collision_shape_2d.disabled = true + get_tree().create_timer(0.05).timeout.connect(func(): collision_shape_2d.disabled = false) # prevent player from hitting himself + dir = dir.rotated(global_rotation) area_entered.connect(func(area): if area is Mirror: @@ -16,11 +23,15 @@ func _ready(): reflected += 1 if reflected > max_reflections: - queue_free() + _remove() elif area is Hitbox: area.damage(damage) - queue_free() + _remove() ) +func _remove(): + freed.emit() + queue_free() + func _physics_process(delta): translate(dir * speed * delta) diff --git a/godot/src/props/projectile.tscn b/godot/src/props/projectile.tscn index 3654217..7790983 100644 --- a/godot/src/props/projectile.tscn +++ b/godot/src/props/projectile.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" path="res://src/props/projectile.gd" id="1_ffy6e"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_str41"] -size = Vector2(32, 4) +size = Vector2(4, 32) [node name="Projectile" type="Area2D"] collision_layer = 0 @@ -17,4 +17,6 @@ scale = Vector2(0.234375, 0.0256348) texture = ExtResource("1_exxtt") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] +rotation = -1.5708 shape = SubResource("RectangleShape2D_str41") +one_way_collision = true diff --git a/godot/src/props/shard_emitter.gd b/godot/src/props/shard_emitter.gd index b4f1f0d..c976783 100644 --- a/godot/src/props/shard_emitter.gd +++ b/godot/src/props/shard_emitter.gd @@ -18,7 +18,6 @@ var shattered = false func _ready() -> void: if get_parent() is Sprite2D: var _rect = get_parent().get_rect() - print(_rect) var points = [] #add outer frame points points.append(_rect.position)