adds keyboard input
This commit is contained in:
59
TileMap.gd
59
TileMap.gd
@@ -5,11 +5,11 @@ enum { LEFT, RIGHT, UP, DOWN }
|
||||
enum { DOWN_LEFT, DOWN_RIGHT, LEFT_RIGHT, START, UP_DOWN, UP_LEFT, UP_RIGHT }
|
||||
|
||||
func _ready():
|
||||
TrackSelection.connect("track_changed", self, "_reload_track")
|
||||
_reload_track()
|
||||
TrackSelection.connect("track_changed", self, "reload_track")
|
||||
reload_track()
|
||||
|
||||
func _reload_track():
|
||||
_clear_tiles()
|
||||
func reload_track():
|
||||
clear_tiles()
|
||||
var track = TrackSelection.get_current_track()
|
||||
for idx in range(track.size()):
|
||||
var cell = track[idx]
|
||||
@@ -19,37 +19,28 @@ func _reload_track():
|
||||
else:
|
||||
var prev = track[idx - 1]
|
||||
var next = track[wrapi(idx + 1, 0, track.size())]
|
||||
tile = _find_tile(cell.direction_to(prev), cell.direction_to(next))
|
||||
tile = find_tile(cell.direction_to(prev), cell.direction_to(next))
|
||||
set_cell(cell.x, cell.y, tile)
|
||||
|
||||
func _find_tile(prev, next):
|
||||
func find_tile(prev, next):
|
||||
""" Find the right tile given prev and next directions """
|
||||
prev = _as_dir(prev)
|
||||
next = _as_dir(next)
|
||||
# Could be smarter
|
||||
if prev == LEFT:
|
||||
match next:
|
||||
DOWN: return DOWN_LEFT
|
||||
UP: return UP_LEFT
|
||||
RIGHT: return LEFT_RIGHT
|
||||
elif prev == RIGHT:
|
||||
match next:
|
||||
DOWN: return DOWN_RIGHT
|
||||
UP: return UP_RIGHT
|
||||
LEFT: return LEFT_RIGHT
|
||||
elif prev == UP:
|
||||
match next:
|
||||
DOWN: return UP_DOWN
|
||||
LEFT: return UP_LEFT
|
||||
RIGHT: return UP_RIGHT
|
||||
elif prev == DOWN:
|
||||
match next:
|
||||
UP: return UP_DOWN
|
||||
LEFT: return DOWN_LEFT
|
||||
RIGHT: return DOWN_RIGHT
|
||||
|
||||
|
||||
func _as_dir(vector):
|
||||
prev = as_direction(prev)
|
||||
next = as_direction(next)
|
||||
match [prev, next]:
|
||||
[LEFT, DOWN]: return DOWN_LEFT
|
||||
[LEFT, UP]: return UP_LEFT
|
||||
[LEFT, RIGHT]: return LEFT_RIGHT
|
||||
[RIGHT, DOWN]: return DOWN_RIGHT
|
||||
[RIGHT, UP]: return UP_RIGHT
|
||||
[RIGHT, LEFT]: return LEFT_RIGHT
|
||||
[UP, DOWN]: return UP_DOWN
|
||||
[UP, LEFT]: return UP_LEFT
|
||||
[UP, RIGHT]: return UP_RIGHT
|
||||
[DOWN, UP]: return UP_DOWN
|
||||
[DOWN, LEFT]: return DOWN_LEFT
|
||||
[DOWN, RIGHT]: return DOWN_RIGHT
|
||||
|
||||
func as_direction(vector):
|
||||
""" Returns the vector direction as a LEFT, RIGHT, UP or DOWN variant """
|
||||
if abs(vector.x) + abs(vector.y) != 1:
|
||||
return -1 # This is not a valid variant
|
||||
@@ -67,6 +58,6 @@ func _as_dir(vector):
|
||||
#func _process(delta):
|
||||
# pass
|
||||
|
||||
func _clear_tiles():
|
||||
func clear_tiles():
|
||||
for cell in get_used_cells():
|
||||
self.set_cell(cell.x, cell.y, -1)
|
||||
self.set_cell(cell.x, cell.y, -1)
|
||||
|
||||
Reference in New Issue
Block a user