adds track parser from txt files

This commit is contained in:
2020-11-03 00:47:59 +01:00
parent d5ad9b8e1c
commit 4f2a4768c8
31 changed files with 649 additions and 103 deletions

View File

@@ -12,8 +12,8 @@ func _ready():
func _process(delta):
"""
The sprite has its own representation of rotation, so we need to tweak things.
The sprite inherits orientation from its parent (TrackFollow) that must be canceled.
The sprite contains a representation of rotation in its own, so we need to tweak things.
In particular, the sprite inherits orientation from its parent (TrackFollow) that must be canceled.
"""
var global = get_global_rotation_degrees()
var local = get_rotation_degrees()

View File

@@ -1,10 +1,5 @@
extends Node
const TRACKS = [
[ 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_track
var race_started = false
var laps = 0

View File

@@ -13,7 +13,6 @@ outline_color = Color( 0.25098, 0.25098, 0.25098, 1 )
font_data = ExtResource( 1 )
[node name="GUI" type="MarginContainer"]
editor/display_folded = true
margin_left = 10.5631
margin_top = 9.24268
margin_right = 159.563

View File

@@ -6,7 +6,7 @@ extends Node
# Called when the node enters the scene tree for the first time.
func _ready():
Global.selected_track = 0
pass
func start_game():

25
Player.gd Normal file
View File

@@ -0,0 +1,25 @@
extends PathFollow2D
export (float) var speed = 0.125
var position_on_track := 0.0
var target_on_track := 0.0
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func _process(delta):
# Move the player until target_on_track
if target_on_track - position_on_track > 0.01:
# Speed up car as the target_on_track goes further
var speed_mod = int(clamp((target_on_track - position_on_track) / speed, 1.0, 4.0))
position_on_track += speed * delta * speed_mod
set_unit_offset(position_on_track)
else:
position_on_track = target_on_track
func _on_RaceTrack_player_moved(track_offset):
target_on_track = track_offset

View File

@@ -1,31 +1,17 @@
extends Node2D
export (String, "bus", "police", "car") var skin
export (float) var speed = 0.125
enum { RIGHT, DOWN_RIGHT, DOWN, DOWN_LEFT, LEFT, UP_LEFT, UP, UP_RIGHT }
# TODO:
# - Move track related logic inside TrackPlayer script ?
onready var track = get_node("/root/Track2/RaceTrack/TrackPlayer/")
var position_on_track := 0.0
var target_on_track := 0.0
func _ready():
# Set player sprite
$CarSprite.set_animation(skin)
func _process(delta):
# Move the player until target_on_track
if target_on_track - position_on_track > 0.01:
# Speed up car as the target_on_track goes further
var speed_mod = int(clamp((target_on_track - position_on_track) / speed, 1.0, 4.0))
position_on_track += speed * delta * speed_mod
track.set_unit_offset(position_on_track)
else:
position_on_track = target_on_track
func _on_TileMap_player_moved(track_offset):
target_on_track = track_offset

View File

@@ -9,22 +9,22 @@
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0000.png" type="Texture" id=7]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0005.png" type="Texture" id=8]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0006.png" type="Texture" id=9]
[ext_resource path="res://track1/policeCar/policeiso_0003.png" type="Texture" id=10]
[ext_resource path="res://track1/policeCar/policeiso_0004.png" type="Texture" id=11]
[ext_resource path="res://track1/policeCar/policeiso_0001.png" type="Texture" id=12]
[ext_resource path="res://track1/policeCar/policeiso_0002.png" type="Texture" id=13]
[ext_resource path="res://track1/policeCar/policeiso_0007.png" type="Texture" id=14]
[ext_resource path="res://track1/policeCar/policeiso_0000.png" type="Texture" id=15]
[ext_resource path="res://track1/policeCar/policeiso_0005.png" type="Texture" id=16]
[ext_resource path="res://track1/policeCar/policeiso_0006.png" type="Texture" id=17]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0003.png" type="Texture" id=18]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0004.png" type="Texture" id=19]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0001.png" type="Texture" id=20]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0002.png" type="Texture" id=21]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0007.png" type="Texture" id=22]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0000.png" type="Texture" id=23]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0005.png" type="Texture" id=24]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0006.png" type="Texture" id=25]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0003.png" type="Texture" id=10]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0004.png" type="Texture" id=11]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0001.png" type="Texture" id=12]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0002.png" type="Texture" id=13]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0007.png" type="Texture" id=14]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0000.png" type="Texture" id=15]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0005.png" type="Texture" id=16]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0006.png" type="Texture" id=17]
[ext_resource path="res://track1/policeCar/policeiso_0003.png" type="Texture" id=18]
[ext_resource path="res://track1/policeCar/policeiso_0004.png" type="Texture" id=19]
[ext_resource path="res://track1/policeCar/policeiso_0001.png" type="Texture" id=20]
[ext_resource path="res://track1/policeCar/policeiso_0002.png" type="Texture" id=21]
[ext_resource path="res://track1/policeCar/policeiso_0007.png" type="Texture" id=22]
[ext_resource path="res://track1/policeCar/policeiso_0000.png" type="Texture" id=23]
[ext_resource path="res://track1/policeCar/policeiso_0005.png" type="Texture" id=24]
[ext_resource path="res://track1/policeCar/policeiso_0006.png" type="Texture" id=25]
[ext_resource path="res://CarSprite.gd" type="Script" id=26]
[sub_resource type="SpriteFrames" id=1]
@@ -36,12 +36,12 @@ animations = [ {
}, {
"frames": [ ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ) ],
"loop": true,
"name": "police",
"name": "car",
"speed": 5.0
}, {
"frames": [ ExtResource( 18 ), ExtResource( 19 ), ExtResource( 20 ), ExtResource( 21 ), ExtResource( 22 ), ExtResource( 23 ), ExtResource( 24 ), ExtResource( 25 ) ],
"loop": true,
"name": "car",
"name": "police",
"speed": 5.0
} ]

