extends Node var level_time = 5 var time = 0 var possess_dist = 256 var kill_gain = 2.0 var camera: Camera2D var current_actor_possessed: Actor = null var game_over = false var won_level = true var levels = null var current_level = 0 var is_final = false var waiting = false var transition = false var musics: Array func _ready(): self.time = self.level_time self.camera = Camera2D.new() add_child(self.camera) self.musics = [ preload("res://Assets/gameplay_0.ogg"), preload("res://Assets/gameplay_1.ogg"), preload("res://Assets/gameplay_2.ogg") ] self.levels = [ preload("res://Level/level_1.tscn"), preload("res://Level/level_2.tscn"), preload("res://Level/level_3.tscn"), preload("res://Level/level_4.tscn"), preload("res://Level/level_5.tscn"), preload("res://Level/level_6.tscn"), preload("res://Level/level_7.tscn"), preload("res://Level/final_level.tscn") ] func restart(): self.game_over = false self.won_level = true self.current_level -= 1 self.is_final = false self.time = self.level_time func next_level(): if self.won_level: self.won_level = false self.time = self.level_time var n = self.levels[self.current_level].instantiate() self.current_level += 1 self.is_final = self.current_level >= self.levels.size() return n return null func kill(new_actor): if new_actor: self.time += self.kill_gain self.current_actor_possessed = new_actor func _process(delta): if self.won_level: return if self.game_over: return if self.current_actor_possessed: var dir = self.current_actor_possessed.position - self.camera.position var dist = dir.length_squared() if dir.length_squared() > 0: dir = dir.normalized() if dist < 8.0 * 8.0: self.camera.position = self.current_actor_possessed.position else: self.camera.position += dir * delta * 640 if not self.is_final and time < 0 and not self.game_over: self.game_over = true if self.current_actor_possessed: self.current_actor_possessed.set_state(ActorDie.new(self.current_actor_possessed)) else: get_tree().change_scene_to_file('res://GameOver/game_over.tscn') if not self.waiting: time -= delta