Refactored trap code
This commit is contained in:
parent
0072a5e2e3
commit
5b880fa1ac
3 changed files with 15 additions and 31 deletions
10
main.tscn
10
main.tscn
|
|
@ -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"]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue