CyberTower/scripts/statistics.gd
2024-02-17 12:04:43 +08:00

72 lines
1.4 KiB
GDScript

class_name Statistics
extends Node
signal wave_finished
signal wave_started
var time_started
var time_survived
var wave_passed: int
var in_wave_gap: bool
var enemies_defeated: int
var bullet_shoot: int
@export var wave_gap_duration = 3
@export var wave_duration = 10
@export var wave_multiplier = 1.5
@export var wave_timer: Timer
@export var wave_gap_timer: Timer
func _ready():
time_started = Time.get_ticks_msec()
time_survived = null
wave_passed = 0
enemies_defeated = 0
bullet_shoot = 0
_on_wave_gap_passed()
func _on_game_over():
time_survived = get_time_survived()
func get_current_wave():
return wave_passed + 1
func get_current_wave_time():
if in_wave_gap:
return get_current_wave_duration() - $WaveGapTimer.time_left
else:
return get_current_wave_duration() - $WaveTimer.time_left
func get_current_wave_duration():
if in_wave_gap:
return wave_gap_duration
else:
return wave_duration + wave_multiplier * wave_passed
func get_time_survived():
if time_survived == null:
return Time.get_ticks_msec() - time_started
else:
return time_survived
func _on_enemy_defeated():
enemies_defeated += 1
func _on_wave_passed():
wave_passed += 1
in_wave_gap = true
wave_finished.emit()
wave_gap_timer.start(wave_gap_duration)
func _on_wave_gap_passed():
in_wave_gap = false
wave_started.emit(get_current_wave())
wave_timer.wait_time = get_current_wave_duration()
wave_timer.start()