hero-mark-2/menus/file_create.gd

114 lines
3.2 KiB
GDScript

extends Node
const DESCRIPTIONS := [
# sweet mode
{
"enemies": "*slower enemies",
"lives": "*unlimited lives",
"description": "*Difficulty for\n beginners",
},
# salty mode
{
"enemies": "*normal enemies",
"lives": "*unlimited lives",
"description": "*Difficulty for\n skilled players",
},
# spicy mode
{
"enemies": "*normal enemies",
"lives": "*limited lives",
"description": "*Difficulty for\n retro players",
},
# pungent mode
{
"enemies": "*faster enemies",
"lives": "*limited lives",
"description": "*Difficulty for\n insane players",
},
]
var file: Save.SaveFile = null
var difficulty: int = Game.Difficulty.SPICY
onready var face: Sprite = $"%Face"
onready var chosen_name: Label = $"%ChosenName"
onready var enemies: Label = $"%Enemies"
onready var lives: Label = $"%Lives"
onready var description: Label = $"%Description"
onready var exit_sprite: Sprite = $"%ExitSprite"
onready var closed_collision: CollisionShape2D = $"%ClosedCollision"
func _ready() -> void:
# escape to file select if no file is assigned
if not file:
yield(get_tree(), "idle_frame")
SceneManager.current_scene = load("res://menus/file_select.tscn").instance()
return
# pause so that player can not move around until difficulty chosen
get_tree().paused = true
# initialize name
chosen_name.text = ""
file.name = ""
# fade in
Fade.fade_in(Options.transition_speed_secs)
# focus the difficulty
$"%Spicy".call_deferred("grab_focus")
func _set_difficulty(value: int) -> void:
difficulty = posmod(value, 4)
file.difficulty = difficulty
face.frame = difficulty
enemies.text = DESCRIPTIONS[difficulty].enemies
lives.text = DESCRIPTIONS[difficulty].lives
description.text = DESCRIPTIONS[difficulty].description
func _difficulty_selected() -> void:
Fade.fade_out(Options.transition_speed_secs)
yield(Fade, "fade_finished")
$"%DifficultySelect".queue_free()
$"%NameEntry".visible = true
get_tree().paused = false
Game.use_lives = false
Fade.fade_in(Options.transition_speed_secs)
func _on_letter_chosen(letter: String) -> void:
if file.name.length() < 8:
file.name += letter
chosen_name.text = file.name
if file.name.length() > 0:
var tween = create_tween()
tween.tween_property(exit_sprite, "frame", 3, 0.25)
tween.tween_property(closed_collision, "disabled", true, 0.0)
func _on_backspace():
# file.name.erase(file.name.length() - 1,1)
file.name = file.name.left(file.name.length() - 1)
chosen_name.text = file.name
func _on_Exit_area_entered(area: Area2D) -> void:
if area.is_in_group("player_hitbox"):
var player = area.get_parent()
player.state_chart.send_event("start_teleport")
player.connect("teleport_finished", self, "_on_player_teleport_finished")
func _on_player_teleport_finished() -> void:
if file.name.length() > 0:
get_tree().paused = true
if Options.scoreboard_name.empty():
Options.scoreboard_name = file.name
file.save_to_file()
Save.current_file = file
Game.difficulty = file.difficulty
Fade.fade_out(Options.transition_speed_secs)
yield(Fade, "fade_finished")
get_tree().paused = false
if Options.speedrun_timer:
SpeedrunTimer.timer_running = true
SpeedrunTimer.visible = true
SceneManager.current_scene = load("res://cutscenes/intro_story.tscn").instance()