game: add bleed
This commit is contained in:
7
scenes/enemies/effects/enemy_effect_base.gd
Normal file
7
scenes/enemies/effects/enemy_effect_base.gd
Normal file
@@ -0,0 +1,7 @@
|
||||
class_name EnemyEffectBase
|
||||
extends Resource
|
||||
|
||||
var enemy: EnemyBase
|
||||
|
||||
func apply(enemy: EnemyBase) -> void:
|
||||
push_error("%s does not implement apply" % self)
|
1
scenes/enemies/effects/enemy_effect_base.gd.uid
Normal file
1
scenes/enemies/effects/enemy_effect_base.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dg3yshxb4vdiu
|
29
scenes/enemies/effects/enemy_effect_bleed.gd
Normal file
29
scenes/enemies/effects/enemy_effect_bleed.gd
Normal file
@@ -0,0 +1,29 @@
|
||||
class_name EnemyEffectBleed
|
||||
extends EnemyEffectBase
|
||||
|
||||
var damage: float
|
||||
var duration: float
|
||||
var tick_rate: float = 1.0
|
||||
|
||||
var _timer: Timer
|
||||
var _remaining_ticks: int = 5
|
||||
var _enemy: EnemyBase
|
||||
|
||||
const PUDDLE = preload("res://scenes/puddle.tscn")
|
||||
|
||||
func _init(enemy: EnemyBase, damage: float, duration: float):
|
||||
_timer = Timer.new()
|
||||
|
||||
func apply(enemy: EnemyBase) -> void:
|
||||
enemy.effects.append(self)
|
||||
while _remaining_ticks > 0:
|
||||
_remaining_ticks -= 1
|
||||
var tree = enemy.get_tree()
|
||||
await enemy.get_tree().create_timer(1.0, false, true, false).timeout
|
||||
var p = PUDDLE.instantiate()
|
||||
enemy.get_parent().add_child(p)
|
||||
p.global_position = enemy.global_position
|
||||
enemy.effects.erase(self)
|
||||
|
||||
static func _is_bleeding(enemy: EnemyBase) -> bool:
|
||||
return false
|
1
scenes/enemies/effects/enemy_effect_bleed.gd.uid
Normal file
1
scenes/enemies/effects/enemy_effect_bleed.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b2ptwltm211t3
|
@@ -17,7 +17,9 @@ var modifiers: Array[EnemyMod] = []
|
||||
@onready var collision_shape_2d: CollisionShape2D = $CollisionShape2D
|
||||
@onready var shape_cast_2d: ShapeCast2D = $ShapeCast2D
|
||||
@onready var sprite_2d: Sprite2D = $Sprite2D
|
||||
@onready var label: Label = $Label
|
||||
@onready var label: Label = $HBoxContainer/Label
|
||||
@onready var effect_container: HBoxContainer = $HBoxContainer/EffectContainer
|
||||
|
||||
|
||||
var player: Player
|
||||
var enemy_name: String
|
||||
@@ -26,9 +28,11 @@ var god_mode: bool = false
|
||||
var is_dead: bool = false
|
||||
var health: float
|
||||
|
||||
var effects: Array[EnemyEffectBase]
|
||||
|
||||
var _path_update_timer: float = 0.0
|
||||
var _compute_cache: KeyedCache = KeyedCache.new()
|
||||
|
||||
var _effects_visible = []
|
||||
|
||||
func _ready() -> void:
|
||||
enemy_name = _gen_name()
|
||||
@@ -63,6 +67,15 @@ func _find_player():
|
||||
func _gen_name() -> String:
|
||||
return "Unnamed enemy"
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
for effect in effects:
|
||||
if effect in _effects_visible:
|
||||
continue
|
||||
var effect_sprite = Sprite2D.new()
|
||||
effect_sprite.texture = preload("res://assets/sprites/small_bleed_icon.png")
|
||||
effect_container.add_child(effect_sprite)
|
||||
_effects_visible.append(effect)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if not target:
|
||||
|
@@ -90,20 +90,25 @@ wait_time = 0.5
|
||||
shape = SubResource("CircleShape2D_pkqou")
|
||||
max_results = 2
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
anchors_preset = 7
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -85.5
|
||||
offset_top = 5.0
|
||||
offset_right = 85.5
|
||||
offset_bottom = 28.0
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -53.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="EffectContainer" type="HBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="Label" type="Label" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 9
|
||||
text = "Unnamed the Adjective"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
|
||||
|
Reference in New Issue
Block a user