added green attack, enemy
This commit is contained in:
parent
f852b0a30e
commit
2bf9db610e
43 changed files with 673 additions and 246 deletions
68
scripts/grenade.gd
Normal file
68
scripts/grenade.gd
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
extends MaskAbility
|
||||
|
||||
@export var max_bounces := 5
|
||||
@export var speed := 1.4
|
||||
@export var max_height = 100.
|
||||
@export var explosion : PackedScene
|
||||
|
||||
@onready var sprite : Sprite2D = $Sprite2D
|
||||
var traveled: float = 0.0
|
||||
|
||||
var bouncing = false
|
||||
var target : Enemy = null
|
||||
var bounces := max_bounces
|
||||
var already_hit : Array[Enemy] = []
|
||||
|
||||
func mask_ready():
|
||||
super.mask_ready()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if traveled < 1:
|
||||
if target:
|
||||
target_position = target.position
|
||||
traveled += speed * delta
|
||||
|
||||
global_position = start_position.lerp(target_position, traveled)
|
||||
|
||||
var arc_y = 4 * max_height * traveled * (1 - traveled)
|
||||
|
||||
sprite.position.y = -arc_y
|
||||
elif bouncing and bounces > 0:
|
||||
if target:
|
||||
target.damage()
|
||||
change_target()
|
||||
else:
|
||||
global_position = target_position
|
||||
sprite.position.y = 0
|
||||
|
||||
func change_target():
|
||||
var enemies = get_tree().get_nodes_in_group("enemy")
|
||||
var dist := 100000.
|
||||
var closest : Entity = null
|
||||
for e : Enemy in enemies:
|
||||
if e in already_hit: continue
|
||||
var e_dist = e.global_position.distance_to(global_position)
|
||||
if e_dist < dist:
|
||||
dist = e_dist
|
||||
closest = e
|
||||
bounces -= 1
|
||||
target = null
|
||||
if dist < 60:
|
||||
target = closest
|
||||
already_hit.append(closest)
|
||||
start_position = global_position
|
||||
target_position = closest.global_position
|
||||
traveled = 0
|
||||
var explo = explosion.instantiate()
|
||||
explo.emitting = true
|
||||
add_child(explo)
|
||||
|
||||
func _on_hitbox_hit_entity(entity : Entity) -> void:
|
||||
if from_player:
|
||||
for c in _get_all_children(self):
|
||||
if c is Hitbox:
|
||||
c.enabled = false
|
||||
bouncing = true
|
||||
target = entity
|
||||
already_hit = [entity]
|
||||
#change_target()
|
||||
Loading…
Add table
Add a link
Reference in a new issue