Envie/Projectiles/basic_projectile.gd

56 lines
1.1 KiB
GDScript3
Raw Normal View History

extends Area2D
@export var DAMAGE = 10;
@export var SPEED = 700;
2023-01-15 11:17:51 -05:00
@export var LIFETIME = 1.0;
@export var HANG_TIME = 0.0;
@export var FRICTION = 0.0;
2023-01-15 12:27:19 -05:00
@export var SIZE_MOD = 0.0;
2023-01-15 12:27:19 -05:00
@onready var sprite = $Sprite2D;
var rng = RandomNumberGenerator.new();
2023-01-15 11:17:51 -05:00
var is_hanging = false;
var velocity = Vector2.ZERO;
2023-01-15 11:17:51 -05:00
var time = 0.0;
2023-01-15 12:27:19 -05:00
func _ready():
var size_mod = rng.randf() * SIZE_MOD;
sprite.scale.x -= size_mod;
sprite.scale.y -= size_mod;
func _process(delta):
2023-01-15 11:17:51 -05:00
if is_hanging :
velocity = velocity * FRICTION;
if velocity != Vector2.ZERO:
transform.origin += velocity * delta;
2023-01-15 11:17:51 -05:00
time += delta;
if time >= LIFETIME:
end_of_life();
if time >= LIFETIME + HANG_TIME:
explode();
func launch(direction, based_velocity):
velocity = based_velocity + direction * SPEED;
2023-01-14 23:05:08 -05:00
func _on_body_entered(body):
if body.name != "Player":
if body.is_in_group("enemies"):
body.take_damage(DAMAGE);
explode();
2023-01-15 11:17:51 -05:00
func end_of_life():
is_hanging = true;
func explode():
2023-01-15 12:27:19 -05:00
velocity = Vector2.ZERO;
sprite.play("explosion");
2023-01-15 11:17:51 -05:00
2023-01-15 12:27:19 -05:00
func _on_sprite_2d_animation_finished():
queue_free();