59 lines
1.5 KiB
GDScript
59 lines
1.5 KiB
GDScript
extends RigidBody2D
|
|
|
|
@export_category("Basic Stuff")
|
|
@export var Speed: int = 250
|
|
@export var Health: int = 5
|
|
@export var Direction: Vector2 = Vector2(-1, 0)
|
|
@export var ScoreAmount: int = 200
|
|
|
|
@export_category("Shooting")
|
|
@export var IsShooting: bool = false
|
|
@export var Bullet: PackedScene
|
|
@export var FireSpeed: float = 1
|
|
@export_range(0, 360) var BulletDirection: float = 0
|
|
var FireTimer: float = 0
|
|
|
|
@export_category("Other")
|
|
@export var IsBoss: bool = false
|
|
|
|
var DespawnTimer: float = 0
|
|
|
|
func _ready():
|
|
get_node("Arm").rotation_degrees = -BulletDirection
|
|
if Direction.x == 1:
|
|
get_node("AnimatedSprite2D").flip_h = true
|
|
|
|
func _integrate_forces(_state: PhysicsDirectBodyState2D):
|
|
self.linear_velocity = Direction * Speed
|
|
|
|
func _process(delta: float):
|
|
# Despawning
|
|
DespawnTimer += delta
|
|
|
|
# Despawn to free up processing time
|
|
if DespawnTimer >= 30 and IsBoss == false:
|
|
self.queue_free()
|
|
|
|
# Shooting
|
|
if IsShooting == true:
|
|
FireTimer += delta
|
|
if FireTimer >= FireSpeed:
|
|
var bullet = Bullet.instantiate()
|
|
bullet.rotato = -BulletDirection + 180
|
|
bullet.transform = get_node("Arm/Marker2D").global_transform
|
|
get_tree().current_scene.add_child(bullet)
|
|
FireTimer = 0
|
|
|
|
# Death
|
|
if Health <= 0:
|
|
Global.TotalScore += ScoreAmount
|
|
if IsBoss == true:
|
|
Despawn()
|
|
else:
|
|
self.queue_free()
|
|
|
|
# FOR ANIMATION ONLY
|
|
func Despawn():
|
|
self.queue_free()
|
|
# Laziness. Gets the waves.
|
|
get_tree().current_scene.get_node("EnemyWaves").WaveWaits[get_tree().current_scene.get_node("EnemyWaves").CurrentWave] = 0
|