90 lines
2.1 KiB
GDScript
90 lines
2.1 KiB
GDScript
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
|
|
|