74 lines
3.1 KiB
GDScript
74 lines
3.1 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("game", "version", 1)
|
|
config.set_value("game", "timestamp", Time.get_datetime_string_from_system())
|
|
config.set_value("flags", "flags", FlagManager.get_save_data())
|
|
config.set_value("quests", "quests", QuestManager.get_save_data())
|
|
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()
|
|
var flags_data : Variant = config.get_value("flags", "flags", {})
|
|
FlagManager.load_save_data(flags_data)
|
|
var quests_data : Variant = config.get_value("quests", "quests", {})
|
|
QuestManager.load_save_data(quests_data)
|