AppLauncher/main.gd
2024-04-12 15:00:01 +02:00

125 lines
3.4 KiB
GDScript

extends Control
var games := {}
var selected_game := ""
var profiles := {}
var selected_profile := ""
func _ready():
%Games.visible=false
%GameTab.visible=false
%Profiles.visible=false
register_games()
%Games.item_activated.connect(on_item_activated.bind("games"))
%Profiles.item_activated.connect(on_item_activated.bind("profiles"))
%ProfileAdd.pressed.connect(_add_new_profile)
if games.size()==1:
select_game(games[0])
%GameClose.visible=false
elif games.size()>1:
load_games()
%GameClose.pressed.connect(_return_to_list)
func register_games():
for gm in DirAccess.get_directories_at(PathHelper.data_path):
var cfg := PathHelper.get_game_config(gm)
var dt = {
"name":cfg.get_value("Data","game_name","Dummy"),
"image":cfg.get_value("Data","game_icon_path","icon.svg"),
"profiles":[]
}
games[gm]=dt
print("Registered games")
func select_game(key:String):
print("selecting game under key: "+key)
var game_data=games[key]
var game_name :String= game_data.get("name") if game_data.has("name") else "UNKNOWN"
var game_image :Texture= load(game_data.get("image")) if game_data.has("name") else load("res://icon.svg")
selected_game=key
await load_profiles()
display_profiles()
%GameName.text=game_name
%GameIcon.texture=game_image
%Games.visible=false
%GameTab.visible=true
%Profiles.visible=true
func load_games():
print("Loading games list...")
var list :ItemList=%Games
list.clear()
var i:=0
for key in games.keys():
var dt = games[key]
var game_name :String= dt.get("name") if dt.has("name") else "UNKNOWN"
var game_image :Texture= load(dt.get("image")) if dt.has("name") else load("res://icon.svg")
list.add_item(game_name,game_image)
list.set_item_metadata(i,key)
i+=1
%Games.visible=true
func load_profiles():
profiles["profile1"]={"name":"profile1","image":"res://icon.svg","profiles":[]}
profiles["profile2"]={"name":"profile2","image":"res://icon.svg","profiles":[]}
print("Registered games")
func select_profile(key:String):
var profile_data=profiles[key]
var profile_name :String= profile_data.get("name") if profile_data.has("name") else "UNKNOWN"
var profile_image :Texture= load(profile_data.get("image")) if profile_data.has("image") else load("res://icon.svg")
var profile_desc :String= load(profile_data.get("desc")) if profile_data.has("desc") else "No description defined..."
selected_profile=key
%ProfileName.text=profile_name
%ProfileIcon.texture=profile_image
%ProfileDesc.text=profile_desc
if !%ProfilePanel.visible:
$Anim.play("switch_profile_view")
func display_profiles():
print("Loading profiles list...")
var list :ItemList=%Profiles
list.clear()
var i:=0
for key in profiles.keys():
var dt = profiles[key]
var profile_name :String= dt.get("name") if dt.has("name") else "UNKNOWN"
var profile_image :Texture= load(dt.get("image")) if dt.has("name") else load("res://icon.svg")
list.add_item(profile_name,profile_image)
list.set_item_metadata(i,key)
i+=1
func on_item_activated(id:int,type:String):
if type=="games":
var key :String=%Games.get_item_metadata(id)
select_game(key)
elif type=="profiles":
var key :String=%Profiles.get_item_metadata(id)
select_profile(key)
func _return_to_list():
selected_game=""
selected_profile=""
load_games()
%Games.visible=true
%GameTab.visible=false
%Profiles.visible=false
if %ProfilePanel.visible:
$Anim.play_backwards("switch_profile_view")
func _add_new_profile():
pass