View File

@@ -10,19 +10,22 @@ signal wrong_way(coords)
# - Build the track Curve2D from track and tiles data
# - Keyboard controls !!
const TRACK_TILES = Global.TRACKS[0]
var laps
var current_cell
onready var track = TrackSelection.get_current_track()
onready var map = $TileMap
var laps = 0
var current_cell = TRACK_TILES[0]
func get_track_offset(coords):
var offset = float(TRACK_TILES.find(coords)) / float(len(TRACK_TILES))
var offset = float(track.find(coords)) / float(len(track))
return offset
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
_reset_progress()
func _reset_progress():
laps = 0
current_cell = track[0]
func _input(event):
# Check if the mouse if following the tiles track
@@ -30,13 +33,13 @@ func _input(event):
var hover_cell = map.world_to_map(event.position)
if hover_cell != current_cell: # The mouse moved to a new cell
# Check the tile is on path
if TRACK_TILES.find(hover_cell) != -1:
if track.find(hover_cell) != -1:
# Check if a lap is finished
if hover_cell == TRACK_TILES[0] and current_cell == TRACK_TILES[-1]:
if hover_cell == track[0] and current_cell == track[-1]:
laps += 1
emit_signal("lap_completed", laps)
# Check we are following the path
if TRACK_TILES[TRACK_TILES.find(hover_cell) - 1] == current_cell:
if track[track.find(hover_cell) - 1] == current_cell:
emit_signal("player_moved", laps + get_track_offset(hover_cell))
emit_signal("wrong_way", Vector2(-1, -1))
current_cell = hover_cell

View File

