| extends Position2D | |||||
| export var max_length : int = 100 setget _set_max_length | |||||
| export var distance_between_points : float = 10 setget _set_distance_between_points | |||||
| export var width : float = 2 setget _set_width | |||||
| export (Curve) var width_curve = null setget _set_width_curve | |||||
| export (Color) var default_color = Color("6680ff") setget _set_default_color | |||||
| onready var trailline_node = $TrailLine | |||||
| func _set_max_length(l : int) -> void: | |||||
| if l > 0: | |||||
| max_length = l | |||||
| if trailline_node: | |||||
| trailline_node.max_length = max_length | |||||
| func _set_distance_between_points(d : float) -> void: | |||||
| if d > 0.0: | |||||
| distance_between_points = d | |||||
| if trailline_node: | |||||
| trailline_node.distance_between_points = distance_between_points | |||||
| func _set_width(w : float) -> void: | |||||
| if w > 0: | |||||
| width = w | |||||
| if trailline_node: | |||||
| trailline_node.width = w | |||||
| func _set_width_curve(c) -> void: | |||||
| width_curve = c | |||||
| if trailline_node: | |||||
| trailline_node.width_curve = c | |||||
| func _set_default_color(c : Color) -> void: | |||||
| default_color = c | |||||
| if trailline_node: | |||||
| trailline_node.default_color = c | |||||
| func _ready(): | |||||
| trailline_node.max_length = max_length | |||||
| trailline_node.distance_between_points = distance_between_points | |||||
| trailline_node.width = width | |||||
| trailline_node.width_curve = width_curve | |||||
| trailline_node.default_color = default_color | |||||
| [gd_scene load_steps=3 format=2] | |||||
| [ext_resource path="res://Objects/Trail/TrailLine.gd" type="Script" id=1] | |||||
| [ext_resource path="res://Objects/Trail/Trail.gd" type="Script" id=2] | |||||
| [node name="Trail" type="Position2D"] | |||||
| script = ExtResource( 2 ) | |||||
| [node name="TrailLine" type="Line2D" parent="."] | |||||
| default_color = Color( 0.4, 0.501961, 1, 1 ) | |||||
| script = ExtResource( 1 ) | |||||
| [node name="Timer" type="Timer" parent="TrailLine"] | |||||
| one_shot = true | |||||
| [connection signal="timeout" from="TrailLine/Timer" to="TrailLine" method="_on_decay_timeout"] |
| extends Line2D | |||||
| export var max_length : int = 100 setget _set_max_length | |||||
| export var distance_between_points : float = 10 | |||||
| export var decay_time : float = 0.1 setget _set_decay_time | |||||
| var last_point = null | |||||
| onready var parent = get_parent() | |||||
| onready var timer = $Timer | |||||
| func _set_max_length(l : int) -> void: | |||||
| if l > 0: | |||||
| max_length = l | |||||
| func _set_decay_time(d : float) -> void: | |||||
| if d >= 0: | |||||
| decay_time = 0 | |||||
| func _ready(): | |||||
| set_as_toplevel(true) | |||||
| show_behind_parent = true | |||||
| _reset_timer() | |||||
| func _process(delta): | |||||
| rotation = parent.rotation | |||||
| if points.size() < max_length: | |||||
| var point = _get_point() | |||||
| if point != null: | |||||
| add_point(point) | |||||
| if points.size() >= max_length: | |||||
| remove_point(0) | |||||
| func _get_point(): | |||||
| var point = parent.global_position | |||||
| if last_point != null and point.distance_to(last_point) < distance_between_points: | |||||
| return null | |||||
| last_point = point | |||||
| return point | |||||
| func _reset_timer(): | |||||
| if decay_time > 0: | |||||
| timer.stop() | |||||
| timer.start(decay_time) | |||||
| func _on_decay_timeout(): | |||||
| if points.size() > 0: | |||||
| remove_point(0) | |||||
| _reset_timer() |
| [gd_resource type="Curve" format=2] | |||||
| [resource] | |||||
| max_value = 3.0 | |||||
| _data = [ Vector2( 0, 0 ), 0.0, 0.0674788, 0, 0, Vector2( 0.288889, 1.93636 ), 5.34545, 5.34545, 0, 0, Vector2( 1, 3 ), 0.145454, 0.0, 0, 0 ] |
| export var camera_enabled : bool = false setget _set_camera_enabled | export var camera_enabled : bool = false setget _set_camera_enabled | ||||
| export var forward_axel : float = 10 setget _set_forward_axel | export var forward_axel : float = 10 setget _set_forward_axel | ||||
| export var forward_axel_length : float = 10 setget _set_forward_axel_length | |||||
| export var rear_axel : float = 10 setget _set_rear_axel | export var rear_axel : float = 10 setget _set_rear_axel | ||||
| export var rear_axel_length : float = 10 setget _set_rear_axel_length | |||||
| export (float, 0.0, 1.0, 0.001) var traction_fast = 0.1 | export (float, 0.0, 1.0, 0.001) var traction_fast = 0.1 | ||||
| export (float, 0.0, 1.0, 0.001) var traction_slow = 0.7 | export (float, 0.0, 1.0, 0.001) var traction_slow = 0.7 | ||||
| export var traction_slow_speed : float = 100.0 setget _set_traction_slow_speed | export var traction_slow_speed : float = 100.0 setget _set_traction_slow_speed | ||||
| onready var camera = $Camera2D | onready var camera = $Camera2D | ||||
| onready var trail_fd = $Trail_FD | |||||
| onready var trail_fp = $Trail_FP | |||||
| onready var trail_rd = $Trail_RD | |||||
| onready var trail_rp = $Trail_RP | |||||
| # ----------------------------------------------------------------------------- | # ----------------------------------------------------------------------------- | ||||
| # Setter/Getter Methods | # Setter/Getter Methods | ||||
| # ----------------------------------------------------------------------------- | # ----------------------------------------------------------------------------- | ||||
| func _set_forward_axel(a : float) -> void: | func _set_forward_axel(a : float) -> void: | ||||
| if a > 0: | if a > 0: | ||||
| forward_axel = a | forward_axel = a | ||||
| _position_wheel_trails() | |||||
| func _set_forward_axel_length(l : float) -> void: | |||||
| if l > 0: | |||||
| forward_axel_length = l | |||||
| _position_wheel_trails() | |||||
| func _set_rear_axel(a : float) -> void: | func _set_rear_axel(a : float) -> void: | ||||
| if a > 0: | if a > 0: | ||||
| rear_axel = a | rear_axel = a | ||||
| _position_wheel_trails() | |||||
| func _set_rear_axel_length(l : float) -> void: | |||||
| if l > 0: | |||||
| rear_axel_length = l | |||||
| _position_wheel_trails() | |||||
| func _set_traction_slow_speed(s : float) -> void: | func _set_traction_slow_speed(s : float) -> void: | ||||
| if s >= 0: | if s >= 0: | ||||
| func _ready(): | func _ready(): | ||||
| camera.current = camera_enabled | camera.current = camera_enabled | ||||
| _position_wheel_trails() | |||||
| if Engine.editor_hint: | if Engine.editor_hint: | ||||
| $Sprite.show_behind_parent = true | $Sprite.show_behind_parent = true | ||||
| $Collision.visible = false | $Collision.visible = false | ||||
| func _draw(): | func _draw(): | ||||
| if Engine.editor_hint: | if Engine.editor_hint: | ||||
| var wheel_base_color = Color(1.0, 0.5, 0.0) | var wheel_base_color = Color(1.0, 0.5, 0.0) | ||||
| var wheel_axel_color = Color(0.0, 1.0, 0.0) | |||||
| var wheel_color = Color(0.1, 0.1, 0.1) | |||||
| draw_line( | draw_line( | ||||
| Vector2(0, -forward_axel), | Vector2(0, -forward_axel), | ||||
| Vector2(0, rear_axel), | Vector2(0, rear_axel), | ||||
| wheel_base_color, | wheel_base_color, | ||||
| 2 | 2 | ||||
| ) | ) | ||||
| draw_line( | |||||
| Vector2(-forward_axel_length * 0.5, -forward_axel), | |||||
| Vector2(forward_axel_length * 0.5, -forward_axel), | |||||
| wheel_axel_color, | |||||
| 2 | |||||
| ) | |||||
| draw_line( | |||||
| Vector2(-rear_axel_length * 0.5, rear_axel), | |||||
| Vector2(rear_axel_length * 0.5, rear_axel), | |||||
| wheel_axel_color, | |||||
| 2 | |||||
| ) | |||||
| draw_circle(Vector2(-forward_axel_length * 0.5, -forward_axel), 4, wheel_color) | |||||
| draw_circle(Vector2(forward_axel_length * 0.5, -forward_axel), 4, wheel_color) | |||||
| draw_circle(Vector2(-rear_axel_length * 0.5, rear_axel), 4, wheel_color) | |||||
| draw_circle(Vector2(rear_axel_length * 0.5, rear_axel), 4, wheel_color) | |||||
| func _process(delta): | func _process(delta): | ||||
| update() | update() | ||||
| # Private "Helper" Methods | # Private "Helper" Methods | ||||
| # ----------------------------------------------------------------------------- | # ----------------------------------------------------------------------------- | ||||
| func _position_wheel_trails(): | |||||
| if trail_fd: | |||||
| trail_fd.position = Vector2(-forward_axel_length * 0.5, -forward_axel) | |||||
| if trail_fp: | |||||
| trail_fp.position = Vector2(forward_axel_length * 0.5, -forward_axel) | |||||
| if trail_rd: | |||||
| trail_rd.position = Vector2(-rear_axel_length * 0.5, rear_axel) | |||||
| if trail_rp: | |||||
| trail_rp.position = Vector2(rear_axel_length * 0.5, rear_axel) | |||||
| func _generate_traction() -> float: | func _generate_traction() -> float: | ||||
| var traction = 1.0 | var traction = 1.0 | ||||
| var speed = velocity.length() | var speed = velocity.length() |
| [gd_scene load_steps=4 format=2] | |||||
| [gd_scene load_steps=6 format=2] | |||||
| [ext_resource path="res://Assets/Graphics/Car-Yellow.png" type="Texture" id=1] | [ext_resource path="res://Assets/Graphics/Car-Yellow.png" type="Texture" id=1] | ||||
| [ext_resource path="res://Objects/Vehicle/Vehicle.gd" type="Script" id=2] | [ext_resource path="res://Objects/Vehicle/Vehicle.gd" type="Script" id=2] | ||||
| [ext_resource path="res://Objects/Trail/Trail.tscn" type="PackedScene" id=3] | |||||
| [ext_resource path="res://Objects/Vehicle/Tire_Curve_Basic.tres" type="Curve" id=4] | |||||
| [sub_resource type="CapsuleShape2D" id=1] | [sub_resource type="CapsuleShape2D" id=1] | ||||
| radius = 14.0 | radius = 14.0 | ||||
| height = 32.0 | height = 32.0 | ||||
| [node name="Vehicle" type="KinematicBody2D"] | [node name="Vehicle" type="KinematicBody2D"] | ||||
| z_index = 1 | |||||
| script = ExtResource( 2 ) | script = ExtResource( 2 ) | ||||
| [node name="Collision" type="CollisionShape2D" parent="."] | [node name="Collision" type="CollisionShape2D" parent="."] | ||||
| visible = false | |||||
| shape = SubResource( 1 ) | shape = SubResource( 1 ) | ||||
| [node name="Sprite" type="Sprite" parent="."] | [node name="Sprite" type="Sprite" parent="."] | ||||
| show_behind_parent = true | |||||
| texture = ExtResource( 1 ) | texture = ExtResource( 1 ) | ||||
| [node name="Camera2D" type="Camera2D" parent="."] | [node name="Camera2D" type="Camera2D" parent="."] | ||||
| smoothing_enabled = true | smoothing_enabled = true | ||||
| [node name="Trail_FD" parent="." instance=ExtResource( 3 )] | |||||
| position = Vector2( -5, -10 ) | |||||
| width_curve = ExtResource( 4 ) | |||||
| [node name="Trail_FP" parent="." instance=ExtResource( 3 )] | |||||
| position = Vector2( 5, -10 ) | |||||
| width_curve = ExtResource( 4 ) | |||||
| default_color = Color( 0.4, 0.831373, 1, 1 ) | |||||
| [node name="Trail_RD" parent="." instance=ExtResource( 3 )] | |||||
| position = Vector2( -5, 10 ) | |||||
| width_curve = ExtResource( 4 ) | |||||
| default_color = Color( 1, 0.780392, 0.4, 1 ) | |||||
| [node name="Trail_RP" parent="." instance=ExtResource( 3 )] | |||||
| position = Vector2( 5, 10 ) | |||||
| width_curve = ExtResource( 4 ) | |||||
| default_color = Color( 1, 0.552941, 0.4, 1 ) |
| [node name="Vehicle" parent="." instance=ExtResource( 1 )] | [node name="Vehicle" parent="." instance=ExtResource( 1 )] | ||||
| position = Vector2( 946.288, 469.696 ) | position = Vector2( 946.288, 469.696 ) | ||||
| camera_enabled = true | camera_enabled = true | ||||
| forward_axel = 18.0 | |||||
| forward_axel_length = 26.0 | |||||
| rear_axel = 18.0 | |||||
| rear_axel_length = 28.0 | |||||
| [node name="PlayerCTRL" parent="Vehicle" instance=ExtResource( 2 )] | [node name="PlayerCTRL" parent="Vehicle" instance=ExtResource( 2 )] |