Tales-of-PKMN/game/core/game_data.gd

65 lines
2.7 KiB
GDScript

extends Node
# Autoload : GameData
signal selected_pokemon_changed
signal battle_requested(sent : SentPokemon, target : Node) #emis par ThrowState : le systeme de combat s'y branchera
var story_progress : int = 0 # 0 = début, 1 = après 1er badge, 2 = après 2e badge, etc.
var player_team : PokemonTeam = PokemonTeam.new()
var player_storage : PokemonStorage = PokemonStorage.new()
var selected_index : int = -1 #pokemon de l'equipe choisi pour etre envoye (HUD), -1 = aucun
func give_pokemon(pokemon : PokemonInstance) -> PokemonStorage.ReceiveResult:
#point d'entree unique pour obtenir un pokemon (starter, cadeau, capture...) :
#equipe si elle a de la place, sinon PC. A l'appelant d'informer le joueur selon le resultat.
return player_storage.receive_pokemon(player_team, pokemon)
#---------- pokemon selectionne (a envoyer) ----------
#seuls les pokemon aptes au combat (non K.O.) peuvent etre selectionnes
func get_selected_pokemon() -> PokemonInstance:
validate_selection()
return player_team.get_pokemon(selected_index)
func validate_selection() -> void:
#corrige la selection si le pokemon n'existe plus, est K.O., ou a change de place
var p : PokemonInstance = player_team.get_pokemon(selected_index)
if p != null and !p.is_fainted(): return
_set_selected(player_team.get_first_able_index())
func select_pokemon(index : int) -> bool:
var p : PokemonInstance = player_team.get_pokemon(index)
if p == null or p.is_fainted(): return false
_set_selected(index)
return true
func cycle_selection(direction : int) -> void:
validate_selection()
var able : Array[int] = []
for i in player_team.size():
if !player_team.get_pokemon(i).is_fainted(): able.append(i)
if able.size() < 2: return
var pos : int = able.find(selected_index)
_set_selected(able[posmod(pos + direction, able.size())])
func _set_selected(index : int) -> void:
if index == selected_index: return
selected_index = index
selected_pokemon_changed.emit()
func save() -> void:
var config := ConfigFile.new()
config.set_value("progress", "story_progress", story_progress)
config.set_value("team", "data", player_team.to_dict())
config.set_value("storage", "data", player_storage.to_dict())
config.save("user://save.cfg")
func load_data() -> void:
var config := ConfigFile.new()
if config.load("user://save.cfg") == OK:
story_progress = config.get_value("progress", "story_progress", 0)
var team_data : Variant = config.get_value("team", "data", {})
player_team = PokemonTeam.from_dict(team_data) if team_data is Dictionary else PokemonTeam.new()
var storage_data : Variant = config.get_value("storage", "data", {})
player_storage = PokemonStorage.from_dict(storage_data) if storage_data is Dictionary else PokemonStorage.new()