ld55/src3/Global/gstate.gd

90 lines
2.1 KiB
GDScript
Raw Permalink Normal View History

2024-04-14 15:43:40 +00:00
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