![](https://imgur.com/xgCWevu.gif)
![](https://imgur.com/PpdH5WK.jpg)
![](https://imgur.com/CDE1k9Q.jpg)
![](https://imgur.com/xEkpgmh.jpg)
![](https://imgur.com/0r7iii6.jpg)
![](https://imgur.com/kxLlL0u.jpg)
![](https://imgur.com/AsEy4lL.jpg)
![](https://imgur.com/CDE1k9Q.jpg)
![](https://imgur.com/LNqEOm5.jpg)
![](https://imgur.com/41qiJvJ.jpg)
![](https://imgur.com/l4iO7Gd.jpg)
![](https://imgur.com/5LulBq8.jpg)
![](https://imgur.com/1aUDGm8.jpg)
![](https://imgur.com/nIZmAJu.jpg)
![](https://imgur.com/DzMXmth.jpg)
![](https://imgur.com/7IrKBqJ.gif)
![](https://imgur.com/gg0gTtl.jpg)
![](https://imgur.com/g2FGKn0.jpg)
extends Area2D var start_pos = Vector2.ZERO var speed = 0 @onready var screensize = get_viewport_rect().size @onready var move_timer: Timer = $MoveTimer @onready var shoot_timer: Timer = $ShootTimer @onready var animation_player: AnimationPlayer = $AnimationPlayer |
func start(pos: Vector2) -> void: speed = 0 position = Vector2(pos.x, -pos.y) start_pos = pos await get_tree().create_timer(randf_range(0.25, 0.55)).timeout var tween = create_tween().set_trans(Tween.TRANS_BACK) tween.tween_property(self, "position:y", start_pos.y, 1.4) await tween.finished moveTimer.wait_time = randf_range(5, 20) moveTimer.start() shootTimer.wait_time = randf_range(4, 20) shootTimer.start() |
func _process(delta: float) -> void: position.y += speed * delta if position.y > screensize.y + 32: start(start_pos) |
extends Area2D signal died var start_pos = Vector2.ZERO var speed = 0 @onready var screensize = get_viewport_rect().size @onready var move_timer: Timer = $MoveTimer @onready var shoot_timer: Timer = $ShootTimer @onready var animation_player: AnimationPlayer = $AnimationPlayer |
func explode() -> void: speed = 0 animation_player.play("explode") died.emit(5) await animation_player.animation_finished queue_free() |
![](https://imgur.com/XGZVNGB.jpg)
![](https://imgur.com/oq0iR5V.jpg)
func _on_move_timer_timeout() -> void: speed = randf_range(75, 100) |
func _on_shoot_timer_timeout() -> void: shoot() shoot_timer.wait_time = randf_range(4, 20) shoot_timer.start() |
extends Area2D var start_pos = Vector2.ZERO var speed = 0 @onready var screensize = get_viewport_rect().size @onready var move_timer: Timer = $MoveTimer @onready var shoot_timer: Timer = $ShootTimer @onready var animation_player: AnimationPlayer = $AnimationPlayer func start(pos: Vector2) -> void: reset_enemy(pos) spawn_enemy() reset_move_timer() reset_shoot_timer() func reset_enemy(pos: Vector2) -> void: speed = 0 position = Vector2(pos.x, -pos.y) start_pos = pos func reset_move_timer() -> void: move_timer.wait_time = randf_range(5, 20) move_timer.start() func reset_shoot_timer() -> void: shoot_timer.wait_time = randf_range(4, 20) shoot_timer.start() func spawn_enemy() -> void: await get_tree().create_timer(randf_range(0.25, 0.55)).timeout var tween = create_tween().set_trans(Tween.TRANS_BACK) tween.tween_property(self, "position:y", start_pos.y, 1.4) await tween.finished func _process(delta: float) -> void: position.y += speed * delta if position.y > screensize.y + 32: start(start_pos) func explode() -> void: speed = 0 animation_player.play("explode") died.emit(5) await animation_player.animation_finished queue_free() func shoot() -> void: pass func _on_move_timer_timeout() -> void: speed = randf_range(75, 100) func _on_shoot_timer_timeout() -> void: shoot() reset_shoot_timer() |
extends Node2D var enemy_scene = preload("res://scenes/enemy/enemy.tscn") var score = 0 |
func spawn_all_enemies() -> void: for x in range(9): for y in range(3): var enemy_scene_instance = enemy_scene.instantiate() var pos = Vector2(x * (16 + 8) + 24, 16 * 4 + y * 16) add_child(enemy_scene_instance) enemy_scene_instance.start(pos) enemy_scene_instance.died.connect(on_enemy_died) |
func on_enemy_died(value) -> void: score += value |
extends Node2D var enemy_scene = preload("res://scenes/enemy/enemy.tscn") var score = 0 func _ready() -> void: spawn_all_enemies() func spawn_all_enemies() -> void: for x in range(9): for y in range(3): var enemy_scene_instance = enemy_scene.instantiate() var pos = Vector2(x * (16 + 8) + 24, 16 * 4 + y * 16) add_child(enemy_scene_instance) enemy_scene_instance.start(pos) enemy_scene_instance.died.connect(on_enemy_died) func on_enemy_died(value) -> void: score += value |
![](https://imgur.com/xgCWevu.gif)