mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 15:38:14 +00:00
added the game
This commit is contained in:
101
Scripts/UI/WorldSelect.gd
Normal file
101
Scripts/UI/WorldSelect.gd
Normal file
@@ -0,0 +1,101 @@
|
||||
extends Control
|
||||
|
||||
var selected_world := 0
|
||||
|
||||
@export var world_offset := 0
|
||||
|
||||
@export var num_of_worlds := 7
|
||||
|
||||
signal world_selected
|
||||
signal cancelled
|
||||
var active := false
|
||||
|
||||
var cursor_index := 0
|
||||
|
||||
var starting_value := -1
|
||||
|
||||
const NUMBER_Y := [
|
||||
"Overworld",
|
||||
"Underground",
|
||||
"Castle",
|
||||
"Snow",
|
||||
"Space",
|
||||
"Volcano"
|
||||
]
|
||||
|
||||
func _ready() -> void:
|
||||
for i in %SlotContainer.get_children():
|
||||
i.focus_entered.connect(slot_focused.bind(i.get_index()))
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if active:
|
||||
handle_input()
|
||||
Global.world_num = selected_world + 1 + world_offset
|
||||
|
||||
func open() -> void:
|
||||
if starting_value == -1:
|
||||
starting_value = Global.world_num
|
||||
selected_world = Global.world_num - 1 - world_offset
|
||||
setup_visuals()
|
||||
show()
|
||||
await get_tree().process_frame
|
||||
$%SlotContainer.get_child(selected_world).grab_focus()
|
||||
active = true
|
||||
|
||||
func setup_visuals() -> void:
|
||||
var idx := 0
|
||||
%Slot1.focus_neighbor_left = %Slot8.get_path()
|
||||
%Slot8.focus_neighbor_right = %Slot1.get_path()
|
||||
if Global.current_campaign == "SMBLL" && (Global.game_beaten or Global.debug_mode) && Global.current_game_mode == Global.GameMode.CAMPAIGN:
|
||||
%Slot1.focus_neighbor_left = %Slot13.get_path()
|
||||
%Slot8.focus_neighbor_right = %Slot9.get_path()
|
||||
for i in %SlotContainer.get_children():
|
||||
if idx >= 8:
|
||||
i.visible = Global.current_campaign == "SMBLL" && (Global.game_beaten or Global.debug_mode) && Global.current_game_mode == Global.GameMode.CAMPAIGN
|
||||
if i.visible == false:
|
||||
idx += 1
|
||||
continue
|
||||
var level_theme = Global.LEVEL_THEMES[Global.current_campaign][idx + world_offset]
|
||||
var world_visited = (SaveManager.visited_levels.substr((idx + world_offset) * 4, 4) != "0000" or Global.debug_mode or idx == 0)
|
||||
if world_visited == false:
|
||||
level_theme = "Mystery"
|
||||
i.get_node("Icon").region_rect = CustomLevelContainer.THEME_RECTS[level_theme]
|
||||
i.get_node("Icon").texture = CustomLevelContainer.ICON_TEXTURES[0 if (idx <= 3 or idx >= 8) and Global.current_campaign != "SMBANN" else 1]
|
||||
i.get_node("Icon/Number").region_rect.position.y = clamp(NUMBER_Y.find(level_theme) * 12, 0, 9999)
|
||||
i.get_node("Icon/Number").region_rect.position.x = (idx + world_offset) * 12
|
||||
idx += 1
|
||||
|
||||
func handle_input() -> void:
|
||||
if Input.is_action_just_pressed("ui_accept"):
|
||||
if SaveManager.visited_levels.substr((selected_world + world_offset) * 4, 4) == "0000" and not Global.debug_mode and selected_world != 0:
|
||||
AudioManager.play_sfx("bump")
|
||||
else:
|
||||
select_world()
|
||||
elif Input.is_action_just_pressed("ui_back"):
|
||||
close()
|
||||
cleanup()
|
||||
cancelled.emit()
|
||||
return
|
||||
|
||||
func slot_focused(idx := 0) -> void:
|
||||
selected_world = idx
|
||||
|
||||
func select_world() -> void:
|
||||
if owner is Level:
|
||||
owner.world_id = selected_world + world_offset + 1
|
||||
Global.world_num = selected_world + world_offset + 1
|
||||
world_selected.emit()
|
||||
close()
|
||||
|
||||
func cleanup() -> void:
|
||||
await get_tree().physics_frame
|
||||
Global.world_num = starting_value
|
||||
starting_value = -1
|
||||
Global.world_num = clamp(Global.world_num, 1, 8)
|
||||
if owner is Level:
|
||||
owner.world_id = clamp(owner.world_id, 1, 8)
|
||||
|
||||
func close() -> void:
|
||||
active = false
|
||||
Global.world_num = 1
|
||||
hide()
|
Reference in New Issue
Block a user