extends Control

    const MAP_WIDTH = 16
    const MAP_HEIGHT = 16
    const MAP_LAYER = 0
    const FILE_PATH = "res://savedata.txt"
    const TILE_MAP_NODE_POS = 0
    
    @onready var save_button = $SaveButton
    @onready var load_button = $LoadButton
    @onready var tile_map = $"../TileMap"
    
    var atlas_cords		: Array		# アトラス配置マップ
    
    # Called when the node enters the scene tree for the first time.
    func _ready():
        pass
    
    
    # SAVEボタンが押されたときに呼ばれる処理
    func _on_save_button_pressed():
        # タイルマップのアトラスを取得する
        atlas_cords = _get_atlas_cords()
        # マップを保存する
        _save()
    
    # LOADボタンが押されたときに呼ばれる処理
    func _on_load_button_pressed():
        # マップデータを読み込む
        _load()
        # タイルマップにアトラスを設定する
        _set_atlas_cords(atlas_cords)
        print("マップを読み込みました")
    
    
    # タイルマップのアトラスを取得する
    func _get_atlas_cords() -> Array:
        var _atlas_cords : Array = []
        _atlas_cords.clear()
        for y in range(0, MAP_HEIGHT, 1):
            var line_data : Array =[]
            for x in range(0, MAP_WIDTH, 1):
                line_data.append(tile_map.get_cell_atlas_coords(MAP_LAYER, Vector2i(x, y)))
            _atlas_cords.append(line_data)
        return _atlas_cords
    
    
    # タイルマップにアトラスを設定する
    func _set_atlas_cords(_atlas_cords : Array):
        # グリッドにアイテムを配置する
        for y in range(0, MAP_HEIGHT, 1):
            var line_data : Array = _atlas_cords[y]
            for x in range(0, MAP_WIDTH, 1):
                tile_map.set_cell(MAP_LAYER, Vector2i(x, y), MAP_LAYER, line_data[x])
    
    
    # データを書き出す
    func _save():
        var savedata = {}
        # マップ内データを格納する
        savedata["Atlas"] = atlas_cords
    
        # ファイルを書き込みモードで開く.
        var f = FileAccess.open(FILE_PATH, FileAccess.WRITE)
    
        # セーブデータを文字列に変換.
        var s = var_to_str(savedata)
        f.store_string(s)
        
        # ファイルを閉じる.
        f.close()
        print("ファイルを保存しました: %s" %FILE_PATH)
    
    
    # データを読み込む
    func _load():
        # ファイルが存在するかチェックする
        if FileAccess.file_exists(FILE_PATH) == false:
            print("セーブデータが存在しません: %s" %FILE_PATH)
            load_button.modulate = Color(1.0, 0, 0)
            return
        # ファイルを開く
        var f = FileAccess.open(FILE_PATH, FileAccess.READ)
        var s = f.get_as_text()
        f.close()
        print("ファイルを読み込みました: %s" %FILE_PATH)
        
        # セーブデータを変数型に変換
        var savedata = str_to_var(s)
        if savedata == null:
            print("セーブデータがエラーです: %s" %FILE_PATH)
            return
        # マップデータに代入する
        atlas_cords = savedata["Atlas"]