hero-mark-2/autoloads/game.gd
2023-03-08 01:02:47 -05:00

145 lines
3.9 KiB
GDScript

extends Node
var resolution = Vector2(256,192)
onready var viewport = get_parent().get_node("Main/Control/ViewportContainer/Viewport")
var current_sector = Vector2(0,0)
var fullscreen = false
#Onreadys
onready var fade = viewport.get_node("FadeLayer")
onready var viewport_container = get_parent().get_node("Main/Control/ViewportContainer")
#Collectibles
var golds = 0
var stars = [false,false,false,false,false]
var shards = 0
var arrows = 0
var score = 0
var high_score = 0
var lives = 2
var deaths = 0
var time = 0.0
#Objects
const block_text = preload("res://objects/hud/blocktext.tscn")
const pause_screen = preload("res://objects/hud/pause_screen.tscn")
#Game info
var respawn_point = Vector2(32,166) #Respawn point
var current_level = 0 #Current level being played
var current_file = 1 #Current save file
var shards_collected = [false,false,false,false,false,false,false,false,false,false]
var is_marathon_mode = false
var use_lives = false
var can_pause = true
func _ready():
Save.load_file(current_file)
Save.load_options()
pause_mode = Node.PAUSE_MODE_PROCESS
#Instances a node
func instance_node(node:PackedScene,x:float,y:float,parent):
var Instance = node.instance()
Instance.global_position = Vector2(x,y)
parent.add_child(Instance)
#Get position in sectors
func get_sector(pos):
return (pos / resolution).floor()
#Return the current Map
func get_map():
return get_tree().get_nodes_in_group("map")[0]
#Go to new map
func change_map(map):
get_tree().paused = true
can_pause = false
fade.fade_out(0.4)
yield(fade, "fade_finished")
can_pause = true
clear_collectibles()
#Loop is so no more than one level is loaded at a time
for maps in get_tree().get_nodes_in_group("map"):
maps.queue_free()
instance_node(map,0,0,viewport)
#Clear data
func clear_collectibles():
score = 0
golds = 0
stars = [false,false,false,false,false]
shards = 0
shards_collected = [false,false,false,false,false,false,false,false,false,false]
arrows = 0
lives = 2
deaths = 0
#Save
func save():
var save_id = LevelData.levels[current_level].save_id
var save_data = Save.get_level_data(save_id)
var is_100 = shards >= 5 && golds >= 50
# set score and time depending on completion
if score > save_data["score_100" if is_100 else "score_any"]:
Save.set_score(save_id, score, is_100)
if time < save_data["time_100" if is_100 else "time_any"]:
Save.set_time(save_id, time, is_100)
# set shards
for i in 8:
if shards_collected[i]:
Save.set_shard_collected(save_id, i, true)
# set options
Save.set_options()
# save file
Save.save_file(current_file)
#Convert seconds into M:SS:MS
func timeify(input):
if input < 600:
var minutes = str(floor(input / 60))
var seconds = floor(fmod(input,60))
var milliseconds := floor(fmod(input, 1) * 100)
return minutes + ":" + ("%02d" % seconds) + "." + ("%02d" % milliseconds)
elif input == INF:
return "-:--.--"
else:
return "9:59.99"
#Restart level
func restart_level():
if score > high_score: high_score = score
score = 0
golds = 0
stars = [false,false,false,false,false]
shards = 0
arrows = 0
lives = 2
Audio.ac_climb.stop()
Audio.ac_die.stop()
Engine.time_scale = 1.0
for tween in get_tree().get_processed_tweens():
tween.kill()
change_map(load(get_map().filename))
Audio.ac_music.stream_paused = false
#Freeze frame
func freeze_frame(time):
get_tree().paused = true
var timer = get_tree().create_timer(time, true)
timer.connect("timeout", get_tree(), "set_pause", [false])
return timer
#Check if 100%ed
func has_collection_bonus():
return shards == 5 && golds == 50
func _physics_process(delta):
if Debug.entry == false:
#CRT FILTER
if Input.is_action_just_pressed("crt"):
viewport_container.material.set_shader_param("enabled",!viewport_container.material.get_shader_param("enabled"))
#Fullscreen
if Input.is_action_just_pressed("fullscreen"):
fullscreen = !fullscreen
if fullscreen:
OS.set_window_fullscreen(true)
else:
OS.set_window_fullscreen(false)