adds track parser from txt files
This commit is contained in:
89
track_selection.gd
Normal file
89
track_selection.gd
Normal file
@@ -0,0 +1,89 @@
|
||||
extends Node
|
||||
|
||||
const TRACKS_PATH = "res://assets/tracks/"
|
||||
|
||||
var _tracks = [
|
||||
[ Vector2(2, 1), Vector2(3, 1), Vector2(4, 1),
|
||||
Vector2(4, 2), Vector2(3, 2), Vector2(2, 2), Vector2(1, 2), Vector2(1, 1),
|
||||
|
||||
],
|
||||
[ Vector2(7,1), Vector2(8,1), Vector2(9,1), Vector2(9,2), Vector2(9,3),
|
||||
Vector2(8,3), Vector2(7,3), Vector2(7,4), Vector2(7,5), Vector2(7,6),
|
||||
Vector2(6,6), Vector2(6,5), Vector2(6,4), Vector2(6,3), Vector2(5,3),
|
||||
Vector2(4,3), Vector2(4,2), Vector2(4,1), Vector2(5,1), Vector2(6,1), ],
|
||||
]
|
||||
var _selected : int = 1
|
||||
|
||||
func _ready():
|
||||
_load_tracks()
|
||||
|
||||
func set_next_track():
|
||||
_selected = wrapi(_selected + 1, 0, _tracks.size())
|
||||
|
||||
func set_previous_track():
|
||||
_selected = wrapi(_selected - 1, 0, _tracks.size())
|
||||
|
||||
func get_current_track():
|
||||
return _tracks[_selected]
|
||||
|
||||
func _load_tracks():
|
||||
var loaded = []
|
||||
for path in _find_track_files():
|
||||
var file = File.new()
|
||||
file.open(path, File.READ)
|
||||
var track = _load_from_txt(file.get_as_text())
|
||||
if track.size() > 1:
|
||||
loaded.append(track)
|
||||
else:
|
||||
print("Error in track file : ", path)
|
||||
|
||||
if loaded:
|
||||
print("Successfully loaded ", loaded.size(), " tracks.")
|
||||
_tracks = loaded
|
||||
|
||||
|
||||
func _load_from_txt(content):
|
||||
var used_cells = []
|
||||
var start
|
||||
# Load the content
|
||||
var lines = content.split("\n")
|
||||
for y in range(0, lines.size()):
|
||||
for x in range(0, lines[y].length()):
|
||||
if lines[y][x] == "s":
|
||||
start = Vector2(x,y)
|
||||
elif lines[y][x] == "x":
|
||||
used_cells.append(Vector2(x,y))
|
||||
# Build an oriented path from start cell going right first
|
||||
var path = [start]
|
||||
while used_cells.size() > 0:
|
||||
var next = __find_adjacent(path[-1], used_cells)
|
||||
if next == -1:
|
||||
print("Error while loading path. (Path is invalid)")
|
||||
else:
|
||||
path.append(used_cells[next])
|
||||
used_cells.remove(next)
|
||||
#print_debug("Loading map from txt. Starting at : ", start, " | Path : \n", path)
|
||||
return path
|
||||
|
||||
|
||||
func __find_adjacent(coords, cells):
|
||||
for dir in [Vector2(1,0), Vector2(0,1), Vector2(-1,0), Vector2(0,-1)]:
|
||||
var idx = cells.find(coords + dir)
|
||||
if idx != -1:
|
||||
return idx
|
||||
return -1
|
||||
|
||||
func _find_track_files():
|
||||
var tracks = []
|
||||
var dir = Directory.new()
|
||||
if dir.open(TRACKS_PATH) == OK:
|
||||
dir.list_dir_begin(true, true)
|
||||
while true:
|
||||
var file = dir.get_next()
|
||||
if file == "":
|
||||
break
|
||||
if file.ends_with(".txt"):
|
||||
tracks.append(TRACKS_PATH + file)
|
||||
return tracks
|
||||
else:
|
||||
print("An error occured while trying to load tracks. (Folder not found)")
|
||||
Reference in New Issue
Block a user