Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | anssiko |
Hi,
I’m trying to use visited checkpoints to load the correct level and place the player at the last visited checkpoint. For this I’m saving the key (level name) and value (checkpoint name) in a dictionary on config file.
I figure I could return the last Level name and last Checkpoint name to archieve this, but how? (back() should work with an array, but how to do this with a dictionary?)
Or is there a better way to archieve what I’m after?
Code below. Many thanks in advance for any suggestions.
Game (including dictionary) initiates level loader:
extends Node
export(PackedScene) var StartLevel := preload("res://src/Levels/Level1.tscn")
const SAVE_PATH = "res://config.cfg"
var level: Node2D = null
var config = ConfigFile.new()
var _savedata = {
"SAVEDATA": {
"VisitedCheckpoints": { }
}
}
func _ready() -> void:
load_checkpoints()
LevelLoader.setup(self, $Player, StartLevel)
Events.connect("checkpoint_visited", self, "_on_Events_checkpoint_visited")
Level loader:
extends Node
onready var scene_tree := get_tree()
var _game: Node = null
var _player: Player = null
var _level: Node2D = null
func setup(game: Node, player: Player, Level: PackedScene) -> void:
_game = game
_player = player
trigger(Level)
func trigger(NewLevel: PackedScene, portal_name: String = "") -> void:
_game.remove_child(_player)
if _level:
scene_tree.paused = true
_level.queue_free() #poistaa levelin
yield(_level, "tree_exited")
_level = NewLevel.instance()
var player_position_node: Node2D = (
_level.get_node("Checkpoints").get_child(0)
if portal_name.empty()
else _level.get_node("Portals/%s" % portal_name))
_player.global_position = player_position_node.global_position
for checkpoint_name in _game._savedata["SAVEDATA"]["VisitedCheckpoints"].get(_level.name, []):
var checkpoint: Area2D = _level.get_node("Checkpoints/%s" % checkpoint_name)
checkpoint.is_visited = true
_game.level = _level
_game.add_child(_level)
_game.add_child(_player)
scene_tree.paused = false
Never use “res://” for saving it wont work once you export your game
supper_raptor | 2020-04-09 19:28