@@ -1,60 +1,136 @@
[gd_scene load_steps=34 format=2]
[gd_scene load_steps=39 format=2]
[ext_resource path="res://RaceTrack.gd" type="Script" id=1]
[ext_resource path="res://TrackPath.gd" type="Script" id=2]
[ext_resource path="res://OpponentCar.gd" type="Script" id=3]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0007.png" type="Texture" id=4]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0004.png" type="Texture" id=5]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0001.png" type="Texture" id=6]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0002.png" type="Texture" id=7]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0003.png" type="Texture" id=8]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0000.png" type="Texture" id=9]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0005.png" type="Texture" id=10]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0006.png" type="Texture" id=11]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0003.png" type="Texture" id=12]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0004.png" type="Texture" id=13]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0001.png" type="Texture" id=14]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0002.png" type="Texture" id=15]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0007.png" type="Texture" id=16]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0000.png" type="Texture" id=17]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0005.png" type="Texture" id=18]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0006.png" type="Texture" id=19]
[ext_resource path="res://track1/policeCar/policeiso_0003.png" type="Texture" id=20]
[ext_resource path="res://track1/policeCar/policeiso_0004.png" type="Texture" id=21]
[ext_resource path="res://track1/policeCar/policeiso_0001.png" type="Texture" id=22]
[ext_resource path="res://track1/policeCar/policeiso_0002.png" type="Texture" id=23]
[ext_resource path="res://track1/policeCar/policeiso_0007.png" type="Texture" id=24]
[ext_resource path="res://track1/policeCar/policeiso_0000.png" type="Texture" id=25]
[ext_resource path="res://track1/policeCar/policeiso_0005.png" type="Texture" id=26]
[ext_resource path="res://track1/policeCar/policeiso_0006.png" type="Texture" id=27]
[ext_resource path="res://CarSprite.gd" type="Script" id=28]
[ext_resource path="res://wrong_way.tscn" type="PackedScene" id=29]
[ext_resource path="res://assets/track_tiles/track.png" type="Texture" id=2]
[ext_resource path="res://TileMap.gd" type="Script" id=3]
[ext_resource path="res://TrackPath.gd" type="Script" id=4]
[ext_resource path="res://OpponentCar.gd" type="Script" id=5]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0007.png" type="Texture" id=6]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0004.png" type="Texture" id=7]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0001.png" type="Texture" id=8]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0002.png" type="Texture" id=9]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0003.png" type="Texture" id=10]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0000.png" type="Texture" id=11]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0005.png" type="Texture" id=12]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/bus/busiso_0006.png" type="Texture" id=13]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0003.png" type="Texture" id=14]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0004.png" type="Texture" id=15]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0001.png" type="Texture" id=16]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0002.png" type="Texture" id=17]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0007.png" type="Texture" id=18]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0000.png" type="Texture" id=19]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0005.png" type="Texture" id=20]
[ext_resource path="res://assets/2D_Car_Pack_DevilsWorkShop_V01/car02/car02iso_0006.png" type="Texture" id=21]
[ext_resource path="res://track1/policeCar/policeiso_0003.png" type="Texture" id=22]
[ext_resource path="res://track1/policeCar/policeiso_0004.png" type="Texture" id=23]
[ext_resource path="res://track1/policeCar/policeiso_0001.png" type="Texture" id=24]
[ext_resource path="res://track1/policeCar/policeiso_0002.png" type="Texture" id=25]
[ext_resource path="res://track1/policeCar/policeiso_0007.png" type="Texture" id=26]
[ext_resource path="res://track1/policeCar/policeiso_0000.png" type="Texture" id=27]
[ext_resource path="res://track1/policeCar/policeiso_0005.png" type="Texture" id=28]
[ext_resource path="res://track1/policeCar/policeiso_0006.png" type="Texture" id=29]
[ext_resource path="res://CarSprite.gd" type="Script" id=30]
[ext_resource path="res://Player.gd" type="Script" id=31]
[ext_resource path="res://PlayerCar.tscn" type="PackedScene" id=32]
[ext_resource path="res://wrong_way.tscn" type="PackedScene" id=33]
[sub_resource type="Gradient" id=3]
[sub_resource type="Gradient" id=1]
colors = PoolColorArray( 0.284025, 0.4375, 0.0803223, 1, 0.30305, 0.480469, 0.0675659, 1 )
[sub_resource type="GradientTexture" id=4]
gradient = SubResource( 3 )
[sub_resource type="GradientTexture" id=2]
gradient = SubResource( 1 )
width = 1920
[sub_resource type="Curve2D" id=1]
[sub_resource type="TileSet" id=3]
0/name = "dl"
0/texture = ExtResource( 2 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 128, 128 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shapes = [ ]
0/z_index = 0
1/name = "dr"
1/texture = ExtResource( 2 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 128, 0, 128, 128 )
1/tile_mode = 0
1/occluder_offset = Vector2( 0, 0 )
1/navigation_offset = Vector2( 0, 0 )
1/shapes = [ ]
1/z_index = 0
2/name = "lr"
2/texture = ExtResource( 2 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 256, 0, 128, 128 )
2/tile_mode = 0
2/occluder_offset = Vector2( 0, 0 )
2/navigation_offset = Vector2( 0, 0 )
2/shapes = [ ]
2/z_index = 0
3/name = "start"
3/texture = ExtResource( 2 )
3/tex_offset = Vector2( 0, 0 )
3/modulate = Color( 1, 1, 1, 1 )
3/region = Rect2( 384, 0, 128, 128 )
3/tile_mode = 0
3/occluder_offset = Vector2( 0, 0 )
3/navigation_offset = Vector2( 0, 0 )
3/shapes = [ ]
3/z_index = 0
4/name = "ud"
4/texture = ExtResource( 2 )
4/tex_offset = Vector2( 0, 0 )
4/modulate = Color( 1, 1, 1, 1 )
4/region = Rect2( 0, 128, 128, 128 )
4/tile_mode = 0
4/occluder_offset = Vector2( 0, 0 )
4/navigation_offset = Vector2( 0, 0 )
4/shapes = [ ]
4/z_index = 0
5/name = "ul"
5/texture = ExtResource( 2 )
5/tex_offset = Vector2( 0, 0 )
5/modulate = Color( 1, 1, 1, 1 )
5/region = Rect2( 128, 128, 128, 128 )
5/tile_mode = 0
5/occluder_offset = Vector2( 0, 0 )
5/navigation_offset = Vector2( 0, 0 )
5/shapes = [ ]
5/z_index = 0
6/name = "ur"
6/texture = ExtResource( 2 )
6/tex_offset = Vector2( 0, 0 )
6/modulate = Color( 1, 1, 1, 1 )
6/region = Rect2( 256, 128, 128, 128 )
6/tile_mode = 0
6/occluder_offset = Vector2( 0, 0 )
6/navigation_offset = Vector2( 0, 0 )
6/shapes = [ ]
6/z_index = 0
[sub_resource type="Curve2D" id=4]
_data = {
"points": PoolVector2Array( 0, 0, 0, 0, -17.3556, 327.792, 0, 0, 0, 0, 1930.1, 452.427 )
}
[sub_resource type="SpriteFrames" id=2]
[sub_resource type="SpriteFrames" id=5]
animations = [ {
"frames": [ ExtResource( 4 ), ExtResource( 5 ), ExtResource( 6 ), ExtResource( 7 ), ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ) ],
"frames": [ ExtResource( 6 ), ExtResource( 7 ), ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 13 ) ],
"loop": true,
"name": "bus",
"speed": 5.0
}, {
"frames": [ ExtResource( 12 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 19 ) ],
"frames": [ ExtResource( 14 ), ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 19 ), ExtResource( 20 ), ExtResource( 21 ) ],
"loop": true,
"name": "car",
"speed": 5.0
}, {
"frames": [ ExtResource( 20 ), ExtResource( 21 ), ExtResource( 22 ), ExtResource( 23 ), ExtResource( 24 ), ExtResource( 25 ), ExtResource( 26 ), ExtResource( 27 ) ],
"frames": [ ExtResource( 22 ), ExtResource( 23 ), ExtResource( 24 ), ExtResource( 25 ), ExtResource( 26 ), ExtResource( 27 ), ExtResource( 28 ), ExtResource( 29 ) ],
"loop": true,
"name": "police",
"speed": 5.0
@@ -66,21 +142,24 @@ script = ExtResource( 1 )
[node name="TextureRect" type="TextureRect" parent="."]
margin_right = 1920.0
margin_bottom = 1080.0
texture = SubResource( 4 )
texture = SubResource( 2 )
expand = true
[node name="TileMap" type="TileMap" parent="."]
tile_set = SubResource( 3 )
cell_size = Vector2( 128, 128 )
format = 1
tile_data = PoolIntArray( 131079, 3, 0, 131080, 2, 0, 131081, 0, 0, 196616, 1, 0, 196617, 5, 0, 262152, 4, 0, 327688, 4, 0, 327690, 4, 0, 393224, 6, 0, 393225, 2, 0, 393226, 5, 0 )
script = ExtResource( 3 )
[node name="TrackPath" type="Path2D" parent="."]
curve = SubResource( 1 )
script = ExtResource( 2 )
curve = SubResource( 4 )
script = ExtResource( 4 )
[node name="Opponent" type="PathFollow2D" parent="TrackPath"]
position = Vector2( -17.3556, 327.792 )
rotation = 0.0639077
script = ExtResource( 3 )
script = ExtResource( 5 )
[node name="OpponentCar" type="Node2D" parent="TrackPath/Opponent"]
position = Vector2( 0, 22 )
@@ -89,11 +168,22 @@ scale = Vector2( 0.25, 0.25 )
[node name="CarSprite" type="AnimatedSprite" parent="TrackPath/Opponent/OpponentCar"]
position = Vector2( -3.20422, 3.0376 )
scale = Vector2( 0.8, 0.8 )
frames = SubResource( 2 )
frames = SubResource( 5 )
animation = "car"
script = ExtResource( 28 )
skin = "bus"
script = ExtResource( 30 )
skin = "police"
[node name="Wrong Way" parent="." instance=ExtResource( 29 )]
[node name="Player" type="PathFollow2D" parent="TrackPath"]
position = Vector2( -17.3556, 327.792 )
rotation = 0.0639077
script = ExtResource( 31 )
[node name="PlayerCar" parent="TrackPath/Player" instance=ExtResource( 32 )]
position = Vector2( 1.89564, -22.3528 )
scale = Vector2( 0.25, 0.25 )
script = null
[node name="Wrong Way" parent="." instance=ExtResource( 33 )]
visible = false
[connection signal="player_moved" from="." to="TrackPath/Player" method="_on_RaceTrack_player_moved"]
[connection signal="wrong_way" from="." to="Wrong Way" method="_on_RaceTrack_wrong_way"]

69
TileMap.gd Normal file
View File

@@ -0,0 +1,69 @@
extends TileMap
enum { LEFT, RIGHT, UP, DOWN }
# Enum for tiles from tile_set
enum { DOWN_LEFT, DOWN_RIGHT, LEFT_RIGHT, START, UP_DOWN, UP_LEFT, UP_RIGHT }
# Called when the node enters the scene tree for the first time.
func _ready():
_clear_tiles()
var track = TrackSelection.get_current_track()
for idx in range(track.size()):
var cell = track[idx]
var tile
if idx == 0:
tile = START
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))
set_cell(cell.x, cell.y, tile)
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):
""" 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
if vector.x == -1:
return LEFT
elif vector.x == 1:
return RIGHT
elif vector.y == -1:
return UP
elif vector.y == 1:
return DOWN
return -1 # Impossible case
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass
func _clear_tiles():
for cell in get_used_cells():
self.set_cell(cell.x, cell.y, -1)

View File

@@ -1,22 +1,23 @@
extends Path2D
enum { UP, RIGHT, DOWN, LEFT }
const TRACK_TILES = Global.TRACKS[0]
var tile_size : int = 128
var half_size : int = tile_size / 2
onready var map = get_node("../TileMap/")
# Called when the node enters the scene tree for the first time.
func _ready():
_build_track(TRACK_TILES)
var track = TrackSelection.get_current_track()
_build_track(track)
"""
func _draw():
draw_polyline(curve.get_baked_points(), Color.chartreuse, 4.0)
for idx in range(0,curve.get_point_count()):
draw_circle(curve.get_point_in(idx), 2.0, Color.green)
draw_circle(curve.get_point_out(idx), 2.0, Color.blue)
"""
func _build_track(tiles):
""" Build the track curve given a tile path """

BIN
assets/track_tiles/dl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/dl.png-b61487678edbb5d041ecd44844cc359b.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/dl.png"
dest_files=[ "res://.import/dl.png-b61487678edbb5d041ecd44844cc359b.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
assets/track_tiles/dr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/dr.png-94ada50cc17b446a2958bdfc16ac64ca.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/dr.png"
dest_files=[ "res://.import/dr.png-94ada50cc17b446a2958bdfc16ac64ca.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
assets/track_tiles/lr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/lr.png-dae9afde66fc513ed9fbec9a413fcd2e.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/lr.png"
dest_files=[ "res://.import/lr.png-dae9afde66fc513ed9fbec9a413fcd2e.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/start.png-422062d2659d16a0a9668325f28ede9d.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/start.png"
dest_files=[ "res://.import/start.png-422062d2659d16a0a9668325f28ede9d.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/track.png-07e8d2fd85e34f44aac7c4b2e2ba0f7e.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/track.png"
dest_files=[ "res://.import/track.png-07e8d2fd85e34f44aac7c4b2e2ba0f7e.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
assets/track_tiles/ud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/ud.png-8d239d32473fb1f173314607d502fead.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/ud.png"
dest_files=[ "res://.import/ud.png-8d239d32473fb1f173314607d502fead.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
assets/track_tiles/ul.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/ul.png-7024cf834cdbb918ff81490da18cb8c6.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/ul.png"
dest_files=[ "res://.import/ul.png-7024cf834cdbb918ff81490da18cb8c6.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
assets/track_tiles/ur.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/ur.png-8d1a716720fdad1dcbdaaab4c29c0007.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/track_tiles/ur.png"
dest_files=[ "res://.import/ur.png-8d1a716720fdad1dcbdaaab4c29c0007.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

8
assets/tracks/demo.txt Normal file
View File

@@ -0,0 +1,8 @@
...............
.xxxsxxx.......
.x.....x.......
.x.....x.......
.xxxxxxx.......
...............
...............
...............

8
assets/tracks/track1.txt Normal file
View File

@@ -0,0 +1,8 @@
...............
....xxxsxxxxx..
....xxxxxxxxx..
....xx..xx.....
....xx..xxxxx..
........xxxxx..
...............
...............

View File

@@ -23,6 +23,7 @@ config/icon="res://icon.png"
[autoload]
Global="*res://Global.gd"
TrackSelection="*res://track_selection.gd"
[debug]

89
track_selection.gd Normal file
View 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)")