forked from team-sg/hero-mark-2
can't have shit in Virginia
This commit is contained in:
parent
4e92501432
commit
d318add375
10 changed files with 319 additions and 11 deletions
90
menus/level_select_scholar.gd
Normal file
90
menus/level_select_scholar.gd
Normal file
|
@ -0,0 +1,90 @@
|
|||
extends Node
|
||||
|
||||
export var travel_time: float = 1.0
|
||||
|
||||
var selected_level: int = 0
|
||||
var tween: SceneTreeTween = null
|
||||
var hop_tween: SceneTreeTween = null
|
||||
|
||||
onready var level_path: Path2D = $LevelPath
|
||||
onready var player_position: PathFollow2D = $"%PlayerPosition"
|
||||
onready var player_sprite: Sprite = $"%PlayerSprite"
|
||||
onready var back_arrow: TextureRect = $"%BackArrow"
|
||||
onready var level_title: Label = $"%LevelTitle"
|
||||
onready var forward_arrow: TextureRect = $"%ForwardArrow"
|
||||
onready var in_cave: PathFollow2D = $"%InCave"
|
||||
onready var out_cave: PathFollow2D = $"%OutCave"
|
||||
|
||||
func _ready() -> void:
|
||||
Fade.fade_in(0.4)
|
||||
Audio.ac_music.stop()
|
||||
# set initial offset
|
||||
LevelData.levels[selected_level].save_id
|
||||
var target_level = level_path.get_node(LevelData.levels[selected_level].save_id)
|
||||
if target_level != null:
|
||||
player_position.offset = target_level.offset
|
||||
_select_level(selected_level)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
# load selected map
|
||||
if Input.is_action_just_pressed("ui_accept"):
|
||||
Game.current_level = selected_level
|
||||
Game.change_map(LevelData.levels[selected_level].scene)
|
||||
elif Input.is_action_just_pressed("ui_right"):
|
||||
_select_level(int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)))
|
||||
elif Input.is_action_just_pressed("ui_left"):
|
||||
_select_level(int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)))
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
# make SG disappear inside of cave
|
||||
if player_position.offset >= in_cave.offset and player_position.offset <= out_cave.offset:
|
||||
player_sprite.visible = false
|
||||
else:
|
||||
player_sprite.visible = true
|
||||
|
||||
func _select_level(level_id: int) -> void:
|
||||
var level = LevelData.levels[level_id]
|
||||
selected_level = level_id
|
||||
# hide arrows at edges of leve set
|
||||
if level_id == 0:
|
||||
back_arrow.modulate.a = 0.0
|
||||
else:
|
||||
back_arrow.modulate.a = 1.0
|
||||
if level_id == LevelData.levels.size() - 1:
|
||||
forward_arrow.modulate.a = 0.0
|
||||
else:
|
||||
forward_arrow.modulate.a = 1.0
|
||||
# set text
|
||||
level_title.text = level.title
|
||||
# initiate animation
|
||||
_travel_to_level(level.save_id)
|
||||
|
||||
func _travel_to_level(level_name: String) -> void:
|
||||
# get path offset of target level
|
||||
var target_level = level_path.get_node(level_name)
|
||||
if target_level != null:
|
||||
if target_level.offset < player_position.offset:
|
||||
player_sprite.flip_h = true
|
||||
else:
|
||||
player_sprite.flip_h = false
|
||||
# kill existing tweens if exist
|
||||
if tween != null:
|
||||
tween.kill()
|
||||
if hop_tween != null:
|
||||
hop_tween.kill()
|
||||
player_sprite.position.y = -2.0
|
||||
|
||||
# hopping animation
|
||||
hop_tween = create_tween().set_loops()
|
||||
hop_tween.tween_property(player_sprite, "position:y", -4.0, 0.0)
|
||||
hop_tween.tween_interval(0.1)
|
||||
hop_tween.tween_property(player_sprite, "position:y", -2.0, 0.0)
|
||||
hop_tween.tween_interval(0.1)
|
||||
|
||||
# travel animation
|
||||
tween = create_tween()
|
||||
# go to target offset
|
||||
tween.tween_property(player_position, "offset", target_level.offset, travel_time)
|
||||
# kill other animation
|
||||
tween.tween_callback(hop_tween, "kill")
|
||||
tween.tween_property(player_sprite, "position:y", -2.0, 0.0)
|
Loading…
Add table
Add a link
Reference in a new issue