Refactored trap code

This commit is contained in:
RealMelwei 2025-10-14 16:09:40 +02:00
parent 0072a5e2e3
commit 5b880fa1ac
3 changed files with 15 additions and 31 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=3 uid="uid://cxo6bq26huau7"] [gd_scene load_steps=16 format=3 uid="uid://cxo6bq26huau7"]
[ext_resource type="PackedScene" uid="uid://cmaovvr15b3qk" path="res://player/player.tscn" id="2_1bvp3"] [ext_resource type="PackedScene" uid="uid://cmaovvr15b3qk" path="res://player/player.tscn" id="2_1bvp3"]
[ext_resource type="Texture2D" uid="uid://d3fpq76anm4t7" path="res://world/Background Prototype/Background prototype.png" id="3_kek77"] [ext_resource type="Texture2D" uid="uid://d3fpq76anm4t7" path="res://world/Background Prototype/Background prototype.png" id="3_kek77"]
@ -15,8 +15,6 @@
[ext_resource type="PackedScene" uid="uid://cqn67nwyrtq3k" path="res://ui/journal/journal.tscn" id="10_w48qg"] [ext_resource type="PackedScene" uid="uid://cqn67nwyrtq3k" path="res://ui/journal/journal.tscn" id="10_w48qg"]
[ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"] [ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"]
[ext_resource type="Script" uid="uid://gul4u5tw1vxk" path="res://bg_image.gd" id="13_vivmo"] [ext_resource type="Script" uid="uid://gul4u5tw1vxk" path="res://bg_image.gd" id="13_vivmo"]
[ext_resource type="PackedScene" uid="uid://bwtdls58ajair" path="res://items/unique_items/upslash/upslash.tscn" id="16_yaehf"]
[ext_resource type="PackedScene" uid="uid://bbpf28ohayd8n" path="res://items/unique_items/backslash/backslash.tscn" id="17_074og"]
[node name="main" type="Node2D"] [node name="main" type="Node2D"]
@ -106,12 +104,6 @@ colors = Array[Color]([Color(0, 0.6441987, 0.6693053, 1), Color(0.90588236, 0.15
script = ExtResource("10_efxa6") script = ExtResource("10_efxa6")
boss = ExtResource("11_efxa6") boss = ExtResource("11_efxa6")
[node name="Upslash" parent="." instance=ExtResource("16_yaehf")]
position = Vector2(264, -3143)
[node name="Backslash" parent="." instance=ExtResource("17_074og")]
position = Vector2(-48, -3137)
[connection signal="active_item_changed" from="Player" to="UIOverlay/ItemUI" method="_on_player_active_item_changed"] [connection signal="active_item_changed" from="Player" to="UIOverlay/ItemUI" method="_on_player_active_item_changed"]
[connection signal="health_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_health_changed"] [connection signal="health_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_health_changed"]
[connection signal="max_hp_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_max_hp_changed"] [connection signal="max_hp_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_max_hp_changed"]

View file

@ -6,25 +6,23 @@ extends Trap
var closed = false var closed = false
func damage_target(target: CollisionObject2D): func damage_target(target: CollisionObject2D):
# Checks whether the player or an enemy has been hit
if(target.get_collision_layer_value(3)): if(target.get_collision_layer_value(3)):
target.hurt(player_damage, Vector2.ZERO) target.hurt(player_damage, Vector2.ZERO)
else: else:
target.hurt(enemy_damage, Vector2.ZERO) target.hurt(enemy_damage, Vector2.ZERO)
# Bear Traps are static, hence it is sufficient to check for others entering the trap
func _on_area_2d_area_entered(area: Area2D) -> void: func _on_area_2d_area_entered(area: Area2D) -> void:
if not closed: close_on(area)
damage_target(area)
closed = true
$AnimatedSprite2D.play("close")
await $AnimatedSprite2D.animation_finished
await get_tree().create_timer(0.1).timeout
queue_free()
func _on_area_2d_body_entered(body: Node2D) -> void: func _on_area_2d_body_entered(body: Node2D) -> void:
close_on(body)
# Play the animation and assign the damage
func close_on(target):
if not closed: if not closed:
damage_target(body) damage_target(target)
closed = true closed = true
$AnimatedSprite2D.play("close") $AnimatedSprite2D.play("close")
await $AnimatedSprite2D.animation_finished await $AnimatedSprite2D.animation_finished

View file

@ -1,34 +1,28 @@
extends Trap extends Trap
@onready var ball : Area2D = $Area2D @onready var ball : Area2D = $Area2D
var anglespeed = 0.3 var angular_speed = 0.3
var player_damage = 1 var player_damage = 1
var enemy_damage = 10 var enemy_damage = 10
@onready var dmg_id = Global.next_dmg_id @onready var dmg_id = Global.next_dmg_id
var id_refreshing = false var id_refreshing = false
func _ready() -> void: func _ready() -> void:
# Randomize starting position and rotation direction
rotate(randf() * TAU) rotate(randf() * TAU)
anglespeed = anglespeed * (2 * randi_range(0,1) - 1) angular_speed = angular_speed * (2 * randi_range(0,1) - 1)
func _process(delta: float) -> void: func _process(delta: float) -> void:
rotate(anglespeed * delta * TAU) rotate(angular_speed * delta * TAU)
for target in ball.get_overlapping_areas(): for target in ball.get_overlapping_areas():
damage_target(target) damage_target(target)
for target in ball.get_overlapping_bodies(): for target in ball.get_overlapping_bodies():
damage_target(target) damage_target(target)
func damage_target(target: CollisionObject2D): func damage_target(target: CollisionObject2D):
# Targets are knocked away from the ball
var dir = (ball.global_position - target.global_position).normalized() var dir = (ball.global_position - target.global_position).normalized()
if(target.get_collision_layer_value(3)): if(target.get_collision_layer_value(3)):
target.hurt(player_damage, dir) target.hurt(player_damage, dir)
else: else:
target.hurt(enemy_damage, 2.5*dir, dmg_id) target.hurt(enemy_damage, 2.5*dir, dmg_id)
refresh_id()
func refresh_id():
if not id_refreshing:
id_refreshing = true
await get_tree().create_timer(0.2).timeout
id_refreshing = false
dmg_id = Global.next_dmg_id