56 lines
1.1 KiB
GDScript
56 lines
1.1 KiB
GDScript
extends Area2D
|
|
|
|
@export var DAMAGE = 10;
|
|
@export var SPEED = 700;
|
|
@export var LIFETIME = 1.0;
|
|
@export var HANG_TIME = 0.0;
|
|
@export var FRICTION = 0.0;
|
|
@export var SIZE_MOD = 0.0;
|
|
|
|
@onready var sprite = $Sprite2D;
|
|
|
|
var rng = RandomNumberGenerator.new();
|
|
var is_hanging = false;
|
|
var velocity = Vector2.ZERO;
|
|
var time = 0.0;
|
|
|
|
func _ready():
|
|
var size_mod = rng.randf() * SIZE_MOD;
|
|
sprite.scale.x -= size_mod;
|
|
sprite.scale.y -= size_mod;
|
|
|
|
|
|
|
|
func _process(delta):
|
|
|
|
if is_hanging :
|
|
velocity = velocity * FRICTION;
|
|
if velocity != Vector2.ZERO:
|
|
transform.origin += velocity * delta;
|
|
|
|
time += delta;
|
|
|
|
if time >= LIFETIME:
|
|
end_of_life();
|
|
if time >= LIFETIME + HANG_TIME:
|
|
explode();
|
|
|
|
func launch(direction, based_velocity):
|
|
velocity = based_velocity + direction * SPEED;
|
|
|
|
func _on_body_entered(body):
|
|
if body.name != "Player":
|
|
if body.is_in_group("enemies"):
|
|
body.take_damage(DAMAGE);
|
|
explode();
|
|
|
|
func end_of_life():
|
|
is_hanging = true;
|
|
|
|
func explode():
|
|
velocity = Vector2.ZERO;
|
|
sprite.play("explosion");
|
|
|
|
func _on_sprite_2d_animation_finished():
|
|
queue_free();
|