56 lines
1.4 KiB
GDScript3
56 lines
1.4 KiB
GDScript3
|
extends Node2D
|
||
|
|
||
|
var _score: int
|
||
|
@onready var _mob_timer: Timer = $MobTimer
|
||
|
@onready var _score_timer: Timer = $ScoreTimer
|
||
|
@onready var _start_timer: Timer = $StartTimer
|
||
|
@onready var _start_position_marker: Marker2D = $StartPosition
|
||
|
@onready var _mob_path: Path2D = $MobPath
|
||
|
@onready var _mob_spawn_location: PathFollow2D = $MobPath/MobSpawnLocation
|
||
|
@export var mob_scene: PackedScene
|
||
|
@onready var player: Player = $Player
|
||
|
|
||
|
# Called when the node enters the scene tree for the first time.
|
||
|
func _ready() -> void :
|
||
|
new_game()
|
||
|
|
||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||
|
func _process(delta: float) -> void:
|
||
|
pass
|
||
|
|
||
|
func new_game() -> void :
|
||
|
_score = 0
|
||
|
player.start(_start_position_marker.position)
|
||
|
_start_timer.start()
|
||
|
pass
|
||
|
|
||
|
func game_over() -> void :
|
||
|
_score_timer.stop()
|
||
|
_mob_timer.stop()
|
||
|
pass
|
||
|
|
||
|
|
||
|
func _on_mob_timer_timeout() -> void:
|
||
|
print("called")
|
||
|
var mob: Mob = mob_scene.instantiate()
|
||
|
|
||
|
var spawn_location := _mob_spawn_location
|
||
|
spawn_location.progress_ratio = randf()
|
||
|
var direction := spawn_location.rotation + PI/2
|
||
|
direction += randf_range(-PI/4, PI/4)
|
||
|
var velocity := Vector2(randf_range(150, 250), 0.0)
|
||
|
|
||
|
mob.position = spawn_location.position
|
||
|
mob.rotation = direction
|
||
|
mob.linear_velocity = velocity.rotated(direction)
|
||
|
|
||
|
add_child(mob)
|
||
|
|
||
|
|
||
|
func _on_score_timer_timeout() -> void:
|
||
|
_score += 1
|
||
|
|
||
|
func _on_start_timer_timeout() -> void:
|
||
|
_mob_timer.start()
|
||
|
_score_timer.start()
|