small racing game im working on
better minimap
| -rw-r--r-- | race.gd | 3 | ||||
| -rw-r--r-- | race.tscn | 11 | ||||
| -rw-r--r-- | ui/assets/flag.png | bin | 210 -> 213 bytes | |||
| -rw-r--r-- | ui/assets/ghost.png | bin | 0 -> 276 bytes | |||
| -rw-r--r-- | ui/assets/ghost.png.import | 34 | ||||
| -rw-r--r-- | ui/assets/line.png | bin | 97 -> 94 bytes | |||
| -rw-r--r-- | ui/assets/player_indicator.png | bin | 0 -> 225 bytes | |||
| -rw-r--r-- | ui/assets/player_indicator.png.import | 34 | ||||
| -rw-r--r-- | ui/map.gd | 50 |
9 files changed, 108 insertions, 24 deletions
@@ -18,6 +18,7 @@ const saves := "user://%s.trackdata" signal next_lap signal created_car(car: Car) +signal created_ghost(ghost: GhostCar) signal finished func mkghost() -> void: @@ -27,7 +28,7 @@ func mkghost() -> void: add_child(ghost) ghost.global_position = best_time_data.loadshot(0)[0] ghost.global_rotation = best_time_data.loadshot(0)[1] - print("ghost created") + created_ghost.emit(ghost) func _ready() -> void: set_physics_process(false) @@ -1,4 +1,4 @@ -[gd_scene load_steps=26 format=3 uid="uid://cech6c4yrmcvq"] +[gd_scene load_steps=28 format=3 uid="uid://cech6c4yrmcvq"] [ext_resource type="Script" path="res://race.gd" id="1_ckbwd"] [ext_resource type="Environment" uid="uid://biwshm46yl62v" path="res://default_env.tres" id="2_pnp7e"] @@ -19,6 +19,8 @@ [ext_resource type="Script" path="res://ui/intro_cam.gd" id="14_yajvg"] [ext_resource type="Script" path="res://ui/laps.gd" id="16_mxur4"] [ext_resource type="Texture2D" uid="uid://b3nmp7eyu0hjk" path="res://ui/assets/flag.png" id="16_rp311"] +[ext_resource type="Texture2D" uid="uid://b6ad1yrgtg6qk" path="res://ui/assets/player_indicator.png" id="17_ptq57"] +[ext_resource type="Texture2D" uid="uid://dkbrx7rpa8dvc" path="res://ui/assets/ghost.png" id="18_v7a53"] [sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_tkhh8"] @@ -196,7 +198,7 @@ script = ExtResource("9_dn61b") [node name="MiniMap" type="Line2D" parent="CanvasLayer" node_paths=PackedStringArray("track")] texture_repeat = 2 -points = PackedVector2Array(96, 29, -44, 43, 27, -54, 183, 9) +width = 40.0 default_color = Color(0.854902, 0.854902, 0.854902, 1) gradient = SubResource("Gradient_2kvil") texture = ExtResource("14_n0r0n") @@ -204,8 +206,10 @@ texture_mode = 1 antialiased = true script = ExtResource("10_58kgt") track = NodePath("../../Track") -player_color = Color(1, 0.388235, 0.321569, 0.803922) +player_color = Color(1, 0.388235, 0.321569, 1) finish_indicator = ExtResource("16_rp311") +player_indicator = ExtResource("17_ptq57") +ghost_indicator = ExtResource("18_v7a53") [node name="Splits" parent="CanvasLayer" instance=ExtResource("14_ge1w6")] visible = false @@ -271,5 +275,6 @@ libraries = { [connection signal="created_car" from="." to="CanvasLayer/HBoxContainer/Panel/Speedometer" method="_on_race_created_car"] [connection signal="created_car" from="." to="CanvasLayer/MiniMap" method="_on_race_created_car"] [connection signal="created_car" from="." to="IntroCamera" method="_on_race_created_car"] +[connection signal="created_ghost" from="." to="CanvasLayer/MiniMap" method="_on_race_created_ghost"] [connection signal="next_lap" from="." to="CanvasLayer/Laps" method="increment"] [connection signal="race_started" from="IntroCamera" to="." method="_on_intro_camera_race_started"] diff --git a/ui/assets/flag.png b/ui/assets/flag.png Binary files differindex dd3c63d..7ee681e 100644 --- a/ui/assets/flag.png +++ b/ui/assets/flag.png diff --git a/ui/assets/ghost.png b/ui/assets/ghost.png Binary files differnew file mode 100644 index 0000000..e98f5a1 --- /dev/null +++ b/ui/assets/ghost.png diff --git a/ui/assets/ghost.png.import b/ui/assets/ghost.png.import new file mode 100644 index 0000000..b9f6c13 --- /dev/null +++ b/ui/assets/ghost.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkbrx7rpa8dvc" +path="res://.godot/imported/ghost.png-610c2abac161623bca06478a79c589c4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/assets/ghost.png" +dest_files=["res://.godot/imported/ghost.png-610c2abac161623bca06478a79c589c4.ctex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/ui/assets/line.png b/ui/assets/line.png Binary files differindex 92fc568..05947a2 100644 --- a/ui/assets/line.png +++ b/ui/assets/line.png diff --git a/ui/assets/player_indicator.png b/ui/assets/player_indicator.png Binary files differnew file mode 100644 index 0000000..2b07070 --- /dev/null +++ b/ui/assets/player_indicator.png diff --git a/ui/assets/player_indicator.png.import b/ui/assets/player_indicator.png.import new file mode 100644 index 0000000..34563c5 --- /dev/null +++ b/ui/assets/player_indicator.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6ad1yrgtg6qk" +path="res://.godot/imported/player_indicator.png-0f15ec53c35e919f51b0b4bca1cac4e5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/assets/player_indicator.png" +dest_files=["res://.godot/imported/player_indicator.png-0f15ec53c35e919f51b0b4bca1cac4e5.ctex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 @@ -1,50 +1,60 @@ extends Line2D class_name MiniMap -var car: Node3D +var path := Path2D.new() @export var track: TrackLoader @export var player_color: Color @export var finish_indicator: Texture +@export var player_indicator: Texture +@export var ghost_indicator: Texture + +var followers: Array = [] # Array[[PathFollow2D, Node3D]] func _ready() -> void: - set_process(false) clear_points() width = track.track.track_width if !track.track.is_loop: end_cap_mode = LINE_CAP_ROUND begin_cap_mode = LINE_CAP_ROUND + var curve := Curve2D.new() + curve.bake_interval = 200 # already baked var box := Rect2() for point_3d in track.curve.get_baked_points(): var p := flatten(point_3d) + curve.add_point(p) box = box.expand(p) add_point(p) + path.curve = curve + add_child(path) global_position = -box.position + Vector2(50, 50) - + mkfollower(track.finish, finish_indicator) func _process(_delta: float) -> void: - queue_redraw() - -func _draw() -> void: - if !car: return - - draw_player() - draw_finish() - -func draw_player() -> void: - var point := flatten(track.curve.get_closest_point(car.global_position)) - draw_circle(point, (width - 2) / 2, player_color) - -func draw_finish() -> void: - draw_texture(finish_indicator, flatten(track.curve.get_closest_point(track.finish.global_position)) + Vector2.UP * 14) + for follower in followers: + (follower[0] as PathFollow2D).progress = track.curve.get_closest_offset((follower[1] as Node3D).global_position) func vec(xy: float) -> Vector2: return Vector2(xy, xy) +func mkfollower(node: Node3D, tex: Texture, mod := Color.WHITE, back := false): + var follower := PathFollow2D.new() + path.add_child(follower) + var sprite := Sprite2D.new() + sprite.modulate = mod + sprite.texture = tex + follower.add_child(sprite) + if back: + followers.push_front([follower, node]) + else: + followers.push_back([follower, node]) + + func flatten(v: Vector3) -> Vector2: return Vector2(v.x, v.z) -func _on_race_created_car(_car) -> void: - car = _car.ball - set_process(true) +func _on_race_created_car(car) -> void: + mkfollower(car.ball, player_indicator, player_color) +func _on_race_created_ghost(ghost: GhostCar) -> void: + mkfollower(ghost, ghost_indicator, Color.WHITE, true) |