Adjusted damage behavior against enemies
This commit is contained in:
parent
39df6cd554
commit
a42d798490
8 changed files with 50 additions and 15 deletions
|
|
@ -26,6 +26,7 @@ shape = SubResource("RectangleShape2D_fgt1l")
|
|||
collision_layer = 16
|
||||
canvasItem = NodePath("..")
|
||||
flashColor = Color(2.00392, 2.00392, 2.00392, 1)
|
||||
id_block_time = 0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="EnemyHurtbox"]
|
||||
visible = false
|
||||
|
|
|
|||
|
|
@ -3,8 +3,9 @@ extends Area2D
|
|||
var damage = 20
|
||||
var direction = Vector2(1,0)
|
||||
@export var speed = 2000
|
||||
@onready var dmg_id = Global.next_dmg_id
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
self.position += delta * speed * direction
|
||||
for area in get_overlapping_areas():
|
||||
area.hurt(damage, -3 * direction)
|
||||
area.hurt(damage, -3 * direction, dmg_id)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=14 format=3 uid="uid://cxo6bq26huau7"]
|
||||
[gd_scene load_steps=15 format=3 uid="uid://cxo6bq26huau7"]
|
||||
|
||||
[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"]
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
[ext_resource type="PackedScene" uid="uid://ca5ndobertnp4" path="res://water/water.tscn" id="10_4c57u"]
|
||||
[ext_resource type="Script" uid="uid://cpaskpj67pnaj" path="res://enemies/boss/boss_spawner.gd" id="10_efxa6"]
|
||||
[ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="14_w48qg"]
|
||||
|
||||
[node name="main" type="Node2D"]
|
||||
|
||||
|
|
@ -88,6 +89,9 @@ texture = ExtResource("3_kek77")
|
|||
script = ExtResource("10_efxa6")
|
||||
boss = ExtResource("11_efxa6")
|
||||
|
||||
[node name="Bow" parent="." instance=ExtResource("14_w48qg")]
|
||||
position = Vector2(128, -3178)
|
||||
|
||||
[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="max_hp_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_max_hp_changed"]
|
||||
|
|
|
|||
|
|
@ -5,12 +5,14 @@ var slash_timer = 0
|
|||
var damage = 20
|
||||
var facing = -1
|
||||
var facing_mult = 1
|
||||
var dmg_id
|
||||
|
||||
func _ready() -> void:
|
||||
anim_sprite = $AnimatedSprite2D
|
||||
get_parent().attack.connect(swing)
|
||||
|
||||
func swing(dir_str) -> void:
|
||||
dmg_id = Global.next_dmg_id
|
||||
facing = - get_parent().facing * facing_mult
|
||||
if dir_str == "up":
|
||||
scale.x = abs(scale.x)
|
||||
|
|
@ -30,6 +32,5 @@ func _process(delta: float) -> void:
|
|||
if(slash_timer == 0):
|
||||
anim_sprite.visible = false
|
||||
for area in get_overlapping_areas():
|
||||
area.hurt(damage, -get_parent().earth_aligner.global_from_local(Vector2(-facing, 0)).rotated(facing*rotation))
|
||||
|
||||
|
||||
var hurt_dir = -get_parent().earth_aligner.global_from_local(Vector2(-facing, 0)).rotated(facing*rotation)
|
||||
area.hurt(damage, hurt_dir, dmg_id)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ extends Trap
|
|||
var anglespeed = 0.3
|
||||
var player_damage = 1
|
||||
var enemy_damage = 10
|
||||
@onready var dmg_id = Global.next_dmg_id
|
||||
var id_refreshing = false
|
||||
|
||||
func _ready() -> void:
|
||||
rotate(randf() * TAU)
|
||||
|
|
@ -12,12 +14,21 @@ func _process(delta: float) -> void:
|
|||
rotate(anglespeed * delta * TAU)
|
||||
for target in ball.get_overlapping_areas():
|
||||
damage_target(target)
|
||||
|
||||
for target in ball.get_overlapping_bodies():
|
||||
damage_target(target)
|
||||
|
||||
|
||||
func damage_target(target: CollisionObject2D):
|
||||
var dir = (ball.global_position - target.global_position).normalized()
|
||||
if(target.get_collision_layer_value(3)):
|
||||
target.hurt(player_damage, dir)
|
||||
else:
|
||||
target.hurt(enemy_damage, 2.5*dir)
|
||||
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
|
||||
|
|
|
|||
|
|
@ -2,28 +2,38 @@ extends Area2D
|
|||
|
||||
@export var max_hp : int
|
||||
@onready var hp = max_hp
|
||||
@export var hit_invulnerability = 0.2
|
||||
@export var flash_duration = 0.2
|
||||
@export var canvasItem : CanvasItem
|
||||
@export var flashColor : Color = Color(1.5, 1.5, 1.5)
|
||||
var inv_time = 0;
|
||||
@export var id_block_time = 10
|
||||
var flash_time = 0
|
||||
var blocked_damage_ids : Array[int] = []
|
||||
|
||||
signal damage_taken(damage, dir)
|
||||
signal died
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
inv_time = max(inv_time-delta, 0)
|
||||
if(inv_time <= 0 and canvasItem != null):
|
||||
flash_time = max(flash_time-delta, 0)
|
||||
if(flash_time <= 0 and canvasItem != null):
|
||||
canvasItem.modulate = Color(1,1,1)
|
||||
|
||||
func hurt(damage : int, dir : Vector2 = Vector2.ZERO):
|
||||
if(inv_time<=0):
|
||||
func hurt(damage : int, dir : Vector2 = Vector2.ZERO, id : int = -1):
|
||||
if not id in blocked_damage_ids:
|
||||
block_id(id)
|
||||
if canvasItem != null: canvasItem.modulate = flashColor
|
||||
inv_time = hit_invulnerability
|
||||
flash_time = flash_duration
|
||||
hp = max(hp-damage, 0)
|
||||
damage_taken.emit(damage, dir)
|
||||
if(hp <= 0):
|
||||
die()
|
||||
|
||||
|
||||
func block_id(id : int):
|
||||
blocked_damage_ids.append(id)
|
||||
await get_tree().create_timer(id_block_time).timeout
|
||||
var id_pos = blocked_damage_ids.find(id)
|
||||
if not id_pos == -1: blocked_damage_ids.remove_at(id_pos)
|
||||
|
||||
|
||||
func die():
|
||||
died.emit()
|
||||
|
||||
|
|
|
|||
6
utils/global.gd
Normal file
6
utils/global.gd
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class_name Global
|
||||
|
||||
static var next_dmg_id : int = 0 :
|
||||
get:
|
||||
next_dmg_id += 1
|
||||
return next_dmg_id
|
||||
1
utils/global.gd.uid
Normal file
1
utils/global.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://buxg0u226nfcm
|
||||
Loading…
Add table
Reference in a new issue